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

health example throws VerifyError as class MonkeyHealthCheck_ClientProxy overrides final method AbstractHealthCheck.addMetaData #1517

Closed
aldettinger opened this issue Aug 6, 2020 · 2 comments
Assignees
Milestone

Comments

@aldettinger
Copy link
Contributor

aldettinger commented Aug 6, 2020

cd examples/health
mvn clean package
java -jar target/camel-quarkus-examples-health-*-runner.jar

is throwing:

2020-08-06 11:01:23,560 ERROR [io.qua.application] (main) Failed to start application (with profile prod): java.lang.VerifyError: class org.acme.health.MonkeyHealthCheck_ClientProxy overrides final method org.apache.camel.impl.health.AbstractHealthCheck.addMetaData(Ljava/lang/String;Ljava/lang/Object;)V
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	at org.acme.health.MonkeyHealthCheck_Bean.proxy(MonkeyHealthCheck_Bean.zig:33)
	at org.acme.health.MonkeyHealthCheck_Bean.get(MonkeyHealthCheck_Bean.zig:229)
	at org.acme.health.MonkeyHealthCheck_Bean.get(MonkeyHealthCheck_Bean.zig:245)
	at org.acme.health.MyRouteBuilder_Bean.create(MyRouteBuilder_Bean.zig:215)
	at org.acme.health.MyRouteBuilder_Bean.create(MyRouteBuilder_Bean.zig:255)
	at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:88)
	at io.quarkus.arc.impl.ComputingCache$CacheFunction.lambda$apply$0(ComputingCache.java:99)
	at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:26)
	at io.quarkus.arc.impl.ComputingCache.getValue(ComputingCache.java:41)
	at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:25)
	at org.acme.health.MyRouteBuilder_ClientProxy.arc$delegate(MyRouteBuilder_ClientProxy.zig:92)
	at org.acme.health.MyRouteBuilder_ClientProxy.addRoutesToCamelContext(MyRouteBuilder_ClientProxy.zig:846)
	at org.apache.camel.impl.engine.AbstractCamelContext.addRoutes(AbstractCamelContext.java:1175)
	at org.apache.camel.quarkus.core.CamelContextRecorder.addRoutesFromContainer(CamelContextRecorder.java:101)
	at io.quarkus.deployment.steps.CamelContextProcessor$runtime1442202552.deploy_0(CamelContextProcessor$runtime1442202552.zig:76)
	at io.quarkus.deployment.steps.CamelContextProcessor$runtime1442202552.deploy(CamelContextProcessor$runtime1442202552.zig:40)
	at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:631)
	at io.quarkus.runtime.Application.start(Application.java:90)
	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:92)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:61)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:38)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:106)
	at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)

Should we could make AbstractHealthCheck.addMetaData non final ?
quarkus.arc.remove-final-for-proxyable-methods is not working on superclasses, maybe a feature to request at quarkus ?
Or recommend not to use proxy/inheritance ? I can't see a classy way however.

@jamesnetherton
Copy link
Contributor

Or I wonder if it's simpler to refactor the the 'chaos' generator part of the health check, so that it doesn't need to be triggered from the Camel route. E.g flip the up flag on every invocation of doCall.

Then you could avoid the bean proxying / @Inject. I don't see users wanting to do that in most scenarios (IMO).

@aldettinger aldettinger self-assigned this Aug 6, 2020
@aldettinger
Copy link
Contributor Author

No proxy, no issue. Ok, I'm gonna try to do something without injecting proxy.

aldettinger added a commit to aldettinger/camel-quarkus that referenced this issue Aug 10, 2020
aldettinger added a commit to aldettinger/camel-quarkus that referenced this issue Aug 10, 2020
aldettinger added a commit to aldettinger/camel-quarkus that referenced this issue Aug 10, 2020
aldettinger added a commit to aldettinger/camel-quarkus that referenced this issue Aug 10, 2020
@aldettinger aldettinger added this to the 1.1.0 milestone Aug 11, 2020
ppalaga pushed a commit to ppalaga/camel-quarkus that referenced this issue Aug 26, 2020
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

No branches or pull requests

2 participants