1 2 Previous Next 18 Replies Latest reply on Sep 10, 2012 12:01 PM by epikninja

    Oracle xa-datasource java.lang.ClassNotFoundException

    hfluz

      I'm trying to use oracle xa-datasource in JBoss AS 7.1.1, but I'm getting an exception (pasted at the end of this post)

       

      My modules.xml (/modules/com/oracle/db/main/) is defined as:

      <module xmlns="urn:jboss:module:1.0" name="com.oracle.db">
        <resources>
          <resource-root path="ojdbc6.jar"/>
        </resources>
        <dependencies>
          <module name="javax.api"/>
        </dependencies>
      </module>
      

       

      My datasource is the following:

      <datasources>     
                      <xa-datasource jndi-name="java:jboss/oracle/user" pool-name="User" enabled="true" use-ccm="false">
                          <xa-datasource-property name="URL">
                              jdbc:oracle:thin:@ip:1521:db
                          </xa-datasource-property>
                          <xa-datasource-property name="User">
                              user
                          </xa-datasource-property>
                          <xa-datasource-property name="Password">
                              password
                          </xa-datasource-property>
                          <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                          <driver>ojdbc6</driver>
                          <xa-pool>
                              <min-pool-size>1</min-pool-size>
                              <max-pool-size>60</max-pool-size>
                              <prefill>false</prefill>
                              <use-strict-min>false</use-strict-min>
                              <flush-strategy>FailingConnectionOnly</flush-strategy>
                              <no-tx-separate-pools>true</no-tx-separate-pools>
                              <pad-xid>false</pad-xid>
                              <wrap-xa-resource>true</wrap-xa-resource>
                          </xa-pool>
                          <validation>
                              <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                              <validate-on-match>false</validate-on-match>
                              <background-validation>false</background-validation>
                              <use-fast-fail>false</use-fast-fail>
                              <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
                              <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
                          </validation>
                      </xa-datasource>
                      <drivers>
                          <driver name="ojdbc6" module="com.oracle.db">
                              <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                          </driver>
                      </drivers>
                  </datasources>
      

       

       

      I guess everything looks ok, but I get this exception when I try to deploy my application (that works fine using the traditional datasource - without xa):

      09:39:35,720 WARN  [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-6) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: Could not create connection
          at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXAManagedConnection(XAManagedConnectionFactory.java:447)
          at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.createManagedConnection(XAManagedConnectionFactory.java:385)
          at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:761)
          at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:343)
          at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)
          at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)
          at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)
          at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)
          at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)
          at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:129)
          at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:67) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:253) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:119) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:71) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2270) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2266) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1735) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
          at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
          at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
          at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
          at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.6.0_24]
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.6.0_24]
          at java.lang.Thread.run(Thread.java:679) [rt.jar:1.6.0_24]
      Caused by: java.lang.NoClassDefFoundError: javax/transaction/xa/XAException
          at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_24]
          at java.lang.Class.forName(Class.java:264) [rt.jar:1.6.0_24]
          at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXADataSource(XAManagedConnectionFactory.java:551)
          at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXAManagedConnection(XAManagedConnectionFactory.java:430)
          ... 30 more
      Caused by: java.lang.ClassNotFoundException: javax.transaction.xa.XAException from [Module "com.oracle.db:main" from local module loader @1d807ca8 (roots: /home/humberto/servers/jboss-as-7.1.1.Final/modules)]
          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
          ... 34 more
      
      09:39:35,729 WARN  [org.hibernate.engine.jdbc.internal.JdbcServicesImpl] (MSC service thread 1-6) HHH000342: Could not obtain connection to query metadata : javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/oracle/web2
      
        • 1. Re: Oracle xa-datasource java.lang.ClassNotFoundException
          ayagmur

          You may try to add ojdbc6.jar to jboss/modules..

          • 2. Re: Oracle xa-datasource java.lang.ClassNotFoundException
            hfluz

            ojdbc6.jar is already in jboss/modules. That's the structure:

             

            • jboss-as-7.1.1.Final
              • modules
                • com
                  • oracle
                    • db
                      • main
                        • module.xml
                        • ojdbc6.jar
                        • ojdbc6.jar.index
            • 3. Re: Oracle xa-datasource java.lang.ClassNotFoundException
              ayagmur

              The difference between my configuration and yours is :

               

              1. my folder structure is : com/oracle/ojdbc6/main

               

              2. there are 2 dependencies

                       <module name="javax.api"/>   

                       <module name="javax.transaction.api"/>


              Regarding the exception you get, possible error could be 2nd.


                 

              • 4. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                hfluz

                Thanks Ali, that's exactly my issue.

                 

                I was using the same folder structure as you, but I changed it because apparently jboss couldn't find the driver.

                 

                But I added javax.transaction.api and now everything works fine now. =)

                • 5. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                  epikninja

                  I'm having a similar issue.  I needed to add the Oracle6 module.  I did it manually.  Meaning, I created the directory structure as follows.  And I copied the the oracle driver from the Oracle Client install on my machine.  Question:  What is the significance of the oracle6.jar.index?  Could this be part of my problem?  Where can I get?

                   

                  jboss-as-7.1.0.Final

                  • modules
                    • com
                      • oracle
                        • ojdbc6
                          • main
                            • module.xml
                            • ojdbc6.jar
                            • ojdbc6.jar.index

                   

                  Thanks in advance.

                  • 6. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                    nickarls

                    the .index is generated automatically. Show your module.xml contents

                    • 7. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                      epikninja

                      What process generates the .index?  Below are the contents of my module.xml.

                       

                       

                      <?xml version="1.0" encoding="UTF-8"?>

                      <module xmlns="urn:jboss:module:1.1" name="com.oracle.db">

                        <resources>

                          <resource-root path="ojdbc16.jar"/>

                              <!-- Insert resources here -->

                        </resources>

                        <dependencies>

                          <module name="javax.api"/>

                                <module name="javax.transaction.api"/>

                        </dependencies>

                      </module>

                       

                       

                      I tried following the instructions found in this article, Data Source Configuration in AS 7.


                      • 8. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                        nickarls

                        try name="com.oracle.ojdbc6" and path="ojdbc6.jar" and delete the .index file. It's generated by JBoss Modules at boot time.

                        • 9. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                          epikninja

                          You know, I had actually tried what you said prior to reading your reply.  But after reading your reply and compared with what I had, I noticed a typo in my 'path' value.  I had ojdbc16.jar, where it should have been ojdbc6.jar.  So that got me one step closer.  I got past my previous error but now I'm facing another, which is probably something stupid (on my end).

                           

                           

                           

                          14:39:56,036 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) JBAS010400: Bound data source [java:jboss/datasources/SpringQuickstartDS]

                          14:39:56,112 INFO  [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on /127.0.0.1:9999

                          14:39:56,584 WARN  [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (JCA PoolFiller) IJ000610: Unable to fill pool: javax.resource.ResourceException: Could not create connection

                                    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:277)

                                    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:235)

                                    at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:758) [ironjacamar-core-impl-1.0.7.Final.jar:1.0.7.Final]

                                    at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.fillToMin(SemaphoreArrayListManagedConnectionPool.java:703) [ironjacamar-core-impl-1.0.7.Final.jar:1.0.7.Final]

                                    at org.jboss.jca.core.connectionmanager.pool.mcp.PoolFiller.run(PoolFiller.java:97) [ironjacamar-core-impl-1.0.7.Final.jar:1.0.7.Final]

                                    at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_06]

                          Caused by: java.sql.SQLException: Listener refused the connection with the following error:

                          ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

                           

                           

                           

                          It looks to be complaining about my connection-url, which I don't understand because it's exactly the same as what's in my tnsnames.ora file.  I'm providing the exact SID, host name, and port number.  And my credential are correct.

                           

                          Hmmm...some more head scratching.

                           

                           

                          Thanks for you help so far, Nicklas!

                          • 10. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                            nickarls

                            What format is the url in?

                             

                            Usually the jdbc:oracle:thin:@host:port:sid with separate attrs for user/pw works for me...

                             

                            Message was edited by: Nicklas Karlsson

                            • 11. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                              epikninja

                              Here's an example.  I masked some parts of it.

                               

                              jdbc:oracle:thin:@some.url.com:1521:sid

                              • 12. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                                nickarls

                                and there is no domain name associated with the sid?

                                 

                                I think you *might* also get away by using the complete descriptor as it's entered in the tnsnames.ora but I usually use the standard jdbc url for non-load-balanced DB:s

                                 

                                You might want to start another thread for this...

                                 

                                Message was edited by: Nicklas Karlsson

                                • 13. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                                  epikninja

                                  Not sure what I did but I got past this.  But I'm getting this now.

                                   

                                   

                                  org.jboss.modules.ModuleNotFoundException: Module com.oracle.ojdbc6.main:main is not found in local module loader @70eea883 (roots: C:\Program Files (x86)\jboss-as-7.1.0.Final\modules)

                                   

                                   

                                  Note: it says that my data source is bound, now.  So that's good.

                                  • 14. Re: Oracle xa-datasource java.lang.ClassNotFoundException
                                    epikninja

                                    Yeah, good idea about moving this to another thread.  Do you know if moderators have ability to move posts from one thread to another.  I've been on some forums where this sort of thing was done.

                                    1 2 Previous Next