Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[glassfish-dev] Need help - About MethodHandles.defineClass Behavior
  • From: "sawamura.hiroki@xxxxxxxxxxx" <sawamura.hiroki@xxxxxxxxxxx>
  • Date: Wed, 18 Mar 2020 01:13:58 +0000
  • Accept-language: ja-JP, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xWYcEHErnc3u3lHNNNLtqzKCmitO0M2p9P99pGHnwqM=; b=A5tPfdpMlsHFGSdJr9SfdJbroaYG+chGrtKbs5ytpS4Jto/PiL/MUEW8nleGHobvN+hUqkn02UhZNNrSUGCpQMIEvVRq0m0dreSgu7QlxFE2lBsEYIxr8frxl9PljYqPih3lG0RtVx4jxtFBb66RKOTqjXn6LkJoiWK7eCQy3xs7vlRE0Ibc7DAorjf0TyJ/bJ0opUodBeLkVBMg2qKOY18u+OESzeJJ/K2QRMw5KUbC21z6hsY4lDY6ZhKJy1NzRJCC/hOBoq4X/PuskP4bu7Sl9djhjAy/mXuTURIxU+NrHeg730KA1uaCNYXoNMzutUfUMcHAu/T/7Q5Vb9AkUQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EpxppQExS1zLcdK5IBBf6Nx2of76I8hnwgzaU3Kjz+59H8fed1/VMhQRzQBl1dH+XbsZxuDBEBRkLf5/QJiK4zc420+lPjo7oWeN5R+UkFufGsv+Uz7inHzII9wyWgQB2E+7kw+GcciBxbwDp1wq92fEST5FkHE7AXJqfe0NQiqe1rMonbdoNs1QbYJQFeb9aNkuXxfD+BgqkJcXnjvbjRx/zjoAbqUwYaZuqldgIC5IJWjPpyy9euywk2/2oEZ4O8p9hb8RSU66tnNp49dGdEdUQ4iS35SRTxQ4RszJr4AbRz2Ij5s/aX/s7oXSzhDFGTeqR7Md+RKuHyFgc36wwg==
  • Delivered-to: glassfish-dev@xxxxxxxxxxx
  • Ironport-sdr: SF8SvJ5/QHLnnMWXaKc0X5t9raPZblfYcmjpi26fuDW2+1Q2iEfZ+9wLpQ83Koe4Y5f8FjLrv2 0M45uUam8MQ0w5AuLAm0b2yZ+3TJ8eMOqB3fbbD3P3/9YiJkqe7pUd7FVGentjh+BaVL16HTim WFVzay4y4oQLfTJSR2Ele7Le05Ci610nVzHNCosIcuQVM8u8F1Xj7F+pyUTtBMcslDHRO1fRrI G5otOZPv8W7sqIo47cVABphcgSh6YTl14L5AmH4+O7WA9Tl+H3r9dZQ6WZgYI8/s0Sn2cKWX5M mng=
  • List-archive: <https://www.eclipse.org/mailman/private/glassfish-dev>
  • List-help: <mailto:glassfish-dev-request@eclipse.org?subject=help>
  • List-subscribe: <https://www.eclipse.org/mailman/listinfo/glassfish-dev>, <mailto:glassfish-dev-request@eclipse.org?subject=subscribe>
  • List-unsubscribe: <https://www.eclipse.org/mailman/options/glassfish-dev>, <mailto:glassfish-dev-request@eclipse.org?subject=unsubscribe>
  • Thread-index: AdX8wWZHe/LhvleyRM+k84Q5xJqCOQ==
  • Thread-topic: Need help - About MethodHandles.defineClass Behavior

Hi,

I'm trying to get devtests to run on JDK 11, but I'm having trouble with the following issues.
And now I'm looking for a hint or a clue to a solution... Does anyone have any idea?

■summary
As part of JDK 11 support, the process of orb-gmbal-pfl defineClass(*) has changed.
And when running devtests of glassfish on JDK 11, this method produces the following error:.
```
[2020-03-16T13:13:01.042+0900] [glassfish 5.1] [SEVERE] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=45 _ThreadName=admin-listener(1)] [timeMillis: 1584331981042] [levelValue: 1000] [[
  Exception while invoking class org.glassfish.ejb.startup.EjbDeployer load method
java.lang.RuntimeException: EJB Container initialization error
(snip)
Caused by: java.lang.IllegalArgumentException: Class not in same package as lookup class
	at java.base/java.lang.invoke.MethodHandles$Lookup.defineClass(MethodHandles.java:955)
	at org.glassfish.pfl.basic.reflection.Bridge.defineClass(Bridge.java:148)
(snip)
```
However, when I checked the arguments, the classBytes being defined is the same package as the existing class anchorClass.
This error occurs when deploying glassfish/lib/install/applications/mejb.jar, not when deploying a simple EJB app.

(*) orb-gmbal-pfl:/pfl-basic/src/main/java11/org/glassfish/pfl/basic/reflection/Bridge.java
   https://github.com/eclipse-ee4j/orb-gmbal-pfl/pull/22
```
    @Override
    public Class<?> defineClass(Class<?> anchorClass, String className, byte[] classBytes) {
        try {
            MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(anchorClass, MethodHandles.lookup())
                                                .dropLookupMode(MethodHandles.Lookup.PRIVATE);
            return lookup.defineClass(classBytes);
        } catch (IllegalAccessException e) {
            throw new RuntimeException("Unable to define class ", e);
        }
    }
```

