Skip to content

Getting class cast eecption while using Micronaut aq-jsm library #575

Description

@ashokkkannan

Expected Behavior

We should be able to intialize javax.jms.ConnectionFactory for Oracle AQ - JMS feature with Datasource injected by Micronaut

Actual Behaviour

We are getting class cast exception as the aqjms library expects the Database connection to be of type oracle.jdbc.internal.OracleConnection but the datasource initialized by Micronaut is of type

io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted`_

`21:08:44.737 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [io.micronaut.jms.configuration.JMSConnectionFactoryBeanProcessor] could not be loaded: Error processing bean definition [Definition: com.oracle.ide.rpas.jms.AqJmsConfig]: Error instantiating bean of type  [javax.jms.ConnectionFactory]

Message: class io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted cannot be cast to class oracle.jdbc.internal.OracleConnection (io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted and oracle.jdbc.internal.OracleConnection are in unnamed module of loader 'app')
Path Taken: AqJmsConfig.connectionFactory()
io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [io.micronaut.jms.configuration.JMSConnectionFactoryBeanProcessor] could not be loaded: Error processing bean definition [Definition: com.oracle.ide.rpas.jms.AqJmsConfig]: Error instantiating bean of type  [javax.jms.ConnectionFactory]

Message: class io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted cannot be cast to class oracle.jdbc.internal.OracleConnection (io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted and oracle.jdbc.internal.OracleConnection are in unnamed module of loader 'app')
Path Taken: AqJmsConfig.connectionFactory()
	at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1998)
	at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:303)
	at io.micronaut.context.DefaultBeanContext.configureAndStartContext(DefaultBeanContext.java:3310)
	at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:345)
	at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:211)
	at io.micronaut.runtime.Micronaut.start(Micronaut.java:75)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:334)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:320)
	at com.oracle.ide.rpas.Application.main(Application.java:27)
Caused by: io.micronaut.context.exceptions.BeanContextException: Error processing bean definition [Definition: com.oracle.ide.rpas.jms.AqJmsConfig]: Error instantiating bean of type  [javax.jms.ConnectionFactory]

Message: class io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted cannot be cast to class oracle.jdbc.internal.OracleConnection (io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted and oracle.jdbc.internal.OracleConnection are in unnamed module of loader 'app')
Path Taken: AqJmsConfig.connectionFactory()
	at io.micronaut.context.AnnotationProcessorListener.onCreated(AnnotationProcessorListener.java:117)
	at io.micronaut.context.AnnotationProcessorListener.onCreated(AnnotationProcessorListener.java:44)
	at io.micronaut.context.DefaultBeanContext.triggerBeanCreatedEventListener(DefaultBeanContext.java:2380)
	at io.micronaut.context.DefaultBeanContext.postBeanCreated(DefaultBeanContext.java:2357)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2301)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2309)
	at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3119)
	at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
	at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:3021)
	at io.micronaut.context.DefaultBeanContext.initializeEagerBean(DefaultBeanContext.java:2694)
	at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1992)
	... 8 common frames omitted
Caused by: io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [javax.jms.ConnectionFactory]

Message: class io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted cannot be cast to class oracle.jdbc.internal.OracleConnection (io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted and oracle.jdbc.internal.OracleConnection are in unnamed module of loader 'app')
Path Taken: AqJmsConfig.connectionFactory()
	at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2342)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2297)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2309)
	at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3119)
	at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
	at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:3021)
	at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2982)
	at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2955)
	at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:1713)
	at io.micronaut.jms.configuration.JMSConnectionFactoryBeanProcessor.process(JMSConnectionFactoryBeanProcessor.java:55)
	at io.micronaut.jms.configuration.JMSConnectionFactoryBeanProcessor.process(JMSConnectionFactoryBeanProcessor.java:41)
	at io.micronaut.context.AnnotationProcessorListener.onCreated(AnnotationProcessorListener.java:114)
	... 18 common frames omitted
Caused by: java.lang.ClassCastException: class io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted cannot be cast to class oracle.jdbc.internal.OracleConnection (io.micronaut.data.connection.jdbc.advice.ContextualConnection$Intercepted and oracle.jdbc.internal.OracleConnection are in unnamed module of loader 'app')
	at com.oracle.ide.rpas.jms.AqJmsConfig.connectionFactory(AqJmsConfig.java:32)
	at com.oracle.ide.rpas.jms.$AqJmsConfig$ConnectionFactory0$Definition.instantiate(Unknown Source)
	at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2327)
	... 29 common frames omitted
[ERROR] Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:355)
    at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:253)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:884)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:844)
    at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:450)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:370)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:351)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:171)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:163)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:299)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:963)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:296)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:199)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:568)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)

Steps To Reproduce

  1. Include Oracle db config and jms config
  2. Inject Datasource object.
  3. Add code to create javax.jms.ConnectionFactory using AQjmsFactory .getConnectionFactory(dataSource)

Environment Information

MAC - JDK 17
micronaut-jms-core: 3.4.0
com.oracle.database.messaging:aqapi: 19.3.0.0

DB details:
Type: Oracle Autonomous Database
Version: 19c
Uses Oracle AQ

Connection pool type: Tried with both Hikari and UCP, same issue.

Example Application

No response

Version

4.5.0

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions