4.2.29. メッセージのシリアル化に関するアドバイス
各エンタープライズサービスバスコンポーネントはすべてのメッセージを Java オブジェクトのコレクションとして扱いますが、多くの場合、これらのメッセージをシリアライズする必要があります。次の場合に行います。
- データが保存される
- メッセージが異なる ESB プロセス間で送信される
- デバッグしている
JBoss Enterprise SOA Platform は、要件が各デプロイメントの固有の特性に影響されるので、メッセージのシリアライゼーションに特定の形式を 1 つ使用する必要はありません。
org.jboss.soa.esb.message.format.MessageFactory クラスから org.jboss.soa.esb.message.Message インターフェイスのさまざまな実装を取得できます。
public abstract class MessageFactory
{
public abstract Message getMessage ();
public abstract Message getMessage (URI type);
public abstract void reset();
public static MessageFactory getInstance ();
}
ユニフォームリソースインジケーターは、メッセージのシリアライゼーションの実装を一意に識別します。新しいインスタンスを作成するときに実装を指定するか、事前設定されたデフォルトを使用します。
シリアル化されたメッセージ形式には、JBOSS_XML と JBOSS_SERIALIZED の 2 つがあります。
- MessageType.JBOSS_XML
- この実装は、メッセージの XML 表現を使用します。メッセージのスキーマは、
schemas/message.xsdファイルで定義されます。任意のオブジェクトをメッセージに追加できます。つまり、シリアライズ可能である必要はありません。したがって、メッセージをシリアライズする必要がある場合に、そのようなオブジェクトを XML との間でマーシャリングおよびアンマーシャリングするメカニズムを提供する必要がある場合があります。org.jboss.soa.esb.message.format.xml.marshal.MarshalUnmarshalPluginを介してこれを行います。public interface MarshalUnmarshalPlugin { public static final String MARSHAL_UNMARSHAL_PLUGIN = "org.jboss.soa.esb.message.format.xml.plugin"; public boolean canPack(final Object value); public boolean marshal (Element doc, Object param) throws MarshalException; public Object unmarshal (Element doc) throws UnmarshalException; public URI type (); } - MessageType.JAVA_SERIALIZED
- これがデフォルトです。この実装では、メッセージのすべてのコンポーネントがシリアライズ可能である必要があります。また、メッセージの受信者が (Java クラスを介して) デシリアライズできる十分な情報を持っている必要があります。その URI は urn:jboss/esb/message/type/JAVA_SERIALIZED です。メッセージの XML 表現を使用します。メッセージのスキーマは、
schemas/message.xsdファイルで定義されます。その URI は urn:jboss/esb/message/type/JBOSS_XML です。また、すべてのコンテンツが Java シリアライズ可能である必要があります。シリアル化できないオブジェクトをメッセージに追加しようとすると、IllegalParameterExceptionエラーが発生します。その URI はurn:jboss/esb/message/type/JAVA_SERIALIZEDです。
重要
特定のサービス実装とお使いのアプリケーションを関連付けることができるので、メッセージ形式の JBOSS_SERIALIZED バージョンを使用する場合は注意してください。
org.jboss.soa.esb.message.format.MessagePlugin を介して実行時に他のメッセージ実装を提供できます。
public interface MessagePlugin
{
public static final String MESSAGE_PLUGIN =
"org.jboss.soa.esb.message.format.plugin";
public Object createBodyType(Message msg, String type);
public Message getMessage ();
public URI getType ();
}
各プラグインは、getType メソッドを使用して、(getMessage を介して) 提供するメッセージ実装のタイプを一意に識別する必要があります。プラグインの実装は、
jbossesb-properties.xml ファイルを介してシステムに識別される必要があります。(org.jboss.soa.esb.message.format.plugin 拡張子を持つプロパティー名を使用します。)