■when
running devtests (5.1.0-run-with-JDK11 branch):
  - ejb_group_3
  - cdi_all

(more specific) asadmin deploy glassfish/lib/install/applications/mejb.jar

■arguments when this error occurs
anchorClass:
  anchorClass.toGenericString() -> "public abstract static interface com.sun.corba.ee.impl.folb.InitialGroupInfoService$InitialGIS"
className:
  "com.sun.corba.ee.impl.folb.InitialGroupInfoService$_InitialGIS_DynamicStub"
classBytes:
```
# javap classBytes.class
Compiled from "com/sun/corba/ee/impl/folb/InitialGroupInfoService$_InitialGIS_DynamicStub.java"
public class com.sun.corba.ee.impl.folb.InitialGroupInfoService$_InitialGIS_DynamicStub extends com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase implements com.sun.corba.ee.impl.folb.InitialGroupInfoService$InitialGIS {
  public com.sun.corba.ee.impl.folb.InitialGroupInfoService$_InitialGIS_DynamicStub();
  public java.util.List getClusterInstanceInfo();
}
```

■Stacktrace(server.log)
```
[2020-03-16T13:13:01.041+0900] [glassfish 5.1] [SEVERE] [] [javax.enterprise.resource.corba] [tid: _ThreadID=45 _ThreadName=admin-listener(1)] [timeMillis: 1584331981041] [levelValue: 1000] [[
  iiop.createreference_exception]]

[2020-03-16T13:13:01.042+0900] [glassfish 5.1] [SEVERE] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=45 _ThreadName=admin-listener(1)] [timeMillis: 1584331981042] [levelValue: 1000] [[
  Exception while invoking class org.glassfish.ejb.startup.EjbDeployer load method
java.lang.RuntimeException: EJB Container initialization error
	at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:210)
	at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:267)
	at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:75)
	at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:182)
	at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:289)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:472)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:195)
	at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:467)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:516)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:512)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/javax.security.auth.Subject.doAs(Subject.java:361)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:511)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:542)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:534)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/javax.security.auth.Subject.doAs(Subject.java:361)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:533)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1441)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:86)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1823)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1699)
	at org.glassfish.admin.rest.resources.admin.CommandResource.executeCommand(CommandResource.java:384)
	at org.glassfish.admin.rest.resources.admin.CommandResource.execCommandSimpInMultOut(CommandResource.java:211)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
	at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
	at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
	at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
	at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
	at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
	at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
	at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:679)
	at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:353)
	at org.glassfish.admin.rest.adapter.JerseyContainerCommandService$3.service(JerseyContainerCommandService.java:150)
	at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:155)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:439)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:144)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:515)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.RuntimeException: Unable to create reference 
	at org.glassfish.enterprise.iiop.impl.POARemoteReferenceFactory.createRef(POARemoteReferenceFactory.java:398)
	at org.glassfish.enterprise.iiop.impl.POARemoteReferenceFactory.createHomeReference(POARemoteReferenceFactory.java:351)
	at com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1306)
	at com.sun.ejb.containers.StatelessSessionContainer.initializeHome(StatelessSessionContainer.java:166)
	at com.sun.ejb.containers.StatelessContainerFactory.createContainer(StatelessContainerFactory.java:39)
	at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:198)
	... 66 more
Caused by: java.lang.IllegalArgumentException: Class not in same package as lookup class
	at java.base/java.lang.invoke.MethodHandles$Lookup.defineClass(MethodHandles.java:955)
	at org.glassfish.pfl.basic.reflection.Bridge.defineClass(Bridge.java:148)
	at org.glassfish.pfl.dynamic.codegen.impl.CodeGeneratorUtil.makeClass(CodeGeneratorUtil.java:57)
	at org.glassfish.pfl.dynamic.codegen.spi.Wrapper._generate(Wrapper.java:1069)
	at org.glassfish.pfl.dynamic.codegen.spi.Wrapper._generate(Wrapper.java:1040)
	at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenProxyCreator.create(CodegenProxyCreator.java:217)
	at com.sun.corba.ee.impl.presentation.rmi.codegen.StubFactoryCodegenImpl.createStubClass(StubFactoryCodegenImpl.java:71)
	at com.sun.corba.ee.impl.presentation.rmi.codegen.StubFactoryCodegenImpl.createStubClass(StubFactoryCodegenImpl.java:65)
	at com.sun.corba.ee.impl.presentation.rmi.codegen.StubFactoryCodegenImpl.lambda$getStubClass$0(StubFactoryCodegenImpl.java:48)
	at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1133)
	at com.sun.corba.ee.impl.presentation.rmi.codegen.StubFactoryCodegenImpl.getStubClass(StubFactoryCodegenImpl.java:48)
	at com.sun.corba.ee.impl.presentation.rmi.codegen.StubFactoryCodegenImpl.makeStub(StubFactoryCodegenImpl.java:75)
	at org.glassfish.enterprise.iiop.impl.POARemoteReferenceFactory.createRef(POARemoteReferenceFactory.java:388)
	... 71 more
]]
```

Thanks,
Hiroki

Back to the top