0

i'm trying to deploy a spring batch application on Resin 2.1 with java 5 but i cannot figure out this exception.

The problem seems to be related to conflicting libraries, because JobRepository has always null transaction-manager attribute (even if I set this attribute and even if I give a beanName to the transactionManager)

I'm using spring (3.2.3) spring-batch(2.1.0) spring-integration(2.1.6) and spring-batch-integration (1.2.0). I'm trying to debug the framework but still not understand which is the problem.

Here is the stackTrace

09:57:47.567 [tcpConnection-8080-0] ERROR o.s.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [jobs/jobLauncherConfiguration.xml]
Offending resource: class path resource [application-context.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [jobs/jobLauncherConfiguration.xml]; nested exception is java.lang.IllegalArgumentException: 'beanName' must not be empty
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:272) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:197) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:182) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) ~[na:3.2.3.RELEASE]
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) ~[na:3.2.3.RELEASE]
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) ~[na:3.2.3.RELEASE]
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) ~[na:3.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537) ~[na:3.2.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451) ~[na:3.2.3.RELEASE]
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) ~[na:3.2.3.RELEASE]
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) ~[na:3.2.3.RELEASE]
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) [na:3.2.3.RELEASE]
    at com.caucho.server.http.Application.init(Application.java:1845) [resin.jar:na]
    at com.caucho.server.http.VirtualHost.startApplication(VirtualHost.java:1207) [resin.jar:na]
    at com.caucho.server.http.VirtualHost.getInvocation(VirtualHost.java:1007) [resin.jar:na]
    at com.caucho.server.http.ServletServer.getInvocation(ServletServer.java:1253) [resin.jar:na]
    at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:250) [resin.jar:na]
    at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:170) [resin.jar:na]
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139) [resin.jar:na]
    at java.lang.Thread.run(Thread.java:595) [na:1.5.0_15]
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [jobs/jobLauncherConfiguration.xml]; nested exception is java.lang.IllegalArgumentException: 'beanName' must not be empty
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:256) ~[na:3.2.3.RELEASE]
    ... 27 common frames omitted
Caused by: java.lang.IllegalArgumentException: 'beanName' must not be empty
    at org.springframework.util.Assert.hasText(Assert.java:162) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:58) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.config.RuntimeBeanReference.<init>(RuntimeBeanReference.java:46) ~[na:3.2.3.RELEASE]
    at org.springframework.batch.core.configuration.xml.JobRepositoryParser.doParse(JobRepositoryParser.java:65) ~[na:na]
    at org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parseInternal(AbstractSingleBeanDefinitionParser.java:85) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:59) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:185) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493) ~[na:3.2.3.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390) ~[na:3.2.3.RELEASE]
    ... 30 common frames omitted

And the configuration for job repository and transaction manager

<batch:job-repository id="jobRepository"
                          data-source="dataSourceSRS" isolation-level-for-create="READ_COMMITTED"
                          />



    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSourceSRS"/>
    </bean>

I tried also excluding Spring batch integration from the pom (and of course not using its feature) but still recieving the same exception.

Here is the web.xml with the listener for context loading

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

Any idea?

Thanks to all

EDIT

here is application-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <bean id="configurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/job-config.properties</value>
                <value>classpath:/dataSources.properties</value>
                <value>classpath:/queries.properties</value>
                <value>file:${resin.home}/properties/job-config.properties</value>
                <value>file:${resin.home}/properties/dataSources.properties</value>
                <value>file:${resin.home}/properties/jobScheduler.properties</value>
                <value>file:${resin.home}/properties/queries.properties</value>
            </list>
        </property>
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="true"/>
    </bean>

    <context:component-scan base-package="com.mybatch.integration"/>

    <import resource="jobs/jobLauncherConfiguration.xml"/>

</beans>

and jobLauncherConfiguration.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:int="http://www.springframework.org/schema/integration"
       xmlns:int-http="http://www.springframework.org/schema/integration/http"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:batch="http://www.springframework.org/schema/batch"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                           http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.1.xsd
                           http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http-2.1.xsd
                           http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd">



    <batch:job-repository id="jobRepository"
                          data-source="dataSourceSRS" isolation-level-for-create="READ_COMMITTED"
                          />



    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSourceSRS"/>
    </bean>



    <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
        <property name="jobRepository" ref="jobRepository"/>
    </bean>

    <int-http:inbound-gateway id="inboundGateway" request-channel="httpGetChannel" reply-channel="responseChannel"
                              supported-methods="GET" path="/loadFromRDB"/>

    <int:channel id="responseChannel"/>


    <int:service-activator id="activator" input-channel="httpGetChannel" method="startJob"
                           ref="jobLauncherController" output-channel="responseChannel"/>

    <bean id="srsSomJobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry"/>

    <bean id="srsSomJobExplorer" class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
        <property name="dataSource" ref="dataSourceSRS" />
    </bean>

    <bean id="srsSomJobOperator" class="org.springframework.batch.core.launch.support.SimpleJobOperator">
        <property name="jobExplorer" ref="srsSomJobExplorer"/>
        <property name="jobRepository" ref="jobRepository" />
        <property name="jobRegistry" ref="srsSomJobRegistry" />
        <property name="jobLauncher" ref="jobLauncher" />
    </bean>


    <import resource="configurations/dataSources.xml"/>

    <import resource="jobsConfigurations/srsSomJobManager.xml"/>


</beans>
Raffaele
  • 461
  • 1
  • 7
  • 20
  • Can you provide the content of this two files `jobs/jobLauncherConfiguration.xml` and `application-context.xml`? – GUISSOUMA Issam Sep 18 '15 at 08:19
  • Thanks for your help. I added the required files. – Raffaele Sep 18 '15 at 08:26
  • For the moment I solved by changing the jobRepository definition without using spring-batch namespaces but still don't know why this exception is thrown. – Raffaele Sep 18 '15 at 09:05
  • It's difficult to figure out the problem, you have to debug the project why beanName is empty. – GUISSOUMA Issam Sep 18 '15 at 09:12
  • Apart from DataSource you **haven't provided transactionManager** in **job-repository** element, pls try to add that & test :- – Avis Sep 18 '15 at 10:33
  • I tried addying explicit transactionManager but it doesn't work. The transactionManager is still null when the bean is initialized. It's like spring-batch bean parser (in particular case jobRepositoryParser) cannot read the attribute in a proper way, in fact debugging the code the bean property are filled, also the transactionManager is filled but the name is always "" so this exception is thrown...I still cannot understand why this attribute is never filled in the proper way – Raffaele Sep 18 '15 at 12:23

0 Answers0