2013-04-16 8 views
6

संदेश प्रेरित सेम का उपयोग कर, संदेश प्राप्त करने के जहां से गंतव्य नाम कठिन एनोटेशन @MessageDriven(mappedName = "someDestinationName")संदेश में विन्यस्त MappedName एनोटेशन बीन प्रेरित गतिशील

वहाँ कार्यावधि में इस जानकारी को जोड़ने के लिए एक रास्ता है में कोडित है? बेलो एक नमूना संदेश संचालित बीन वर्ग है।

package mdb.beans; 

import javax.ejb.ActivationConfigProperty; 
import javax.ejb.MessageDriven; 
import javax.jms.Message; 
import javax.jms.MessageListener; 

@MessageDriven(mappedName = "someDestinationName", activationConfig = 
{ 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") 
}) 
public class MDBSample implements MessageListener 
{  
    public MDBSample() 
    { 
     // constructor 
    } 

    @Override 
    public void onMessage(Message message) 
    { 
     // logic when message received 
    } 
} 

उत्तर

2

जहां तक ​​मुझे पता है, नहीं, आप ऐसा नहीं कर सकते हैं।

क्योंकि, गंतव्य के युग्मन (जो एक स्ट्रिंग है) और बीन (जो एक वर्ग है) एक बार तैनाती समय में किया जाता है, आप प्रोग्राम को प्रोग्रामेटिक रूप से बदल नहीं सकते हैं।

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

जेएसआर -318 (ईजेबी 3.1 spec) से उद्धरण;

5.4.17 एसोसिएशन के एक संदेश संचालित एक गंतव्य या समाप्ति बिंदु

एक संदेश चालित सेम एक गंतव्य या अंतिम बिंदु साथ जुड़ा हुआ है जब सेम कंटेनर में तैनात है Beanwith। संदेश-संचालित बीन को गंतव्य या समापन बिंदु से जोड़ने के लिए नियोक्ता की ज़िम्मेदारी है।

5.4.17.1 JMS संदेश संचालित बीन्स

एक JMS संदेश चालित सेम एक JMS गंतव्य (पंक्ति या विषय) जब सेम कंटेनर में तैनात किया जाता है के साथ जुड़ा हुआ है। संदेश-संचालित बीन को कतार या विषय के साथ जोड़ने के लिए नियोक्ता की ज़िम्मेदारी है।

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