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

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

public class JMSConsumeCore
extends BaseModel
implements MessageListener

[概 要]

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

[詳 細]

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

必須設定メソッド

[備 考]

使用例)
サーバでProduce中のキューメッセージを継続的に受信する。
        package demo.serverpush.action;
        
        import java.util.Date;
        import java.util.List;
        import java.util.Vector;
        
        import javax.jms.MapMessage;
        import javax.swing.JScrollBar;
        import javax.swing.JScrollPane;
        import javax.swing.JTable;
        import javax.swing.JToggleButton;
        import javax.swing.table.DefaultTableModel;
        
        import jp.co.fujitsu.reffi.client.swing.action.BaseAction;
        import jp.co.fujitsu.reffi.client.swing.controller.ParameterMapping;
        import jp.co.fujitsu.reffi.client.swing.event.ModelProcessEvent;
        import jp.co.fujitsu.reffi.client.swing.model.JMSConsumeCore;
        import jp.co.fujitsu.reffi.client.swing.model.Model;
        
        public class ClientConsumeAction extends BaseAction {
                
                @Override
                protected boolean prepare(ParameterMapping parameterMapping) throws Exception {
                        // トグルボタンが押下中は受信中
                        if((Boolean)getComponentValue("serverPushFrame.jtbClientConsume")) {
                                ((JToggleButton)getComponent("serverPushFrame.jtbClientConsume")).setText("受信中");
                        }else{
                                ((JToggleButton)getComponent("serverPushFrame.jtbClientConsume")).setText("開 始");
                        }
                        
                        return true;
                }
        
                @Override
                protected void reserveModels(List> models) {
                        models.add(JMSConsumeCore.class);
                }
        
                @Override
                public boolean nextModel(int index, ModelProcessEvent prev, Model next)
                                throws Exception {
                        
                        if(index == 0) {
                                ((JMSConsumeCore)next).setQueueName("queue/testQueue");
                                if((Boolean)getComponentValue("serverPushFrame.jtbClientConsume")) {
                                        // 受信開始
                                        ((JMSConsumeCore)next).setIdentifier(String.valueOf(getOwnWindow().hashCode()));
                                        ((JMSConsumeCore)next).setConsume(true);
                                }else{
                                        // 受信停止
                                        ((JMSConsumeCore)next).setIdentifier(String.valueOf(getOwnWindow().hashCode()));
                                        ((JMSConsumeCore)next).setConsume(false);
                                }
                        }
                        return true;
                }
        
                @Override
                public void successForward(int index, Model model, Object result) throws Exception {
                        if((Boolean)getComponentValue("serverPushFrame.jtbClientConsume")) {
                                // 受信中は受信したMapMessageを画面上のJTableに表示
                                JTable jtConsumeResult = (JTable)getComponent("serverPushFrame.jtConsumeResult");
                                DefaultTableModel tableModel = (DefaultTableModel)jtConsumeResult.getModel();
                                
                                MapMessage mapMessage = (MapMessage)result;
                                String sendIndex = mapMessage.getString("index");
                                String sendMessage = mapMessage.getString("message");
                                Date consumeDate = new Date();
                                
                                Vector rowData = new Vector();
                                rowData.add(sendIndex);
                                rowData.add(sendMessage);
                                rowData.add(consumeDate.toString());
                                
                                tableModel.addRow(rowData);
                                
                                JScrollPane jspConsumeResult = (JScrollPane)getComponent("serverPushFrame.jspConsumeResult");
                                JScrollBar nob = jspConsumeResult.getVerticalScrollBar();
                                if(nob != null) {
                                        nob.setValue(nob.getMaximum());
                                }
                        }
                }
        
                @Override
                public Exception failureForward(int index, Model model, Exception e) {
                        System.out.println("受信失敗");
                        
                        return e;
                }
        }
 

[環 境] JDK 6.0 Update 11

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

作成者:
Project Reffi

