java - Spring batch throws exception upgrading to 3.0.0.RELEASE from 2.1.8.RELEASE -
greetings , happy friday: below issue bothering me on verge of weekend... seems version related spring batch programs failing after pushed in changes branch spring version 3.0.0.release , respective schema changes. better readability on drive.
old working configuration
--- pom.xml ---
<spring.version>4.0.3.release</spring.version> <spring.integration.version>4.0.0.release</spring.integration.version> <spring-security.version>3.1.0.release</spring-security.version> <spring.batch.version>2.1.8.release</spring.batch.version> --- job.xml ---
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:batch="http://www.springframework.org/schema/batch" xsi:schemalocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <import resource="batch-jobs.xml"/> <batch:job id="responsefilereaderjob"> <batch:step id="dailyrrjob"> <batch:tasklet> <batch:chunk reader="dailyrrreader" writer="dailyrrcrdbwriter" processor="itemprocessor" commit-interval="10"/> </batch:tasklet> </batch:step> </batch:job> </beans> new configuration fails
--- pom.xml ---
<spring.version>4.0.3.release</spring.version> <spring.integration.version>4.0.0.release</spring.integration.version> <spring-security.version>3.1.0.release</spring-security.version> <spring.batch.version>3.0.0.release</spring.batch.version> --- job.xml ---
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:batch="http://www.springframework.org/schema/batch" xsi:schemalocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <import resource="batch-jobs.xml"/> <batch:job id="responsefilereaderjob"> <batch:step id="dailyrrjob"> <batch:tasklet> <batch:chunk reader="dailyrrreader" writer="dailyrrcrdbwriter" processor="itemprocessor" commit-interval="10"/> </batch:tasklet> </batch:step> </batch:job> </beans> --- batch-job.xml ---
<?xml version="1.0" encoding="utf-8" standalone="no"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <!-- configuration load joblaunchertestutils --> <bean class="org.springframework.batch.test.joblaunchertestutils"/> <tx:annotation-driven mode="aspectj" transaction-manager="transactionmanager" /> <bean id="jdbctemplate" class="org.springframework.jdbc.core.jdbctemplate"> <property name="datasource" ref="datasource" /> </bean> <bean id="jobrepository" class="org.springframework.batch.core.repository.support.mapjobrepositoryfactorybean"> <property name="isolationlevelforcreate" value="isolation_default"/> <property name="transactionmanager" ref="transactionmanager" /> </bean> <bean id="joblauncher" class="org.springframework.batch.core.launch.support.simplejoblauncher"> <property name="jobrepository" ref="jobrepository" /> </bean> </beans> test class:
package com.chofac.mint.batch; import org.apache.log4j.logger; import org.junit.ignore; import org.junit.test; import org.junit.runner.runwith; import org.springframework.batch.core.job; import org.springframework.batch.core.jobexecution; import org.springframework.batch.core.jobparameters; import org.springframework.batch.core.launch.joblauncher; import org.springframework.beans.factory.annotation.autowired; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; import org.springframework.test.context.contextconfiguration; import org.springframework.test.context.contextconfigurationattributes; import org.springframework.test.context.junit4.springjunit4classrunner; import org.springframework.util.stopwatch; @contextconfiguration(locations = {"classpath:meta-inf/spring/applicationcontext.xml","classpath:meta-inf/spring/mexresponsejob.xml"}) @runwith(springjunit4classrunner.class) public class mexresponsereaderjobtest { private final static logger logger = logger.getlogger(mexresponsereaderjobtest.class); @autowired private joblauncher launcher; @autowired private job job; private jobparameters jobparameters = new jobparameters(); //@ignore @test public void testdbtoflatfilejob() throws exception { stopwatch sw = new stopwatch(); sw.start(); jobexecution execution =launcher.run(job, jobparameters); logger.info("exit status : " + execution.getstatus()); sw.stop(); logger.info(">>> time elapsed:" + sw.prettyprint()); } } partial error log:
2014-06-27 17:39:04,093 [main] debug org.springframework.beans.factory.support.defaultlistablebeanfactory - retrieved dependent beans bean 'org.springframework.batch.item.database.beanpropertyitemsqlparametersourceprovider#773c550f': [dailyregistryrejectcardrefresherdbwriter] 2014-06-27 17:39:04,094 [main] debug org.springframework.beans.factory.support.disposablebeanadapter - invoking destroy() on bean name 'appconfig' 2014-06-27 17:39:04,094 [main] debug org.springframework.beans.factory.support.disposablebeanadapter - invoking destroy method 'close' on bean name 'rldatasource' 2014-06-27 17:39:04,094 [main] debug org.springframework.beans.factory.support.disposablebeanadapter - invoking destroy() on bean name 'entitymanagerfactory' 2014-06-27 17:39:04,094 [main] info org.springframework.orm.jpa.localcontainerentitymanagerfactorybean - closing jpa entitymanagerfactory persistence unit 'persistenceunit' 2014-06-27 17:39:04,094 [main] info org.hibernate.impl.sessionfactoryimpl - closing 2014-06-27 17:39:04,095 [main] debug org.springframework.beans.factory.support.disposablebeanadapter - invoking destroy method 'close' on bean name 'datasource' 2014-06-27 17:39:04,095 [main] debug org.springframework.beans.factory.support.disposablebeanadapter - invoking destroy() on bean name 'org.springframework.batch.core.configuration.annotation.stepscopeconfiguration' 2014-06-27 17:39:04,095 [main] error org.springframework.test.context.testcontextmanager - caught exception while allowing testexecutionlistener [org.springframework.test.context.support.dependencyinjectiontestexecutionlistener@778b3fee] prepare test instance [com.chofac.mint.batch.mexresponsereaderjobtest@7786df0f] java.lang.illegalstateexception: failed load applicationcontext @ org.springframework.test.context.cacheawarecontextloaderdelegate.loadcontext(cacheawarecontextloaderdelegate.java:99) @ org.springframework.test.context.defaulttestcontext.getapplicationcontext(defaulttestcontext.java:101) @ org.springframework.test.context.support.dependencyinjectiontestexecutionlistener.injectdependencies(dependencyinjectiontestexecutionlistener.java:109) @ org.springframework.test.context.support.dependencyinjectiontestexecutionlistener.preparetestinstance(dependencyinjectiontestexecutionlistener.java:75) @ org.springframework.test.context.testcontextmanager.preparetestinstance(testcontextmanager.java:319) @ org.springframework.test.context.junit4.springjunit4classrunner.createtest(springjunit4classrunner.java:212) @ org.springframework.test.context.junit4.springjunit4classrunner$1.runreflectivecall(springjunit4classrunner.java:289) @ org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:15) @ org.springframework.test.context.junit4.springjunit4classrunner.methodblock(springjunit4classrunner.java:291) @ org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:232) @ org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:89) @ org.junit.runners.parentrunner$3.run(parentrunner.java:231) @ org.junit.runners.parentrunner$1.schedule(parentrunner.java:60) @ org.junit.runners.parentrunner.runchildren(parentrunner.java:229) @ org.junit.runners.parentrunner.access$000(parentrunner.java:50) @ org.junit.runners.parentrunner$2.evaluate(parentrunner.java:222) @ org.springframework.test.context.junit4.statements.runbeforetestclasscallbacks.evaluate(runbeforetestclasscallbacks.java:61) @ org.springframework.test.context.junit4.statements.runaftertestclasscallbacks.evaluate(runaftertestclasscallbacks.java:71) @ org.junit.runners.parentrunner.run(parentrunner.java:300) @ org.springframework.test.context.junit4.springjunit4classrunner.run(springjunit4classrunner.java:175) @ org.eclipse.jdt.internal.junit4.runner.junit4testreference.run(junit4testreference.java:50) @ org.eclipse.jdt.internal.junit.runner.testexecution.run(testexecution.java:38) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:467) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:683) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.run(remotetestrunner.java:390) @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:197) caused by: org.springframework.beans.factory.beancreationexception: error creating bean name 'jobbuilders' defined in class path resource [org/springframework/batch/core/configuration/annotation/simplebatchconfiguration.class]: instantiation of bean failed; nested exception org.springframework.beans.factory.beandefinitionstoreexception: factory method [public org.springframework.batch.core.configuration.annotation.jobbuilderfactory org.springframework.batch.core.configuration.annotation.abstractbatchconfiguration.jobbuilders() throws java.lang.exception] threw exception; nested exception java.lang.classcastexception: org.springframework.batch.core.repository.support.mapjobrepositoryfactorybean$$enhancerbyspringcglib$$b02b9c89 cannot cast org.springframework.batch.core.repository.jobrepository @ org.springframework.beans.factory.support.constructorresolver.instantiateusingfactorymethod(constructorresolver.java:597) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.instantiateusingfactorymethod(abstractautowirecapablebeanfactory.java:1094) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbeaninstance(abstractautowirecapablebeanfactory.java:989) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:504) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:475) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:304) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:228) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:300) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:195) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:703) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:760) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:482) @ org.springframework.test.context.support.abstractgenericcontextloader.loadcontext(abstractgenericcontextloader.java:121) @ org.springframework.test.context.support.abstractgenericcontextloader.loadcontext(abstractgenericcontextloader.java:60) @ org.springframework.test.context.support.abstractdelegatingsmartcontextloader.delegateloading(abstractdelegatingsmartcontextloader.java:100) @ org.springframework.test.context.support.abstractdelegatingsmartcontextloader.loadcontext(abstractdelegatingsmartcontextloader.java:250) @ org.springframework.test.context.cacheawarecontextloaderdelegate.loadcontextinternal(cacheawarecontextloaderdelegate.java:64) @ org.springframework.test.context.cacheawarecontextloaderdelegate.loadcontext(cacheawarecontextloaderdelegate.java:91) ... 25 more caused by: org.springframework.beans.factory.beandefinitionstoreexception: factory method [public org.springframework.batch.core.configuration.annotation.jobbuilderfactory org.springframework.batch.core.configuration.annotation.abstractbatchconfiguration.jobbuilders() throws java.lang.exception] threw exception; nested exception java.lang.classcastexception: org.springframework.batch.core.repository.support.mapjobrepositoryfactorybean$$enhancerbyspringcglib$$b02b9c89 cannot cast org.springframework.batch.core.repository.jobrepository @ org.springframework.beans.factory.support.simpleinstantiationstrategy.instantiate(simpleinstantiationstrategy.java:188) @ org.springframework.beans.factory.support.constructorresolver.instantiateusingfactorymethod(constructorresolver.java:586) ... 42 more caused by: java.lang.classcastexception: org.springframework.batch.core.repository.support.mapjobrepositoryfactorybean$$enhancerbyspringcglib$$b02b9c89 cannot cast org.springframework.batch.core.repository.jobrepository @ org.springframework.batch.core.configuration.annotation.simplebatchconfiguration$$enhancerbyspringcglib$$54bada31.jobrepository(<generated>) @ org.springframework.batch.core.configuration.annotation.abstractbatchconfiguration.jobbuilders(abstractbatchconfiguration.java:59) @ org.springframework.batch.core.configuration.annotation.simplebatchconfiguration$$enhancerbyspringcglib$$54bada31.cglib$jobbuilders$7(<generated>) @ org.springframework.batch.core.configuration.annotation.simplebatchconfiguration$$enhancerbyspringcglib$$54bada31$$fastclassbyspringcglib$$61b95431.invoke(<generated>) @ org.springframework.cglib.proxy.methodproxy.invokesuper(methodproxy.java:228) @ org.springframework.context.annotation.configurationclassenhancer$beanmethodinterceptor.intercept(configurationclassenhancer.java:312) @ org.springframework.batch.core.configuration.annotation.simplebatchconfiguration$$enhancerbyspringcglib$$54bada31.jobbuilders(<generated>) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) @ java.lang.reflect.method.invoke(method.java:597) @ org.springframework.beans.factory.support.simpleinstantiationstrategy.instantiate(simpleinstantiationstrategy.java:166) ... 43 more 2014-06-27 17:39:04,106 [main] debug org.springframework.test.context.support.dirtiescontexttestexecutionlistener - after test class: context [defaulttestcontext@1f25fefa testclass = mexresponsereaderjobtest, testinstance = [null], testmethod = [null], testexception = [null], mergedcontextconfiguration = [mergedcontextconfiguration@379e8f17 testclass = mexresponsereaderjobtest, locations = '{classpath:meta-inf/spring/applicationcontext.xml, classpath:meta-inf/spring/mexresponsejob.xml}', classes = '{}', contextinitializerclasses = '[]', activeprofiles = '{}', contextloader = 'org.springframework.test.context.support.delegatingsmartcontextloader', parent = [null]]], dirtiescontext [false]. tried solution mentioned here seems similar , invoking class below, same error.
public class mexrequestgeneratorjobtest { public static void main(string[] args) { configurableapplicationcontext context = new classpathxmlapplicationcontext("classpath:meta-inf/spring/applicationcontext.xml","classpath:meta-inf/spring/mexrequestjob.xml"); job job = (job) context.getbean("jobprocessor"); joblauncher launcher = (joblauncher) context.getbean("mexdb2filejob"); try{ jobexecution jobexecution = launcher.run(job, new jobparameters()); }catch(exception e){} } } could please provide me clue way fix issue. in advance.
perhaps simplebatchconfiguration instantiating jobrepository or associated elements, try taking them out of context.
Comments
Post a Comment