325.15. 본문 및 헤더를 텍스트로 저장

Camel 2.11에서 사용 가능

메시지 본문을 저장하고 (ed) 헤더를 별도의 열에서 String로 선택하도록 JdbcAggregationRepository 을 구성할 수 있습니다. 예를 들어 본문을 저장하고 다음 두 개의 헤더 companyNameaccountName 은 다음 SQL을 사용합니다.

CREATE TABLE aggregationRepo3 (
 id varchar(255) NOT NULL,
 exchange blob 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,
 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>

325.15.1. codec (Serialization)

모든 유형의 페이로드를 포함할 수 있기 때문에 Exchange는 설계상 직렬화할 수 없습니다. 데이터베이스 BLOB 필드에 저장할 바이트 배열로 변환됩니다.It is converted into a byte array to be stored in a database BLOB field. 이러한 모든 변환은 JdbcCodec 클래스에서 처리합니다. 코드의 한 가지 세부 사항 중 하나는 주의가 필요합니다: ClassLoadingAwareObjectInputStream.

Apache ActiveMQ 프로젝트에서 ClassLoadingAwareObjectInput 이 재사용되었습니다. ObjectInputStream 을 래핑하고 현재Thread 대신 ContextClassLoader 와 함께 사용합니다. 다른 번들에서 노출하는 클래스를 로드할 수 있다는 이점이 있습니다. 이를 통해 교환 본문 및 헤더에 사용자 지정 유형 오브젝트 참조가 있을 수 있습니다.