コンストラクタの概要
JMSConsumeCore()
           
 
メソッドの概要
 String getClientId()
          [概 要] QueuConnectionに与えるClientIdを取得します。
 String getConnectionFactoryName()
          [概 要] JMSコネクションファクトリJNDI名を返却します。
 MessageConsumer getConsumer()
          [概 要] Queueを購読するオブジェクトを返却します。
 Hashtable<String,String> getEnvironment()
          [概 要] JMS接続を行う為の接続先環境設定プロパティを返却します。
 String getIdentifier()
          [概 要] キューを受信中のJMSConsumeCoreを識別する為の識別子を返却します。
 Queue getQueue()
          [概 要] 購読を行うキューを返却します。
 QueueConnection getQueueConnection()
          [概 要] サーバとのキューコネクションを返却します。
 String getQueueName()
          [概 要] 購読開始、中止対象キュー名を返却します。
 QueueSession getQueueSession()
          [概 要] サーバとのキューコネクションを返却します。
 boolean isFireSuccessEventImmediately()
          [概 要] コンシューム開始をモデル処理成功と見做すかどうかのフラグを返却します。
 boolean isUnconsume()
          [概 要] consume中止を判断するフラグを返却します。
protected  void mainproc()
          [概 要] 購読の開始、停止をJMSConsumerManagerに委譲します。
 void onMessage(Message msg)
          [概 要] キューメッセージ受信ハンドラです。
 void onUnconsume()
          [概 要] consume終了時にテンプレートコールされます。
protected  void postConsume(Message msg)
          [概 要] consume結果受信用オーバーライドメソッドです。
protected  void postUnconsume()
          [概 要] consume終了時にテンプレートコールされるオーバーライドメソッドです。
 void setClientId(String clientId)
          [概 要] QueueConnectionに与えるClientIdを設定します。
 void setConnectionFactoryName(String connectionFactoryName)
          [概 要] JMSコネクションファクトリJNDI名を設定します。
 void setConsumer(MessageConsumer consumer)
          [概 要] Queueを購読するオブジェクトを設定します。
 void setEnvironment(Hashtable<String,String> environment)
          [概 要] JMS接続を行う為の接続先環境設定プロパティを設定します。
 void setFireSuccessEventImmediately(boolean fireSuccessEventImmediately)
          [概 要] コンシューム開始をモデル処理成功と見做すかどうかのフラグを設定します。
 void setIdentifier(String identifier)
          [概 要] キューを受信中のJMSConsumeCoreを識別する為の識別子を設定します。
 void setQueue(Queue queue)
          [概 要] 購読を行うキューを設定します。
 void setQueueConnection(QueueConnection queueConnection)
          [概 要] サーバとのキューコネクションを設定します。
 void setQueueName(String queueName)
          [概 要] 購読開始、中止対象キュー名を設定します。
 void setQueueSession(QueueSession queueSession)
          [概 要] サーバとのキューコネクションを返却します。
 void setUnconsume(boolean unconsume)
          [概 要] 開始、中止を判断するフラグを設定します。
 
クラス 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
 

コンストラクタの詳細

JMSConsumeCore

public JMSConsumeCore()
メソッドの詳細

getIdentifier

public String getIdentifier()

[概 要]

キューを受信中のJMSConsumeCoreを識別する為の識別子を返却します。

[詳 細]

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

[備 考]

戻り値:
キューを受信中のJMSConsumeCoreを識別する為の識別子

setIdentifier

public void setIdentifier(String identifier)

[概 要]

キューを受信中のJMSConsumeCoreを識別する為の識別子を設定します。

[詳 細]

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

[備 考]

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

パラメータ:
identifier - キューを受信中のJMSConsumeCoreを識別する為の識別子

isUnconsume

public boolean isUnconsume()

[概 要]

consume中止を判断するフラグを返却します。

[詳 細]

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

[備 考]

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

setUnconsume

public void setUnconsume(boolean unconsume)

[概 要]

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

[詳 細]

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

[備 考]

パラメータ:
unconsume - 開始、中止を判断するフラグ

getEnvironment

public Hashtable<String,String> getEnvironment()

[概 要]

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

[詳 細]

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

[備 考]

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

