Driver 4.14 with micrometer in OSGi does not seem to work
Description
Using driver 4.14 and overriding advanced.metrics.factory.class to MicrometerMetricsFactory does not seem to work in OSGi environment. Driver uses reflection to construct the class but the class cannot be found because the com.datastax.oss.java-driver-metrics-micrometer does not export the MicrometerMetricsFactory.
Here’s a stacktrace for reference:
15:21:41.569 ERROR [FelixStartLevel] bundle com.ericsson.bss.cassandra.ecchronos.connection.impl:4.0.0.SNAPSHOT (33)[com.ericsson.bss.cassandra.ecchronos.connection.impl.OSGiLocalNativeConnectionProvider(4)] : The activate method has thrown an exception
java.lang.IllegalArgumentException: Can't find class MicrometerMetricsFactory (specified by advanced.metrics.factory.class)
at com.datastax.oss.driver.internal.core.util.Reflection.resolveClass(Reflection.java:302) ~[?:?]
at com.datastax.oss.driver.internal.core.util.Reflection.buildFromConfig(Reflection.java:235) ~[?:?]
at com.datastax.oss.driver.internal.core.util.Reflection.buildFromConfig(Reflection.java:110) ~[?:?]
at com.datastax.oss.driver.internal.core.context.DefaultDriverContext.buildMetricsFactory(DefaultDriverContext.java:548) ~[?:?]
at com.datastax.oss.driver.internal.core.util.concurrent.LazyReference.get(LazyReference.java:55) ~[?:?]
at com.datastax.oss.driver.internal.core.context.DefaultDriverContext.getMetricsFactory(DefaultDriverContext.java:941) ~[?:?]
at com.datastax.oss.driver.internal.core.session.DefaultSession.<init>(DefaultSession.java:123) ~[?:?]
at com.datastax.oss.driver.internal.core.session.DefaultSession.init(DefaultSession.java:88) ~[?:?]
at com.datastax.oss.driver.api.core.session.SessionBuilder.buildDefaultSessionAsync(SessionBuilder.java:903) ~[?:?]
at com.datastax.oss.driver.api.core.session.SessionBuilder.buildAsync(SessionBuilder.java:817) ~[?:?]
at com.datastax.oss.driver.api.core.session.SessionBuilder.build(SessionBuilder.java:835) ~[?:?]
at com.ericsson.bss.cassandra.ecchronos.connection.impl.LocalNativeConnectionProvider$Builder.createSession(LocalNativeConnectionProvider.java:216) ~[?:?]
at com.ericsson.bss.cassandra.ecchronos.connection.impl.LocalNativeConnectionProvider$Builder.build(LocalNativeConnectionProvider.java:173) ~[?:?]
at com.ericsson.bss.cassandra.ecchronos.connection.impl.OSGiLocalNativeConnectionProvider.activate(OSGiLocalNativeConnectionProvider.java:76) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_231]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_231]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_231]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_231]
If anyone has any idea how to get this working without a fix in driver please tell me.
Using driver 4.14 and overriding
advanced.metrics.factory.class
to MicrometerMetricsFactory does not seem to work in OSGi environment. Driver uses reflection to construct the class but the class cannot be found because thecom.datastax.oss.java-driver-metrics-micrometer
does not export the MicrometerMetricsFactory.Here’s a stacktrace for reference:
15:21:41.569 ERROR [FelixStartLevel] bundle com.ericsson.bss.cassandra.ecchronos.connection.impl:4.0.0.SNAPSHOT (33)[com.ericsson.bss.cassandra.ecchronos.connection.impl.OSGiLocalNativeConnectionProvider(4)] : The activate method has thrown an exception java.lang.IllegalArgumentException: Can't find class MicrometerMetricsFactory (specified by advanced.metrics.factory.class) at com.datastax.oss.driver.internal.core.util.Reflection.resolveClass(Reflection.java:302) ~[?:?] at com.datastax.oss.driver.internal.core.util.Reflection.buildFromConfig(Reflection.java:235) ~[?:?] at com.datastax.oss.driver.internal.core.util.Reflection.buildFromConfig(Reflection.java:110) ~[?:?] at com.datastax.oss.driver.internal.core.context.DefaultDriverContext.buildMetricsFactory(DefaultDriverContext.java:548) ~[?:?] at com.datastax.oss.driver.internal.core.util.concurrent.LazyReference.get(LazyReference.java:55) ~[?:?] at com.datastax.oss.driver.internal.core.context.DefaultDriverContext.getMetricsFactory(DefaultDriverContext.java:941) ~[?:?] at com.datastax.oss.driver.internal.core.session.DefaultSession.<init>(DefaultSession.java:123) ~[?:?] at com.datastax.oss.driver.internal.core.session.DefaultSession.init(DefaultSession.java:88) ~[?:?] at com.datastax.oss.driver.api.core.session.SessionBuilder.buildDefaultSessionAsync(SessionBuilder.java:903) ~[?:?] at com.datastax.oss.driver.api.core.session.SessionBuilder.buildAsync(SessionBuilder.java:817) ~[?:?] at com.datastax.oss.driver.api.core.session.SessionBuilder.build(SessionBuilder.java:835) ~[?:?] at com.ericsson.bss.cassandra.ecchronos.connection.impl.LocalNativeConnectionProvider$Builder.createSession(LocalNativeConnectionProvider.java:216) ~[?:?] at com.ericsson.bss.cassandra.ecchronos.connection.impl.LocalNativeConnectionProvider$Builder.build(LocalNativeConnectionProvider.java:173) ~[?:?] at com.ericsson.bss.cassandra.ecchronos.connection.impl.OSGiLocalNativeConnectionProvider.activate(OSGiLocalNativeConnectionProvider.java:76) ~[?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_231] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_231] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_231] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_231]
If anyone has any idea how to get this working without a fix in driver please tell me.