Class InterSystemMessage<TSelf extends InterSystemMessage<?>>

java.lang.Object
nablarch.fw.messaging.InterSystemMessage<TSelf>
Type Parameters:
TSelf - 各具象クラスの型
Direct Known Subclasses:
ReceivedMessage, SendingMessage

public abstract class InterSystemMessage<TSelf extends InterSystemMessage<?>> extends Object
外部システムに対する送受信電文の内容を格納するデータオブジェクト。 このオブジェクトは以下のデータを保持する。
  • プロトコルヘッダー
  • メッセージボディ

プロトコルヘッダー

プロトコルヘッダーはMOM間のメッセージ転送制御に関連する制御情報であり、 MOM側で自動的に解析される。 これらの情報の多くは、MOM製品に依存した仕様であるため、本フレームワークは プロトコルヘッダーに極力依存しない設計となっている。

本フレームワークが直接使用するプロトコルヘッダーは以下の5つのみである。
  • メッセージIDヘッダ
  • 関連メッセージIDヘッダ
  • 送信宛先ヘッダ
  • 応答宛先ヘッダ
  • メッセージ有効期間ヘッダ (送信電文のみ)

メッセージボディ

プロトコルヘッダーを除いた電文のデータ部をメッセージボディと呼ぶ。 メッセージボディ部は、MOM側では単にバイナリデータとして扱うものとし、 解析は全てフレームワーク側で行う。

メッセージボディのフォーマットは nablarch.core.dataformat パッケージが提供する 機能を用いて定義する。解析後の電文はList-Map形式でアクセスすることが可能である。

メッセージボディ内は通常、以下に示すような階層構造をもち、その解析は各階層に 対応したデータリーダもしくはハンドラによって段階的に行われる。
  • フレームワーク制御ヘッダ
  • 業務共通ヘッダ
  • 業務データ
なお、メッセージボディの階層化はデータリーダやハンドラの構成を含め、フレームワークの 全体構造に関わる重要な要素なので、可能な限り早い段階で確定させておく必要がある。

クラス構成

このクラスは各電文クラスに共通する機能やデータ構造を実装するものの、 直接インスタンスを作成することはできない。 これは、Jakarta Messagingのjakarta.jms.Messageのような汎用メッセージオブジェクトを使いまわすのではなく、 その用途に応じて以下の4つの具象クラスを使いわける設計となっているためである。

  1. ReceivedMessage (受信メッセージ)
  2. SendingMessage (送信メッセージ)
  3. RequestMessage (被仕向け要求受信メッセージ) : ReceivedMessageのサブクラス
  4. ResponseMessage (応答送信メッセージ) : SendingMessageのサブクラス
