jp.co.fujitsu.reffi.client.swing.model
クラス JMSSubscribeCore

java.lang.Object
  上位を拡張 jp.co.fujitsu.reffi.client.swing.model.BaseModel
      上位を拡張 jp.co.fujitsu.reffi.client.swing.model.JMSSubscribeCore
すべての実装されたインタフェース:
Callable<Object>, MessageListener, Model

public class JMSSubscribeCore
extends BaseModel
implements MessageListener

[概 要]

JMSサーバトピックを購読する為の機能モデルクラスです。

[詳 細]

JMSトピックを通じてPub/Sub通信を行う為のクラスです。
Topicコネクションをスタートしてトピックへ送信されたメッセージを受信します。
購読を開始すると、明示的に購読中止を行わない限り、継続してメッセージを受信し続け、 受信する毎にモデル処理成功イベント(ModelProcessEvent.SUCCESS)を発行します。

必須設定メソッド

[備 考]

使用例)
チャットトピックのメッセージを購読する。
    package demo.chat.action;
    
    import java.util.List;
    
    import javax.jms.TextMessage;
    import javax.swing.JTextArea;
    
    import jp.co.fujitsu.reffi.client.swing.action.BaseAction;
    import jp.co.fujitsu.reffi.client.swing.event.ModelProcessEvent;
    import jp.co.fujitsu.reffi.client.swing.model.JMSSubscribeCore;
    import jp.co.fujitsu.reffi.client.swing.model.Model;
    
    public class EnterChannelAction extends BaseAction {
    
        @Override
        protected void reserveModels(List> models) {
            models.add(JMSSubscribeCore.class);
        }
    
        @Override
        public boolean nextModel(int index, ModelProcessEvent prev, Model next) throws Exception {
            if(index == 0) {
                ((JMSSubscribeCore)next).setTopicName("topic/chatTopic");
            }
            return true;
        }
    
        @Override
        public void successForward(int index, Model model, Object result)    throws Exception {
            String remark = ((TextMessage)result).getText();
                    
            JTextArea jtaLog = (JTextArea)getComponent("chatFrame.jtaLog");
            jtaLog.append(remark + System.getProperty("line.separator"));
        }
    } 
 
任意のトピックメッセージを3回受信したら購読を中止する。
    package demo.chat.action;

    import java.util.List;
    
    import jp.co.fujitsu.reffi.client.swing.action.BaseAction;
    import jp.co.fujitsu.reffi.client.swing.event.ModelProcessEvent;
    import jp.co.fujitsu.reffi.client.swing.manager.JMSSubscribeCoreManager;
    import jp.co.fujitsu.reffi.client.swing.model.JMSSubscribeCore;
    import jp.co.fujitsu.reffi.client.swing.model.Model;
    
    public class SpecificTimeSubscribeAction extends BaseAction {
    
        @Override
        protected void reserveModels(List> models) {
            models.add(JMSSubscribeCore.class);
        }
    
        @Override
        public boolean nextModel(int index, ModelProcessEvent prev, Model next) throws Exception {
            if(index == 0) {
                ((JMSSubscribeCore)next).setTopicName("topic/dataTopic");
                ((JMSSubscribeCore)next).setIdentifier(String.valueOf(hashCode()));
            }
            return true;
        }
    
        @Override
        public void successForward(int index, Model model, Object result) throws Exception {
            System.out.println("受信したトピックメッセージ : " + result);
            
            if(((JMSSubscribeCore)model).getSuccessCount() == 3) {
                JMSSubscribeCoreManager.getInstance().unsubscribe("topic/dataTopic", String.valueOf(hashCode()));
            }
        }
        
        @Override
        public void complete(ParameterMapping parameterMapping) throws Exception {
            System.out.println("受信終了");
        }
    }
 

[環 境] JDK 6.0 Update 11

Copyright (c) 2008-2009 FUJITSU Japan All rights reserved.

作成者:
Project Reffi

