48.16. ボディーとヘッダーをテキストとして保存
JdbcAggregationRepository を設定してメッセージボディーを保存し、ヘッダーを別の列に String として選択できます。たとえば、ボディーと以下の 2 つのヘッダー companyName および accountName を保存するには、以下の SQL を使用します。
CREATE TABLE aggregationRepo3 (
id varchar(255) NOT NULL,
exchange blob NOT NULL,
version BIGINT NOT NULL,
body varchar(1000),
companyName varchar(1000),
accountName varchar(1000),
constraint aggregationRepo3_pk PRIMARY KEY (id)
);
CREATE TABLE aggregationRepo3_completed (
id varchar(255) NOT NULL,
exchange blob NOT NULL,
version BIGINT NOT NULL,
body varchar(1000),
companyName varchar(1000),
accountName varchar(1000),
constraint aggregationRepo3_completed_pk PRIMARY KEY (id)
);
次に、以下のようにこの動作を有効にするようにリポジトリーを設定します。
<bean id="repo3"
class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
<property name="repositoryName" value="aggregationRepo3"/>
<property name="transactionManager" ref="txManager3"/>
<property name="dataSource" ref="dataSource3"/>
<!-- configure to store the message body and following headers as text in the repo -->
<property name="storeBodyAsText" value="true"/>
<property name="headersToStoreAsText">
<list>
<value>companyName</value>
<value>accountName</value>
</list>
</property>
</bean>
48.16.1. Codec (Serialization) リンクのコピーリンクがクリップボードにコピーされました!
任意のタイプのペイロードを含めることができるため、エクスチェンジは設計によってシリアライズできません。データベース BLOB フィールドに保存されるバイトアレイに変換されます。これらの変換はすべて JdbcCodec クラスによって処理されます。コードの詳細の 1 つである ClassLoadingAwareObjectInputStream に注意してください。
ClassLoadingAwareObjectInputStream は、Apache ActiveMQ プロジェクトから再利用されています。ObjectInputStream をラップし、currentThread ではなく ContextClassLoader で使用します。この利点は、他のバンドルによって公開されるクラスをロードできることです。これにより、エクスチェンジボディーとヘッダーにカスタム型オブジェクトの参照を設定できます。