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

ServiceFinder defaults to ServiceLookupIteratorProvider #4999

Open
wants to merge 2 commits into
base: 3.1
Choose a base branch
from

Conversation

jbescos
Copy link
Member

@jbescos jbescos commented Mar 7, 2022

@jbescos jbescos marked this pull request as draft March 7, 2022 14:22
@jbescos jbescos marked this pull request as ready for review March 7, 2022 14:24
@jbescos jbescos marked this pull request as draft March 8, 2022 10:15
@jbescos jbescos force-pushed the 3.1issue4953 branch 5 times, most recently from 1727419 to ae6c34f Compare March 9, 2022 08:14
@jbescos
Copy link
Member Author

jbescos commented Mar 9, 2022

I am trying to fix one test that it is not related with the ServiceFinder. I cannot reproduce it locally.

[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.215 s <<< FAILURE! - in org.glassfish.jersey.osgi.test.basic.JsonProcessingTest
[ERROR] org.glassfish.jersey.osgi.test.basic.JsonProcessingTest.testJsonObject  Time elapsed: 2.917 s  <<< ERROR!
java.lang.ClassNotFoundException: jakarta.json.JsonObject not found by PAXEXAM-PROBE-286ff3e3-1b52-4097-856d-dfef76f2e64e [41]
	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1585)
	at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1970)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402)
	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504)
	at org.glassfish.jersey.server.model.IntrospectionModeller$2.run(IntrospectionModeller.java:237)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
	at org.glassfish.jersey.server.model.IntrospectionModeller.getAllDeclaredMethods(IntrospectionModeller.java:231)
	at org.glassfish.jersey.server.model.IntrospectionModeller.checkForNonPublicMethodIssues(IntrospectionModeller.java:151)
	at org.glassfish.jersey.server.model.IntrospectionModeller.doCreateResourceBuilder(IntrospectionModeller.java:98)
	at org.glassfish.jersey.server.model.IntrospectionModeller.access$000(IntrospectionModeller.java:59)
	at org.glassfish.jersey.server.model.IntrospectionModeller$1.call(IntrospectionModeller.java:91)
	at org.glassfish.jersey.server.model.IntrospectionModeller$1.call(IntrospectionModeller.java:88)
	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.processWithException(Errors.java:232)
	at org.glassfish.jersey.server.model.IntrospectionModeller.createResourceBuilder(IntrospectionModeller.java:88)
	at org.glassfish.jersey.server.model.Resource.from(Resource.java:781)
	at org.glassfish.jersey.server.ResourceBagConfigurator.init(ResourceBagConfigurator.java:55)
	at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:348)
	at org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$1(ApplicationHandler.java:310)
	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.processWithException(Errors.java:232)
	at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:309)
	at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:274)
	at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:261)
	at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.<init>(GrizzlyHttpContainer.java:310)
	at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:93)
	at org.glassfish.jersey.osgi.test.basic.JsonProcessingTest.testJsonObject(JsonProcessingTest.java:97)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runLeafWithRetry(ContainerTestRunner.java:97)
	at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChildWithRetry(ContainerTestRunner.java:84)
	at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:75)
	at org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner.runChild(ContainerTestRunner.java:43)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.invokeViaJUnit(JUnitProbeInvoker.java:124)
	at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.findAndInvoke(JUnitProbeInvoker.java:97)
	at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.call(JUnitProbeInvoker.java:73)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.ops4j.pax.swissbox.framework.RemoteFrameworkImpl.invokeMethodOnService(RemoteFrameworkImpl.java:435)
	at org.ops4j.pax.swissbox.framework.RemoteFrameworkImpl.invokeMethodOnService(RemoteFrameworkImpl.java:408)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
	at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

@jbescos
Copy link
Member Author

jbescos commented Mar 9, 2022

It looks the issue is:

