2015-09-24 23 views
16

बंद कर दिया मैं नवीनतम संस्करण (स्प्रिंग 4.2.x, जेपीए और हाइबरनेट)वापस नहीं किया जा सकता है, कनेक्शन हाल ही में

करने के लिए अपने सभी जार फ़ाइलें अब मैं परीक्षण मामलों के साथ कुछ मुद्दों का सामना करना पड़ रहा उन्नयन किया है। यहां परीक्षण की स्टैकट्रेस है ...

org.springframework.transaction.TransactionSystemException: Could not roll back JPA transaction; nested exception is javax.persistence.PersistenceException: unexpected error when rollbacking 
    at org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:548) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830) 
    at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:125) 
    at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:218) 
    at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:313) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:93) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:86) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:241) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: javax.persistence.PersistenceException: unexpected error when rollbacking 
    at org.hibernate.jpa.internal.TransactionImpl.rollback(TransactionImpl.java:111) 
    at org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:544) 
    ... 25 more 
Caused by: org.hibernate.TransactionException: rollback failed 
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:217) 
    at org.hibernate.jpa.internal.TransactionImpl.rollback(TransactionImpl.java:108) 
    ... 26 more 
Caused by: org.hibernate.TransactionException: unable to rollback against JDBC connection 
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:167) 
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:211) 
    ... 27 more 
Caused by: java.sql.SQLRecoverableException: Closed Connection 
    at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3948) 
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doRollback(JdbcTransaction.java:163) 
    ... 28 more 

यह कहता है कि कनेक्शन बंद है .... और रोलबैक नहीं हो सकता है। हाइबरनेट ऑटो से पूल कनेक्शन कनेक्शन बंद कर देता है? क्या किसी के पास इस बारे में कोई विचार है कि इसका क्या कारण है?

संपादित करें: टेस्ट कोड जोड़ा (परीक्षण बड़ा है अधिक जानकारी की आवश्यकता है मैं फिर से संपादित करेंगे) xml फ़ाइल के लिए

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "testConfig.xml" }) 
@Transactional 
@TransactionConfiguration(transactionManager = "test.txManager", defaultRollback = true) 
public class ControllerTest { 
... logs ... 

    @Autowired 
    private Controller controller; 
    static final String testIdValue = "114294"; 
    ... other decorations... 

    private Request createRequest() throws Exception { 
     Request r = new Request(); 
     r.setTask(true); 
     other set for test values... 
     r.assignTaskList(...); 
     ... 
     return r; 
    } 

    @Test 
    public void assignEndpointsForsSynchTest() throws Exception { 

     Request req = createRequest(); 

     try { 
      Response resp = Controller 
        .assignTask(req); 
      assertTrue(req.SUCCESSFUL); 
     } catch (Exception e) { 
      log.info(e.getMessage()); 
      fail("Unexpected Exception"); 
     } 
    } 

} 

<?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:context="http://www.springframework.org/schema/context" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
        "> 

    <bean id="log4jInitialization" 
     class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
     <property name="targetClass" value="org.springframework.util.Log4jConfigurer" /> 
     <property name="targetMethod" value="initLogging" /> 
     <property name="arguments"> 
      <list> 
       <value>classpath:log4j.properties</value> 
      </list> 
     </property> 
    </bean> 

    <bean id="test.dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     lazy-init="false"> 
     <property name="driverClassName" value="org.h2.Driver" /> 
     <property name="url" 
      value="jdbc:h2:mem:test_mem;DB_CLOSE_DELAY=-1;MODE=ORACLE" /> 
    </bean> 

    <jdbc:initialize-database data-source="test.dataSource"> 
     <jdbc:script location="com/sky/ac/core/engine/comp/schema.sql" /> 
     <jdbc:script location="com/sky/ac/core/engine/comp/test_data.sql" /> 
    </jdbc:initialize-database> 


    <bean id="test.txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="test.entityMgrFactory" /> 
     <property name="jpaDialect"> <!-- to support mixed jpaDAO and jdbcTemplateDAO access --> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
     </property> 
    </bean> 

    <bean id="test.entityMgrFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="paPersistence" /> 
     <property name="packagesToScan"> 
      <list> 
       <value>com.sky.ac.core.lock.data</value> 
       <value>com.sky.ac.core.vs.dao.jpa</value> 
       <value>com.sky.ac.core.sr.data</value> 
       <value>com.sky.ac.core.rule.data</value> 
       <value>com.sky.ac.core.util.data</value> 
       <value>com.sky.ac.core.trace.data</value> 
      </list> 
     </property> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="database" value="ORACLE" /> 
      </bean> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.format_sql">false</prop> 
       <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop> 
       <prop key="hibernate.id.new_generator_mappings">true</prop> 
       <prop key="hibernate.connection.release_mode">after_statement</prop> 
      </props> 
     </property> 
     <property name="dataSource" ref="test.dataSource" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="test.txManager"/> 

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

