Skip to content

JavaMemoryCompiler.Compilation.Exception: "package xxx does not exist" #30

@YugenDesu

Description

@YugenDesu

Hi, I am using your library (v12.63.0) to generate class at runtime in a Maven project.

I followed your example generating classes at runtime and invoking their methods with and without the use of reflection.

I am using spring-boot 2.7.15 and a bunch of libraries.

The main goal is to run on WebSphere web server but, I met a problem with compile the runtime generate d’s class when execute the fatjar application or exec the docker container.
It seems that can’t load the application classes.

Code :

   UnitSourceGenerator unitSG = UnitSourceGenerator.create("it.x.y.z.a").addClass(classSourceGenerator);
        System.out.println("\nGenerated code:\n" + unitSG.make());
        ClassFactory classFactory = ComponentContainer.getInstance().getClassFactory();
        ClassFactory.ClassRetriever classRetriever = classFactory.loadOrBuildAndDefine(unitSG);
        Class<?> generatedClass = classRetriever.get("it.x.y.z.a.ClassName");

Exception:

[10/13/23 12:04:26:099 CEST] 000074d1 SystemOut     O 2023-10-13 12:04:26.098 ERROR 194 --- [olable executor] o.b.c.c.QueuedTaskExecutor$Group$2$1     : (QueuedTaskExecutor.java:1070) - Exception occurred while executing org.burningwave.core.concurrent.QueuedTaskExecutor$Group$2$1@75e0b65d (Thread[Burningwave - BackgroundExecutor - Normal priority tasks poolable executor,5,main](Runnable)):
        java.lang.RuntimeException: org.burningwave.core.classes.JavaMemoryCompiler$Compilation$Exception: package it.x.y.z does not exist:
        at com.sun.tools.javac.main.Main.compile(Main.java:571)
        at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:141)
        at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:150)
        at org.burningwave.core.classes.JavaMemoryCompilerImpl.compile(JavaMemoryCompilerImpl.java:252)
        at org.burningwave.core.classes.JavaMemoryCompilerImpl.compile(JavaMemoryCompilerImpl.java:261)
        at org.burningwave.core.classes.JavaMemoryCompilerImpl.compile(JavaMemoryCompilerImpl.java:261)
        at org.burningwave.core.classes.JavaMemoryCompilerImpl.lambda$compile$6(JavaMemoryCompilerImpl.java:176)
        at org.burningwave.core.classes.JavaMemoryCompilerImpl$$Lambda$25129/0x00000000553057e0.apply(Unknown Source)
        at org.burningwave.core.concurrent.QueuedTaskExecutor$ProducerTask.execute0(QueuedTaskExecutor.java:1266)
        at org.burningwave.core.concurrent.QueuedTaskExecutor$TaskAbst.execute(QueuedTaskExecutor.java:1018)
        at org.burningwave.core.concurrent.QueuedTaskExecutor$TaskAbst.lambda$setExecutor$2(QueuedTaskExecutor.java:1130)
        at org.burningwave.core.concurrent.QueuedTaskExecutor$TaskAbst$$Lambda$24993/0x00000000e400ec90.accept(Unknown Source)
        at org.burningwave.core.concurrent.Thread$Poolable.runExecutable(Thread.java:329)
        at org.burningwave.core.concurrent.Thread$Poolable.run(Thread.java:284)
    that was created at:
        at org.burningwave.core.classes.JavaMemoryCompilerImpl.compile(JavaMemoryCompilerImpl.java:163)
        at org.burningwave.core.classes.JavaMemoryCompilerImpl.compile(JavaMemoryCompilerImpl.java:105)
        at org.burningwave.core.classes.ClassFactory$ClassRetriever.getCompilationTask(ClassFactory.java:287)
        at org.burningwave.core.classes.ClassFactory$ClassRetriever.getCompilationResult(ClassFactory.java:295)
        at org.burningwave.core.classes.ClassFactory$ClassRetriever.get(ClassFactory.java:184)
        at it.groupama.gaquerydss.GaQueryDssApplication.run(GaQueryDssApplication.java:87)
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:759)
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:749)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:175)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:155)
        at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:97)
        at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)
        at com.ibm.ws.webcontainer.webapp.WebAppImpl.initializeServletContainerInitializers(WebAppImpl.java:653)
        at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:437)
        at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88)
        at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:171)
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:901)
        at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:789)
        at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:427)
        at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:719)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1249)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1591)
        at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:708)
        at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:1162)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:801)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplicationDynamically(ApplicationMgrImpl.java:1451)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2319)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:436)
        at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:379)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.java:127)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$1.run(CompositionUnitMgrImpl.java:654)
        at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:5446)
        at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:5662)
        at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:668)
        at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:612)
        at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:1341)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
        at java.lang.reflect.Method.invoke(Method.java:508)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:83)
        at sun.reflect.GeneratedMethodAccessor909.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
        at java.lang.reflect.Method.invoke(Method.java:508)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:287)
        at javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1263)
        at java.security.AccessController.doPrivileged(AccessController.java:708)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
        at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1257)
        at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:1096)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:831)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:813)
        at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1353)
        at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
        at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1246)
        at com.ibm.ws.management.commands.AdminServiceCommands$InvokeCmd.execute(AdminServiceCommands.java:251)
        at com.ibm.ws.console.core.mbean.MBeanHelper.invoke(MBeanHelper.java:246)
        at com.ibm.ws.console.appdeployment.ApplicationDeploymentCollectionAction.execute(ApplicationDeploymentCollectionAction.java:641)
        at org.apache.struts.action.RequestProcessor.processActionPerform(Unknown Source)
        at org.apache.struts.action.RequestProcessor.process(Unknown Source)
        at org.apache.struts.action.ActionServlet.process(Unknown Source)
        at org.apache.struts.action.ActionServlet.doPost(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1235)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:143)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:78)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:979)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1119)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1408)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:198)
        at org.apache.struts.action.RequestProcessor.doForward(Unknown Source)
        at org.apache.struts.tiles.TilesRequestProcessor.doForward(Unknown Source)
        at org.apache.struts.action.RequestProcessor.processForwardConfig(Unknown Source)
        at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(Unknown Source)
        at org.apache.struts.action.RequestProcessor.process(Unknown Source)
        at org.apache.struts.action.ActionServlet.process(Unknown Source)
        at org.apache.struts.action.ActionServlet.doPost(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1235)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:179)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:143)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:96)
        at com.ibm.ws.console.core.servlet.WSCUrlFilter.setUpCommandAssistance(WSCUrlFilter.java:984)
        at com.ibm.ws.console.core.servlet.WSCUrlFilter.continueStoringTaskState(WSCUrlFilter.java:531)
        at com.ibm.ws.console.core.servlet.WSCUrlFilter.doFilter(WSCUrlFilter.java:352)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:197)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:90)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:979)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1119)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4219)
        at com.ibm.ws.webcontainer.webapp.WebAppImpl.handleRequest(WebAppImpl.java:2210)
        at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1030)
        at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:382)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:532)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:318)
        at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88)
        at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1833)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture...

