2 Replies Latest reply on May 5, 2016 7:10 AM by deryaaltuntas

    quartz 2.2.1+jboss EAP 6.4 ClassNotFoundException oracle.sql.BLOB

    amr.abd-el-ghaffar

      I'm trying to build a quartz scheduler ejb app and have it deployed on JBOSS EAP 6.4. Additionally, I'm trying to do so using quartz JDBC jobstore using an Oracle 11g database.

      Now, the problem is that whenever I try to schedule a job, I get this exception :

       

      18:45:01,024 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 50) MSC000001: Failed to start service jboss.deployment.unit."com.hp.heimdall.jar".component.QuartzBootstraper.START: org.jboss.msc.service.StartException in service jboss.deployment.unit."com.hp.heimdall.jar".component.QuartzBootstraper.START: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance
        at org
      .jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
        at java
      .util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_40]
        at java
      .util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_40]
        at java
      .util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_40]
        at java
      .util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_40]
        at java
      .lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_40]
        at org
      .jboss.threads.JBossThread.run(JBossThread.java:122)
      Caused by: java.lang.IllegalStateException: JBAS011048: Failed to construct component instance
        at org
      .jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:164) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
        at org
      .jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:135) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
        at org
      .jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:90) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
        at org
      .jboss.as.ejb3.component.singleton.SingletonComponent.getComponentInstance(SingletonComponent.java:122)
        at org
      .jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:137)
        at org
      .jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
       
      ... 6 more


      Caused by: javax.ejb.EJBException: JBAS014580: Unexpected Error
        at org
      .jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:188)
        at org
      .jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:282)
        at org
      .jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:367)
        at org
      .jboss.as.ejb3.tx.LifecycleCMTTxInterceptor.processInvocation(LifecycleCMTTxInterceptor.java:66)
        at org
      .jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
        at org
      .jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:70) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:162) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
       
      ... 11 more


      Caused by: java.lang.NoClassDefFoundError: oracle/sql/BLOB
        at org
      .quartz.impl.jdbcjobstore.oracle.OracleDelegate.writeDataToBlob(OracleDelegate.java:592)
        at org
      .quartz.impl.jdbcjobstore.oracle.OracleDelegate.insertJobDetail(OracleDelegate.java:183)
        at org
      .quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1112)
        at org
      .quartz.impl.jdbcjobstore.JobStoreSupport$2.executeVoid(JobStoreSupport.java:1062)
        at org
      .quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3703)
        at org
      .quartz.impl.jdbcjobstore.JobStoreSupport$VoidTransactionCallback.execute(JobStoreSupport.java:3701)
        at org
      .quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3787)
        at org
      .quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java:93)
        at org
      .quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1058)
        at org
      .quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:886)
        at org
      .quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)
        at
      Quartz_POC.com.hp.heimdall.QuartzAvailabilityTest.runTest(QuartzAvailabilityTest.java:69)
        at
      Quartz_POC.com.hp.heimdall.QuartzBootstraper.init(QuartzBootstraper.java:22)
        at sun
      .reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_40]
        at sun
      .reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_40]
        at sun
      .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_40]
        at java
      .lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_40]
        at org
      .jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(ManagedReferenceLifecycleMethodInterceptor.java:96) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
        at org
      .jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.as.ee.component.ComponentInstantiatorInterceptor.processInvocation(ComponentInstantiatorInterceptor.java:76) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
        at org
      .jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
        at org
      .jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
        at org
      .jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:280)
       
      ... 20 more


      Caused by: java.lang.ClassNotFoundException: oracle.sql.BLOB from [Module "org.quartz:main" from local module loader @9e89d68 (finder: local module finder @3b192d32 (roots: C:\Users\abdelgam\EAP-6.4.0\modules,C:\Users\abdelgam\EAP-6.4.0\modules\system\layers\base))]
        at org
      .jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.6.Final-redhat-1]
        at org
      .jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.6.Final-redhat-1]
        at org
      .jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules.jar:1.3.6.Final-redhat-1]
        at org
      .jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.6.Final-redhat-1]
        at org
      .jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.6.Final-redhat-1]
       
      ... 48 more

       

       

      Configurations

      Installed Modules


      In my JBOSS_HOME/modules I installed the following modules:

      1. quartz 2.2.1 module.xml :
      
      <?xml version="1.0" ?>
      <module xmlns="urn:jboss:module:1.1" name="org.quartz">
          <resources>
              <resource-root path="quartz-2.2.1.jar"/>
          </resources>
          <dependencies>
              <module name="javax.api"/>
              <module name="org.slf4j"/>
              <module name="com.c3p0"/>
          </dependencies>
      </module>
      
      
      
      

       



       

      1. oracle jdbc driver module.xml:
      <?xml version="1.0" ?>
      <module xmlns="urn:jboss:module:1.1" name="com.oracle">
          <resources>
              <resource-root path="ojdbc6.jar"/>
          </resources>
          <dependencies>
              <module name="javax.api"/>
              <module name="javax.transaction.api"/>
          </dependencies>
      </module>
      
      
      

       

       

      1. c3p0 module.xml:
      <module xmlns="urn:jboss:module:1.1" name="com.c3p0">
          <resources>
              <resource-root path="c3p0-0.9.1.1.jar"/>
              <resource-root path="c3p0-0.9.1.1-jdk1.3.jar"/>
              <resource-root path="c3p0-oracle-thin-extras-0.9.1.1.jar"/>
          </resources>
          <dependencies>
              <module name="javax.api"/>
              <module name="javax.transaction.api"/>
          </dependencies>
      </module>
      
      
      

       

      quartz.properties


      # Default Properties file for use by StdSchedulerFactory

      # to create a Quartz Scheduler Instance, if a different

      # properties file is not explicitly specified.

      #

       

       

      org.quartz.scheduler.instanceName: DefaultQuartzScheduler

      org.quartz.scheduler.rmi.export: false

      org.quartz.scheduler.rmi.proxy: false

      org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

       

       

      org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool

      org.quartz.threadPool.threadCount: 10

      org.quartz.threadPool.threadPriority: 5

      org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

       

       

      #============================================================================

      # Configure JdbcJobStore

      #============================================================================

       

       

      org.quartz.jobStore.misfireThreshold = 60000

      #

      org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX

      org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate

      org.quartz.jobStore.useProperties=false

      org.quartz.jobStore.dataSource=quartzDS

      org.quartz.jobStore.tablePrefix=QRTZ_

      org.quartz.jobStore.isClustered=false

       

       

      #============================================================================

      # Configure Datasources

      #============================================================================

       

       

       

       

      org.quartz.dataSource.quartzDS.jndiURL=java:jboss/datasources/quartzDS

       

      jboss-deployment-structure.xml


      <jboss-deployment-structure>
      
      
        <deployment>
      
      
        <dependencies>
        <module name="org.quartz" export="TRUE" />
        <module name="com.c3p0" export="TRUE">
        <imports>
        <include path="com**" />
        </imports>
        </module>
        </dependencies>
      
      
        </deployment>
      
      
      </jboss-deployment-structure>
      
      
      

       

      pom.xml

       

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
      
      
        <groupId>Quartz-POC</groupId>
        <artifactId>com.hp.heimdall</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>ejb</packaging>
      
      
        <name>com.hp.heimdall</name>
      
      
        <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
      
      
        <dependencies>
        <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
        </dependency>
        <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
        </dependency>
        </dependencies>
      
      
        <build>
        <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <compilerArguments>
        <endorseddirs>${endorsed.dir}</endorseddirs>
        </compilerArguments>
        </configuration>
        </plugin>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ejb-plugin</artifactId>
        <version>2.3</version>
        <configuration>
        <archive>
        <manifestEntries>
        <Dependencies>org.quartz export, com.c3p0 export, com.oracle export</Dependencies>
        </manifestEntries>
        </archive>
        <ejbVersion>3.1</ejbVersion>
        </configuration>
        </plugin>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.6</version>
        <executions>
        <execution>
        <phase>validate</phase>
        <goals>
        <goal>copy</goal>
        </goals>
        <configuration>
        <outputDirectory>${endorsed.dir}</outputDirectory>
        <silent>true</silent>
        <artifactItems>
        <artifactItem>
        <groupId>javax</groupId>
        <artifactId>javaee-endorsed-api</artifactId>
        <version>7.0</version>
        <type>jar</type>
        </artifactItem>
        </artifactItems>
        </configuration>
        </execution>
        </executions>
        </plugin>
        </plugins>
        </build>
      
      
      </project>
      
      
      

       

      Server Config "standalone.xml"

      Datasource

       

      <datasource jta="true" jndi-name="java:jboss/datasources/quartzDS" pool-name="quartzDS" enabled="true" use-java-context="true" use-ccm="true">
                          <connection-url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</connection-url>
                          <driver-class>oracle.jdbc.OracleDriver</driver-class>
                          <driver>OracleJDBCDriver</driver>
                          <security>
                              <user-name>quartz_user</user-name>
                              <password>quartz_user</password>
                          </security>
                          <validation>
                              <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                              <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>
                          <timeout>
                              <set-tx-query-timeout>false</set-tx-query-timeout>
                              <blocking-timeout-millis>0</blocking-timeout-millis>
                              <idle-timeout-minutes>0</idle-timeout-minutes>
                              <query-timeout>0</query-timeout>
                              <use-try-lock>0</use-try-lock>
                              <allocation-retry>0</allocation-retry>
                              <allocation-retry-wait-millis>0</allocation-retry-wait-millis>
                          </timeout>
                          <statement>
                              <share-prepared-statements>false</share-prepared-statements>
                          </statement>
                      </datasource>
      
      
      

       

      Driver

      <drivers>
                          <driver name="OracleJDBCDriver" module="com.oracle">
                              <xa-datasource-class>oracle.jdbc.xa.OracleXADataSource</xa-datasource-class>
                          </driver>
                          <driver name="h2" module="com.h2database.h2">
                              <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                          </driver>
                      </drivers>