2008-09-22 14 views
10

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

मेरे पास दोनों परिदृश्य काम कर रहे हैं, लेकिन अब मुझे लगता है कि मुझे दो मामलों के लिए दो अलग स्प्रिंग कॉन्फ़िगरेशन की आवश्यकता है। JOTM के साथ, मैं उपयोग करने की आवश्यकता वसंत के JotmFactoryBean:

<bean id="transactionManager" 
class="org.springframework.transaction.jta.JtaTransactionManager"> 
    <property name="userTransaction"> 
     <bean class="org.springframework.transaction.jta.JotmFactoryBean"/> 
    </property> 
</bean> 

JBoss में, हालांकि, मैं सिर्फ JNDI से "TransactionManager" को लाने की जरूरत है:

<bean id="transactionManager" 
class="org.springframework.transaction.jta.JtaTransactionManager"> 
    <property name="transactionManager"> 
     <bean class="org.springframework.jndi.JndiObjectFactoryBean"> 
      <property name="resourceRef" value="true" /> 
      <property name="jndiName" value="TransactionManager" /> 
      <property name="expectedType" 
       value="javax.transaction.TransactionManager" /> 
     </bean> 
    </property> 
</bean> 

वहाँ इतना है कि यह कॉन्फ़िगर करने के लिए एक रास्ता है उचित लेनदेन प्रबंधक - जेबॉस या जेओटीएम - दो अलग-अलग विन्यास फाइलों की आवश्यकता के बिना प्रयोग किया जाता है?

+0

वसंत 3 अब 'org.springframework.transaction.jta.JotmFactoryBean' वर्ग प्रदान करता है, इसलिए आपको स्रोत को 2.5.x से कॉपी करने की आवश्यकता हो सकती है। – Jason

उत्तर

14

मुझे लगता है कि आपने जेएनडीआई के बिंदु को याद किया है। आपकी समस्या को हल करने के लिए जेएनडीआई बहुत ज्यादा लिखा गया था!

मुझे लगता है कि आप इसे एक स्तर ले सकते हैं, इसलिए आपकी स्थिति के आधार पर "उपयोगकर्ता ट्रांज़ेक्शन" या "जेएनडीआई से लेनदेन प्रबंधक" का उपयोग करने के बजाय। JNDI को "JtaTransactionManager" क्यों न जोड़ें। इस तरह आप कॉन्फ़िगरेशन को जेएनडीआई में दबाते हैं जहां इसे और भी कॉन्फ़िगरेशन फाइलें बनाने की बजाय माना जाता है [जैसे पहले से पर्याप्त नहीं हैं;)]।

4

आप बीन संदर्भों के साथ-साथ सरल मानों को इंजेक्ट करने के लिए PropertyConfigurerPlaceholder का उपयोग कर सकते हैं।

उदाहरण के लिए यदि आप अपने सेम 'jotm' और 'jboss' कहते हैं तो आप अपने टीएम इंजेक्षन सकता है जैसे:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"> 
    <property name="location" value="classpath:/path/to/application.properties"/> 
</bean> 
<bean id="jotm">...</bean> 
<bean id="jboss">...</bean> 
<bean id="bean-requiring-transaction-manager"> 
    <property name="transactionManager" ref="${transaction.strategy}"/> 
</bean> 

तो आप उपयोग कर

  • transaction.strategy लेनदेन प्रबंधकों स्वैप कर सकते हैं = jotm गुण गुण फ़ाइल में
  • -Dtransaction.strategy = jotm सिस्टम प्रॉपर्टी के रूप में

यह एक संभावित दृष्टिकोण है। एक और पूर्ण उदाहरण के लिए मेरे blog देखें।

उम्मीद है कि इससे मदद मिलती है।

2

यदि आप स्प्रिंग 2.5 का उपयोग कर रहे हैं तो आप < टीएक्स: जेटीए-लेनदेन-प्रबंधक/> का उपयोग कर सकते हैं। मैंने इसे जेबॉस के साथ उपयोग नहीं किया है, लेकिन यह वसंत संदर्भ मैनुअल से धारा 9.8 Application server-specific integration के अनुसार आपके लिए काम करना चाहिए।

2

<tx:jta-transaction-manager/> दृष्टिकोण कई डिफ़ॉल्ट स्थानों listed here में एक लेनदेन प्रबंधक की तलाश करेगा। यदि आपका जेबॉस लेनदेन प्रबंधक उन स्थानों में से एक में नहीं है, तो मेरा सुझाव है कि यदि आप संभव हो तो इसे स्थानांतरित करें, या इसे टॉमकैट में ले जाएं ताकि दोनों कंटेनरों के पास एक ही जेएनडीआई स्थान पर उनका टीएम हो।

1

बस मेरा अनुभव यहां जोड़ना है इसलिए मुझे फिर से अनुभव को फिर से पीड़ित नहीं करना है।

bmatthews68, Chochos और these posters के रूप में, अपने स्प्रिंग बीन फ़ाइल में <tx:jta-transaction-manager/> का उपयोग करें; यह निश्चित रूप से अमूर्तता के उचित स्तर प्रदान करता है और वसंत पक्ष पर कुछ भी अतिरिक्त करने की आवश्यकता नहीं है।

टॉमकैट के लिए, मैंने <Transaction factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60" /> को डिफ़ॉल्ट/साझा conf/context.xml फ़ाइल में घोषित किया, जो java:comp/UserTransaction से जुड़ा हुआ है। चूंकि यह वसंत द्वारा खोजी जाने वाली जगहों में से एक है, आपको कुछ और करने की आवश्यकता नहीं है।

एक गोचा हालांकि: अगर आप मेरे जैसे मेवेन का उपयोग करते हैं, तो सुनिश्चित करें कि आप javax.transaction:jta जार पर किसी भी निर्भरता को बहिष्कृत करें या provided पर दायरा सेट करें। अन्यथा आप क्लासलोडर मुद्दों का अनुभव करेंगे।

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