Your browser was unable to load all of the resources. They may have been blocked by your firewall, proxy or browser configuration.
Press Ctrl+F5 or Ctrl+Shift+R to have your browser try again.

Quickbuild JAR produces NPE but standard maven build works #3237

rgill ·
I have an issue where QuickBuild builds a JAR (Spring Batch), and when the JAR is executed there is a NullPointerException when creating my second entityManager bean (I have 2 dataSources, entityManger, transactionManager).

QuickBuild is pointing to a repository in Stash (Git).

Now this would seem like a Spring / configuration issue, but the issue ONLY happens when using a QuickBuild JAR.

When I build the same project in Linux or Windows with the same Maven version as QuickBuild (3.2.5) this Spring Batch JAR works perfectly.

If I take the QuickBuild JAR (one with NPE), add a blank file to the JAR and resave JAR (on Windows), the newly saved JAR works fine.

How can:

1. Building the JAR from the same Stash repository work in a standalone maven environment (Windows and Linux) but QuickBuild one produces an exception
2. Why would taking the QuickBuild JAR adding a blank file and using that resaved JAR now work?

applicationContext.xml

    <bean id="dataSourceElite" factory-bean="serviceLocator" factory-method="getDataSource">  
<constructor-arg value="OMDB" />
</bean>

<bean id="dataSource" factory-bean="serviceLocator" factory-method="getDataSource">
<constructor-arg value="SPUIDB" />
</bean>

<bean id="entityManagerFactoryElite" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
</bean>
</property>
<property name="dataSource" ref="dataSourceElite" />
<property name="persistenceUnitName" value="elite" />
<property name="jpaDialect">
<bean class="com.loyalty.oms.ssui.bo.utils.HibernateExtendedJpaDialect" />
</property>
</bean>

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- Specific properties for Hibernate are in persistence.xml file, but
also can be placed here and removed from persistence.xml file. -->
</bean>
</property>
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="spui" />
<property name="jpaDialect">
<bean class="com.loyalty.oms.ssui.bo.utils.HibernateExtendedJpaDialect" />
</property>
</bean>

<bean id="jpaTemplateElite" class="org.springframework.orm.jpa.JpaTemplate">
<property name="entityManagerFactory" ref="entityManagerFactoryElite" />
</bean>

<bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean id="dataProvider" class="com.loyalty.oms.ssui.dao.GenericDaoJpa" />

<bean id="dataProviderElite" class="com.loyalty.oms.ssui.dao.GenericDaoJpaElite" />

<bean name="transactionManagerElite" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryElite" />
<qualifier value="elite"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManagerElite" />

<bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<qualifier value="spui"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />


persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<!--added for Elite (ITEM_W_P) -->
<persistence-unit name="elite" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<mapping-file>META-INF/persistence-query.xml</mapping-file>
<class><My particular class></class>
<properties>
</properties>
</persistence-unit>

<persistence-unit name="spui" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<mapping-file>META-INF/persistence-query.xml</mapping-file>
<class><My particular classes></class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
</properties>

</persistence-unit>

</persistence>



Stacktrace:
ERROR 2015-05-20 17:26:32 [ main] CommandLineJobRunner | Job Terminated in error: Error creating bean with name 'entityManagerFactoryElite' defined in class path resource [META-INF/spring/batch/override/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactoryElite' defined in class path resource [META-INF/spring/batch/override/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:282)
at org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:574)
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:135)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1136)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1121)
at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1233)
at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:154)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:869)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:407)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:126)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:257)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 13 more
  • replies 1
  • views 1919
  • stars 0
robinshen ADMIN ·
I guess this is more of an environmental issue. Please run QB agent or server (whatever runs your maven build command) in console mode where you can run standalone maven successfully, and try the build again to see if it works.