2012-03-28 93 views
0

我有驅動Bean最好的方式把MDB

消息
@MessageDriven(ejbName = "TestMDB", 
    destinationJndiName="test.QueueIn", destinationType = "javax.jms.Queue") 
public class TestMDB extends GenericMessageDrivenBean implements 
    MessageDrivenBean, MessageListener { 
    ..... 
} 

我想用「的Java類來代替直接目的引用「test.QueueIn」:comp/env的/ JMS/TestQueueIn「符號。這應該允許我在部署描述符中而不是在java代碼中指定MDB目標。也就是說,我想在部署時確定MDB目標,而不是在編譯時。

這可能嗎?或者,有沒有更好的創建參考間接方法?

+0

你想通過部署描述符來配置它嗎 – 2012-03-28 18:55:46

+0

是的,我想在代碼中只有一個資源引用,並在部署描述符中指定資源。這個問題有兩個部分:在代碼中使用哪個註釋來代替destinationJndiName。以及寫入部署描述符的內容。 – xarx 2012-03-28 19:24:58

回答

1

我找到了一個辦法,但我不知道它的理想。

@ResourceEnvRef(name="jms/RequestQueue", type="javax.jms.Queue", jndiName="test.QueueIn"), 
@MessageDriven(ejbName = "TestMDB", destinationJndiName="java:comp/env/jms/RequestQueue", destinationType = "javax.jms.Queue") 
public class TestMDB extends GenericMessageDrivenBean implements 
    MessageDrivenBean, MessageListener { 
    ..... 
} 

@ResourceEnvRef中的jndiName是一個可選屬性,因此您無需在代碼中指定它。但是,即使您這樣做,它也只是用作默認值,您可以隨時在(生成的)部署描述符中更改它。