コンストラクタの概要
JMSSubscribeCore()
           
 
メソッドの概要
 String getClientId()
          [概 要] TopicConnectionに与えるClientIdを取得します。
 String getConnectionFactoryName()
          [概 要] JMSコネクションファクトリJNDI名を返却します。
 String getDurableSubscriberName()
          [概 要] durableモードで作られたTopicSubscriberの名前を取得します。
 Hashtable<String,String> getEnvironment()
          [概 要] JMS接続を行う為の接続先環境設定プロパティを返却します。
 String getIdentifier()
          [概 要] トピックを受信中のJMSSubscribeCoreを識別する為の識別子を返却します。
 TopicSubscriber getSubscriber()
          [概 要] Topicを購読するオブジェクトを返却します。
 Topic getTopic()
          [概 要] 購読を行うトピックを返却します。
 TopicConnection getTopicConnection()
          [概 要] サーバとのトピックコネクションを返却します。
 String getTopicName()
          [概 要] 購読開始、中止対象トピック名を返却します。
 TopicSession getTopicSession()
          [概 要] サーバとのトピックコネクションを返却します。
 boolean isDurable()
          [概 要] TopicSubscriberをdurableモードで作るかどうかのフラグを取得します。
 boolean isFireSuccessEventImmediately()
          [概 要] Subscribe開始をモデル処理成功と見做すかどうかのフラグを返却します。
 boolean isUnsubscribe()
          [概 要] 開始、中止を判断するフラグを返却します。
protected  void mainproc()
          [概 要] 購読の開始、停止をJMSSubscriberManagerに委譲します。
 void onMessage(Message msg)
          [概 要] トピックメッセージ受信ハンドラです。
 void onUnsubscribe()
          [概 要] subscribe終了時にテンプレートコールされます。
protected  void postSubscribe(Message msg)
          [概 要] subscribe結果受信用オーバーライドメソッドです。
protected  void postUnsubscribe()
          [概 要] subscribe終了時にテンプレートコールされるオーバーライドメソッドです。
 void setClientId(String clientId)
          [概 要] TopicConnectionに与えるClientIdを設定します。
 void setConnectionFactoryName(String connectionFactoryName)
          [概 要] JMSコネクションファクトリJNDI名を設定します。
 void setDurable(boolean durable)
          [概 要] TopicSubscriberをdurableモードで作るかどうかのフラグを設定します。
 void setDurableSubscriberName(String durableSubscriberName)
          [概 要] durableモードで作られたTopicSubscriberの名前を設定します。
 void setEnvironment(Hashtable<String,String> environment)
          [概 要] JMS接続を行う為の接続先環境設定プロパティを設定します。
 void setFireSuccessEventImmediately(boolean fireSuccessEventImmediately)
          [概 要] Subscribe開始をモデル処理成功と見做すかどうかのフラグを設定します。
 void setIdentifier(String identifier)
          [概 要] トピックを受信中のJMSSubscribeCoreを識別する為の識別子を設定します。
 void setSubscriber(TopicSubscriber subscriber)
          [概 要] Topicを購読するオブジェクトを設定します。
 void setTopic(Topic topic)
          [概 要] 購読を行うトピックを設定します。
 void setTopicConnection(TopicConnection topicConnection)
          [概 要] サーバとのトピックコネクションを設定します。
 void setTopicName(String topicName)
          [概 要] 購読開始、中止対象トピック名を設定します。
 void setTopicSession(TopicSession topicSession)
          [概 要] サーバとのトピックコネクションを返却します。
 void setUnsubscribe(boolean unsubscribe)
          [概 要] 購読中止を判断するフラグを設定します。
 
クラス jp.co.fujitsu.reffi.client.swing.model.BaseModel から継承されたメソッド
addModelProcessListener, call, done, finalproc, fireModelFailure, fireModelFinished, fireModelSuccess, getController, getExecuteIndex, getListenerList, getParameterMapping, getResult, getSuccessCount, incrementSuccessCount, init, isAsync, isSkip, postproc, preproc, removeModelProcessListener, run, setAsync, setController, setExecuteIndex, setListenerList, setParameterMapping, setResult, setSkip, trap
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