The package it.x.y.z is the application itself.

Then I divided the main module in 2 modules, one contains the business logic and the other one contains classes that are used in the previous one.

In the main module, which there is burning wave core, have a dependency with the second module, so that when package the application, classes are under /WEB-INF. In this case burningwave can found the classes.

I tried to do that :

List<String> generetedClassDependencies = List.of(libraries.....);
ComponentContainer instance = ComponentContainer.getInstance();
        JavaMemoryCompiler javaMemoryCompiler = instance.getJavaMemoryCompiler();
        String burningwaveRuntimeClassPath = instance.getPathHelper().getBurningwaveRuntimeClassPath();
        Path parent = Paths.get(burningwaveRuntimeClassPath).getParent();
        List<String> pathDep = generetedClassDependencies.stream().map(s -> parent.toString() + File.separator + s).collect(Collectors.toList());
        org.burningwave.core.concurrent.QueuedTaskExecutor.ProducerTask<JavaMemoryCompiler.Compilation.Result> compilationTask = javaMemoryCompiler.compile(
                JavaMemoryCompiler.Compilation.Config.forUnitSourceGenerator(unitSG).addClassPaths(pathDep)
                        .addClassPaths("/opt/IBM/WebSphere/AppServer/plugins/javax.j2ee.servlet.jar"));
        JavaMemoryCompiler.Compilation.Result join = compilationTask.join();
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        ClassLoaders.addClassPaths(classLoader, join.getDependencies());
        ClassLoaders.addClassPath(classLoader, join.getClassPath().getAbsolutePath());
        Class<?> generatedClass = classLoader.loadClass("it.x.y.z.a.ClassName");

But nothing, same problems, JavaMemoryCompiler can’t found all ClassPath.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions