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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions