2010-07-02 14 views
7

जेबॉस 5.1.0 पर मेरे पास डेटा-स्रोत (PostgreSQL 8.3.11) है * -ds.xml (मानक jboss डीएस) का उपयोग कर कॉन्फ़िगर किया गया है। यह XADataSource (PGXADataSource) का उपयोग करता है। मेरे पास ActiveMQ ब्रोकर भी है (अभी यह जे-बॉस के तहत इन-वीएम के रूप में चलता है, लेकिन यह बाद में अलग सर्वर पर होगा)।एक्सए कनेक्शन का उपयोग करने के लिए जेबॉस में ActiveMQ जेसीए कनेक्टर को कॉन्फ़िगर कैसे करें?

मैं क्या करना चाहता हूं एक्सए लेनदेन में भाग लेने के लिए ActiveMQ कनेक्शन फैक्टरी और डेटासोर्स बनाना है। उदाहरण के लिए, मैं डीबी रिकॉर्ड अपडेट करना चाहता हूं और एक यूएमएस के रूप में एक जेएमएस संदेश भेजना चाहता हूं। तुम्हें नया तरीका मिल गया है।

मैंने अपने-pg-ds.xml में PGXADataSource को कॉन्फ़िगर किया है और यह काम करता है (मैं PGXAConnection's start method पर निष्पादन का पता लगा सकता हूं)। मैंने ActiveMQXAConnectionFactory सीधे वसंत में कॉन्फ़िगर करने की कोशिश की है (मैं वसंत 3.0.2.RELEASE का उपयोग कर रहा हूं), लेकिन यह काम नहीं करता है, क्योंकि इस मामले में स्प्रिंग ट्रांजैक्शन मैनेजर (मैं स्प्रिंग को JtaTransactionManager कॉन्फ़िगर करने के लिए एनोटेशन का उपयोग करता हूं जो बस सभी कार्यों को प्रतिनिधि करता है जेबॉस लेनदेन प्रबंधक) दिए गए ActiveMQXAConnection के लिए XARESource को सूचीबद्ध नहीं करता है। जब भी मैं एक संदेश भेजने का प्रयास करता हूं तो मुझे एक अपवाद मिलता है जो जेएमएसएक्सप्सेशन कहता है "सत्र का एक्सएएससोर्स वितरित लेनदेन में शामिल नहीं किया गया है।" ActiveMQXASession से फेंक दिया गया।

के बाद से है कि काम नहीं किया, मैं ActiveMQ ConnectionFactory की JCA विन्यास में बदला गया है (this दस्तावेज़ के आधार पर) और यह नियमित रूप से के लिए काम करता है, लेकिन मुझे समझ नहीं आता मैं इसे कैसे XAConnectionFactory उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं। ऐसा लगता है कि Resource Adapter में XA कनेक्शन फैक्ट्री के लिए उचित प्रबंधित कैनेक्शन फैक्टरी, प्रबंधित कनेक्शन, आदि कार्यान्वयन नहीं है।

क्या मुझे कुछ याद आ रहा है या क्या मेरे पास संसाधन एडाप्टर के लिए एक्सए रैपर लिखने के अलावा कोई विकल्प नहीं है?

उत्तर

6

ठीक है, मुझे समाधान मिला। जेबॉस में किसी भी जेएमएस कारखाने के लिए जेसीए कनेक्टर शामिल है (दोनों प्रकार के लेनदेन का समर्थन करता है: एक्सए और स्थानीय)। यह /server//deploy/jms-ra.rar में स्थित है। यहां बताया गया है कि मैंने इसे कैसे कॉन्फ़िगर किया।

पहले, activemq-jms-ds.xml फ़ाइल कि jms-ra.rar के बगल में तैनाती निर्देशिका में चला जाता है:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE connection-factories 
    PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN" 
    "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd"> 

<connection-factories> 
    <mbean code="org.jboss.jms.jndi.JMSProviderLoader" 
     name="jboss.messaging:service=JMSProviderLoader,name=ActiveMQJMSProvider"> 
     <attribute name="ProviderName">ActiveMQJMSProvider</attribute> 
     <attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute> 
     <attribute name="FactoryRef">java:/activemq/XAConnectionFactory</attribute> 
     <attribute name="QueueFactoryRef">java:/activemq/XAConnectionFactory</attribute> 
     <attribute name="TopicFactoryRef">java:/activemq/XAConnectionFactory</attribute> 
    </mbean> 

    <tx-connection-factory> 
     <jndi-name>JmsXAConnectionFactory</jndi-name> 
     <xa-transaction/> 
     <rar-name>jms-ra.rar</rar-name> 
     <connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition> 
     <config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/ActiveMQJMSProvider</config-property> 
    </tx-connection-factory> 
</connection-factories> 

यह Jboss बताता jms-ra.rar पर गौर और एडाप्टर org.jboss.resource.adapter.jms.JmsConnectionFactory के लिए कनेक्शन कारखाने में कामयाब प्रदान कर सकते हैं खोजने के लिए । आंतरिक रूप से जेएमएस एडाप्टर JmsProviderAdapter पर निर्भर करता है, जिसका उपयोग कनेक्शन कारखानों के जेएनडीआई नामों को स्टोर करने के लिए किया जाता है (मेरी कॉन्फ़िगरेशन में सभी नाम समान हैं)।

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

चूंकि मैं जेबॉस 5 हूं, मैंने माइक्रोकॉन्टेनर का उपयोग किया (जो कि जेबॉस 6 में काम करने की संभावना है)।

<?xml version="1.0" encoding="UTF-8"?> 
<deployment xmlns="urn:jboss:bean-deployer:2.0"> 
    <!-- Define a Jndi binding aspect/annotation that exposes beans via jndi 
     when they are registered with the kernel. 
    --> 
    <aop:lifecycle-configure xmlns:aop="urn:jboss:aop-beans:1.0" 
     name="DependencyAdvice" 
     class="org.jboss.aop.microcontainer.aspects.jndi.JndiLifecycleCallback" 
     classes="@org.jboss.aop.microcontainer.aspects.jndi.JndiBinding" 
     manager-bean="AspectManager" 
     manager-property="aspectManager"> 
    </aop:lifecycle-configure> 

    <bean name="ActiveMQXAConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory"> 
     <annotation>@org.jboss.aop.microcontainer.aspects.jndi.JndiBinding(name="activemq/XAConnectionFactory", aliases={"java:/activemq/XAConnectionFactory"})</annotation> 
     <property name="brokerURL">vm://localhost</property> 
    </bean> 
</deployment> 

मैं एक ActiveMQXAConnectionFactory सेम बनाने: मैं deployers direcotry में activemq-jms-jboss-beans.xml फ़ाइल जोड़ा। इसे जेएनडीआई से बांधने के लिए, मैं इसे जेन्डीबाइंडिंग एनोटेशन के साथ एनोटेट करता हूं। काम करने के लिए इस एनोटेशन के लिए, हमें JndiLifecycleCallback की आवश्यकता है। जहां तक ​​मैं कह सकता हूं, JndiLifecycleCallback को माइक्रोकॉन्टेनर द्वारा बनाए गए हर बीन पर बुलाया जाता है और उस बीन पर जेन्डीबाइंडिंग एनोटेशन के लिए जांच करता है।

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

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