Issue #23628 Renamed method and removed duplicit log.
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Generator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Generator.java
index eee719a..6acfb2f 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Generator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Generator.java
@@ -34,10 +34,10 @@
import java.util.logging.Logger;
import org.glassfish.pfl.dynamic.codegen.impl.ClassGeneratorImpl;
-import org.glassfish.pfl.dynamic.codegen.impl.CodeGenerator;
import org.glassfish.pfl.dynamic.codegen.spi.ImportList;
import org.glassfish.pfl.dynamic.codegen.spi.Wrapper;
+import static org.glassfish.pfl.dynamic.codegen.impl.CodeGenerator.generateBytecode;
import static org.glassfish.pfl.dynamic.codegen.spi.Wrapper.DUMP_AFTER_SETUP_VISITOR;
import static org.glassfish.pfl.dynamic.codegen.spi.Wrapper.TRACE_BYTE_CODE_GENERATION;
import static org.glassfish.pfl.dynamic.codegen.spi.Wrapper.USE_ASM_VERIFIER;
@@ -61,6 +61,9 @@
this.loader = Objects.requireNonNull(loader);
}
+ /**
+ * @return the name of the package of the generated class. Can be null.
+ */
protected abstract String getPackageName();
/**
@@ -79,7 +82,7 @@
* always call {@link Wrapper#_clear()} in finally block after generation
* to avoid leakages.
*/
- protected abstract void evaluate();
+ protected abstract void defineClassBody();
/**
@@ -90,6 +93,16 @@
}
+ /**
+ * Generates the bytecode of the configured class with the usage of the PFL tool.
+ * Then uses {@link MethodHandles} or {@link ClassGenerator} to generate the class.
+ * <p>
+ * WARNING: This selection depends on the classloader capabilities and JVM rules,
+ * which change between JDK versions.
+ *
+ * @return {@link Class}
+ * @throws IllegalAccessException
+ */
public Class<?> generate() throws IllegalAccessException {
if (getPackageName() == null) {
_package();
@@ -97,7 +110,7 @@
_package(getPackageName());
}
final ImportList imports = Wrapper._import();
- evaluate();
+ defineClassBody();
final Properties props = new Properties();
if (LOG.isLoggable(Level.FINEST)) {
props.put(DUMP_AFTER_SETUP_VISITOR, "true");
@@ -114,7 +127,7 @@
}
final ClassGeneratorImpl codeGenerator = (ClassGeneratorImpl) _classGenerator();
- final byte[] bytecode = CodeGenerator.generateBytecode(codeGenerator, getClassLoader(), imports, props, System.out);
+ final byte[] bytecode = generateBytecode(codeGenerator, getClassLoader(), imports, props, System.out);
if (useMethodHandles()) {
LOG.log(Level.FINEST, "Using MethodHandles to define {0}, anchorClass: {1}",
@@ -123,8 +136,6 @@
return lookup.defineClass(bytecode);
}
- LOG.log(Level.FINEST, "Using ClassGenerator to define {0}, loader: {1}",
- new Object[] {getGeneratedClassName(), getClassLoader()});
if (System.getSecurityManager() == null) {
return ClassGenerator.defineClass(getClassLoader(), getGeneratedClassName(), bytecode,
getAnchorClass().getProtectionDomain());
@@ -134,6 +145,7 @@
return AccessController.doPrivileged(action);
}
+
private boolean useMethodHandles() {
// The bootstrap CL used by embedded glassfish doesn't remember generated classes
// Further ClassLoader.findClass calls will fail.
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/GenericHomeGenerator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/GenericHomeGenerator.java
index 7321ede..2da65d5 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/GenericHomeGenerator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/GenericHomeGenerator.java
@@ -76,7 +76,7 @@
@Override
- public void evaluate() {
+ public void defineClassBody() {
_interface(PUBLIC, GENERIC_HOME_CLASSNAME, _t(GenericEJBHome.class.getName()));
_method(PUBLIC | ABSTRACT, _t(Remote.class.getName()), "create", _t(RemoteException.class.getName()));
_arg(_String(), "generatedBusinessIntf");
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Remote30WrapperGenerator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Remote30WrapperGenerator.java
index 2c3dae7..f84f935 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Remote30WrapperGenerator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/Remote30WrapperGenerator.java
@@ -129,7 +129,7 @@
}
@Override
- public void evaluate() {
+ public void defineClassBody() {
_class(PUBLIC, remoteClientSimpleName,
_t(RemoteBusinessWrapperBase.class.getName()),
_t(businessInterface.getName()));
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/RemoteGenerator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/RemoteGenerator.java
index 3a7f5d2..942c560 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/RemoteGenerator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/RemoteGenerator.java
@@ -113,7 +113,7 @@
}
@Override
- public void evaluate() {
+ public void defineClassBody() {
_interface(PUBLIC, remoteInterfaceSimpleName,
_t(java.rmi.Remote.class.getName()),
_t(RemoteBusinessObject.class.getName())
diff --git a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/ServiceInterfaceGenerator.java b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/ServiceInterfaceGenerator.java
index 046a269..ed38f43 100644
--- a/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/ServiceInterfaceGenerator.java
+++ b/appserver/ejb/ejb-container/src/main/java/com/sun/ejb/codegen/ServiceInterfaceGenerator.java
@@ -94,7 +94,7 @@
@Override
- public void evaluate() {
+ public void defineClassBody() {
_interface(PUBLIC, serviceIntfSimpleName);
for (Method intfMethod : intfMethods) {