java - Oracle BLOB exception during deployment/starting up war on Wildfly8 -


i have following exception during start-up of war java /w spring app

caused by: java.lang.runtimeexception: org.springframework.beans.factory.beancreationexception: error creating bean name 'org.springframework.scheduling.quartz.schedulerfactorybean#0' defined in "/content/service.war/web-inf/classes/meta-inf/spring/applicationcontext-service.xml": invocation of init method failed; nested exception org.quartz.jobpersistenceexception: couldn't retrieve job because blob couldn't deserialized: null [see nested exception: java.io.eofexception]     @ io.undertow.servlet.core.deploymentmanagerimpl.deploy(deploymentmanagerimpl.java:222)     @ org.wildfly.extension.undertow.deployment.undertowdeploymentservice.startcontext(undertowdeploymentservice.java:87)     @ org.wildfly.extension.undertow.deployment.undertowdeploymentservice.start(undertowdeploymentservice.java:72)     @ org.jboss.msc.service.servicecontrollerimpl$starttask.startservice(servicecontrollerimpl.java:1948) [jboss-msc-1.2.2.final.jar:1.2.2.final]     @ org.jboss.msc.service.servicecontrollerimpl$starttask.run(servicecontrollerimpl.java:1881) [jboss-msc-1.2.2.final.jar:1.2.2.final]     ... 3 more caused by: org.springframework.beans.factory.beancreationexception: error creating bean name 'org.springframework.scheduling.quartz.schedulerfactorybean#0' defined in "/content/service.war/web-inf/classes/meta-inf/spring/applicationcontext-service.xml": invocation of init method failed; nested exception org.quartz.jobpersistenceexception: couldn't retrieve job because blob couldn't deserialized: null [see nested exception: java.io.eofexception]     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1512)     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:521)     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:458)     @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:296)     @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:223)     @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:293)     @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:194)     @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:615)     @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:932)     @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:479)     @ org.springframework.web.context.contextloader.configureandrefreshwebapplicationcontext(contextloader.java:410)     @ org.springframework.web.context.contextloader.initwebapplicationcontext(contextloader.java:306)     @ org.springframework.web.context.contextloaderlistener.contextinitialized(contextloaderlistener.java:112)     @ io.undertow.servlet.core.applicationlisteners.contextinitialized(applicationlisteners.java:173)     @ io.undertow.servlet.core.deploymentmanagerimpl.deploy(deploymentmanagerimpl.java:193)     ... 7 more caused by: org.quartz.jobpersistenceexception: couldn't retrieve job because blob couldn't deserialized: null [see nested exception: java.io.eofexception]     @ org.quartz.impl.jdbcjobstore.jobstoresupport.retrievejob(jobstoresupport.java:1421)     @ org.quartz.impl.jdbcjobstore.jobstoresupport$7.execute(jobstoresupport.java:1396)     @ org.quartz.impl.jdbcjobstore.jobstorecmt.executeinlock(jobstorecmt.java:242)     @ org.quartz.impl.jdbcjobstore.jobstoresupport.executewithoutlock(jobstoresupport.java:3693)     @ org.quartz.impl.jdbcjobstore.jobstoresupport.retrievejob(jobstoresupport.java:1393)     @ org.quartz.core.quartzscheduler.getjobdetail(quartzscheduler.java:1431)     @ org.quartz.impl.stdscheduler.getjobdetail(stdscheduler.java:539)     @ org.springframework.scheduling.quartz.scheduleraccessor.jobdetailexists(scheduleraccessor.java:420)     @ org.springframework.scheduling.quartz.scheduleraccessor.addjobtoscheduler(scheduleraccessor.java:338)     @ org.springframework.scheduling.quartz.scheduleraccessor.registerjobsandtriggers(scheduleraccessor.java:281)     @ org.springframework.scheduling.quartz.schedulerfactorybean.afterpropertiesset(schedulerfactorybean.java:508)     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1571)     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1509)     ... 21 more caused by: java.io.eofexception     @ java.io.objectinputstream$peekinputstream.readfully(objectinputstream.java:2328) [rt.jar:1.8.0_45]     @ java.io.objectinputstream$blockdatainputstream.readshort(objectinputstream.java:2797) [rt.jar:1.8.0_45]     @ java.io.objectinputstream.readstreamheader(objectinputstream.java:802) [rt.jar:1.8.0_45]     @ java.io.objectinputstream.<init>(objectinputstream.java:299) [rt.jar:1.8.0_45]     @ org.quartz.impl.jdbcjobstore.oracle.oracledelegate.getobjectfromblob(oracledelegate.java:156)     @ org.quartz.impl.jdbcjobstore.stdjdbcdelegate.selectjobdetail(stdjdbcdelegate.java:904)     @ org.quartz.impl.jdbcjobstore.jobstoresupport.retrievejob(jobstoresupport.java:1404)     ... 33 more 

it deployed on clustered wildfly 8.1.x. application uses quartz ver 1.8.6. spring version 3.2.5. had similar (no eof mentioned) problem on lower enviroment, due lack of jdbc driver configuration.

the quartz configuration similar 1 (http://quartz-scheduler.org/documentation/quartz-2.x/configuration/configjdbcjobstoreclustering), except data source configured on wildfly.

the ds itslef bounds correctly: 2015-09-25 14:57:21,411 info  [org.jboss.as.connector.subsystems.datasources] (msc service thread 1-4) jbas010400: bound data source [java:/quartzds] 

i confused this, because on (mirrored) enviroment works fine.

any clues?

okay, i've manage resolve issuse. turned out problem org.quartz.impl.jdbcjobstore.oracle.oracledelegate , oracle 10.2.x. works fine oracle 11.x. problem jobs in oracle 10.2.x serialized null therefore can't deserialized later, hence above stack trace.

to resolve issue had write own delegate extending oracledelegate , override getobjectfromblob method.

public class customdelegate extends oracledelegate {      public customdelegate(logger logger, string tableprefix, string instanceid) {         super(logger, tableprefix, instanceid);     }      public customdelegate(logger logger, string tableprefix, string instanceid, boolean useproperties) {         super(logger, tableprefix, instanceid, useproperties);     }      protected object getobjectfromblob(resultset rs, string colname)             throws classnotfoundexception, ioexception, sqlexception {         byte[] data = rs.getbytes(colname);         if (data == null || data.length == 0) {             return null;         }         objectinputstream in = new objectinputstream(new bytearrayinputstream(data));         try {             return in.readobject();         } {             in.close();         }     } } 

then had change quartz properties

org.quartz.jobstore.driverdelegateclass = my.package.customdelegate 

now works fine.


Comments