Author:
Iwauo Tajima
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static final class 
    フレームワークで使用する既定ヘッダーのフィールド名
  • Constructor Summary

    Constructors
    Constructor
    Description
    デフォルトコンストラクタ
    コピーコンストラクタ
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract byte[]
    メッセーボディのバイナリ表現を返す。 送信(仕向)電文の場合はデータレコードをレコードフォーマッタで直列化したものを返す。 受信(被仕向)電文の場合はパース前の送信電文の内容をそのまま返す。
    この電文に関連付けられているメッセージのメッセージIDを返す。
    この電文の宛先キューの論理名を取得する。 MessagingContext.send(SendingMessage) メソッドでは、この戻り値に対応する 宛先に送信される。
    メッセージボディのフォーマット定義を返す。
    <T> T
    getHeader(String headerName)
    ヘッダーの値を返す。
    ヘッダーの一覧をMap形式で返す。
    この電文に割り当てられた識別子(メッセージID)を返す。 メッセージIDは電文送信時にMOMによって自動的に割り振られるため、 書式や一意性の範囲は製品依存となる。 また、送信前の電文にはnullが設定されている。
    電文のデータ部の末尾レコードの中から指定されたフィールドの値を取得して返す。
    電文のデータ部の末尾レコードを返す。
    getRecordOf(String recordType)
    指定された種別のレコードを返す。 複数存在する場合は、その先頭のレコードを返す。 存在しない場合はnullを返す。
    メッセージボディに含まれる全レコードを返す。
    getRecordsOf(String recordType)
    メッセージボディに含まれる指定された種別の全レコードを返す。 該当するレコードが存在しない場合は空のリストを返す。
    応答宛先キューの論理名を返す。
    この電文に既存のメッセージのIDを関連付ける。
    setDestination(String destination)
    送信宛先キューの論理名を設定する。
    メッセージボディのフォーマット定義を設定する。
    setHeader(String name, Object value)
    ヘッダーの値を設定する。
    setHeaderMap(Map<String,?> headers)
    ヘッダーの一覧を設定する。 (既存のヘッダーは全て削除される。)
    setMessageId(String messageId)
    メッセージIDを設定する。 メッセージIDはMOM側で採番される値であり、 このメソッドは単体テスト用に便宜的に容易されているものである。
    setReplyTo(String replyTo)
    この電文に対する応答宛先となるキューの論理名を設定する。

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • InterSystemMessage

      public InterSystemMessage()
      デフォルトコンストラクタ
    • InterSystemMessage

      public InterSystemMessage(InterSystemMessage<?> orgMessage)
      コピーコンストラクタ
      Parameters:
      orgMessage - コピー元電文
  • Method Details

    • setFormatter

      @Published(tag="architect") public TSelf setFormatter(DataRecordFormatter formatter)
      メッセージボディのフォーマット定義を設定する。
      Parameters:
      formatter - フォーマット定義オブジェクト
      Returns:
      このオブジェクト自体
    • getFormatter

      public DataRecordFormatter getFormatter()
      メッセージボディのフォーマット定義を返す。
      Returns:
      メッセージボディのフォーマット定義
    • getRecordOf

      @Published(tag="architect") public DataRecord getRecordOf(String recordType)
      指定された種別のレコードを返す。 複数存在する場合は、その先頭のレコードを返す。 存在しない場合はnullを返す。
      Parameters:
      recordType - レコード名
      Returns:
      指定した種別のデータレコード (存在しない場合はnull)
    • getRecords

      @Published(tag="architect") public List<DataRecord> getRecords()
      メッセージボディに含まれる全レコードを返す。
      Returns:
      メッセージボディに含まれる全てのレコード
    • getRecordsOf

      @Published(tag="architect") public List<DataRecord> getRecordsOf(String recordType)
      メッセージボディに含まれる指定された種別の全レコードを返す。 該当するレコードが存在しない場合は空のリストを返す。
      Parameters:
      recordType - レコード種別
      Returns:
      メッセージボディに含まれる指定された種別の全レコード
    • getParamMap

      @Published(tag="architect") public Map<String,Object> getParamMap()
      電文のデータ部の末尾レコードを返す。

      主にシングルレコード形式の電文で使用することを想定している。 レコードが存在しない場合はnullを返す。

      Returns:
      受信電文内の各フィールドの値を格納したMap
    • getParam

      @Published(tag="architect") public Object getParam(String name)
      電文のデータ部の末尾レコードの中から指定されたフィールドの値を取得して返す。

      主にシングルレコード形式の電文で使用することを想定している。 レコードが存在しない場合、もしくは、レコードに指定された項目が存在しない 場合はnullを返す。 。

      Parameters:
      name - 取得するフィールドの名称
      Returns:
      フィールドの値
    • getBodyBytes

      public abstract byte[] getBodyBytes()
      メッセーボディのバイナリ表現を返す。 送信(仕向)電文の場合はデータレコードをレコードフォーマッタで直列化したものを返す。 受信(被仕向)電文の場合はパース前の送信電文の内容をそのまま返す。
      Returns:
      メッセーボディのバイナリ表現
    • getHeaderMap

      @Published(tag="architect") public Map<String,Object> getHeaderMap()
      ヘッダーの一覧をMap形式で返す。
      Returns:
      ヘッダーの一覧
    • getHeader

      public <T> T getHeader(String headerName)
      ヘッダーの値を返す。
      Type Parameters:
      T - 期待するヘッダの型
      Parameters:
      headerName - 値を取得するヘッダーの名前
      Returns:
      ヘッダーの値
    • setHeader

      public TSelf setHeader(String name, Object value)
      ヘッダーの値を設定する。
      Parameters:
      name - 値を設定するヘッダーの名前
      value - ヘッダーの値
      Returns:
      このオブジェクト自体
    • setHeaderMap

      public TSelf setHeaderMap(Map<String,?> headers)
      ヘッダーの一覧を設定する。 (既存のヘッダーは全て削除される。)
      Parameters:
      headers - ヘッダーの一覧
      Returns:
      このオブジェクト自体
    • getMessageId

      @Published(tag="architect") public String getMessageId()
      この電文に割り当てられた識別子(メッセージID)を返す。 メッセージIDは電文送信時にMOMによって自動的に割り振られるため、 書式や一意性の範囲は製品依存となる。 また、送信前の電文にはnullが設定されている。
      Returns:
      この電文のID文字列 (送信前はnull)
    • setMessageId

      @Published(tag="architect") public TSelf setMessageId(String messageId)
      メッセージIDを設定する。 メッセージIDはMOM側で採番される値であり、 このメソッドは単体テスト用に便宜的に容易されているものである。
      Parameters:
      messageId - メッセージIDとして指定する文字列
      Returns:
      このオブジェクト自体
    • getDestination

      @Published(tag="architect") public String getDestination()
      この電文の宛先キューの論理名を取得する。 MessagingContext.send(SendingMessage) メソッドでは、この戻り値に対応する 宛先に送信される。
      Returns:
      宛先キューの論理名
    • setDestination

      @Published(tag="architect") public TSelf setDestination(String destination)
      送信宛先キューの論理名を設定する。
      Parameters:
      destination - 応答宛先キューの論理名
      Returns:
      このオブジェクト自体
    • getCorrelationId

      @Published(tag="architect") public String getCorrelationId()
      この電文に関連付けられているメッセージのメッセージIDを返す。
      Returns:
      この電文のID文字列
    • setCorrelationId

      @Published(tag="architect") public TSelf setCorrelationId(String messageId)
      この電文に既存のメッセージのIDを関連付ける。
      Parameters:
      messageId - 関連付けるメッセージのID
      Returns:
      この電文のID文字列
    • getReplyTo

      @Published(tag="architect") public String getReplyTo()
      応答宛先キューの論理名を返す。
      Returns:
      この電文のID文字列
    • setReplyTo

      @Published(tag="architect") public TSelf setReplyTo(String replyTo)
      この電文に対する応答宛先となるキューの論理名を設定する。
      Parameters:
      replyTo - 応答宛先キューの論理名
      Returns:
      このオブジェクト自体