2012-05-23 20 views
21

मैं इकाई प्रबंधकों के साथ दो लगातार इकाइयों कॉन्फ़िगर किया है नीचे शो के रूप में स्थापित:कोई सेम 'transactionManager' नाम परिभाषित किया गया है

<bean id="liveEntityManagerFactory" 
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
      p:dataSource-ref="LiveDataSource">   

      <property name="persistenceUnitName" value="LivePersistenceUnit" /> 
    </bean> 

    <bean id="archiveEntityManagerFactory" 
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
      p:dataSource-ref="ArchiveDataSource">   

      <property name="persistenceUnitName" value="ArchivePersistenceUnit" /> 
    </bean> 

मैं तो

के रूप में लेन-देन के प्रबंधकों के लिए कॉन्फ़िगर
<bean id="LiveTransactionManager" 
      class="org.springframework.orm.jpa.JpaTransactionManager" 
      p:entityManagerFactory-ref="liveEntityManagerFactory"/> 

    <bean id="ArchiveTransactionManager" 
      class="org.springframework.orm.jpa.JpaTransactionManager" 
      p:entityManagerFactory-ref="archiveEntityManagerFactory"/> 

मैं मूल रूप से केवल एक कॉन्फ़िगर किया गया था और इसे "लेनदेन प्रबंधक" कहा जाता था। एक अतिरिक्त निरंतर इकाई Addint एक त्रुटि उत्पन्न करने लगता है। एक बात जिसे मैं समझ नहीं पा रहा हूं, अगर मैंने दो लगातार इकाइयों को कॉन्फ़िगर किया है (प्रत्येक एक अलग डेटाबेस के लिए) क्या मुझे प्रत्येक डेटासॉर के लिए एक व्यक्तिगत इकाई प्रबंधक और लेनदेन प्रबंधक को कॉन्फ़िगर करने की भी आवश्यकता है?

त्रुटि है कि मैं पाने के नीचे दिखाया गया है: (मैं सभी फ़ाइल खोज की है और जहां "transactionManager" के लिए एक संदर्भ है मैं नहीं कर सकते कहीं भी मिल)

org.springframework.ws.soap.client.SoapFaultClientException: No bean named 'transactionManager' is defined 
    at org.springframework.ws.soap.client.core.SoapFaultMessageResolver.resolveFault(SoapFaultMessageResolver.java:37) 
    at org.springframework.ws.client.core.WebServiceTemplate.handleFault(WebServiceTemplate.java:774) 
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:600) 
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:384) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:378) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:370) 
    at com.ws.client.SoapTest.testFail(SoapTest.java:140) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41) 
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 

मैं JPA/हाइबरनेट साथ वसंत का उपयोग कर रहा हूँ।

धन्यवाद

+0

आपको केवल एक लेनदेन प्रबंधक का उपयोग करना चाहिए, और इसके बीन को "लेनदेन प्रबंधक" नाम दिया जाना चाहिए। – Luciano

+0

लेनदेन प्रबंधक को ऊपर दिखाए गए अनुसार EntityManagerFactoryBean का संदर्भ होना चाहिए। यदि मेरे पास दो EntityManagerFactoryBean है तो मैं इसे कैसे कॉन्फ़िगर करूँगा? (प्रत्येक अलग डेटासोर्स के लिए) – ziggy

+2

जेपीएट्रांसक्शन प्रबंधक काम करता है यदि आप केवल एक EntityManager का उपयोग कर रहे हैं। एक से अधिक का उपयोग कर रहे हैं, तो आप अपने सभी datasources के बीच सामंजस्य की जरूरत है, तो आप org.springframework.transaction.jta.JtaTransactionManager का सहारा की जरूरत है। क्या आप जेटीए से परिचित हैं? – Luciano

उत्तर

25

लेनदेन-प्रबंधक विशेषता के लिए डिफ़ॉल्ट मान लेन-देन-प्रबंधक है। आपके मामले में, आप जो लेन-देन प्रबंधक आप इस तरह विधि या सेवा के अनुसार उपयोग करना चाहते हैं निर्दिष्ट करना चाहिए:

@Service 
@Transactional(value="LiveTransactionManager") 
class someClass... 

या

@Transactional(value="ArchiveTransactionManager") 
public void someMethod 
+5

यह सेवा कक्षा में ही काम नहीं करेगा। यह प्रति विधि होना चाहिए, अन्यथा आपको एक ही अपवाद मिलेगा। हालांकि, प्रलेखन प्रति: डिफ़ॉल्ट लक्ष्य सेम नाम transactionManager अभी भी अगर कोई विशेष रूप से योग्य PlatformTransactionManager सेम पाया जाता है इस्तेमाल किया जाएगा। –

8

वास्तव में, है एक तरह से वसंत के साथ TransactionManager नामित उपयोग करने डेटा जेपीए। यह मेरे लिए काम करता है:

<bean id="myTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="myEntityManagerFactory" /> 
</bean> 
<tx:annotation-driven transaction-manager="myTransactionManager"/> 

<jpa:repositories base-package="com.xxx.yyy" entity-manager-factory-ref="myEntityManagerFactory" transaction-manager-ref="myTransactionManager"> 
</jpa:repositories> 
संबंधित मुद्दे

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