....bean class defs.... 
+0

क्या आप परीक्षा भी पोस्ट कर सकते हैं? –

+0

मुझे बताएं कि प्रदान करने के लिए अधिक जानकारी की आवश्यकता है या नहीं। मेरा मतलब है कि पिछले संस्करण के साथ मैं वही कोड चलाता हूं, लेकिन यह किसी भी तरह से नए संस्करण में त्रुटियां हैं – logger

+0

आपकी 'test.entityMgrFactory' बीन' jPAVendorAdapter' का उपयोग डेटाबेस संपत्ति के साथ 'ORACLE' पर सेट की जाती है, और आपके 'डेटा स्रोत' प्रॉपर्टी पॉइंट H2 पर 'ORACLE' मोड के साथ डेटा स्रोत। क्या आपने 'ORACLE' मोड को अक्षम करने का प्रयास किया था और 'jpaVendorAdapter' को H2 में बदल दिया था? यह केवल परीक्षण करने के लिए होता है कि क्या होता है। – malaguna

उत्तर

0

वहाँ में एक काफी समान बग था स्प्रिंग 3.2.2 रिलीज (जिरा SPR-10395) हाइबरनेट 4.2 के साथ।

हालांकि, आप एक और वसंत संस्करण का उपयोग करते हैं। यह समस्या हाइबरनेट एंटिटी मैनेजर में प्रतीत होती है। (4.2.5 अंतिम संस्करण में कम से कम)। इस हाइबरनेट डिपेंडेंस (उन्नयन या drowngrade) बदलने के लिए

प्रयास करें:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>4.x.x</version> 
</dependency> 
+0

धन्यवाद लेकिन हम अपने विरासत कोड में maven का उपयोग नहीं करते हैं। यह इस पर लागू नहीं होता है। – logger

+0

भले ही आप मेवेन का उपयोग सॉफ्टवेयर प्रोजेक्ट मैनेजमेंट (मैं आमतौर पर इसका उपयोग नहीं करता) के रूप में नहीं करता, शायद आप इसे मैन्युअल रूप से जांच सकते हैं। असल में मुझे मूल कारण से रूचि है (हाइबरनेट या कुछ और के कारण)। मुझे पोस्ट रखने के लिए धन्यवाद :) –

0

रोल बैक नहीं किया जा सका जेपीए लेनदेन; नेस्टेड अपवाद javax.persistence.PersistenceException: रोलबैकिंग करते समय अप्रत्याशित त्रुटि।

इसका मतलब है कि कुछ डिस्कनेक्शन था।

डिस्कनेक्शन के साथ समस्याओं को ठीक करने और जेपीए डेटाबेस सर्वर पर पुनः कनेक्ट करने में सक्षम बनाने के लिए, application.properties फ़ाइल में गुणों के नीचे होना चाहिए।

spring.datasource.connection-test-query=SELECT 1 
spring.datasource.test-while-idle=true 
spring.datasource.test-on-borrow=true 
spring.datasource.validation-interval=10000 
spring.datasource.log-validation-errors=true 
spring.datasource.validation-query=SELECT 1 
+0

ने इसका प्रयास किया है लेकिन यह जेपीए/एप्लिकेशन गुण नहीं था क्योंकि इससे संबंधित अन्य कोड भी दाओ के लिए हाइबरनेट का उपयोग करता है और कोई समस्या नहीं मिली – logger

1

सर्वर मोड में एच 2 का उपयोग बंद करें, समर्थन @Transactional रोलबैक करने के लिए एम्बेडेड मोड में इसका इस्तेमाल करते हैं।

उपरोक्त अपवाद फेंक दिया गया है क्योंकि सर्वर मोड में एच 2 लेनदेन रोलबैक का समर्थन नहीं कर रहा है, यह डिफ़ॉल्ट रूप से स्वत: प्रतिबद्ध है। एक बार आपकी क्वेरी निष्पादित हो जाने पर, यह स्वतः प्रतिबद्ध है और सत्र बंद है। इसलिए रोलबैक अपवाद का कारण बनता है।

एम्बेडेड मोड में एच 2 का उपयोग करने के लिए, जार को क्लासपाथ में जोड़ें और डेटास्रोत बीन को <jdbc:embedded-database id="dataSource" type="H2" /> द्वारा प्रतिस्थापित करें। आपके मामले में मान id="test.dataSource" होगा।

यहाँ एच 2 में कुछ ज्ञात समस्याओं जब सर्वर मोड में इस्तेमाल कर रहे हैं:

मेरे सिफारिश एक डेटाबेस है कि अच्छी तरह से प्रतिबद्ध के साथ लेनदेन का समर्थन करता है का उपयोग करें और परीक्षण के लिए रोलबैक, उदाहरण के लिए MySQL InnoDB

अगर आप इसे आजमाने के बाद भी अपवाद जारी रखते हैं तो कृपया मुझे बताएं।

संबंधित मुद्दे