JMSSubscribeCore

public JMSSubscribeCore()
メソッドの詳細

getIdentifier

public String getIdentifier()

[概 要]

トピックを受信中のJMSSubscribeCoreを識別する為の識別子を返却します。

[詳 細]

identifierフィールドを返却します。

[備 考]

戻り値:
トピックを受信中のJMSSubscribeCoreを識別する為の識別子

setIdentifier

public void setIdentifier(String identifier)

[概 要]

トピックを受信中のJMSSubscribeCoreを識別する為の識別子を設定します。

[詳 細]

identifierフィールドを引数identifierで設定します。

[備 考]

同一Topicを購読するJMSSubscriberCoreが複数存在する場合、このメソッドで ユニーク名を設定して下さい。 購読停止時はこのidentifierを指定することで任意のJMSSubscriberCoreを 停止させることが出来ます。

パラメータ:
identifier - トピックを受信中のJMSSubscribeCoreを識別する為の識別子

isUnsubscribe

public boolean isUnsubscribe()

[概 要]

開始、中止を判断するフラグを返却します。

[詳 細]

unsubscribeフィールドを返却します。

[備 考]

戻り値:
開始、中止を判断するフラグ

setUnsubscribe

public void setUnsubscribe(boolean unsubscribe)

[概 要]

購読中止を判断するフラグを設定します。

[詳 細]

unsubscribeフィールドに引数unsubscribeを設定します。

[備 考]

パラメータ:
unsubscribe - 購読中止を判断するフラグ

getEnvironment

public Hashtable<String,String> getEnvironment()

[概 要]

JMS接続を行う為の接続先環境設定プロパティを返却します。

[詳 細]

environmentフィールドを返却します。

[備 考]

戻り値:
JMS接続を行う為の接続先環境設定プロパティ

setEnvironment

public void setEnvironment(Hashtable<String,String> environment)

[概 要]

JMS接続を行う為の接続先環境設定プロパティを設定します。

[詳 細]

environmentフィールドを引数environmentで設定します。

[備 考]

パラメータ:
environment - JMS接続を行う為の接続先環境設定プロパティ

getTopicConnection

public TopicConnection getTopicConnection()

[概 要]

サーバとのトピックコネクションを返却します。

[詳 細]

topicConnectionフィールドを返却します。

[備 考]

戻り値:
サーバとのトピックコネクション

setTopicConnection

public void setTopicConnection(TopicConnection topicConnection)

[概 要]

サーバとのトピックコネクションを設定します。

[詳 細]

topicConnectionフィールドを引数topicConnectionで設定します。

[備 考]

パラメータ:
topicConnection - サーバとのトピックコネクション

getTopicSession

public TopicSession getTopicSession()

[概 要]

サーバとのトピックコネクションを返却します。

[詳 細]

topicConnectionフィールドを返却します。

[備 考]

戻り値:
サーバとのトピックコネクション

setTopicSession

public void setTopicSession(TopicSession topicSession)

[概 要]

サーバとのトピックコネクションを返却します。

[詳 細]

topicConnectionフィールドを返却します。

[備 考]

パラメータ:
topicSession - サーバとのトピックコネクション

getTopic

public Topic getTopic()

[概 要]

購読を行うトピックを返却します。

[詳 細]

topicフィールドを返却します。

[備 考]

戻り値:
購読を行うトピック

setTopic

public void setTopic(Topic topic)

[概 要]

購読を行うトピックを設定します。

[詳 細]

topicフィールドを引数topicで設定します。

[備 考]

パラメータ:
topic - 購読を行うトピック

getTopicName

public String getTopicName()

[概 要]

購読開始、中止対象トピック名を返却します。

[詳 細]

topicNameフィールドを返却します。

[備 考]

戻り値:
購読開始、中止対象トピック名

setTopicName

public void setTopicName(String topicName)

[概 要]

購読開始、中止対象トピック名を設定します。

[詳 細]

topicNameフィールドを引数topicNameで設定します。

[備 考]

パラメータ:
topicName - 購読開始、中止対象トピック名

