[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 メーリングリストの案内