2012-03-28 3 views
0

У меня есть сообщение Driven BeanЛучший способ связать MDB с JMS назначения

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

Я хотел бы заменить прямую ссылку назначения «test.QueueIn» с «Java: комп/ENV/JMS/TestQueueIn ". Это должно позволить мне указать назначение MDB в дескрипторе развертывания, а не в java-коде. То есть, я хочу определить назначение MDB во время развертывания, а не во время компиляции.

Возможно ли это? Или, есть ли лучший способ создания ссылочной ссылки?

+0

Вы хотите настроить его с помощью дескриптора развертывания –

+0

Да, я хочу иметь в коде только ссылку на ресурс и указать ресурс, указанный в дескрипторе развертывания. Этот вопрос состоит из двух частей: какая аннотация для использования в коде вместо назначенияJndiName. И что писать в дескриптор развертывания. – xarx

ответ

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 { 
    ..... 
} 

jndiName в @ResourceEnvRef является необязательным атрибутом, так что вам не нужно указать его в коде. Однако, даже если вы это сделаете, он служит только как значение по умолчанию, вы всегда можете изменить его в (сгенерированном) дескрипторе развертывания.

Смежные вопросы