getSubscriber

public TopicSubscriber getSubscriber()

[概 要]

Topicを購読するオブジェクトを返却します。

[詳 細]

subscriberフィールドを返却します。

[備 考]

戻り値:
Topicを購読するオブジェクト

setSubscriber

public void setSubscriber(TopicSubscriber subscriber)

[概 要]

Topicを購読するオブジェクトを設定します。

[詳 細]

subscriberフィールドを引数subscriberで設定します。

[備 考]

パラメータ:
subscriber - Topicを購読するオブジェクト

getConnectionFactoryName

public String getConnectionFactoryName()

[概 要]

JMSコネクションファクトリJNDI名を返却します。

[詳 細]

connectionFactoryNameフィールドを返却します。

[備 考]

戻り値:
JMSコネクションファクトリJNDI名

setConnectionFactoryName

public void setConnectionFactoryName(String connectionFactoryName)

[概 要]

JMSコネクションファクトリJNDI名を設定します。

[詳 細]

connectionFactoryNameフィールドを引数connectionFactoryNameで設定します。

[備 考]

パラメータ:
connectionFactoryName - JMSコネクションファクトリJNDI名

getClientId

public String getClientId()

[概 要]

TopicConnectionに与えるClientIdを取得します。

[詳 細]

clientIdフィールドを返却します。

[備 考]

戻り値:
TopicConnectionに与えるClientId

setClientId

public void setClientId(String clientId)

[概 要]

TopicConnectionに与えるClientIdを設定します。

[詳 細]

clientIdフィールドを引数clientIdで設定します。

[備 考]

パラメータ:
clientId - TopicConnectionに与えるClientId

isDurable

public boolean isDurable()

[概 要]

TopicSubscriberをdurableモードで作るかどうかのフラグを取得します。

[詳 細]

durableフィールドを返却します。

[備 考]

デフォルトはfalseです。

戻り値:
TopicSubscriberをdurableモードで作るかどうかのフラグ

setDurable

public void setDurable(boolean durable)

[概 要]

TopicSubscriberをdurableモードで作るかどうかのフラグを設定します。

[詳 細]

durableフィールドを引数durableで設定します。

[備 考]

デフォルトはfalseです。

パラメータ:
durable - TopicSubscriberをdurableモードで作るかどうかのフラグ

getDurableSubscriberName

public String getDurableSubscriberName()

[概 要]

durableモードで作られたTopicSubscriberの名前を取得します。

[詳 細]

durableSubscriberNameフィールドを返却します。

[備 考]

戻り値:
durableモードで作られたTopicSubscriberの名前

setDurableSubscriberName

public void setDurableSubscriberName(String durableSubscriberName)

[概 要]

durableモードで作られたTopicSubscriberの名前を設定します。

[詳 細]

durableSubscriberNameフィールドを引数durableSubscriberNameで設定します。

[備 考]

パラメータ:
durableSubscriberName - durableモードで作られたTopicSubscriberの名前

isFireSuccessEventImmediately

public boolean isFireSuccessEventImmediately()

[概 要]

Subscribe開始をモデル処理成功と見做すかどうかのフラグを返却します。

[詳 細]

fireSuccessEventImmediatelyフィールドを返却します。

[備 考]

戻り値:
コンシューム開始をモデル処理成功と見做すかどうかのフラグ

setFireSuccessEventImmediately

public void setFireSuccessEventImmediately(boolean fireSuccessEventImmediately)

[概 要]

Subscribe開始をモデル処理成功と見做すかどうかのフラグを設定します。

[詳 細]

fireSuccessEventImmediatelyフィールドを引数fireSuccessEventImmediatelyで設定します。

JMSSubscribeCoreは、メッセージを受信するまでModelProcessEvent.SUCCESS イベントを発行しません。
この為、次のような機能モデル予約がされている場合、

        @Override
        protected void reserveModels(List> models) {
                models.add(JMSSubscribeCore.class);
                models.add(HTTPRequestCore.class);
        }
 
