0

I have a Java Batch Program which is triggered from a BPEL process used for inserting set of Record into DB.

Size of record might vary but at an average around 20,000 to 40,000.

My custom java batch picks up the data from an excel uploaded from a third party app into server location.

For performing the DML operation I have gone with Hibernate/Spring JDBC framework.

Refer to my spring configuration file as below::

<context:component-scan base-package="mybasepackage" />

<bean id="myProps"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath*:myDB.properties</value>
        </list>
    </property>
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${DB_DRIVER}" />
    <property name="url" value="${DB_URL}" />
    <property name="username" value="${DB_USER}" />
    <property name="password" value="${DB_PASSWORD}" />
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="mypackage" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.jdbc.batch_size">20</prop>
            <prop key="hibernate.c3p0.min_size">5</prop>
            <prop key="hibernate.c3p0.max_size">10</prop>
            <prop key="hibernate.c3p0.max_size">7000</prop>
        </props>
    </property>
</bean>

<bean id="myBatchDao"
    class="mypackage.MyBatchDaoImpl">
    <property name="jdbcTemplate" ref="jdbcTemplate" />
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="myBatchService"
    class="mypackage.MyBatchServiceImpl">
    <property name="myBatchDao" ref="myBatchDao" />
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

   <tx:annotation-driven transaction-manager="transactionManager" />

I am already using c3p0 for ConnectionPooling and also visited the following links:

link1 link2

But still I am getting following exception::

<org.hibernate.engine.jdbc.spi.SqlExceptionHelper> <BEA-000000> <IO Error: Got minus one from a read call, connect lapse 6370 ms., Authentication lapse 0 ms.>
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction;nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
at org.springframework.orm.hibernate5.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:564)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) 
Sumit Ghosh
  • 484
  • 4
  • 13
  • 36
  • 1
    I see no good reason to use JPA/Hibernate. I'm guessing your batch job is reading a single worksheet and writing to a single table. Simple. Straight JDBC is sufficient. – duffymo Jan 22 '19 at 15:51
  • No multiple tables are involved.I prefer to go with spring orm since framework will maintain the transaction and connection closing – Sumit Ghosh Jan 22 '19 at 15:53
  • I love Spring too, but I'd suggest sticking with JDBC template. You don't need all that machinery. – duffymo Jan 22 '19 at 16:33
  • Do you have any answer to this question??JdbcTemplate is not the solution of the problem – Sumit Ghosh Jan 24 '19 at 05:17
  • Can’t acquire connection. I’d start stripping things out and making it simpler. I can’t tell from what you’ve posted if the driver JAR is in the classpath, the driver and URL are right, etc. Do the simple thing and build from there. – duffymo Jan 24 '19 at 11:14

0 Answers0