ERROR: Bundle org.glassfish.jersey.media.jersey-media-json-processing [37] Error starting file:/tmp/1646816632422-0/pax-exam-downloads/org.glassfish.jersey.media.jersey-media-json-processing_3.1.0.SNAPSHOT.jar (org.osgi.framework.BundleException: Unable to resolve org.glassfish.jersey.media.jersey-media-json-processing [37](R 37.0): missing requirement [org.glassfish.jersey.media.jersey-media-json-processing [37](R 37.0)] osgi.wiring.package; (&(osgi.wiring.package=org.eclipse.parsson.media)(version>=1.0.0)(!(version>=2.0.0))) [caused by: Unable to resolve org.eclipse.parsson.media [40](R 40.0): missing requirement [org.eclipse.parsson.media [40](R 40.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json)(version>=2.0.0)(!(version>=3.0.0))) [caused by: Unable to resolve jakarta.json-api [38](R 38.0): missing requirement [jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson)]] Unresolved requirements: [[org.glassfish.jersey.media.jersey-media-json-processing [37](R 37.0)] osgi.wiring.package; (&(osgi.wiring.package=org.eclipse.parsson.media)(version>=1.0.0)(!(version>=2.0.0)))])
org.osgi.framework.BundleException: Unable to resolve org.glassfish.jersey.media.jersey-media-json-processing [37](R 37.0): missing requirement [org.glassfish.jersey.media.jersey-media-json-processing [37](R 37.0)] osgi.wiring.package; (&(osgi.wiring.package=org.eclipse.parsson.media)(version>=1.0.0)(!(version>=2.0.0))) [caused by: Unable to resolve org.eclipse.parsson.media [40](R 40.0): missing requirement [org.eclipse.parsson.media [40](R 40.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json)(version>=2.0.0)(!(version>=3.0.0))) [caused by: Unable to resolve jakarta.json-api [38](R 38.0): missing requirement [jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson)]] Unresolved requirements: [[org.glassfish.jersey.media.jersey-media-json-processing [37](R 37.0)] osgi.wiring.package; (&(osgi.wiring.package=org.eclipse.parsson.media)(version>=1.0.0)(!(version>=2.0.0)))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4398)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2308)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1566)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle jakarta.json-api [38] Error starting file:/tmp/1646816632422-0/pax-exam-downloads/jakarta.json-api_2.1.0.jar (org.osgi.framework.BundleException: Unable to resolve jakarta.json-api [38](R 38.0): missing requirement [jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson) Unresolved requirements: [[jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson)])
org.osgi.framework.BundleException: Unable to resolve jakarta.json-api [38](R 38.0): missing requirement [jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson) Unresolved requirements: [[jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson)]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4398)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2308)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1566)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.eclipse.parsson [39] Error starting file:/tmp/1646816632422-0/pax-exam-downloads/org.eclipse.parsson_1.0.0.jar (org.osgi.framework.BundleException: Unable to resolve org.eclipse.parsson [39](R 39.0): missing requirement [org.eclipse.parsson [39](R 39.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json.spi)(version>=2.0.0)(!(version>=3.0.0))) [caused by: Unable to resolve jakarta.json-api [38](R 38.0): missing requirement [jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson)] Unresolved requirements: [[org.eclipse.parsson [39](R 39.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json.spi)(version>=2.0.0)(!(version>=3.0.0)))])
org.osgi.framework.BundleException: Unable to resolve org.eclipse.parsson [39](R 39.0): missing requirement [org.eclipse.parsson [39](R 39.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json.spi)(version>=2.0.0)(!(version>=3.0.0))) [caused by: Unable to resolve jakarta.json-api [38](R 38.0): missing requirement [jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson)] Unresolved requirements: [[org.eclipse.parsson [39](R 39.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json.spi)(version>=2.0.0)(!(version>=3.0.0)))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4398)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2308)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1566)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.eclipse.parsson.media [40] Error starting file:/tmp/1646816632422-0/pax-exam-downloads/org.eclipse.parsson.media_1.0.0.jar (org.osgi.framework.BundleException: Unable to resolve org.eclipse.parsson.media [40](R 40.0): missing requirement [org.eclipse.parsson.media [40](R 40.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json)(version>=2.0.0)(!(version>=3.0.0))) [caused by: Unable to resolve jakarta.json-api [38](R 38.0): missing requirement [jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson)] Unresolved requirements: [[org.eclipse.parsson.media [40](R 40.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json)(version>=2.0.0)(!(version>=3.0.0)))])
org.osgi.framework.BundleException: Unable to resolve org.eclipse.parsson.media [40](R 40.0): missing requirement [org.eclipse.parsson.media [40](R 40.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json)(version>=2.0.0)(!(version>=3.0.0))) [caused by: Unable to resolve jakarta.json-api [38](R 38.0): missing requirement [jakarta.json-api [38](R 38.0)] osgi.wiring.package; (osgi.wiring.package=org.eclipse.parsson)] Unresolved requirements: [[org.eclipse.parsson.media [40](R 40.0)] osgi.wiring.package; (&(osgi.wiring.package=jakarta.json)(version>=2.0.0)(!(version>=3.0.0)))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4398)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2308)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1566)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
[org.ops4j.pax.exam.forked.ForkedTestContainer] ERROR : Bundle [id:37, url:mvn:org.glassfish.jersey.media/jersey-media-json-processing/3.1.0-SNAPSHOT] is not resolved
[org.ops4j.pax.exam.forked.ForkedTestContainer] ERROR : Bundle [id:38, url:mvn:jakarta.json/jakarta.json-api/2.1.0] is not resolved
[org.ops4j.pax.exam.forked.ForkedTestContainer] ERROR : Bundle [id:39, url:mvn:org.eclipse.parsson/parsson/1.0.0] is not resolved
[org.ops4j.pax.exam.forked.ForkedTestContainer] ERROR : Bundle [id:40, url:mvn:org.eclipse.parsson/parsson-media/1.0.0] is not resolved

