2013-04-16 32 views
6

當使用消息驅動Bean,從那裏接收信息的目的地名稱中的註釋@MessageDriven(mappedName = "someDestinationName")在郵件配置MappedName註釋驅動Bean動態

有沒有辦法在運行時添加這些信息是硬編碼? Bellow是一個示例Message Driven Bean類。

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

據我所知,不,你不能這樣做。

因爲目標(它是字符串)和bean(這是一個類)的耦合在部署時完成一次,所以無法以編程方式更改目標。

也許有重新綁定的破解;我的意思是迫使容器釋放MDB,然後更改目的地並重新initalize(經過依賴注入,再後建設步驟等),但我懷疑應用程序服務器將允許。從JSR-318(EJB 3.1規範)

摘錄;

5.4.17協會的消息驅動Beanwith

當bean被部署在容器A消息驅動bean與目的地或端點相關聯的目的地或端點。這是部署者的責任與目標或端點的消息驅動bean關聯。

5.4.17.1 JMS消息驅動Bean

一個JMS消息驅動bean與當Bean部署在容器中的JMS目標(隊列或主題)相關聯。這是部署者的責任推給消息驅動bean與隊列或主題相關聯。