HTTPRequestCoreはJMSSubscribeCoreが最初のメッセージを受信するまで実行されません。
この挙動が期待するものでは無い場合、このメソッドを引数trueで呼び出して下さい。
JMSSubscribeCore実行(サブスクライブ開始)後、ただちにModelProcessEvent.SUCCESSが発行され、 HTTPRequestCoreがJMSメッセージ受信前に実行されるようになります。
        @Override
        public boolean nextModel(int index, ModelProcessEvent prev, Model next) throws Exception {
                switch(index == 0) {
                case 0 :
                        ((JMSSubscribeCore)next).setFireSuccessEventImmediately(true);
                                :
                        break;
                case 1 :
                        // JMSSubscribeCoreのメッセージ受信を待たずに処理が到達
                        ((HTTPRequestCore)next).setRequestUrl("http://foo.bar.com");
                                :
                        break;
                }       
 
但し、このSUCCESSイベントはメッセージを受信したイベントでは無い為、 モデル処理結果resultはnullになります。

[備 考]

同様の機構としてBaseAction#isRunModelsAndNoWait()をオーバーライドしてtrue返却する 方法が有りますが、この場合は予約されている全ての機能モデルが、前モデルのModelProcessEvent.SUCCESS を待たずに実行されるようになります。

パラメータ:
fireSuccessEventImmediately - コンシューム開始をモデル処理成功と見做すかどうかのフラグ

mainproc

protected void mainproc()
                 throws NamingException,
                        JMSException

[概 要]

購読の開始、停止をJMSSubscriberManagerに委譲します。

[詳 細]

JMSSubscribCoreManager#subscribe(String, JMSSubscribeCore) をgetTopicName()、thisを引数としてコールします。
mainprocを実行したJMSSubscribeCoreは、getTopicName()を購読するモデルとして JMSSubscriberManagerに管理されます。

isUnsubscribeがtrueの場合、 JMSSubscribCoreManager#unsubscribe(String, String) をgetTopicName()、getIdentifier()を引数としてコールします。
JMSSubscriberManagerは管理しているJMSSubscribeCoreの中からgetTopicName()を購読中 のgetIdentifier()を持つJMSSubscribeCoreを探し、購読を停止させます。 getIdentifier()が指定されていない場合、getTopicName()を購読中の全JMSSubscribeCore に購読を停止させます。

[備 考]

オーバーライド:
クラス BaseModel 内の mainproc
例外:
JMSException
NamingException

onMessage

public final void onMessage(Message msg)

[概 要]

トピックメッセージ受信ハンドラです。

[詳 細]

MessageListener.onMessage(Message)を実装します。 受信したメッセージをsetResultメソッドでモデル処理結果とし、 postSubscribe(Message)メソッドをテンプレートコールして JMSSubscribeCoreの継承モデルで受信メッセージを汎用的に加工可能にします。 postSubscribeの終了後、モデル処理成功イベントを発行します。

[備 考]

定義:
インタフェース MessageListener 内の onMessage
パラメータ:
msg - 受信したJMSメッセージ

postSubscribe

protected void postSubscribe(Message msg)

[概 要]

subscribe結果受信用オーバーライドメソッドです。

[詳 細]

デフォルト処理は有りません。

[備 考]

全ての受信メッセージに対して共通の処理を行う場合、 このメソッドをオーバーライドした機能モデルを作成することで、 メッセージ加工処理を局所化出来ます。

パラメータ:
msg - subscribeの結果受信したオブジェクト

onUnsubscribe

public final void onUnsubscribe()

[概 要]

subscribe終了時にテンプレートコールされます。

[詳 細]

postUnsubscribe()をコールしてModelProcessEvent.FINISHED イベントを発行します。

[備 考]


postUnsubscribe

protected void postUnsubscribe()

[概 要]

subscribe終了時にテンプレートコールされるオーバーライドメソッドです。

[詳 細]

デフォルト処理は有りません。

[備 考]

このメソッドをオーバーライドすることでUnsubscribe時の共通処理を記述出来ます。



Copyright(C) Fujitsu All Rights Reserved.