setEnvironment

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

[概 要]

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

[詳 細]

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

[備 考]

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

getQueueConnection

public QueueConnection getQueueConnection()

[概 要]

サーバとのキューコネクションを返却します。

[詳 細]

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

[備 考]

戻り値:
サーバとのキューコネクション

setQueueConnection

public void setQueueConnection(QueueConnection queueConnection)

[概 要]

サーバとのキューコネクションを設定します。

[詳 細]

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

[備 考]

パラメータ:
queueConnection - サーバとのキューコネクション

getQueueSession

public QueueSession getQueueSession()

[概 要]

サーバとのキューコネクションを返却します。

[詳 細]

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

[備 考]

戻り値:
サーバとのキューコネクション

setQueueSession

public void setQueueSession(QueueSession queueSession)

[概 要]

サーバとのキューコネクションを返却します。

[詳 細]

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

[備 考]

パラメータ:
queueSession - サーバとのキューコネクション

getQueue

public Queue getQueue()

[概 要]

購読を行うキューを返却します。

[詳 細]

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

[備 考]

戻り値:
購読を行うキュー

setQueue

public void setQueue(Queue queue)

[概 要]

購読を行うキューを設定します。

[詳 細]

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

[備 考]

パラメータ:
queue - 購読を行うキュー

getQueueName

public String getQueueName()

[概 要]

購読開始、中止対象キュー名を返却します。

[詳 細]

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

[備 考]

戻り値:
購読開始、中止対象キュー名

setQueueName

public void setQueueName(String queueName)

[概 要]

購読開始、中止対象キュー名を設定します。

[詳 細]

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

[備 考]

パラメータ:
queueName - 購読開始、中止対象キュー名

getConsumer

public MessageConsumer getConsumer()

[概 要]

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

[詳 細]

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

[備 考]

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

setConsumer

public void setConsumer(MessageConsumer consumer)

[概 要]

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

[詳 細]

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

[備 考]

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

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()

[概 要]

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

[詳 細]

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

[備 考]

戻り値:
QueueConnectionに与えるClientId

setClientId

public void setClientId(String clientId)

[概 要]

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

[詳 細]

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

[備 考]

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

isFireSuccessEventImmediately

public boolean isFireSuccessEventImmediately()

[概 要]

コンシューム開始をモデル処理成功と見做すかどうかのフラグを返却します。

[詳 細]

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

[備 考]

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

setFireSuccessEventImmediately

public void setFireSuccessEventImmediately(boolean fireSuccessEventImmediately)

[概 要]

コンシューム開始をモデル処理成功と見做すかどうかのフラグを設定します。

[詳 細]

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

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

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

[備 考]

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

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

mainproc

protected void mainproc()
                 throws NamingException,
                        JMSException

[概 要]

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

[詳 細]

JMSConsumeCoreManager.consume(String, JMSConsumeCore) をgetQueueName()、thisを引数としてコールします。
mainprocを実行したJMSConsumeCoreは、getQueueName()を購読するモデルとして JMSConsumerManagerに管理されます。

isUnconsumeがtrueの場合、 JMSConsumeCoreManager.unconsume(String, String) をgetQueueName()、getIdentifier()を引数としてコールします。
JMSConsumerManagerは管理しているJMSConsumeCoreの中からgetQueueName()を購読中 のgetIdentifier()を持つJMSConsumeCoreを探し、購読を停止させます。 getIdentifier()が指定されていない場合、getQueueName()を購読中の全JMSConsumeCore に購読を停止させます。

[備 考]

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

onMessage

public void onMessage(Message msg)

[概 要]

キューメッセージ受信ハンドラです。

[詳 細]

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

[備 考]

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

postConsume

protected void postConsume(Message msg)

[概 要]

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

[詳 細]

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

[備 考]

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

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

onUnconsume

public final void onUnconsume()

[概 要]

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

[詳 細]

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

[備 考]


postUnconsume

protected void postUnconsume()

[概 要]

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

[詳 細]

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

[備 考]

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



Copyright(C) Fujitsu All Rights Reserved.