JBoss 5.1 を使用した Java EE 5 プロジェクトがあり、このような問題があります。メッセージ コンテンツから生成される文字列を使用して、MDB 内の一部の EJB に対して一種のランタイム ルックアップを実行する必要があります。これは、MDB で使用される一種のサービス ロケーター パターンです。現在、MDB はデプロイ直後に消費を開始するため、NameNotFoundException
ここでは暗黙のデプロイ順序がうまく機能しないため (ランタイム ルックアップ)、多くのことが発生します。あなたはそれについてどう思いますか?EJB 3.0 を使用して本当にうまくやれるでしょうか? 問題が解決する場合は、ベンダー固有のもの (JBoss 5.1) を使用してもかまいません。
状況を視覚化するためのコード スニペット:
@MessageDriven(mappedName="jms/Queue")
public class MessageBean implements MessageListener {
@Resource
private MessageDrivenContext mdc;
public void onMessage(Message msg) {
final String beanName = // extract somehow the bean's name from 'msg'
final Context ctx = new InitialContext();
final Object obj = ctx.lookup(beanName); // NameNotFoundException
// do something with 'obj'
}
}