[Seasar-user] $B!Z<ALd![(BNotification $B$=$NB>(B
B isid.co.jp Yasuo Higa
higa
2003年 11月 12日 (水) 15:43:36 JST
<000001c3843a$59c83b10$[E-MAIL ADDRESS DELETED]> の、
"[Seasar-user] 【質問】Notification その他" において、
"<[E-MAIL ADDRESS DELETED]>"さんは書きました:
ひがです。
>
> 植山です。
>
> また、質問させてください。
> Web+DBプレスの記事には、seasarにはRMINotificationの実装が
> 用意してあるとあります。
> その機能はどのようにして使えばよろしいでしょうか?
>
マニュアルとサンプルを追加したseasarsetup20030927を
リリースします。
SourceForgeにアップされたらアナウンスお願いします。m(_ _)m
-> ほそかわさん
これで、Seasarのすべての機能がドキュメント化されました。
本当にオープンです。
JMX Notificationは、お手軽JMSといったところでしょうか。
> JavaまたはFlashをクライアントとして、seasarからの通知を
> 受け取るようにするための設定や実装の方法を教えてください。
>
Flashからは、残念ながら通知を受け取れません。
マニュアルの抜粋。
---
JMX Notification
JMX Notificationでは、登場人物が3人います。
メッセージを通知する人(A)、メッセージを通知される人(B)、メッセージを送る人(C)です。
BはAに対してメッセージを受け取りたいという登録をあらかじめしておきます。
CがAに対してメッセージを送ると、Aは自分に登録されている人(B)に対し、
メッセージを送るわけです。
メッセージは、シリアライズ可能なものなら何でもOKです。
メッセージを通知する人は、Seasarに汎用的なクラスが用意されているので
それをそのまま使うことができます。
個別に開発する必要はありません。
package org.seasar.mbean;
import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;
public class Notify extends NotificationBroadcasterSupport
implements NotifyMBean {
public static final String TYPE = "Notify";
private long _seq = 0;
public void send(Object data) {
Notification notification = new Notification(TYPE, this, ++_seq);
notification.setUserData(data);
sendNotification(notification);
}
}
メッセージを受け取りたい人は、org.seasar.mbean.NotifyListenerSupportを継承して、
receive(Notification)を実装します。
送ったデータは、Notification.getUserData()で取り出すことができます。
package examples.org.seasar.mbean;
import javax.management.Notification;
import org.seasar.mbean.NotifyListenerSupport;
public class HelloNotifyListener extends NotifyListenerSupport {
public void receive(Notification notification) {
System.out.println(notification.getUserData());
}
}
メッセージを送りたい人は、JNDIからメッセージを通知する人を取り出し、
send(Object)を呼び出します。
メッセージを通知する人のJNDI名は、mbean-config.xmlに記述した名前とあわせます。
mbean/mbean-config.xmlに記述した名前になります。
package examples.org.seasar.mbean;
import org.seasar.mbean.NotifyMBean;
import org.seasar.util.SeasarContext;
public class HelloNotifySender {
public static void main(String[] args) {
try {
SeasarContext ctx = SeasarContext.getInstance();
NotifyMBean notify = (NotifyMBean) ctx.lookup("mbean/HelloNotify");
notify.send("Hello World");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
上記のクラスを使うためのmbean-config.xmlの内容は次のようになります。
$SEASAR_HOME/classes/mbean-config.xmlのコメントアウトされている部分を
解除してください。
通知する人
<mbeans>
<mbean className="org.seasar.mbean.Notify" name="HelloNotify"/>
</mbeans>
通知される人
<notificationListeners>
<notificationListener className="examples.org.seasar.mbean.HelloNotifyListener"
targetName="HelloNotify"/>
</notificationListeners>
$SEASAR_HOME/src/org/seasarに移動(cd)して、ant exampleを実行すると、
上記のソースがコンパイルされます。
mbean-config.xmlを書き換えて、Seasarを再起動すると準備完了です
HelloNotifySenderを実行するとSeasarのコンソールにHello Worldと表示されるはずです。
EclipseからSeasarを起動している場合は、デバッグパースペクティブのSeasarをクリックすると
Seasarのコンソールを見ることができます。
JMX RMI Notification
別のサーバで稼動しているSeasarからメッセージを受け取ることもできます。
リモートのサーバに接続するための設定をseasar-context.xmlに記述し
mbean-config.xmlのremoteNotificationListenerタグのseasarContextName属性に
リモートSeasar用のコンテキスト名を指定します。
<remoteNotificationListener className="examples.org.seasar.mbean.HelloNotifyListener"
targetName="HelloNotify" seasarContextName="remote"/>
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.
Seasar-user メーリングリストの案内