@jbescos
Copy link
Member Author

jbescos commented Mar 9, 2022

Locally it can download the dependencies and the test passes:

[org.ops4j.pax.exam.forked.provision.PlatformImpl] DEBUG : Downloading [mvn:org.glassfish.jersey.media/jersey-media-json-processing/3.1.0-SNAPSHOT]
[org.ops4j.pax.exam.forked.provision.PlatformImpl] DEBUG : Creating new file at destination: /tmp/1646824466109-0/pax-exam-downloads/-1089499066.jar
[org.ops4j.pax.exam.forked.provision.StreamUtils] DEBUG : mvn:org.glassfish.jersey.media/jersey-media-json-processing/3.1.0-SNAPSHOT : downloading...
[org.ops4j.pax.url.mvn.internal.Connection] DEBUG : Resolving [mvn:org.glassfish.jersey.media/jersey-media-json-processing/3.1.0-SNAPSHOT]
[shaded.org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider] DEBUG : Using manager PaxLocalRepositoryManager with priority 0.0 for /home/jbescos/.m2/repository
[org.ops4j.pax.url.mvn.internal.AetherBasedResolver] DEBUG : Resolved (org.glassfish.jersey.media:jersey-media-json-processing:jar:3.1.0-SNAPSHOT) as /home/jbescos/.m2/repository/org/glassfish/jersey/media/jersey-media-json-processing/3.1.0-SNAPSHOT/jersey-media-json-processing-3.1.0-SNAPSHOT.jar
[org.ops4j.pax.exam.forked.provision.StreamUtils] DEBUG : mvn:org.glassfish.jersey.media/jersey-media-json-processing/3.1.0-SNAPSHOT : 19872 bytes @ [ 19872kBps ]
[org.ops4j.pax.exam.forked.provision.PlatformImpl] DEBUG : Successfully downloaded to [/tmp/1646824466109-0/pax-exam-downloads/-1089499066.jar]
[org.ops4j.pax.exam.forked.provision.PlatformImpl] DEBUG : Downloading [mvn:jakarta.json/jakarta.json-api/2.1.0]
[org.ops4j.pax.exam.forked.provision.PlatformImpl] DEBUG : Creating new file at destination: /tmp/1646824466109-0/pax-exam-downloads/-54011761.jar
[org.ops4j.pax.exam.forked.provision.StreamUtils] DEBUG : mvn:jakarta.json/jakarta.json-api/2.1.0 : downloading...
[org.ops4j.pax.url.mvn.internal.Connection] DEBUG : Resolving [mvn:jakarta.json/jakarta.json-api/2.1.0]
[shaded.org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider] DEBUG : Using manager PaxLocalRepositoryManager with priority 0.0 for /home/jbescos/.m2/repository
[org.ops4j.pax.url.mvn.internal.AetherBasedResolver] DEBUG : Resolved (jakarta.json:jakarta.json-api:jar:2.1.0) as /home/jbescos/.m2/repository/jakarta/json/jakarta.json-api/2.1.0/jakarta.json-api-2.1.0.jar
[org.ops4j.pax.exam.forked.provision.StreamUtils] DEBUG : mvn:jakarta.json/jakarta.json-api/2.1.0 : 49290 bytes @ [ 49290kBps ]
[org.ops4j.pax.exam.forked.provision.PlatformImpl] DEBUG : Successfully downloaded to [/tmp/1646824466109-0/pax-exam-downloads/-54011761.jar]
[org.ops4j.pax.exam.forked.provision.PlatformImpl] DEBUG : Downloading [mvn:org.eclipse.parsson/parsson/1.0.0]
[org.ops4j.pax.exam.forked.provision.PlatformImpl] DEBUG : Creating new file at destination: /tmp/1646824466109-0/pax-exam-downloads/-524797807.jar
[org.ops4j.pax.exam.forked.provision.StreamUtils] DEBUG : mvn:org.eclipse.parsson/parsson/1.0.0 : downloading...
[org.ops4j.pax.url.mvn.internal.Connection] DEBUG : Resolving [mvn:org.eclipse.parsson/parsson/1.0.0]

