EJB AをコールバックとしてMDB Bに登録できますか?EJB /ローカルEJBコール間のコールバック
BでB.register(Aref)
:A.callback()
EJBはローカル電話を使用する場合アレフでしょうか? SessionContext.getEJBLocalObject()
?
EJB AをコールバックとしてMDB Bに登録できますか?EJB /ローカルEJBコール間のコールバック
BでB.register(Aref)
:A.callback()
EJBはローカル電話を使用する場合アレフでしょうか? SessionContext.getEJBLocalObject()
?
提案された方法では、あなたが求めることは実際にはありません。
B
がMessage Driven Beanの場合、メソッドを呼び出すことは決してできません。メッセージングのパラダイムでは、メッセージの受信者のタイプは不明です。したがって、MDBのインスタンスを参照することはできません。代わりに、メッセージをキューまたはトピックに投稿し、MDBがそのメッセージを受信するように設定されている場合は、onMessage()
メソッドが呼び出されます。
第2に、EJBでは、サンプルコードのように参照を渡すことはよくありません。どのような種類のEJB Beanがありますか?ステートレスセッションBean、またはステートフルセッションBean?
場合、それは、インスタンスは問題ないかもしれません、あなたはおそらくそれを注入することができ、ステートレスセッションBeanです:
@MessageDriven
public class NSMessageDrivenBean implements MessageListener {
@EJB
private A yourABean;
public void onMessage(Message message) {
// process message and then call A
yourABean.someMethod();
}
}
コールバックに応じて(事前に不明な型に行われる必要がある場合メッセージが送信されている場合)、そのための1つのメカニズムはJMS reply
です。メッセージ駆動型Beanに送信されたメッセージで
、あなたは、このようなコードが含ま:
message.setJMSReplyTo(someDestination);
message.setJMSCorrelationID(someCorrelationID);
someDestination
をあなたのコールバックを表し、それは何かがリスニングされている先だし、この何かが、その後呼び出すことができますステートレスセッションBean(クライアントのコンテキストで)を呼び出します。
など。
connection.createSession(false, Session.AUTO_ACKNOWLEDGE).createConsumer(someDestination).setMessageListener(
new MessageListener() {
@Override
public void onMessage(Message message) {
yourABean.someMethod();
}
}
この場合、someDestinationは一時的な宛先になる可能性があります。
MDBから他のBean Aにディスパッチしたいのですが、私は動的にBをEJBに知らせたいので、MBDからAへのディスパッチ機構を持つことができました。 – weberjn