2013-09-27 2 views
1

Давая эту запись из-jar.xml EJBДоступ к EJB-имя во время выполнения из внутри MDB

<message-driven id="my_test_mdb "> 
     <description>Some description</description> 
     <display-name>MyTest</display-name> 
     <ejb-name>MyTestEJB</ejb-name> 
     <ejb-class>some.path.to.TestMessageBean</ejb-class> 
     <transaction-type>Container</transaction-type> 
     <message-driven-destination> 
      <destination-type>javax.jms.Queue</destination-type> 
     </message-driven-destination> 
</message-driven> 

Есть ли способ, чтобы получить доступ во время выполнения значения, определенные для my_test_mdb. Меня в основном интересует получение значения ejb-name, но тот же вопрос должен быть задан для других, таких как display-name и так далее.

Мне известно о том, что я мог бы добавить некоторые записи об окружающей среде, как показано ниже, но это выглядит как нечто вроде дублирования и склонности к ошибкам.

<message-driven> 
    ... 
    <ejb-name>MyTestEJB</ejb-name> 
    ... 
    <env-entry> 
      <env-entry-name>ejbName</env-entry-name> 
      <env-entry-type>java.lang.String</env-entry-type> 
      <env-entry-value>MyTestEJB</env-entry-value> 
    </env-entry> 
</message-driven> 

Я пытался поставить точку останова и оценить новый InitialContext() поиск («Java: комп/ENV»). Затем перебирать либо список и listBindings, но это только принесет мне раздел окр-запись не то, что Я хочу.

Это очень разочаровывает, как во время выполнения я могу осмотреть некоторые элементы и ясно увидите, что я после

javaNameSpaceImpl:{appName=someModule,_moduleName=someModuleEJB,_componentName=MyTestEJB,_bootstrapAddress=rir:…etc} 

Любая идея о том, как это может быть достигнуто?

Заранее спасибо.

+0

Вы можете проанализировать XML-файл. Если вы заменили аннотации 'ejb-jar.xml', вы могли бы прочитать аннотированные значения во время выполнения. – Beryllium

+0

Это не сработает, потому что мой класс some.path.to.TestMessageBean развертывается несколько раз (примерно в 50 раз) в качестве другого MDB. Это просто очередь, что этот MDB прослушивает вещь, которая изменяется, а не исполняемый код. – Julian

ответ

1

Нет стандартного способа извлечения имени компонента. Я согласен с тем, что, к сожалению, нет java: comp/CompName (ala java: app/AppName и java: module/ModuleName) или EJBContext.getName(). Моя рекомендация в прошлом всегда была подходом, который, я согласен, не идеален.

+0

Как насчет конкретного поставщика? Нехорошо, но лучше, чем ничего. Мы развертываем сервер приложений webshere 8.5. – Julian

+1

Я не знаю каких-либо поддерживаемых API-интерфейсов для доступа к имени компонента. –

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