But in Jenkins it is not able to do so:

[org.ops4j.pax.exam.forked.ForkedTestContainer] ERROR : Bundle [id:37, url:mvn:org.glassfish.jersey.media/jersey-media-json-processing/3.1.0-SNAPSHOT] is not resolved
[org.ops4j.pax.exam.forked.ForkedTestContainer] ERROR : Bundle [id:38, url:mvn:jakarta.json/jakarta.json-api/2.1.0] is not resolved
[org.ops4j.pax.exam.forked.ForkedTestContainer] ERROR : Bundle [id:39, url:mvn:org.eclipse.parsson/parsson/1.0.0] is not resolved
[org.ops4j.pax.exam.forked.ForkedTestContainer] ERROR : Bundle [id:40, url:mvn:org.eclipse.parsson/parsson-media/1.0.0] is not resolved

I am going to ignore that tests for now. It is not related to my changes. Actually in the stack trace it is possible to see that it is not related to ServiceFinder:
#4999 (comment)

@jbescos jbescos marked this pull request as ready for review March 9, 2022 12:36
@jansupol
Copy link
Contributor

This PR is a reaction to JPMS and service loading capabilities defined in module.info. The standard ServiceFinder cannot load these services. We'll check this PR once the JPMS support is brought to Jersey.

See #5001.

@jbescos jbescos force-pushed the 3.1issue4953 branch 3 times, most recently from 9d8babd to 7465351 Compare February 23, 2024 09:05
Signed-off-by: Jorge Bescos Gascon <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Replace Lazy loading in ServiceFinder with Lazy ServiceLoader.Provider
2 participants