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

Can't force dependency classes to be loaded into Runtime Classloader using quarkus.class-loading.reloadable-artifacts #46701

Open
alex-kontcur opened this issue Mar 10, 2025 · 1 comment
Labels
area/bootstrap kind/bug Something isn't working

Comments

@alex-kontcur
Copy link

alex-kontcur commented Mar 10, 2025

Describe the bug

There is quarkus multi module maven application. One submodule starts whole application. It imports jackrabbit dependencies:

jackrabbit-core
jackrabbit-jcr-server
jackrabbit-jcr-servlet
jackrabbit-webdav

Some port classes were introduced to cover javax -> jakarta transition. The issue is Quarkus loads jackrabbit dependencies with one Classloader and submodule classes with another Classloader. So it is impossible to instantiate jackrabbit class with package visible constructor.

2025-03-10T15:59:12.431+04:00 ERROR   [executor-thread-2  ] i.u.r.io [{}] - Exception 
handling request ebfaf1e2-2bd4-40a4-a446-0d0e0e9be78a-1 to /webdav/workspace: 
java.lang.IllegalAccessError: class org.apache.jackrabbit.webdav.jcr.JWorkspaceResource 
cannot access its abstract superclass 
org.apache.jackrabbit.webdav.jcr.AbstractResource 
(org.apache.jackrabbit.webdav.jcr.JWorkspaceResource is in unnamed module of 
loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @97a145b; org.apache.jackrabbit.webdav.jcr.AbstractResource 
is in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @28eaa59a)
  • The property quarkus.class-loading.reloadable-artifacts doesn't help
    quarkus.class-loading.reloadable-artifacts=org.apache.jackrabbit:oak-jackrabbit-api,commons-io:commons-io,concurrent:concurrent,javax.jcr:jcr,org.apache.jackrabbit:jackrabbit-core,org.apache.jackrabbit:jackrabbit-data,org.apache.jackrabbit:jackrabbit-jcr-commons,org.apache.jackrabbit:jackrabbit-webdav,org.apache.jackrabbit:jackrabbit-jcr-server,org.apache.jackrabbit:jackrabbit-jcr-servlet

  • Accessing jackrabbit dependencies through quarkus-extension also doesn't help.

Expected behavior

Dependency classes are loaded into same Classloader as application code

Actual behavior

Classes are loaded by different classloaders

How to Reproduce?

No response

Output of uname -a or ver

Darwin mac-2.local 23.2.0 Darwin Kernel Version 23.2.0: Wed Nov 15 21:54:10 PST 2023; root:xnu-10002.61.3~2/RELEASE_X86_64 x86_64

Output of java -version

openjdk version "21.0.2" 2024-01-16 LTS OpenJDK Runtime Environment Zulu21.32+17-CA (build 21.0.2+13-LTS) OpenJDK 64-Bit Server VM Zulu21.32+17-CA (build 21.0.2+13-LTS, mixed mode, sharing)

Quarkus version or git rev

3.17.2

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)

Additional information

No response

@alex-kontcur alex-kontcur added the kind/bug Something isn't working label Mar 10, 2025
@alex-kontcur alex-kontcur changed the title Can't force dependency classes to be loaded into Runtime Classloaded using quarkus.class-loading.reloadable-artifacts Can't force dependency classes to be loaded into Runtime Classloader using quarkus.class-loading.reloadable-artifacts Mar 10, 2025
@alex-kontcur
Copy link
Author

Update: jackrabbit port classes were moved to extension, so all instantiations using package visible constructors is happening there. Now jackrabbit libraries and port classes are loading with Base Runtime Classloader according to https://quarkus.io/guides/class-loading-reference. Issue is resolved with correct approach (I guess) but quarkus.class-loading.reloadable-artifacts still doesn't work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/bootstrap kind/bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants