Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jakarta API updates #23821

Merged
merged 12 commits into from
Feb 21, 2022
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/*
* Copyright (c) 2021 Contributors to the Eclipse Foundation.
* Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
Expand All @@ -16,7 +17,6 @@

package org.glassfish.appclient.client.acc;

import com.sun.appserv.connectors.internal.api.ConnectorRuntime;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
Expand All @@ -26,14 +26,18 @@
import java.security.ProtectionDomain;
import java.util.Collection;
import java.util.HashSet;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.spi.ClassTransformer;
import jakarta.validation.ValidatorFactory;

import org.glassfish.api.deployment.DeploymentContext;
import org.glassfish.deployment.common.RootDeploymentDescriptor;
import org.glassfish.persistence.jpa.ProviderContainerContractInfoBase;

import com.sun.appserv.connectors.internal.api.ConnectorRuntime;

import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.spi.ClassTransformer;
import jakarta.persistence.spi.TransformerException;
import jakarta.validation.ValidatorFactory;

/**
* Implements the internal GlassFish interface which all persistence provider
* containers must.
Expand Down Expand Up @@ -67,10 +71,12 @@ public ProviderContainerContractInfoImpl(
this.applicationLocation = applicationLocation;
}

@Override
public ClassLoader getClassLoader() {
return classLoader;
}

@Override
public ClassLoader getTempClassloader() {
return AccessController.doPrivileged(new PrivilegedAction<URLClassLoader>() {

Expand All @@ -82,6 +88,7 @@ public URLClassLoader run() {
});
}

@Override
public void addTransformer(ClassTransformer transformer) {
final TransformerWrapper tw = new TransformerWrapper(transformer, classLoader);
if (inst != null) {
Expand All @@ -91,29 +98,35 @@ public void addTransformer(ClassTransformer transformer) {
}
}

@Override
public String getApplicationLocation() {
return applicationLocation;
}

@Override
public ValidatorFactory getValidatorFactory() {
// TODO: Need to implement this correctly.
return null;
}

// TODO: remove after persistence is refactored.
@Override
public DeploymentContext getDeploymentContext() {
return null;
}

@Override
public boolean isJava2DBRequired() {
// Returns whether Java2DB is required or not. For an AppClient it is always false
return false;
}

@Override
public void registerEMF(String unitName, String persistenceRootUri, RootDeploymentDescriptor containingBundle, EntityManagerFactory emf) {
emfs.add(emf);
}

@Override
public String getJTADataSourceOverride() {
// Returns whether JTA datasource is overridden. For an appclient it is never the case.
return null;
Expand All @@ -133,21 +146,24 @@ public static class TransformerWrapper implements ClassFileTransformer {
private final ClassTransformer persistenceTransformer;
private final ClassLoader classLoader;

TransformerWrapper(final ClassTransformer persistenceTransformer,
final ClassLoader classLoader) {
TransformerWrapper(final ClassTransformer persistenceTransformer, final ClassLoader classLoader) {
this.persistenceTransformer = persistenceTransformer;
this.classLoader = classLoader;
}

@Override
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
/*
* Do not even bother running the transformer unless the loader
* loading the class is the ACC's class loader.
*/
return (loader.equals(classLoader) ?
persistenceTransformer.transform(loader, className,
classBeingRedefined, protectionDomain, classfileBuffer)
: null);
try {
return loader.equals(classLoader) ?
persistenceTransformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer) :
null;
} catch (TransformerException e) {
throw (IllegalClassFormatException) (new IllegalClassFormatException().initCause(e));
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion appserver/extras/embedded/all/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1637,7 +1637,7 @@
<dependency>
<groupId>org.glassfish.mq</groupId>
<artifactId>mq-distribution</artifactId>
<version>${mq.version}</version>
<version>${openmq.version}</version>
<type>zip</type>
<optional>true</optional>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion appserver/featuresets/glassfish/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -606,7 +606,7 @@
<dependency>
<groupId>org.glassfish.mq</groupId>
<artifactId>mq-distribution</artifactId>
<version>${mq.version}</version>
<version>${openmq.version}</version>
<type>zip</type>
<exclusions>
<exclusion>
Expand Down
2 changes: 1 addition & 1 deletion appserver/jms/jmsra/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<dependency>
<groupId>org.glassfish.mq</groupId>
<artifactId>mq-distribution</artifactId>
<version>${mq.version}</version>
<version>${openmq.version}</version>
<type>zip</type>
</dependency>
</dependencies>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/*
* Copyright (c) 2021 Contributors to the Eclipse Foundation.
* Copyright (c) 2010, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
Expand Down Expand Up @@ -34,6 +35,7 @@

import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.spi.ClassTransformer;
import jakarta.persistence.spi.TransformerException;
import jakarta.validation.Validation;
import jakarta.validation.ValidatorFactory;

Expand Down Expand Up @@ -78,7 +80,11 @@ public void addTransformer(final ClassTransformer transformer) {
public byte[] transform(
ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
byte[] classfileBuffer) throws IllegalClassFormatException {
return transformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
try {
return transformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
} catch (TransformerException e) {
throw (IllegalClassFormatException) (new IllegalClassFormatException().initCause(e));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is ugly :D

}
}
});
}
Expand Down
Loading