変更履歴

5.1 および 5.2 間の変更

パッケージとクラスの変更

Pausable は o.s.i.endpoint から o.s.i.core に移動されました。

動作の変更

このバージョンの動作の変更については、移行ガイド [GitHub] (英語) を参照してください。

新規コンポーネント

RSocket サポート

spring-integration-rsocket モジュールは、RSocket プロトコルをサポートするチャネルアダプター実装で利用可能になりました。詳細については、RSocket サポートを参照してください。

レート制限アドバイスのサポート

RateLimiterRequestHandlerAdvice は、ハンドラーのリクエストレートを制限するために利用可能になりました。詳細については、レートリミッターのアドバイスを参照してください。

キャッシングアドバイスのサポート

CacheRequestHandlerAdvice は、ハンドラーでリクエスト結果をキャッシュするために使用できるようになりました。詳細については、キャッシングのアドバイスを参照してください。

Kotlin スクリプトのサポート

JSR223 スクリプトモジュールに Kotlin スクリプトのサポートが含まれるようになりました。詳細については、スクリプトのサポートを参照してください。

Flux Aggregator サポート

FluxAggregatorMessageHandler は、Project Reactor Flux 演算子に基づいたメッセージロジックのグループ化とウィンドウ化に使用できるようになりました。詳細については、Flux Aggregator を参照してください。

FTP/SFTP イベントパブリッシャー

FTP および SFTP モジュールは、特定の Apache Mina FTP/SFTP サーバーイベントのイベントリスナーを提供するようになりました。詳細については、Apache Mina FTP サーバーイベントおよび Apache Mina SFTP サーバーイベントを参照してください。

Avro Transformers

シンプルな Apache Avro トランスが提供されるようになりました。詳細については、Avro Transformers を参照してください。

一般的な変更

JsonToObjectTransformer は、逆直列化するターゲットオブジェクトのジェネリクスをサポートするようになりました。詳細については、JSONTransformers を参照してください。

splitter は、discardChannel 構成オプションをサポートするようになりました。詳細については、スプリッターを参照してください。

コントロールバスは Pausable (Lifecycle の拡張)操作を処理できるようになりました。詳細については、制御バスを参照してください。

出力メッセージのヘッダーをマージおよび計算するために、アグリゲーターコンポーネントに Function<MessageGroup, Map<String, Object>> 戦略が導入されました。詳細については、アグリゲータープログラミングモデルを参照してください。

フレームワークでスローされるすべての MessageHandlingException には、エンドユーザーコードが関与しない場合に構成パーツをバックトラッキングするための Bean リソースとソースが含まれています。詳細については、エラー処理を参照してください。

エンドユーザーエクスペリエンスを向上させるために、Java DSL は、ゲートウェイインターフェースでフローを開始するためのコンフィグレーターバリアントを提供するようになりました。詳細については、IntegrationFlows.from(Class<?> serviceInterface, Consumer<GatewayProxySpec> endpointConfigurer) JavaDocs を参照してください。また、MethodArgsHolder は、GatewayProxyFactoryBean のすべての式の評価コンテキストのルートオブジェクトになりました。#args および #method 評価コンテキスト変数は非推奨となりました。詳細については、メッセージングゲートウェイを参照してください。

AMQP の変更

タイムアウト内にパブリッシャーの確認が受信されない場合、"nack" を合成するように送信エンドポイントを構成できるようになりました。詳細については、送信チャネルアダプターを参照してください。

受信チャネルアダプターは、バッチフラグメントごとに個別のメッセージを受信する代わりに、List<?> ペイロードとしてバッチメッセージを受信できるようになりました。詳細については、バッチメッセージを参照してください。

呼び出し元の確認(確認)が受信されるまで、呼び出し元のスレッドをブロックするように送信チャネルアダプターを構成できるようになりました。詳細については、送信チャネルアダプターを参照してください。

ファイルの変更

リモートファイルのフィルタリングに対するいくつかの改善が行われました。詳細については、リモート永続ファイルリストフィルターを参照してください。

TCP の変更

ByteArrayLengthHeaderSerializer で使用される長さヘッダーには、ペイロードに加えてヘッダーの長さを含めることができます。詳細については、メッセージ境界 (シリアライザーとデシリアライザー) を参照してください。

TcpNioServerConnectionFactory を使用する場合、既存の接続からの読み取りよりも新しい接続の受け入れが優先されますが、構成は可能です。詳細については、ノンブロッキング I/O について (NIO) を参照してください。

送信ゲートウェイには、新しいプロパティ closeStreamAfterSend があります。リクエスト / 応答ごとに新しい接続を使用すると、接続を閉じずに EOF がサーバーに通知されます。これは、データの区切り文字の代わりに EOF を使用してメッセージの終わりを通知するサーバーに役立ちます。詳細については、TCP ゲートウェイを参照してください。

クライアント接続ファクトリは、connectTimeout をサポートするようになりました。これにより、その時間に接続が確立されなかった場合に例外がスローされます。詳細については、TCP 接続ファクトリを参照してください。

SoftEndOfStreamException は、IOException を継承する代わりに RuntimeException になりました。

メールの変更

AbstractMailReceiver には autoCloseFolder オプション(デフォルトでは true)があり、フェッチ後の自動フォルダークローズを無効にしますが、ダウンストリームインタラクションの代わりに IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE ヘッダーを設定します。詳細については、メール受信チャネルアダプターを参照してください。

HTTP の変更

HTTP 受信エンドポイントは、リクエストペイロードの検証をサポートするようになりました。詳細については、HTTP サポートを参照してください。

WebFlux の変更

WebFluxRequestExecutingMessageHandler は、リクエストメッセージ payload として PublisherResourceMultiValueMap をサポートするようになりました。WebFluxInboundEndpoint は、リクエストペイロードの検証をサポートするようになりました。詳細については、WebFlux サポートを参照してください。

MongoDb の変更

MongoDbMessageStore をカスタムコンバーターで構成できるようになりました。詳細については、MongoDB サポートを参照してください。

ルーターの変更

チャンネル Bean 名としてチャンネルキーへのフォールバックを無効にできるようになりました。詳細については、動的ルーターを参照してください。

FTP/SFTP の変更

RotatingServerAdvice は、RotationPolicy とその StandardRotationPolicy から切り離されました。

ホスト / ポートおよびディレクトリを含むリモートファイル情報は、AbstractInboundFileSynchronizingMessageSource および AbstractRemoteFileStreamingMessageSource 実装のメッセージヘッダーに含まれるようになりました。また、この情報は、AbstractRemoteFileOutboundGateway 実装の読み取り操作結果のヘッダーに含まれます。FTP 送信エンドポイントは、アップロードされたファイルの権限を変更するために chmod をサポートするようになりました。(バージョン 4.3 以降、SFTP はすでにサポートしています)。詳細については、FTP(S) サポートおよび SFTP サポートを参照してください。

5.0 および 5.1 間の変更

新規コンポーネント

以下のコンポーネントは、5.1 の新機能です。

AmqpDedicatedChannelAdvice

厳密なメッセージ順序を参照してください。

機能サポートの改善

java.util.function インターフェースでは、フレームワークコンポーネントの統合サポートが改善されました。また、Kotlin ラムダをハンドラーおよびソースメソッドに使用できるようになりました。

@LongRunningTest

JUnit 5 @LongRunningTest 条件付きアノテーションが提供され、RUN_LONG_INTEGRATION_TESTS エントリの環境またはシステムプロパティを true の値でチェックして、テストを実行するかスキップするかを決定します。

JUnit のルールと条件を参照してください。

一般的な変更

バージョン 5.1 では、次の変更が行われました。

Java DSL

IntegrationFlowContext はインターフェースになり、IntegrationFlowRegistration は IntegrationFlowContext の内部インターフェースになりました。

新しい logAndReply() 演算子は、リクエスト / 応答構成のフローの最後にログを記録する場合に便利なように導入されました。これにより、一方向のエンドフローコンポーネントとして扱われる log() との混乱を回避できます。

統合フロー内の NamedComponent に対して生成された Bean 名は、視覚ツール、ログアナライザー、メトリクスコレクターから読みやすくするために、コンポーネント型に基づいています。

GenericHandler.handle() は、2 番目の引数の MessageHeaders 型を除きます。

ディスパッチャーの例外

AbstractDispatcher がキャッチして再スローした例外の一貫性が向上しました。

  • failedMessage プロパティを持つあらゆる種類の MessagingException は、変更されずに再スローされます。

  • 他のすべての例外は、failedMessage プロパティが設定された MessageDeliveryException にラップされます。

以前:

  • failedMessage プロパティを持つあらゆる種類の MessagingException が変更されずに再スローされた

  • failedMessage プロパティを持たない MessagingException は、failedMessage プロパティが設定された MessagingException にラップされました。

  • 他の RuntimeException インスタンスは変更されずに再スローされました。

  • チェックされた例外は、failedMessage プロパティが設定された MessageDeliveryException にラップされました。

グローバルチャネルインターセプター

グローバルチャネルインターセプターは、Java DSL または beanFactory.initializeBean() を使用して初期化された Bean を使用する場合、IntegrationFlowContext を介するなど、動的に登録されたチャネルに適用されるようになりました。以前は、アプリケーションコンテキストがリフレッシュされた後に Bean が作成された場合、インターセプターは適用されませんでした。

チャネルインターセプター

メッセージが受信されない場合、ChannelInterceptor.postReceive() は呼び出されなくなりました。null Message<?> をチェックする必要はなくなりました。以前は、メソッドが呼び出されていました。以前の動作に依存するインターセプターがある場合は、代わりに afterReceiveCompleted() を実装してください。これは、メッセージが受信されたかどうかに関係なく、そのメソッドが呼び出されるためです。さらに、PolledAmqpChannel および PolledJmsChannel は、以前は null で afterReceiveCompleted() を呼び出しませんでした。彼らは今そうします。

ObjectToJsonTransformer

ObjectToJsonTransformer に新しい ResultType.BYTES モードが導入されました。

詳細については、JSONTransformers を参照してください。

統合フロー: 生成された Bean 名

バージョン 5.0.5 から、IntegrationFlow のコンポーネント用に生成された Bean 名には、接頭部としてフロー Bean 名とそれに続くドットが含まれます。例: フロー Bean の名前が flowBean の場合、生成された Bean の名前は flowBean.generatedBean になります。

詳細については、メッセージフローの操作を参照してください。

アグリゲーターの変更

groupTimeout が負の値に評価される場合、アグリゲーターはすぐにグループを期限切れにします。null のみが、現在のメッセージに対して何もしないシグナルと見なされます。

(デフォルトで)出力メッセージの MessageBuilder.popSequenceDetails() を呼び出すことができる新しい popSequence プロパティが導入されました。また、AbstractAggregatingMessageGroupProcessor は、最適化のために Message 全体ではなく AbstractIntegrationMessageBuilder を返すようになりました。

詳細については、アグリゲーターを参照してください。

@Publisher アノテーションの変更

バージョン 5.1 から、@EnablePublisher を使用するか、<int:annotation-config> の <int:enable-publisher> 子要素を使用して、@Publisher AOP 機能を明示的にオンにする必要があります。また、ProxyFactory 構成を調整するために、proxy-target-class および order 属性が追加されました。

ファイルの変更

FileExistsMode.APPEND または FileExistsMode.APPEND_NO_FLUSH を使用している場合は、新しいファイルを作成するときに呼び出される newFileCallback を提供できます。このコールバックは、新しく作成されたファイルと、コールバックをトリガーしたメッセージを受け取ります。たとえば、これを使用して CSV ヘッダーを書き込むことができます。

FileReadingMessageSource は、start() が呼び出されるまでディレクトリをチェックおよび作成しません。FileReadingMessageSource の受信チャネルアダプターに autoStartup = false がある場合、アプリケーションの起動中にファイルシステムに対する障害は発生しません。

詳細については、ファイルサポートを参照してください。

AMQP の変更

DefaultAmqpHeaderMapper で ID および Timestamp ヘッダーマッピングを変更しました。詳細については、AMQP メッセージヘッダーの下部にある注を参照してください。

contentType ヘッダーは、一般ヘッダーマップのエントリとして正しくマップされるようになりました。詳細については、contentType ヘッダーを参照してください。

バージョン 5.1.3 以降、手動確認応答の使用時にメッセージ変換例外が発生し、エラーチャネルが定義されている場合、ペイロードは channel および deliveryTag プロパティが追加された ManualAckListenerExecutionFailedException です。これにより、エラーフローで元のメッセージを確認 / 拒否できます。詳細については、受信メッセージの変換を参照してください。

JDBC の変更

JDBC Inbound Channel Adapter および JDBC Outbound Gateway の紛らわしい max-rows-per-poll プロパティは、新しく導入された max-rows プロパティを推奨して非推奨となりました。

JdbcMessageHandler は、リクエストメッセージのペイロードが Iterable 型のインスタンスである場合、batchUpdate 機能をサポートするようになりました。

INT_CHANNEL_MESSAGE テーブルのインデックス(JdbcChannelMessageStore の)は最適化されています。このようなストアに大きなメッセージグループがある場合は、インデックスを変更できます。

詳細については、JDBC サポートを参照してください。

FTP および SFTP の変更

RotatingServerAdvice が利用可能になり、受信チャネルアダプターを使用して複数のサーバーとディレクトリをポーリングできます。詳細については、受信チャネルアダプター: 複数のサーバーとディレクトリのポーリングおよび受信チャネルアダプター: 複数のサーバーとディレクトリのポーリングを参照してください。

また、受信アダプター localFilenameExpression インスタンスには、ポーリングされるリモートディレクトリを含む #remoteDirectory 変数を含めることができます。コンパレーターの汎用型(ストリーミングアダプター用に取得されたファイルリストのソートに使用)が Comparator<AbstractFileInfo<F>> から Comparator<F> に変更されました。詳細については、FTP ストリーミング受信チャネルアダプターおよび SFTP ストリーミング受信チャネルアダプターを参照してください。

さらに、受信チャネルアダプターのシンクロナイザに Comparator を提供できるようになりました。これは、maxFetchSize を使用して取得するファイルを制限する場合に役立ちます。

CachingSessionFactory には新しいプロパティ testSession があり、true の場合、キャッシュから既存のセッションをチェックアウトするときに、ファクトリが Session で test() 操作を実行します。

詳細については、SFTP セッションキャッシングおよび FTP セッションキャッシングを参照してください。

送信ゲートウェイ MPUT コマンドは、ファイルまたは文字列のコレクションを持つメッセージペイロードをサポートするようになりました。詳細については、SFTP 送信ゲートウェイおよび FTP 送信ゲートウェイを参照してください。

TCP サポート

SSL を使用する場合、信頼できる証明書を使用した中間者攻撃を防ぐために、デフォルトでホスト検証が有効になりました。詳細については、ホスト検証を参照してください。

さらに、DefaultTcpSSLContextSupport でキーとトラストストアの型を構成できるようになりました。

Twitter サポート

Spring Social プロジェクトがサポート終了 (英語) に移行したため、Spring Integration の Twitter サポートは Extensions プロジェクトに移行しました。詳細については、Spring Integration ソーシャル Twitter [GitHub] (英語) を参照してください。

JMS サポート

JmsSendingMessageHandler は、実行時に送信する JMS メッセージのそれぞれの QoS オプションを決定する deliveryModeExpression および timeToLiveExpression オプションを提供するようになりました。DefaultJmsHeaderMapper では、true および setMapInboundDeliveryMode() および setMapInboundExpiration() の各オプションに設定することにより、受信 JMSDeliveryMode および JMSExpiration プロパティをマップできるようになりました。JmsMessageDrivenEndpoint または JmsInboundGateway が停止すると、関連するリスナーコンテナーがシャットダウンされます。これにより、共有接続とすべてのコンシューマーが閉じられます。以前の動作に戻すようにエンドポイントを構成できます。

詳細については、JMS サポートを参照してください。

HTTP/WebFlux サポート

statusCodeExpression (および Function)には、評価コンテキストのルートオブジェクトとして RequestEntity<?> が提供されるようになりました。そのため、リクエストヘッダー、メソッド、URI、本文をターゲットステータスコードの計算に使用できます。

詳細については、HTTP サポートおよび WebFlux サポートを参照してください。

JMX の変更

オブジェクト名のキー値に、Java 識別子(またはピリオド .)で許可されている文字以外の文字が含まれている場合、引用符で囲まれるようになりました。たとえば、org.springframework.integration:type=MessageChannel, name="input:foo.myGroup.errors" です。これには、以前は「許可されていた」名前とそのような文字が引用されるという副作用があります。たとえば、org.springframework.integration:type=MessageChannel, name="input#foo.myGroup.errors" です。

Micrometer サポートの変更

フレームワークによって作成された標準 Micrometer メーターのカスタマイズがより簡単になりました。詳細については、Micrometer 統合を参照してください。

統合グラフのカスタマイズ

IntegrationGraphServer の Function<NamedComponent, Map<String, Object>> additionalPropertiesCallback を介して IntegrationNode に追加のプロパティを追加することが可能になりました。詳細については、統合グラフを参照してください。

統合グローバルプロパティ

DEBUG ロジックレベルが org.springframework.integration カテゴリに対してオンになっている場合、統合グローバルプロパティ(デフォルトを含む)をログに出力できるようになりました。詳細については、グローバルプロパティを参照してください。

@Poller 用の receiveTimeout 

@Poller アノテーションは、便宜上、receiveTimeout オプションを提供するようになりました。詳細については、@Poller アノテーションの使用を参照してください。

4.3 および 5.0 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。wiki [GitHub] (英語) で 2.1 に戻るすべてのバージョンの移行ガイドを見つけることができます。

新規コンポーネント

バージョン 5.0 は、多くの新しいコンポーネントを追加しました。

Java DSL

別の Spring Integration Java DSL [GitHub] (英語) プロジェクトがコア Spring Integration プロジェクトにマージされました。チャネルアダプターとゲートウェイの IntegrationComponentSpec 実装は、特定のモジュールに配布されます。Java DSL サポートの詳細については、Java DSL を参照してください。Spring Integration 5.0 への移行 [GitHub] (英語) に必要な手順については、4.3 から 5.0 への移行ガイド [GitHub] (英語) も参照してください。

テストサポート

Spring Integration アプリケーションのテストに役立つ新しい Spring Integration テストフレームワークを作成しました。テストクラスの @SpringIntegrationTest アノテーションと MockIntegration ファクトリにより、統合フローの JUnit テストを多少簡単にできるようになりました。

詳細については、テストサポートを参照してください。

MongoDB 送信ゲートウェイ

新しい MongoDbOutboundGateway では、リクエストチャネルにメッセージを送信することにより、データベースにオンデマンドでクエリを実行できます。

詳細については、MongoDB 送信ゲートウェイを参照してください。

WebFlux ゲートウェイおよびチャネルアダプター

Spring WebFlux フレームワークゲートウェイおよびチャネルアダプター用の新しい WebFlux サポートモジュールを導入しました。

詳細については、WebFlux サポートを参照してください。

コンテンツ型の変換

サービスメソッド呼び出しに新しい InvocableHandlerMethod ベースのインフラストラクチャを使用したため、ペイロードからターゲットメソッド引数への contentType 変換を実行できます。

詳細については、コンテンツ型の変換を参照してください。

ErrorMessagePublisher および ErrorMessageStrategy

ErrorMessage インスタンスを作成するために ErrorMessagePublisher と ErrorMessageStrategy を追加しました。

詳細については、エラー処理を参照してください。

JDBC メタデータストア

MetadataStore 実装の JDBC 実装を追加しました。これは、メタデータのトランザクション境界を確保する必要がある場合に役立ちます。

詳細については、JDBC メタデータストアを参照してください。

一般的な変更

Spring Integration は、Spring Framework 5.0 および Project Reactor 3.1 に完全に基づいています。以前のプロジェクト Reactor バージョンはサポートされなくなりました。

コアの変更

@Poller アノテーションには、基になる MessagePublishingErrorHandler の構成を容易にするための errorChannel 属性が含まれています。詳細については、アノテーションサポートを参照してください。

すべてのリクエスト / 応答エンドポイント(AbstractReplyProducingMessageHandler に基づく)がトランザクションを開始できるようになったため、ダウンストリームフロー全体がトランザクション対応になりました。詳細については、トランザクションサポートを参照してください。

SmartLifecycleRoleController は、ロール内のエンドポイントのステータスを取得するメソッドを提供するようになりました。詳細については、エンドポイントのロールを参照してください。

デフォルトでは、POJO メソッドは InvocableHandlerMethod を使用して呼び出されるようになりましたが、以前のように SpEL を使用するように設定できます。詳細については、POJO メソッドの呼び出しを参照してください。

POJO メソッドをメッセージハンドラーとしてターゲットにする場合、サービスメソッドの 1 つを @Default アノテーションでマークして、一致しない条件にフォールバックメカニズムを提供できるようになりました。詳細については、Service Activator の構成を参照してください。

ポーリングされたメッセージを常に現在のトランザクションコンテキストに保存するために、簡単な PassThroughTransactionSynchronizationFactory を追加しました。このメッセージは、MessagingException の failedMessage プロパティとして使用され、トランザクションの完了中にスローされた生の例外をラップします。詳細については、トランザクションの同期を参照してください。

アグリゲーター式ベースの ReleaseStrategy は、Message<?> のコレクションだけでなく、MessageGroup に対して式を評価するようになりました。詳細については、アグリゲーターと Spring 式言語 (SpEL) を参照してください。

これで、ObjectToMapTransformer にカスタマイズされた JsonObjectMapper を提供できます。

詳細については、アグリゲーターと Spring 式言語 (SpEL) を参照してください。

@GlobalChannelInterceptor アノテーションと <int:channel-interceptor> は、コンポーネント名のマッチングのために負のパターン(! を先頭に付加する)をサポートするようになりました。詳細については、グローバルチャネルインターセプターの構成を参照してください。

候補がロックの取得に失敗した場合、LockRegistryLeaderInitiator は DefaultLeaderEventPublisher を介して新しい OnFailedToAcquireMutexEvent を発行します。詳細については、Leadership Event Handling を参照してください。

ゲートウェイの変更

ゲートウェイメソッドに void 戻り型があり、エラーチャネルが提供される場合、ゲートウェイは errorChannel ヘッダーを正しく設定するようになりました。以前は、ヘッダーは読み込まれていませんでした。これにより、同期ダウンストリームフロー(呼び出しスレッドで実行)が構成済みチャネルに例外を送信しますが、非同期ダウンストリームフローの例外は代わりにデフォルト errorChannel に送信されます。

RequestReplyExchanger インターフェースには、提案されたメッセージ交換契約を満たすために throws MessagingException 節があります。

SpEL 式を使用して、リクエストと応答のタイムアウトを指定できるようになりました。詳細については、メッセージングゲートウェイを参照してください。

アグリゲーターのパフォーマンスの変更

デフォルトでは、アグリゲーターは SimpleSequenceSizeReleaseStrategy を使用するようになりました。これは、特に大規模なグループではより効率的です。empty-group-min-timeout の後、空のグループが削除されるようになりました。詳細については、アグリゲーターを参照してください。

スプリッターの変更

スプリッターコンポーネントは、Java Stream および Reactive Streams Publisher オブジェクトを処理および分割できるようになりました。出力チャネルが ReactiveStreamsSubscribableChannel の場合、AbstractMessageSplitter は、分割されるオブジェクトに関係なく、通常の Iterator の代わりに、後続の反復のために Flux を構築します。さらに、AbstractMessageSplitter は、可能であれば Iterable および Iterator オブジェクトのサイズを判別できる protected obtainSizeIfPossible() メソッドを提供します。詳細については、スプリッターを参照してください。

JMS の変更

以前は、Spring Integration JMS XML 構成は JMS 接続ファクトリに connectionFactory のデフォルト Bean 名を使用していたため、コンポーネント定義からプロパティを省略できました。名前を jmsConnectionFactory に変更しました。これは、JMS 接続ファクトリ Bean を自動構成するために Spring Boot が使用する Bean 名です。

アプリケーションが以前の動作に依存している場合、connectionFactory Bean の名前を jmsConnectionFactory に変更するか、現在の名前を使用して Bean を使用するようにコンポーネントを明確に構成できます。詳細については、JMS サポートを参照してください。

メールの変更

IMAP メールコンテンツのレンダリングに関するいくつかの矛盾が解決されました。詳細については、「メール受信チャネルアダプター」セクションの注意を参照してください

フィードの変更

ROME で非推奨となった com.rometools.fetcher.FeedFetcher の代わりに、FeedEntryMessageSource に新しい Resource プロパティを導入しました。詳細については、フィードアダプターを参照してください。

ファイルの変更

FileReadingMessageSource の相対パスを表す新しい FileHeaders.RELATIVE_PATH メッセージヘッダーを導入しました。

テールアダプターは、idleEventInterval をサポートし、その期間中にファイルにデータがない場合にイベントを発行するようになりました。

FileWritingMessageHandler のフラッシュ述語には、追加のパラメーターが追加されました。

ファイル送信チャネルアダプターとゲートウェイ(FileWritingMessageHandler)が REPLACE_IF_MODIFIED FileExistsMode をサポートするようになりました。

また、新しく書き込まれたファイルに対するファイル許可の設定もサポートするようになりました。

新しい FileSystemMarkerFilePresentFileListFilter が利用可能になりました。詳細については、不完全なデータの処理を参照してください。

FileSplitter は、コンテンツの最初の行を残りの行に送信されるメッセージのヘッダーとして運ぶための firstLineAsHeader オプションを提供するようになりました。

詳細については、ファイルサポートを参照してください。

FTP および SFTP の変更

現在、受信チャネルアダプターには max-fetch-size というプロパティがあります。これは、ローカルディレクトリにファイルが現在ない場合に、ポーリング中にフェッチされるファイルの数を制限するために使用されます。デフォルトでは、local-filter の FileSystemPersistentAcceptOnceFileListFilter で構成されます。

また、新しく導入された scanner 属性を設定することにより、受信チャネルアダプターにカスタム DirectoryScanner 実装を提供できます。

常にディレクトリを渡すように正規表現とパターンフィルターを構成できるようになりました。これは、送信ゲートウェイで再帰を使用する場合に役立ちます。

デフォルトでは、すべての受信チャネルアダプター(ストリーミングおよび同期ベース)は適切な AbstractPersistentAcceptOnceFileListFilter 実装を使用して、リモートファイルの重複ダウンロードを防止します。

FTP および SFTP 送信ゲートウェイは、リモートファイルをフェッチするときに REPLACE_IF_MODIFIED FileExistsMode をサポートするようになりました。

FTP および SFTP ストリーミング受信チャネルアダプターは、リモートファイル情報をメッセージヘッダーに追加するようになりました。

FTP および SFTP 送信チャネルアダプター(および送信ゲートウェイ用の PUT コマンド)は、InputStream を payload としてもサポートするようになりました。

受信チャネルアダプターは、新しく導入された RecursiveDirectoryScanner を使用して、ローカルでファイルツリーを構築できるようになりました。注入については、FTP 受信チャネルアダプターセクションの scanner オプションを参照してください。また、代わりにこれらのアダプターを WatchService に切り替えることができます。

NLST コマンドを AbstractRemoteFileOutboundGateway に追加して、ファイル名リストリモートコマンドを実行しました。

FtpOutboundGateway に workingDirExpression を提供して、現在のリクエストメッセージの FTP クライアント作業ディレクトリを変更できるようになりました。

現在、RemoteFileTemplate には invoke(OperationsCallback<F, T> action) が提供されており、同じスレッド境界の Session のスコープ内で複数の RemoteFileOperations 呼び出しを実行します。

不完全なリモートファイルを検出するための新しいフィルターを追加しました。

FtpOutboundGateway および SftpOutboundGateway は、GET または MGET コマンドを使用して正常に転送された後にリモートファイルを削除するオプションをサポートするようになりました。

詳細については、FTP/FTPS アダプターおよび SFTP アダプターを参照してください。

統合プロパティ

バージョン 4.3.2 では、新しい spring.integration.readOnly.headers グローバルプロパティが追加され、MessageBuilder によって新しく作成された Message にコピーしないヘッダーのリストをカスタマイズできるようになりました。詳細については、グローバルプロパティを参照してください。

ストリームの変更

CharacterStreamReadingMessageSource に新しいオプションを追加して、stdin を「パイプ」し、パイプが閉じられたときにアプリケーションイベントを公開できるようにしました。詳細については、ストリームからの読み取りを参照してください。

バリアの変更

BarrierMessageHandler は、遅延到着トリガーメッセージが送信される破棄チャネルをサポートするようになりました。詳細については、スレッドバリアを参照してください。

AMQP の変更

AMQP 送信エンドポイントは、RabbitMQ Delayed Message Exchange プラグインを使用する場合の遅延式の設定をサポートするようになりました。

受信エンドポイントは Spring AMQP DirectMessageListenerContainer をサポートするようになりました。

ポーリング可能な AMQP-backed チャネルは、ポーラーの構成済み receiveTimeout のポーラースレッドをブロックするようになりました(デフォルト: 1 秒)。

メッセージコンバーターによってメッセージプロパティに追加される contentType などのヘッダーが、最終メッセージで使用されるようになりました。以前は、最終ヘッダーにどのヘッダーとメッセージプロパティが表示されるかはコンバーター型に依存していました。コンバーターによって設定されたヘッダーをオーバーライドするには、headersMappedLast プロパティを true に設定します。詳細については、AMQP サポートを参照してください。

HTTP の変更

デフォルトでは、DefaultHttpHeaderMapper.userDefinedHeaderPrefix プロパティは X- ではなく空の文字列になりました。詳細については、HTTP ヘッダーマッピングを参照してください。

デフォルトでは、uriVariablesExpression は SimpleEvaluationContext を使用するようになりました(5.0.4 以降)。

詳細については、URI 変数のマッピングを参照してください。

MQTT の変更

アプリケーションがメッセージを中継するときに、送信メッセージへの不注意な伝播を回避するために、受信メッセージが RECEIVED_TOPICRECEIVED_QOSRECEIVED_RETAINED ヘッダーにマップされるようになりました。

送信チャネルアダプターは、トピック、qos、保持プロパティの式をサポートするようになりました。デフォルトは同じままです。詳細については、MQTT サポートを参照してください。

STOMP の変更

Project Reactor 3.1 および reactor-netty 拡張に基づいて、ReactorNettyTcpStompClient を使用するように STOMP モジュールを変更しました。ReactorNettyTcpStompClient の基礎に従って、Reactor2TcpStompSessionManager を ReactorNettyTcpStompSessionManager に名前変更しました。詳細については、STOMP サポートを参照してください。

Web サービスの変更

WebServiceOutboundGateway インスタンスに外部で構成された WebServiceTemplate インスタンスを提供できるようになりました。

DefaultSoapHeaderMapper は、javax.xml.transform.Source ユーザー定義ヘッダーを SOAP ヘッダー要素にマップできるようになりました。

シンプルな WebService 受信および送信ゲートウェイは、完全な WebServiceMessage を payload として処理できるようになり、MTOM 添付ファイルの操作が可能になりました。

詳細については、Web サービスのサポートを参照してください。

Redis の変更

RedisStoreWritingMessageHandler には、SpEL 式用の追加の String ベースの setter が提供されています(Java 構成の便宜上)。RedisStoreWritingMessageHandler でも zsetIncrementExpression を構成できるようになりました。さらに、ZADD Redis コマンドの INCR オプションはオプションであるため、このプロパティは true から false に変更されました。

Redis リスナー呼び出しを実行するために、RedisInboundChannelAdapter に Executor を提供できるようになりました。さらに、受信したメッセージには、メッセージのソース(トピックまたはパターン)を示す RedisHeaders.MESSAGE_SOURCE ヘッダーが含まれるようになりました。

詳細については、Redis サポートを参照してください。

TCP の変更

TCP 接続をスレッドにバインドする新しい ThreadAffinityClientConnectionFactory を追加しました。

PushbackInputStream インスタンスをサポートするように TCP 接続ファクトリを構成して、デシリアライザーが「先読み」後にバイトを「未読」(プッシュバック)できるようになりました。

必要に応じて、受信データを制御およびバッファリングするために、maxMessageSize なしの ByteArrayElasticRawDeserializer を追加しました。

詳細については、TCP および UDP のサポートを参照してください。

Gemfire の変更

GemfireMetadataStore は ListenableMetadataStore を実装し、ストアに MetadataStoreListener インスタンスを提供することでキャッシュイベントをリッスンできるようになりました。詳細については、重要な GemFire および Apache Geode サポートを参照してください。

JDBC の変更

JdbcMessageChannelStore は ChannelMessageStorePreparedStatementSetter に setter を提供するようになり、ストアへのメッセージ挿入をカスタマイズできるようになりました。

ExpressionEvaluatingSqlParameterSourceFactory は sqlParameterTypes に setter を提供するようになり、パラメーターの SQL 型をカスタマイズできるようになりました。

詳細については、JDBC サポートを参照してください。

メトリクスの変更

Micrometer (英語) アプリケーション監視がサポートされるようになりました(バージョン 5.0.2 以降)。詳細については、Micrometer 統合を参照してください。

バージョン 5.0.3 の Micrometer Meters に変更が加えられ、寸法システムでの使用により適したものになりました。5.0.4 でさらに変更が行われました。Micrometer を使用する場合、バージョン 5.0.4 以上を推奨します。
@EndpointId アノテーション

バージョン 5.0.4 で導入されたこのアノテーションは、Java 構成を使用する場合に Bean 命名の制御を提供します。詳細については、エンドポイント Bean 名を参照してください。

4.2 および 4.3 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。Wiki [GitHub] (英語) の 2.1 に戻るすべてのバージョンの移行ガイドを見つけることができます。

新規コンポーネント

バージョン 4.3 は、多くの新しいコンポーネントを追加しました。

AMQP 非同期送信ゲートウェイ

非同期送信ゲートウェイを参照してください。

MessageGroupFactory

MessageGroupStore ロジックで MessageGroup インスタンスを制御できるように、MessageGroupFactory 戦略を導入しました。SimpleMessageGroup に SimpleMessageGroupFactory 実装を追加し、GroupType.HASH_SET を標準 MessageGroupStore 実装のデフォルトファクトリとして追加しました。詳細については、メッセージストアを参照してください。

PersistentMessageGroup

lazyLoadMessageGroups が true (デフォルト)の場合、getMessageGroup() のこのインスタンスを返す永続的な MessageGroupStore インスタンスに PersistentMessageGroup (遅延負荷プロキシ)実装を追加しました。詳細については、メッセージストアを参照してください。

FTP および SFTP ストリーミング受信チャネルアダプター

各ファイルに対して InputStream を返す受信チャネルアダプターを追加し、リモートファイルをローカルファイルシステムに書き込まずに取得できるようにしました。詳細については、FTP ストリーミング受信チャネルアダプターおよび SFTP ストリーミング受信チャネルアダプターを参照してください。

StreamTransformer

StreamTransformer を追加して、InputStream ペイロードを byte[] または String に変換しました。詳細については、ストリームトランスを参照してください。

統合グラフ

IntegrationGraphController REST サービスとともに IntegrationGraphServer を追加して、Spring Integration アプリケーションの実行時モデルをグラフとして公開しました。詳細については、統合グラフを参照してください。

JDBC ロックレジストリ

データベーステーブルを介して共有される分散ロックに JdbcLockRegistry を追加しました。詳細については、JDBC ロックレジストリを参照してください。

 LockRegistryLeaderInitiator 

LockRegistry 戦略に基づいて LeaderInitiator 実装を追加しました。詳細については、リーダーシップイベントの取り扱いを参照してください。

一般的な変更

このセクションでは、バージョン 4.3 が Spring Integration にもたらした一般的な変更について説明します。

コアの変更

このセクションでは、Spring Integration のコアに対する一般的な変更について説明します。

チェーン内の送信ゲートウェイ

以前は、チェーン内の発信ゲートウェイで reply-channel を指定できました。それは完全に無視されました。ゲートウェイの応答は次のチェーン要素に、またはゲートウェイが最後の要素である場合はチェーンの出力チャネルに送られます。この状態は現在検出され、許可されていません。このような構成がある場合は、reply-channel を削除してください。

非同期サービスアクティベーター

サービスアクティベーターを同期させるオプションを追加しました。詳細については、非同期サービスアクティベーターを参照してください。

メッセージングアノテーションサポートの変更

メッセージングアノテーションのサポートには、クラスレベルでの @MessageEndpoint (または他の @Component)アノテーション宣言は必要ありません。以前の動作を復元するには、spring.integration.properties の spring.integration.messagingAnnotations.require.componentAnnotation を true に設定します。詳細については、グローバルプロパティおよびアノテーションサポートを参照してください。

メールの変更

このセクションでは、Spring Integration メール機能の一般的な変更について説明します。

カスタマイズ可能なユーザーフラグ

カスタマイズ可能な userFlag (4.2.2 に追加され、メールが表示されたことを示すために使用されるフラグのカスタマイズを提供)が XML 名前空間で利用可能になりました。詳細については、\Recent がサポートされていない場合の IMAP メッセージのマーク付けを参照してください。

メールメッセージマッピング

これで、メールヘッダーを含む MessageHeaders とメールコンテンツを含むペイロードを使用して、受信メールメッセージをマッピングできます。以前は、ペイロードは常に生の MimeMessage でした。詳細については、受信メールメッセージマッピングを参照してください。

JMS の変更

このセクションでは、Spring Integration JMS 機能に対する一般的な変更について説明します。

ヘッダーマッパー

DefaultJmsHeaderMapper は、toString() メソッドを呼び出して、標準の correlationId ヘッダーをメッセージプロパティとしてマップするようになりました。詳細については、JMS メッセージとの間のメッセージヘッダーのマッピングを参照してください。

非同期ゲートウェイ

JMS 送信ゲートウェイに async プロパティが追加されました。詳細については、非同期ゲートウェイを参照してください。

アグリゲーターの変更

POJO アグリゲーターが Message<?> オブジェクトのコレクションをリリースするときの動作に変更があります。これはまれですが、アプリケーションがそれを行う場合、POJO に小さな変更を加える必要があります。この IMPORTANT: SimpleMessageGroup.getMessages() メソッドは unmodifiableCollection を返しますを参照してください。詳細については注意してください。

TCP/UDP の変更

このセクションでは、Spring Integration TCP/UDP 機能の一般的な変更について説明します。

イベント

サーバー接続ファクトリが開始されると、新しい TcpConnectionServerListeningEvent が発行されます。詳細については、TCP 接続イベントを参照してください。

<int-ip:udp-outbound-channel-adapter> で destination-expression および socket-expression 属性を使用できるようになりました。詳細については、UDP アダプターを参照してください。

ストリームデシリアライザー

メッセージ全体がアセンブルされるまで最終バッファを割り当てることができないさまざまなデシリアライザは、メッセージごとにバッファを作成および破棄するのではなく、データを受信する生バッファのプールをサポートするようになりました。詳細については、TCP 接続ファクトリを参照してください。

TCP メッセージマッパー

メッセージマッパーは、オプションで、構成済みのコンテンツ型ヘッダーを設定します。詳細については、IP メッセージヘッダーを参照してください。

ファイルの変更

このセクションでは、Spring Integration ファイル機能の一般的な変更について説明します。

宛先ディレクトリの作成

FileWritingMessageHandler 用に生成されたファイル名は、ターゲットディレクトリ内のファイルに必要なディレクトリ構造を保存するためのサブパスを表すことができます。詳細については、ファイル名の生成を参照してください。

FileReadingMessageSource は、内部クラスの WatchService ディレクトリスキャンロジックを非表示にします。この動作を有効にするために、use-watch-service および watch-events オプションを追加しました。API に矛盾があるため、最上位の WatchServiceDirectoryScanner を廃止しました。詳細については、WatchServiceDirectoryScanner を参照してください。

バッファーサイズ

ファイルを書き込むときに、バッファサイズを指定できるようになりました。

追加とフラッシング

追加時にファイルのフラッシュを回避し、アイドル期間中に多くの戦略を使用してデータをフラッシュできるようになりました。詳細については、APPEND_NO_FLUSH 使用時のファイルのフラッシュを参照してください。

タイムスタンプを保持する

送信先のファイルの lastmodified タイムスタンプを設定するように送信チャネルアダプターを構成できるようになりました。詳細については、ファイルのタイムスタンプを参照してください。

スプリッターの変更

ファイルが完全に読み取られると、FileSplitter は FTP または SFTP セッションを自動的に閉じます。これは、送信ゲートウェイが InputStream を返す場合、または新しい FTP または SFTP ストリーミングチャネルアダプターを使用する場合に適用されます。また、FileSplitter.FileMarker を JSON String に変換する新しい markers-json オプションを導入して、ダウンストリームネットワークの相互作用を緩和しました。詳細については、ファイル分割を参照してください。

ファイルフィルター

CompositeFileListFilter の代替として ChainFileListFilter を追加しました。詳細については、ファイルを読むを参照してください。

AMQP の変更

このセクションでは、Spring Integration AMQP 機能の一般的な変更について説明します。

コンテンツ型メッセージコンバーター

送信エンドポイントは、メッセージコンテンツ型に基づいてコンバーターを選択できるように、ContentTypeDelegatingMessageConverter で構成された RabbitTemplate をサポートするようになりました。詳細については、送信メッセージの変換を参照してください。

遅延メッセージ処理のヘッダー

Spring AMQP 1.6 は、遅延メッセージ交換 (英語) のサポートを追加します。ヘッダーマッピングは、この機能で使用されるヘッダー(amqp_delay および amqp_receivedDelay)をサポートするようになりました。

AMQP-Backed Channels

AMQP-backed チャネルは、メッセージマッピングをサポートするようになりました。詳細については、AMQP-backed メッセージチャネルを参照してください。

Redis の変更

このセクションでは、Spring Integration Redis 機能の一般的な変更について説明します。

プッシュ / ポップの方向をリストする

以前は、キューチャネルアダプターは常に固定方向で Redis リストを使用し、左端にプッシュして右端から読み取りました。RedisQueueMessageDrivenEndpoint および RedisQueueOutboundChannelAdapter の rightPop および leftPush オプションを使用して、読み取りおよび書き込み方向をそれぞれ構成できるようになりました。詳細については、Redis キュー受信チャネルアダプターおよび Redis キュー送信チャネルアダプターを参照してください。

キュー受信ゲートウェイのデフォルトシリアライザー

受信ゲートウェイのデフォルトシリアライザーは、送信ゲートウェイとの互換性のために JdkSerializationRedisSerializer に変更されました。詳細については、Redis キュー受信ゲートウェイを参照してください。

HTTP の変更

以前は、content-type ヘッダーのない本文(POST など)が含まれるリクエストでは、本文は無視されていました。このリリースでは、RFC 2616 で推奨されているように、このようなリクエストのコンテンツ型は application/octet-stream と見なされます。詳細については、HTTP 受信コンポーネントを参照してください。

uriVariablesExpression は、デフォルトで SimpleEvaluationContext を使用するようになりました(4.3.15 以降)。詳細については、URI 変数のマッピングを参照してください。

SFTP の変更

このセクションでは、Spring Integration SFTP 機能の一般的な変更について説明します。

ファクトリ Bean

SFTP 用の Jsch プロキシの構成を簡素化するために、新しいファクトリ Bean を追加しました。詳細については、プロキシファクトリ Bean を参照してください。

chmod の変更

SFTP 送信ゲートウェイ(put および mput コマンド用)および SFTP 送信チャネルアダプターは、chmod 属性をサポートして、アップロード後にリモートファイルのアクセス許可を変更するようになりました。詳細については、SFTP Outbound Channel Adapter および SFTP Outbound Gateway を参照してください。

FTP の変更

このセクションでは、Spring Integration FTP 機能の一般的な変更について説明します。

セッションの変更

FtpSession は、基になる FTP クライアントが使用できるため、list() および listNames() メソッドの null をサポートするようになりました。これにより、remoteDirectory 式なしで FtpOutboundGateway を構成できるようになりました。remote-directory または remote-directory-expression なしで <int-ftp:inbound-channel-adapter> を構成することもできます。詳細については、FTP/FTPS アダプターを参照してください。

ルーターの変更

ErrorMessageExceptionTypeRouter は、Exception スーパークラスマッピングをサポートするようになり、複数の継承が存在する場合に同じチャネルが重複するのを防ぎます。このため、ErrorMessageExceptionTypeRouter は初期化中にマッピングクラスをロードして、ClassNotFoundException のフェイルファーストを行います。

詳細については、ルーターを参照してください。

ヘッダーマッピング

このセクションでは、バージョン 4.2 および 4.3 間のヘッダーマッピングの変更について説明します。

一般

AMQP、WS、XMPP ヘッダーマッピング(request-header-mapping や reply-header-mapping など)は、否定パターンをサポートするようになりました。詳細については、AMQP メッセージヘッダーWS メッセージヘッダーXMPP メッセージヘッダーを参照してください。

AMQP ヘッダーマッピング

以前は、標準 AMQP ヘッダーのみがデフォルトでマップされていました。ユーザー定義ヘッダーのマッピングを明示的に有効にする必要がありました。このリリースでは、すべてのヘッダーがデフォルトでマップされます。さらに、受信 amqp_deliveryMode ヘッダーはデフォルトでマップされなくなりました。詳細については、AMQP メッセージヘッダーを参照してください。

Groovy スクリプト

compile-static ヒントまたはその他の CompilerConfiguration オプションを使用して、groovy スクリプトを構成できるようになりました。詳細については、Groovy の設定を参照してください。

@InboundChannelAdapter の変更

@InboundChannelAdapter には、通常の value のエイリアス channel 属性があります。さらに、ターゲット SourcePollingChannelAdapter コンポーネントは、指定された名前(outputChannelName オプション)からレイトバインディング方式でターゲット outputChannel Bean を解決できるようになりました。詳細については、アノテーションサポートを参照してください。

XMPP の変更

XMPP チャネルアダプターは、XMPP 拡張機能(XEP)をサポートするようになりました。詳細については、XMPP 拡張を参照してください。

WireTap レイトバインディング

WireTap ChannelInterceptor は、最初のアクティブなインターセプター操作中に、後でターゲット MessageChannel に解決される channelName を受け入れることができるようになりました。詳細については、ワイヤータップを参照してください。

ChannelMessageStoreQueryProvider の変更

ChannelMessageStoreQueryProvider は、H2 データベースをサポートするようになりました。詳細については、バッキングメッセージチャネルを参照してください。

WebSocket の変更

ServerWebSocketContainer は allowedOrigins オプションを公開し、SockJsServiceOptions は suppressCors オプションを公開します。詳細については、WebSockets サポートを参照してください。

4.1 および 4.2 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。wiki [GitHub] (英語) で 2.1 に戻るすべてのバージョンの移行ガイドを見つけることができます。

新規コンポーネント

バージョン 4.2 は、多くの新しいコンポーネントを追加しました。

主要な管理 / JMX のリワーク

新しい MetricsFactory 戦略インターフェースが追加されました。この変更は、JMX および管理インフラストラクチャの他の変更とともに、管理構成および実行時パフォーマンスをはるかに制御します。

ただし、これには(一部の)ユーザー環境にとって重要な意味があります。

詳細については、指標と管理および JMX の改善を参照してください。

MongoDB メタデータストア

MongoDbMetadataStore が利用可能になりました。詳細については、MongoDB メタデータストアを参照してください。

SecuredChannel アノテーション

非推奨の ChannelSecurityInterceptorFactoryBean を置き換える @SecuredChannel アノテーションを導入しました。詳細については、Spring Integration のセキュリティを参照してください。

SecurityContext の伝播

あるメッセージフローのスレッドから別のスレッドへの SecurityContext 伝播に SecurityContextPropagationChannelInterceptor を導入しました。詳細については、Spring Integration のセキュリティを参照してください。

FileSplitter

4.1.2 では、テキストファイルを行に分割する FileSplitter を追加しました。int-file: 名前空間で完全にサポートされるようになりました。詳細については、ファイル分割を参照してください。

Zookeeper サポート

クラスター環境またはマルチホスト環境での実行を支援するために、Zookeeper サポートをフレームワークに追加しました。この変更は次の機能に影響します。

  • ZookeeperMetadataStore

  • ZookeeperLockRegistry

  • Zookeeper リーダーシップ

詳細については、Zookeeper サポートを参照してください。

スレッドバリア

新しいスレッド <int:barrier/> コンポーネントが使用可能になり、非同期イベントが発生するまでスレッドを中断できます。詳細については、スレッドバリアを参照してください。

STOMP サポート

受信および送信のチャネルアダプターペアとして、STOMP サポートをフレームワークに追加しました。詳細については、STOMP サポートを参照してください。

コーデック

オブジェクトを byte[] との間でエンコードおよびデコードするために、新しい Codec 抽象化が導入されました。Kryo を使用する実装を追加しました。コーデックベースのトランスフォーマーとメッセージコンバーターも追加しました。詳細については、コーデックを参照してください。

メッセージ PreparedStatement Setter

SqlParameterSourceFactory を使用して requestMessage コンテキストを使用して PreparedStatement のパラメーターを設定する代わりに、JdbcMessageHandler (<int-jdbc:outbound-gateway> および <int-jdbc:outbound-channel-adapter>)の新しい MessagePreparedStatementSetter 関数インターフェースコールバックを使用できます。詳細については、送信チャネルアダプターを参照してください。

一般的な変更

このセクションでは、バージョン 4.1 からバージョン 4.2 への一般的な変更について説明します。

WireTap

既存の selector 属性の代替として、<wire-tap/> 要素は selector-expression 属性をサポートするようになりました。

ファイルの変更

これらの変更の詳細については、ファイルサポートを参照してください。

新しい行を追加する

<int-file:outbound-channel-adapter> および <int-file:outbound-gateway> は、append-new-line 属性をサポートするようになりました。true に設定されている場合、メッセージが書き込まれた後、ファイルに新しい行が追加されます。デフォルトの属性値は false です。

隠しファイルを無視する

<int-file:inbound-channel-adapter> に ignore-hidden 属性を追加して、ソースディレクトリから隠しファイルを取得するかどうかを設定できるようにしました。デフォルトは true です。

InputStream ペイロードの作成

FileWritingMessageHandler は、有効なメッセージペイロード型として InputStream も受け入れます。

HeadDirectoryScanner

HeadDirectoryScanner を他の FileListFilter 実装で使用できるようになりました。

最終変更フィルター

LastModifiedFileListFilter を追加しました。

サービスディレクトリスキャナーを見る

WatchServiceDirectoryScanner を追加しました。

永続的なファイルリストフィルターの変更

AbstractPersistentFileListFilter には新しいプロパティ(flushOnUpdate)があり、true に設定すると、Flushable (たとえば PropertiesPersistingMetadataStore)を実装している場合、メタデータストアで flush() を呼び出します。

クラスパッケージの変更

ScatterGatherHandler クラスを org.springframework.integration.handler から org.springframework.integration.scattergather に移動しました。

TCP の変更

このセクションでは、Spring Integration TCP 機能の一般的な変更について説明します。

TCP シリアライザー

TCP Serializers は flush() ではなく OutputStream でした。これは、現在 TcpNxxConnection クラスによって行われています。コード内で直接シリアライザーを使用する場合、flush()  OutputStream が必要になる場合があります。

サーバーソケットの例外

TCP サーバーソケットで予期しない例外が発生するたびに TcpConnectionServerExceptionEvent インスタンスが発行されるようになりました(4.1.3 および 4.0.7 にも追加されています)。詳細については、TCP 接続イベントを参照してください。

TCP サーバーポート

ランダムポートでリッスンするように TCP サーバーソケットファクトリを構成する場合、getPort() を使用して、OS によって選択された実際のポートを取得できるようになりました。getServerSocketAddress() も利用できます。

詳細については、"TCP 接続ファクトリ" を参照してください。

TCP ゲートウェイリモートタイムアウト

TcpOutboundGateway は、既存の remote-timeout 属性の代替として remote-timeout-expression をサポートするようになりました。これにより、各メッセージに基づいてタイムアウトを設定できます。

また、remote-timeout は、reply-timeout と同じ値にデフォルト設定されなくなりました。これは、まったく異なる意味を持っています。

詳細については、.TCP 送信ゲートウェイ属性を参照してください。

ヘッダーマッピングに使用可能な TCP SSLSession

TcpConnection 実装は getSslSession() をサポートするようになり、セッションから情報を抽出してメッセージヘッダーに追加できるようになりました。詳細については、IP メッセージヘッダーを参照してください。

TCP イベント

存在しないソケットへのメッセージの送信など、相関例外が発生するたびに新しいイベントが発行されるようになりました。

TcpConnectionEventListeningMessageProducer は非推奨です。代わりに汎用イベントアダプターを使用してください。

詳細については、TCP 接続イベントを参照してください。

@InboundChannelAdapter の変更

以前は、受信チャネルアダプターの @Poller は、maxMessagesPerPoll 属性を -1 (無限大)にデフォルト設定していました。これは、1 にデフォルト設定されている <inbound-channel-adapter/> の XML 構成と矛盾していました。アノテーションでは、この属性のデフォルトが 1 になりました。

API 変更

o.s.integration.util.FunctionIterator では、reactor.function.Function ではなく o.s.integration.util.Function が必要になりました。これは、Reactor への不要なハード依存性を削除するために行われました。このイテレータを使用する場合は、インポートを変更する必要があります。

Reactor は、Promise ゲートウェイなどの機能で引き続きサポートされています。依存関係は、それを必要としないユーザーのために削除されました。

JMS の変更

このセクションでは、Spring Integration TCP 機能の一般的な変更について説明します。

応答リスナーの遅延初期化

JMS 送信ゲートウェイの応答リスナーを、ゲートウェイのライフサイクルによって制御されるのではなく、オンデマンドで初期化され、アイドル期間後に停止するように構成できるようになりました。詳細については、送信ゲートウェイを参照してください。

メッセージ駆動型エンドポイントでの変換エラー

error-channel は、変換エラーに使用されるようになりました。以前のバージョンでは、トランザクションのロールバックとメッセージの再配信が発生していました。

詳細については、メッセージ駆動型チャネルアダプターおよび受信ゲートウェイを参照してください。

デフォルトの確認モード

暗黙的に定義された DefaultMessageListenerContainer を使用する場合、デフォルトの acknowledge は transacted になりました。メッセージの損失を防ぐため、このコンテナーを使用する場合は transacted を使用することをお勧めします。このデフォルトは、メッセージ駆動型の受信アダプターと受信ゲートウェイに適用されるようになりました。これは、すでに JMS でサポートされているチャネルのデフォルトでした。

詳細については、メッセージ駆動型チャネルアダプターおよび受信ゲートウェイを参照してください。

共有サブスクリプション

共有サブスクリプション(JMS 2.0)のネームスペースサポートをメッセージ駆動型エンドポイントと <int-jms:publish-subscribe-channel> に追加しました。以前は、共有接続を使用するには、リスナーコンテナーを <bean/> 宣言として関連付ける必要がありました。

詳細については、JMS サポートを参照してください。

条件付きポーラー

動的ポーリングの柔軟性が大幅に向上しました。

詳細については、メッセージソースの条件付きポーラーを参照してください。

AMQP の変更

このセクションでは、Spring Integration AMQP 機能の一般的な変更について説明します。

パブリッシャーの確認

<int-amqp:outbound-gateway> は、confirm-correlation-expressionconfirm-ack-channelconfirm-nack-channel 属性(<int-amqp:outbound-channel-adapter> と同様の目的を持つ)をサポートするようになりました。

相関データ

送信チャネルアダプターと受信ゲートウェイの両方で、相関データが Message<?> である場合、ack または nack チャネルのメッセージの基礎になり、追加のヘッダーが追加されます。以前は、相関データ(Message<?> を含む)は ack または nack メッセージのペイロードとして返されていました。

受信ゲートウェイのプロパティ

<int-amqp:inbound-gateway> は、amqp-template 属性を公開して、応答 RabbitTemplate の外部 Bean をさらに制御できるようにします。独自の AmqpTemplate 実装を提供することもできます。さらに、リクエストメッセージに replyTo プロパティがない場合は、default-reply-to を使用できます。

詳細については、AMQP サポートを参照してください。

XPath Splitter の改善

XPathMessageSplitter (<int-xml:xpath-splitter>)は、内部 javax.xml.transform.Transformer の output-properties の構成を可能にし、XPath 評価 org.w3c.dom.NodeList の結果の Iterator モード(デフォルトは true)をサポートします。

詳細については、XML メッセージの分割を参照してください。

HTTP の変更

このセクションでは、Spring Integration HTTP 機能に対する一般的な変更について説明します。

CORS

HTTP 受信エンドポイント(<int-http:inbound-channel-adapter> および <int-http:inbound-gateway>)では、クロスオリジンリソースシェアリング(CORS)の構成が可能になりました。

詳細については、クロスオリジンリソースシェアリング(CORS)サポートを参照してください。

受信ゲートウェイのタイムアウト

HTTP 受信ゲート方法を設定して、リクエストがタイムアウトしたときに指定したステータスコードを返すことができます。デフォルトは 200 OK ではなく 500 Internal Server Error になりました。

詳細については、レスポンス状態コードを参照してください。

フォームデータ

multipart/form-data リクエストをプロキシするためのドキュメントを追加しました。詳細については、HTTP サポートを参照してください。

ゲートウェイの変更

このセクションでは、Spring Integration ゲートウェイ機能の一般的な変更について説明します。

ゲートウェイメソッドは CompletableFuture<?> を返すことができます

Java 8 を使用する場合、ゲートウェイメソッドは CompletableFuture<?> を返すことができるようになりました。詳細については、CompletableFuture を参照してください。

MessagingGateway アノテーション

リクエストと応答のタイムアウトプロパティは、プロパティプレースホルダーまたは SpEL で構成できるように、Long ではなく String になりました。@MessagingGateway アノテーションを参照してください。

アグリゲーターの変更

このセクションでは、Spring Integration アグリゲーター機能の一般的な変更について説明します。

アグリゲーターのパフォーマンス

このリリースには、リリース時にグループからメッセージをより効率的に削除することにより、コンポーネント(アグリゲーター、リシーケンサーなど)を集約するためのパフォーマンスの改善が含まれています。新しいメソッド(removeMessagesFromGroup)がメッセージストアに追加されました。removeBatchSize プロパティ(デフォルト: 100)を設定して、各操作で削除されるメッセージの数を調整します。現在、JDBC、Redis、MongoDB メッセージストアはこのプロパティをサポートしています。

出力メッセージグループプロセッサー

アグリゲーターに ref または内部 Bean を使用する場合、MessageGroupProcessor を直接バインドできるようになりました。さらに、グループ内のメッセージのコレクションを返す SimpleMessageGroupProcessor を追加しました。出力プロセッサーが Message<?> のコレクションを生成すると、アグリゲーターはそれらのメッセージを個別に解放します。SimpleMessageGroupProcessor を構成すると、アグリゲーターがメッセージバリアになり、メッセージはすべて到着するまで保留され、その後個別に解放されます。詳細については、アグリゲーターを参照してください。

FTP および SFTP の変更

このセクションでは、Spring Integration FTP および SFTP 機能の一般的な変更について説明します。

受信チャネルアダプター

これで、受信チャネルアダプターで remote-directory-expression を指定して、実行時にディレクトリを決定できます。詳細については、FTP/FTPS アダプターおよび SFTP アダプターを参照してください。

ゲートウェイの部分的な結果

FTP または SFTP 送信ゲートウェイを使用して複数のファイル(mget および mput を使用)を操作する場合、リクエストの一部が完了した後に例外が発生する可能性があります。そのような状態が発生すると、部分的な結果を含む PartialSuccessException がスローされます。詳細については、FTP 送信ゲートウェイおよび SFTP 送信ゲートウェイを参照してください。

セッションファクトリの委譲

委譲セッションファクトリを追加し、スレッドコンテキスト値に基づいて特定のセッションファクトリを選択できるようにしました。

詳細については、セッションファクトリの委譲およびセッションファクトリの委譲を参照してください。

デフォルトの Sftp セッションファクトリ

以前は、DefaultSftpSessionFactory は無条件で未知のホストへの接続を許可していました。これは現在構成可能です(デフォルト: false)。

allowUnknownKeys プロパティが true (デフォルト: false)でない限り、ファクトリには構成済みの knownHosts ファイルが必要になりました。

メッセージセッションコールバック

<int-(s)ftp:outbound-gateway/> 内の requestMessage コンテキストでカスタム Session 操作を実行するために MessageSessionCallback<F, T> を導入しました。

詳細については、MessageSessionCallback を使用するおよび MessageSessionCallback を参照してください。

Websocket の変更

ServerWebSocketContainer に WebSocketHandlerDecoratorFactory サポートを追加して、内部 WebSocketHandler の連鎖カスタマイズを可能にしました。詳細については、WebSockets 名前空間のサポートを参照してください。

アプリケーションイベントアダプターの変更

ApplicationEvent アダプターは、payload で event として動作できるようになり、カスタム ApplicationEvent 拡張機能を直接省略できるようになりました。この目的のために、publish-payload ブール属性が <int-event:outbound-channel-adapter> に導入されました。詳細については、Spring ApplicationEvent のサポートを参照してください。

4.0 および 4.1 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。wiki [GitHub] (英語) で 2.1 に戻るすべてのバージョンの移行ガイドを見つけることができます。

新規コンポーネント

バージョン 4.1 は、多くの新しいコンポーネントを追加しました。

Promise < ? > ゲートウェイ

メッセージングゲートウェイメソッドは、Reactor Promise 戻り型をサポートするようになりました。非同期ゲートウェイを参照してください。

WebSocket サポート

WebSocket モジュールが利用可能になりました。Spring WebSocket および Spring メッセージングモジュールに完全に基づいており、<inbound-channel-adapter> および <outbound-channel-adapter> を提供します。詳細については、WebSockets サポートを参照してください。

Scatter-Gather Enterprise Integration パターン

分散収集エンタープライズ統合パターンを実装しました。詳細については、スキャッターギャザーを参照してください。

ルーティングスリップパターン

ルーティングスリップ EIP パターンの実装を追加しました。詳細については、ルーティングスリップを参照してください。

べき等レシーバーパターン

XML の <idempotent-receiver> コンポーネントまたは Java 構成用の IdempotentReceiverInterceptor および IdempotentReceiver アノテーションを追加することにより、べき等レシーバーエンタープライズ統合パターンの実装を追加しました。詳細については、べき等レシーバーエンタープライズ統合パターンおよび Javadoc を参照してください。

ブーン JsonObjectMapper

JSON トランスフォーマーに Boon JsonObjectMapper を追加しました。詳細については、Transformer を参照してください。

Redis キューゲートウェイ

<redis-queue-inbound-gateway> および <redis-queue-outbound-gateway> コンポーネントを追加しました。Redis キュー受信ゲートウェイおよび Redis キュー送信ゲートウェイを参照してください。

PollSkipAdvice

PollSkipAdvice を追加しました。PollSkipAdvice は、<poller> の <advice-chain> 内で使用して、PollSkipStrategy で実装する何らかの条件によって現在のポーリングを抑制する(スキップする)かどうかを決定できます。詳細については、ポーラーを参照してください。

一般的な変更

このセクションでは、バージョン 4.0 からバージョン 4.1 への一般的な変更について説明します。

AMQP 受信エンドポイント、チャネル

メッセージリスナコンテナー(受信エンドポイントとチャネル)を使用する要素は、missing-queues-fatal 属性をサポートするようになりました。詳細については、AMQP サポートを参照してください。

AMQP 送信エンドポイント

AMQP 送信エンドポイントは、lazy-connect と呼ばれる新しいプロパティをサポートします(デフォルト: true)。true の場合、ブローカーへの接続は最初のメッセージが到着するまで確立されません(受信エンドポイントがなく、起動時に常に接続を確立しようとします)。false に設定すると、アプリケーションの起動時に接続の確立が試行されます。詳細については、AMQP サポートを参照してください。

SimpleMessageStore

SimpleMessageStore は、getMessageGroup() を呼び出したときにグループのコピーを作成しなくなりました。詳細については、[WARNING] を参照してください。

Web サービス送信ゲートウェイ: encode-uri

<ws:outbound-gateway/> は、リクエストを送信する前に URI オブジェクトのエンコードを無効にできる encode-uri 属性を提供するようになりました。

HTTP 受信チャネルアダプターとステータスコード

<http:inbound-channel-adapter> を status-code-expression で構成して、デフォルトの 200 OK ステータスを上書きできるようになりました。詳細については、HTTP 名前空間のサポートを参照してください。

MQTT アダプターの変更

複数のサーバーに接続するように MQTT チャネルアダプターを構成できるようになりました。たとえば、高可用性(HA)をサポートするためです。詳細については、MQTT サポートを参照してください。

MQTT メッセージ駆動型チャネルアダプターは、各サブスクリプションの QoS 設定の指定をサポートするようになりました。詳細については、受信(メッセージ駆動型)チャネルアダプターを参照してください。

MQTT 送信チャネルアダプターは非同期送信をサポートするようになり、配信が確認されるまでブロックされなくなりました。詳細については、送信チャネルアダプターを参照してください。

実行時にプログラムでトピックをサブスクライブおよびサブスクライブ解除できるようになりました。詳細については、受信(メッセージ駆動型)チャネルアダプターを参照してください。

FTP および SFTP アダプターの変更

FTP および SFTP 送信チャネルアダプターは、リモートファイルへの追加と、リモートファイルがすでに存在する場合の特定のアクションの実行をサポートするようになりました。リモートファイルテンプレートは、これと rmdir() および exists() もサポートするようになりました。さらに、リモートファイルテンプレートは、基礎となるクライアントオブジェクトへのアクセスを提供し、低レベル API へのアクセスを可能にします。

詳細については、FTP/FTPS アダプターおよび SFTP アダプターを参照してください。

スプリッターとイテレーター

Splitter コンポーネントは、出力メッセージを生成するための結果オブジェクトとして Iterator をサポートするようになりました。詳細については、スプリッターを参照してください。

アグリゲーター

Aggregator インスタンスは、新しい属性 expire-groups-upon-timeout をサポートするようになりました。詳細については、アグリゲーターを参照してください。

コンテンツエンリッチャーの改善

null-result-expression 属性を追加しました。これは、<enricher> が null を返す場合に評価されて返されます。<header> および <property> に追加できます。詳細については、コンテンツエンリッチャーを参照してください。

error-channel 属性を追加しました。これは、Exception が request-channel の下流で発生した場合にエラーフローを処理するために使用されます。これにより、濃縮に使用する代替オブジェクトを返すことができます。詳細については、コンテンツエンリッチャーを参照してください。

ヘッダーチャネルレジストリ

<header-enricher/> 要素の <header-channels-to-string/> 子要素は、チャネルマッピングを保持するヘッダーチャネルレジストリのデフォルト時間をオーバーライドできるようになりました。詳細については、ヘッダーチャネルレジストリを参照してください。

正常なシャットダウン

正常なシャットダウンアルゴリズムを改善しました。詳細については、正常なシャットダウンを参照してください。

RecipientListRouter の管理

RecipientListRouter は、実行時に受信者を構成するためのいくつかの管理操作を提供するようになりました。これにより、最初から <recipient> なしで <recipient-list-router> を構成できます。詳細については、RecipientListRouterManagement を参照してください。

AbstractHeaderMapper: NON_STANDARD_HEADERS トークン

AbstractHeaderMapper 実装は、デフォルトではマッピングされないユーザー定義ヘッダーをマッピングするために、追加の NON_STANDARD_HEADERS トークンを提供するようになりました。詳細については、AMQP メッセージヘッダーを参照してください。

AMQP チャネル: template-channel-transacted

AMQP MessageChannel インスタンスに template-channel-transacted 属性を導入しました。詳細については、AMQP-backed メッセージチャネルを参照してください。

syslog アダプター

デフォルトの syslog メッセージコンバーターには、ヘッダーを設定しながら、ペイロードに元のメッセージを保持するオプションがあります。詳細については、Syslog Inbound Channel Adapter を参照してください。

非同期ゲートウェイ

前述の Promise 戻り型に加えて、ゲートウェイメソッドは Spring Framework 4.0 で導入された ListenableFuture を返すようになりました。ゲートウェイで非同期処理を無効にして、ダウンストリームフローが Future を直接返すようにすることもできます。非同期ゲートウェイを参照してください。

アグリゲーターアドバイスチェーン

Aggregator および Resequencer は、<expire-advice-chain/> および <expire-transactional/> の子要素をサポートするようになり、forceComplete の操作を通知します。詳細については、XML を使用したアグリゲーターの構成を参照してください。

送信チャネルアダプターとスクリプト

<int:outbound-channel-adapter/> は、<script/> 子要素をサポートするようになりました。基礎となるスクリプトは、void 戻り値型または null を返す必要があります。Groovy サポートおよびスクリプトのサポートを参照してください。

リシーケンサーの変更

リシーケンサ内のメッセージグループがタイムアウトになった場合(group-timeout または MessageGroupStoreReaper を使用)、遅延到着メッセージはデフォルトですぐに破棄されるようになりました。リシーケンサーを参照してください。

オプションの POJO メソッドパラメーター

Spring Integration は Java 8 の Optional 型を一貫して処理するようになりました。Service Activator の構成を参照してください。

QueueChannel バックアップキュー型

QueueChannel がサポートする Queue type は、BlockingQueue からより一般的な Queue に変更されました。この変更により、外部 Queue 実装(たとえば、Reactor の PersistentQueue)を使用できます。QueueChannel の構成を参照してください。

ChannelInterceptor の変更

ChannelInterceptor は、追加の afterSendCompletion() および afterReceiveCompletion() メソッドをサポートするようになりました。チャネルインターセプターを参照してください。

IMAP PEEK

バージョン 4.1.1 以降、mail.[protocol].peek JavaMail プロパティを明示的に false に設定した場合([protocol] は imap または imaps)、動作が変更されます。[IMPORTANT] を参照してください。

3.0 および 4.0 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。wiki [GitHub] (英語) で 2.1 に戻るすべてのバージョンの移行ガイドを見つけることができます。

新規コンポーネント

バージョン 4.0 は、多くの新しいコンポーネントを追加しました。

MQTT チャネルアダプター

MQTT チャネルアダプター(以前は Spring Integration Extensions リポジトリで利用可能)が、通常の Spring Integration ディストリビューションの一部として利用可能になりました。MQTT サポートを参照してください。

@EnableIntegration

@Configuration クラスを使用するときに標準 Spring Integration Bean の宣言を許可するために、@EnableIntegration アノテーションを追加しました。詳細については、アノテーションサポートを参照してください。

@IntegrationComponentScan

@IntegrationComponentScan アノテーションを追加して、Spring Integration 固有のコンポーネントのクラスパススキャンを許可しました。詳細については、アノテーションサポートを参照してください。

“@EnableMessageHistory”

@Configuration クラスの @EnableMessageHistory アノテーションを使用してメッセージ履歴を有効にできるようになりました。さらに、JMXMBean はメッセージ履歴設定を変更できます。また、MessageHistory は、アノテーション付きエンドポイント(@ServiceActivator@Splitter など)の自動作成された MessageHandler インスタンスを追跡できます。詳細については、メッセージ履歴を参照してください。

@MessagingGateway

メッセージングゲートウェイインターフェースを @MessagingGateway アノテーションで構成できるようになりました。これは、<int:gateway/> XML 要素の類似物です。詳細については、@MessagingGateway アノテーションを参照してください。

Spring Boot @EnableAutoConfiguration

前述の @EnableIntegration アノテーションに加えて、Spring Integration インフラストラクチャ Bean を Spring Boot の @EnableAutoConfiguration アノテーションで構成できるようにするフックを導入しました。詳細については、Spring Boot リファレンスガイドの “自動構成” を参照してください。

@GlobalChannelInterceptor

上記の @EnableIntegration アノテーションと同様に、@GlobalChannelInterceptor アノテーションを導入しました。詳細については、アノテーションサポートを参照してください。

@IntegrationConverter

<int:converter/> コンポーネントの類似物として @IntegrationConverter アノテーションを導入しました。詳細については、アノテーションサポートを参照してください。

@EnablePublisher

@EnablePublisher アノテーションを追加して、@Publisher アノテーションに default-publisher-channel を指定できるようにしました。詳細については、アノテーションサポートを参照してください。

Redis チャネルメッセージストア

永続性のために QueueChannel をバッキングするときに使用するために最適化された Redis MessageGroupStore を追加しました。詳細については、Redis チャネルメッセージストアを参照してください。

Redis ChannelPriorityMessageStore を追加しました。これを使用して、優先度ごとにメッセージを取得できます。詳細については、Redis チャネルメッセージストアを参照してください。

MongodDB チャネルメッセージストア

MongoDB サポートは、チャネル固有の MessageStore 実装である MongoDbChannelMessageStore を提供するようになりました。priorityEnabled = true では、<int:priority-queue> 要素でそれを使用して、持続メッセージの優先順位ポーリングを実現できます。詳細については、MongoDB チャネルメッセージストアを参照してください。

@EnableIntegrationMBeanExport

これで、@Configuration クラスで @EnableIntegrationMBeanExport アノテーションを使用して IntegrationMBeanExporter を有効にできます。詳細については、MBean エクスポーターを参照してください。

ChannelSecurityInterceptorFactoryBean

ChannelSecurityInterceptorFactoryBean は、@Configuration クラスを使用するメッセージチャネルの Spring Security の構成をサポートするようになりました。詳細については、Spring Integration のセキュリティを参照してください。

Redis コマンドゲートウェイ

Redis サポートは、RedisConnection#execute メソッドを使用して汎用 Redis コマンドを実行する <outbound-gateway> コンポーネントを提供するようになりました。詳細については、Redis 送信コマンドゲートウェイを参照してください。

RedisLockRegistry および GemfireLockRegistry

RedisLockRegistry および GemfireLockRegistry は、複数のアプリケーションインスタンスおよびサーバーから見えるグローバルロックをサポートするようになりました。これらは、複数のアプリケーションインスタンス間でメッセージハンドラーを集約し、1 つのインスタンスのみでグループ解放が行われるように使用できます。詳細については、Redis ロックレジストリGemfire Lock レジストリアグリゲーターを参照してください。

@Poller

アノテーションベースのメッセージング構成で poller 属性を使用できるようになりました。これは、@ServiceActivator@Aggregator、同様のアノテーションが付けられたメソッドが、PollableChannel への参照である inputChannel を使用できることを意味します。詳細については、アノテーションサポートを参照してください。

アノテーション付きエンドポイントの @InboundChannelAdapter および SmartLifecycle 

@InboundChannelAdapter メソッドアノテーションを追加しました。これは、<int:inbound-channel-adapter> XML コンポーネントの類似物です。さらに、すべてのメッセージングアノテーションが SmartLifecycle オプションを提供するようになりました。詳細については、アノテーションサポートを参照してください。

Twitter Search Outbound Gateway

新しい twitter エンドポイント <int-twitter-search-outbound-gateway/> を追加しました。毎回同じ検索クエリを使用してポーリングする検索受信アダプターとは異なり、送信ゲートウェイではオンデマンドのカスタマイズされたクエリが許可されます。詳細については、Spring Integration ソーシャル Twitter [GitHub] (英語) を参照してください。

Gemfire メタデータストア

GemfireMetadataStore を追加して、たとえば、複数のアプリケーションインスタンスまたはサーバー環境の AbstractPersistentAcceptOnceFileListFilter 実装で使用できるようにしました。詳細については、メタデータストアファイルを読むFTP 受信チャネルアダプターSFTP 受信チャネルアダプターを参照してください。

@BridgeFrom および @BridgeTo アノテーション

@Configuration クラスの MessageChannel Bean をマークするために、@BridgeFrom および @BridgeTo @Bean メソッドアノテーションを導入しました。詳細については、アノテーションサポートを参照してください。

メタメッセージングアノテーション

メッセージングアノテーション(@ServiceActivator@Router@MessagingGateway など)を、ユーザー定義のメッセージングアノテーションのメタアノテーションとして構成できるようになりました。さらに、ユーザー定義のアノテーションは同じ属性(inputChannel@PollerautoStartup など)を持つことができます。詳細については、アノテーションサポートを参照してください。

一般的な変更

このセクションでは、バージョン 3.0 からバージョン 4.0 への一般的な変更について説明します。

Spring Framework 4.0 が必要

コアメッセージングの抽象化(MessageMessageChannel など)を Spring Framework spring-messaging モジュールに移動しました。3.0 から 4.0 への移行ガイド [GitHub] (英語) の最初のセクションに従って、コードでこれらのクラスを直接参照する開発者は、変更を加える必要があります。

XPath ヘッダーエンリッチャーのヘッダー型

<int-xml:xpath-header-enricher> の header 子要素に header-type 属性を導入しました。この属性は、ヘッダー値のターゲット型を提供します(XPath 式評価の結果はこの値に変換されます)。詳細については、XPath ヘッダーエンリッチャーを参照してください。

オブジェクトから JSON への Transformer: ノード結果

<int:object-to-json-transformer> に result-type 属性を導入しました。この属性は、オブジェクトを JSON にマッピングした結果のターゲット型を提供します。STRING (デフォルト)および NODE をサポートします。詳細については、バージョン 3.0 以降、Spring Integration は式で使用するための組み込み #xpath SpEL 関数も提供します。を参照してください。

JMS ヘッダーマッピング

DefaultJmsHeaderMapper は、受信 JMSPriority ヘッダーを Spring Integration priority ヘッダーにマップするようになりました。以前は、priority は送信メッセージに対してのみ考慮されていました。詳細については、JMS メッセージとの間のメッセージヘッダーのマッピングを参照してください。

JMS 送信チャネルアダプター

JMS 発信チャネルアダプターは、session-transacted 属性をサポートするようになりました(デフォルト: false)。以前は、カスタマイズされた JmsTemplate を挿入してトランザクションを使用する必要がありました。送信チャネルアダプターを参照してください。

JMS 受信チャネルアダプター

JMS 受信チャネルアダプターは、session-transacted 属性をサポートするようになりました(デフォルト: false)。以前は、カスタマイズされた JmsTemplate を挿入してトランザクションを使用する必要がありました。アダプターは acknowledgeMode で「トランザクション」を許可しましたが、これは正しくなく、機能しませんでした。この値は許可されなくなりました。受信チャネルアダプターを参照してください。

データ型チャネル

(必要な場合)ペイロードをデータ型チャネルで受け入れられた datatype インスタンスの 1 つに変換するときに使用する MessageConverter を指定できるようになりました。詳細については、データ型チャネルの構成を参照してください。

より簡単な再試行アドバイス構成

RequestHandlerRetryAdvice を構成するための簡略化された名前空間サポートを追加しました。詳細については、再試行アドバイスの構成を参照してください。

相関エンドポイント: 時間ベースのリリース戦略

相互に排他的な group-timeout および group-timeout-expression 属性を <int:aggregator> および <int:resequencer> に追加しました。これらの属性により、ReleaseStrategy がグループを解放せず、指定された時間内にそれ以上メッセージが到着しない場合、部分的な MessageGroup を強制的に完了できます。詳細については、XML を使用したアグリゲーターの構成を参照してください。

Redis メタデータストア

RedisMetadataStore は ConcurrentMetadataStore を実装するようになり、たとえば、複数のアプリケーションインスタンスまたはサーバー環境の AbstractPersistentAcceptOnceFileListFilter 実装で使用できるようになりました。詳細については、Redis メタデータストアファイルを読むFTP 受信チャネルアダプターSFTP 受信チャネルアダプターを参照してください。

JdbcChannelMessageStore および PriorityChannel

T `JdbcChannelMessageStore` は PriorityCapableChannelMessageStore を実装するようになり、priority-queue インスタンスの message-store 参照として使用できるようになりました。詳細については、バッキングメッセージチャネルを参照してください。

AMQP エンドポイント配信モード

Spring AMQP は、デフォルトで、ブローカー上に永続メッセージを作成します。amqp_deliveryMode ヘッダーを設定するか、マッパーをカスタマイズすることにより、この動作をオーバーライドできます。この重要な設定を簡単に構成できるように、便利な default-delivery-mode 属性をアダプターに追加しました。詳細については、送信チャネルアダプターおよび送信ゲートウェイを参照してください。

FTP タイムアウト

DefaultFtpSessionFactory は connectTimeoutdefaultTimeoutdataTimeout プロパティを公開するようになり、これらの共通プロパティを設定するためにファクトリをサブクラス化する必要がなくなりました。postProcess* メソッドは、より高度な構成で引き続き使用できます。詳細については、FTP セッションファクトリを参照してください。

Twitter: StatusUpdatingMessageHandler

StatusUpdatingMessageHandler (<int-twitter:outbound-channel-adapter>)は、タイムラインステータスを更新するための org.springframework.social.twitter.api.TweetData オブジェクトを作成するために tweet-data-expression 属性をサポートするようになりました。この機能により、たとえばイメージを添付できます。詳細については、Spring Integration ソーシャル Twitter [GitHub] (英語) を参照してください。

JPA 取得ゲートウェイ: id-expression

EntityManager.find(Class entityClass, Object primaryKey) を実行するために、<int-jpa:retrieving-outbound-gateway> に id-expression 属性を導入しました。詳細については、送信ゲートウェイの取得を参照してください。

TCP 逆直列化イベント

標準デシリアライザーの 1 つが入力ストリームをメッセージにデコードする際に問題を検出すると、TcpDeserializationExceptionEvent を出力するようになり、例外が発生したポイントでアプリケーションがデータを検査できるようになりました。詳細については、TCP 接続イベントを参照してください。

@Bean 定義のメッセージングアノテーション

@Configuration クラスの @Bean 定義でメッセージングアノテーション(@ServiceActivator@Router@InboundChannelAdapter など)を構成できるようになりました。詳細については、アノテーションサポートを参照してください。

2.2 および 3.0 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。wiki [GitHub] (英語) で 2.1 に戻るすべてのバージョンの移行ガイドを見つけることができます。

新規コンポーネント

バージョン 3.0 は、多くの新しいコンポーネントを追加しました。

HTTP リクエストマッピング

HTTP モジュールは、受信 エンドポイントに対して強力なリクエストマッピングサポートを提供するようになりました。UriPathHandlerMapping クラスを IntegrationRequestMappingHandlerMapping に置き換えました。これは、アプリケーションコンテキストで integrationRequestMappingHandlerMapping の Bean 名で登録されています。HTTP 受信 エンドポイントの解析時に、新しい IntegrationRequestMappingHandlerMapping Bean が登録されるか、既存の Bean が再利用されます。柔軟なリクエストマッピング構成を実現するために、Spring Integration は <http:inbound-channel-adapter/> および <http:inbound-gateway/> に <request-mapping/> 子要素を提供します。現在、両方の HTTP 受信 エンドポイントは、Spring MVC 3.1 で導入されたリクエストマッピングインフラストラクチャに完全に基づいています。例: 単一の受信 エンドポイントで複数のパスがサポートされます。詳細については、HTTP 名前空間のサポートを参照してください。

Spring Expression Language(SpEL)設定

新しい IntegrationEvaluationContextFactoryBean を追加して、フレームワーク全体で SpEL 式で使用するカスタム PropertyAccessor 実装および関数を構成できるようにしました。詳細については、Spring 式言語 (SpEL) を参照してください。

SpEL 関数のサポート

静的 Method 関数を使用して SpEL EvaluationContext をカスタマイズするために、<spel-function/> コンポーネントを導入しました。また、2 つの組み込み関数 #jsonPath および #xpath を追加しました。詳細については、SpEL 関数を参照してください。

SpEL PropertyAccessors のサポート

SpEL EvaluationContext を PropertyAccessor 実装でカスタマイズするために、<spel-property-accessors/> コンポーネントを追加しました。詳細については、プロパティアクセサーを参照してください。

Redis: 新規コンポーネント

新しい Redis ベースの MetadataStore (Javadoc) 実装を追加しました。RedisMetadataStore を使用して、アプリケーションの再起動後も MetadataStore の状態を維持できます。この新しい MetadataStore 実装は、次のようなアダプターで使用できます。

  • Twitter 受信アダプター

  • フィード受信チャネルアダプター

新しいキューベースのコンポーネントを追加しました。<int-redis:queue-inbound-channel-adapter/> および <int-redis:queue-outbound-channel-adapter/> コンポーネントを追加して、それぞれ Redis リストで「右ポップ」および「左プッシュ」操作を実行しました。

詳細については、"Redis サポート" を参照してください。

ヘッダーチャネルレジストリ

後で解決するために、応答チャネルとエラーチャネルをレジストリに保存するようにフレームワークに指示できるようになりました。これは、replyChannel または errorChannel が失われる可能性がある場合(たとえば、メッセージを直列化する場合)に役立ちます。詳細については、ヘッダーエンリッチャーを参照してください。

MongoDB サポート: 新しい ConfigurableMongoDbMessageStore

既存の eMongoDbMessageStore に加えて、新しい ConfigurableMongoDbMessageStore を導入しました。これにより、MongoDB 用の MessageStore のより堅牢で柔軟な実装が提供されます。既存のストアとの下位互換性はありませんが、新しいアプリケーションに使用することをお勧めします。既存のアプリケーションで使用できますが、古いストアのメッセージは使用できません。詳細については、MongoDb サポートを参照してください。

syslog サポート

2.2 SyslogToMapTransformer に基づいて、Spring Integration 3.0 は、特に SYSLOG メッセージを受信するように調整された UDP および TCP 受信チャネルアダプターを導入します。詳細については、syslog サポートを参照してください。

tail サポート

テキストファイルの末尾に行が追加されたときに tail コマンドを使用してメッセージを生成するファイル受信チャネルアダプターを追加しました。 "tail" ファイルを参照してください。

JMX サポート

<int-jmx:tree-polling-channel-adapter/> を追加しました。このアダプターは、JMX MBean ツリーにクエリを実行し、クエリに一致するオブジェクトのグラフであるペイロードを含むメッセージを送信します。デフォルトでは、MBean はプリミティブおよび単純なオブジェクト(MapList、配列など)にマップされます。これにより、JSON などへの簡単な変換が可能になります。

IntegrationMBeanExporter では、naming-strategy 属性を使用してカスタム ObjectNamingStrategy を構成できるようになりました。

詳しくは、JMX サポートを参照してください。

TCP/IP 接続イベントと接続管理

TcpConnection インスタンスは、接続がオープンまたはクローズされたとき、または例外が発生したときに ApplicationEvent インスタンス(特に TcpConnectionEvent インスタンス)を発行するようになりました。この変更により、通常の Spring ApplicationListener メカニズムを使用して、アプリケーションに TCP 接続の変更を通知できます。

AbstractTcpConnection の名前を TcpConnectionSupport に変更しました。このクラスのサブクラスであるカスタム接続は、そのメソッドを使用してイベントを公開できます。同様に、AbstractTcpConnectionInterceptor の名前を TcpConnectionInterceptorSupport に変更しました。

さらに、<int-ip:tcp-connection-event-inbound-channel-adapter/> を追加しました。デフォルトでは、このアダプターはすべての TcpConnectionEvent インスタンスを Channel に送信します。

さらに、TCP 接続ファクトリは、現在開いているすべての接続の識別子のリストを返す getOpenConnectionIds() と呼ばれる新しいメソッドを提供します。これにより、アプリケーションは、特に使用中のすべての開いている接続にブロードキャストできます。

最後に、接続ファクトリは closeConnection(String connectionId) と呼ばれる新しいメソッドも提供します。これにより、アプリケーションは ID を使用して明示的に接続を閉じることができます。

詳細については、TCP 接続イベントを参照してください。

受信チャネルアダプタースクリプトのサポート

<int:inbound-channel-adapter/> は、<expression/> および <script/> 子要素を使用して MessageSource を作成できるようになりました。チャネルアダプターの式とスクリプトを参照してください。

コンテンツエンリッチャー: ヘッダー強化サポート

コンテンツエンリッチャーは、<header/> 子要素の構成を提供し、基になるメッセージフローからの応答メッセージに基づいてヘッダーで送信メッセージを強化します。詳細については、ペイロードエンリッチャーを参照してください。

一般的な変更

このセクションでは、バージョン 2.2 からバージョン 3.0 への一般的な変更について説明します。

メッセージ ID 生成

以前は、JDK UUID.randomUUID() メソッドを使用してメッセージ ID が生成されていました。このリリースでは、デフォルトのメカニズムが変更され、より効率的で非常に高速なアルゴリズムが使用されるようになりました。さらに、メッセージ ID の生成に使用される戦略を変更する機能を追加しました。詳細については、メッセージ ID 生成を参照してください。

「< ゲートウェイ>」の変更

すべてのゲートウェイメソッドに共通のヘッダーを設定できるようになり、どのメソッドが呼び出されたかに関する情報をメッセージに追加するためのオプションが追加されました。

ゲートウェイメソッド呼び出しをメッセージにマップする方法を完全にカスタマイズできるようになりました。

GatewayMethodMetadata は現在、パブリッククラスです。Java から GatewayProxyFactoryBean をプログラムで構成できます。

詳しくは、メッセージングゲートウェイを参照してください。

HTTP エンドポイントの変更
  • 送信エンドポイント encode-uri<http:outbound-gateway/> および <http:outbound-channel-adapter/> は、リクエストを送信する前に URI オブジェクトのエンコードを無効にできる encode-uri 属性を提供するようになりました。

  • 受信エンドポイント merge-with-default-converters<http:inbound-gateway/> および <http:inbound-channel-adapter/> には、カスタムメッセージコンバーターの後にデフォルト HttpMessageConverter インスタンスのリストを含める merge-with-default-converters 属性があります。

  • If-Modified-Since および If-Unmodified-Since HTTP ヘッダー : 以前は、If-Modified-Since および If-Unmodified-Since HTTP ヘッダーは、DefaultHttpHeaderMapper にマップされた HTTP ヘッダー内および HTTP ヘッダー内で誤って処理されていました。現在、その課題の修正に加えて、DefaultHttpHeaderMapper は、日時値を受け入れる HTTP ヘッダーのフォーマットされたストリングからの日付解析を提供します。

  • 受信エンドポイント式変数 : 既存の #requestParams および #pathVariables に加えて、<http:inbound-gateway/> および <http:inbound-channel-adapter/> は追加の有用な変数をサポートするようになりました: #matrixVariables#requestAttributes#requestHeaders#cookies。これらの変数は、ペイロード式とヘッダー式の両方で使用できます。

  • 送信エンドポイント "uri-variables-expression" : HTTP 送信エンドポイントは、uri-variables-expression 属性をサポートして、Expression を指定し、URL テンプレート内のすべての URI 変数プレースホルダーの Map を評価するようになりました。これにより、発信メッセージに基づいて式の異なるマップを選択できます。

詳しくは、HTTP サポートを参照してください。

Jackson サポート (JSON)
  • JSON 変換の新しい抽象化が導入されました。Jackson 1.x および Jackson 2 の実装は現在提供されており、バージョンはクラスパス上の存在によって決定されます。以前は、Jackson 1.x のみがサポートされていました。

  • ObjectToJsonTransformer および JsonToObjectTransformer は、型情報を含むヘッダーを送信 / 消費するようになりました。

詳細については、Transformer の "JSONTransformers" を参照してください。

チェーン要素 id 属性

以前は、<chain> 内の要素の id 属性は無視され、場合によっては許可されませんでした。現在、<chain> 内のすべての要素に対して id 属性が許可されています。チェーン要素の Bean 名は、周囲のチェーンの id と要素自体の id の組み合わせです。例: "myChain$child.myTransformer.handler"。詳細については、メッセージハンドラーチェーンを参照してください。

アグリゲーターの "empty-group-min-timeout" プロパティ

AbstractCorrelatingMessageHandler は empty-group-min-timeout と呼ばれる新しいプロパティを提供し、空のグループの有効期限を部分的なグループの有効期限よりも長いスケジュールで実行できるようにします。空のグループは、少なくともこのミリ秒数の間変更されない限り、MessageStore から削除されません。詳細については、XML を使用したアグリゲーターの構成を参照してください。

永続的なファイルリストフィルター(ファイル、(S)FTP)

永続的な MetadataStore を使用する新しい FileListFilter 実装が利用可能になりました。これらを使用して、システムの再起動後のファイルの重複を防ぐことができます。詳細については、ファイルを読むFTP 受信チャネルアダプターSFTP 受信チャネルアダプターを参照してください。

スクリプトのサポート: 変数の変更

スクリプトコンポーネント用の新しい variables 属性を導入しました。さらに、インラインスクリプトで変数のバインドが許可されるようになりました。詳細については、Groovy サポートおよびスクリプトのサポートを参照してください。

ダイレクトチャネルロードバランシングの構成

以前は、チャンネルの dispatcher 子要素で LoadBalancingStrategy を構成するとき、利用可能な唯一のオプションは、開発者が LoadBalancingStrategy のカスタム実装を設定できない事前定義された値の列挙を使用することでした。load-balancer-ref を使用して、LoadBalancingStrategy のカスタム実装への参照を提供できるようになりました。詳細については、DirectChannel を参照してください。

PublishSubscribeChannel の動作

以前は、サブスクライバーのない <publish-subscribe-channel/> に送信すると、false の結果が返されていました。MessagingTemplate と組み合わせて使用すると、例外がスローされます。現在、PublishSubscribeChannel には minSubscribers (デフォルト: 0)というプロパティがあります。メッセージが少なくとも最小数のサブスクライバーに送信された場合、送信操作は(数がゼロであっても)成功したと見なされます。これらの条件下でアプリケーションが例外を取得することが予想される場合、最小サブスクライバーを少なくとも 1 に設定します。

FTP、SFTP、FTPS の変更

FTP、SFTP、FTPS エンドポイントは、デフォルトでセッションをキャッシュしなくなりました。

非推奨の cached-sessions 属性をすべてのエンドポイントから削除しました。以前は、この属性の値によって制御される組み込みキャッシュメカニズムは、キャッシュのサイズを制限する方法を提供していませんでした。キャッシュのサイズは無限に大きくなる可能性がありました。リリース 2.1 は CachingConnectionFactory を導入し、セッションをキャッシュするための推奨される(そして現在唯一の)方法になりました。

CachingConnectionFactory は、新しいメソッド resetCache() を提供するようになりました。このメソッドは、アイドル状態のセッションをすぐに閉じ、使用中のセッションがキャッシュに戻されるときに閉じられます。

DefaultSftpSessionFactory は(CachingSessionFactory と組み合わせて)単一の SSH 接続でのチャネルの多重化をサポートするようになりました(SFTP のみ)。

FTP、SFTP、FTPS 受信アダプター

以前は、リモートサーバーから取得したファイルの処理に使用されるデフォルトのフィルターをオーバーライドする方法はありませんでした。filter 属性は取得するファイルを決定しますが、FileReadingMessageSource は AcceptOnceFileListFilter を使用します。これは、以前にコピーされたファイルと同じ名前でファイルの新しいコピーが取得された場合、アダプターからメッセージが送信されなかったことを意味します。

このリリースでは、新しい属性 local-filter を使用して、デフォルトのフィルターをオーバーライドできます(たとえば、AcceptAllFileListFilter または他のカスタムフィルターを使用)。

JVM の実行全体で AcceptOnceFileListFilter の動作を維持する場合は、おそらくファイルシステム上で、状態を保持するカスタムフィルターを構成できます。

受信チャネルアダプターは、preserve-timestamp 属性をサポートするようになりました。これは、ローカルファイルの変更タイムスタンプをサーバーからのタイムスタンプに設定します(デフォルト: false)。

FTP、SFTP、FTPS ゲートウェイ

ゲートウェイは mv コマンドをサポートするようになり、リモートファイルの名前変更が可能になりました。

ゲートウェイは、再帰的な ls および mget コマンドをサポートするようになり、リモートファイルツリーの取得が可能になりました。

ゲートウェイは put および mput コマンドをサポートするようになり、ファイルをリモートサーバーに送信できるようになりました。

local-filename-generator-expression 属性がサポートされるようになり、取得中のローカルファイルの命名が可能になりました。デフォルトでは、リモートファイルと同じ名前が使用されます。

local-directory-expression 属性がサポートされるようになり、検索中にローカルディレクトリの命名が可能になりました(リモートディレクトリに基づく)。

リモートファイルテンプレート

FTP および SFTP モジュールで使用される Session 実装を介して、新しい高レベルの抽象化(RemoteFileTemplate)が提供されます。エンドポイントによって内部的に使用されますが、この抽象化をプログラムで使用することもできます。すべての Spring *Template 実装と同様に、セッションへの低レベルアクセスを許可しながら、基になるセッションを確実に閉じます。

詳細は、FTP/FTPS アダプターおよび SFTP アダプターを参照してください。

送信ゲートウェイの "requires-reply" 属性

すべての送信ゲートウェイ(<jdbc:outbound-gateway/> や <jms:outbound-gateway/> など)は、「リクエストレスポンス」シナリオ用に設計されています。外部サービスからのレスポンスが予想され、reply-channel または replyChannel メッセージヘッダーに公開されます。ただし、外部システムが常に結果を返すとは限らない場合があります(たとえば、SELECT が空の ResultSet で終わる場合は <jdbc:outbound-gateway/> またはおそらく一方向の Web サービス)。そのため、開発者は返信が必要かどうかを設定するオプションが必要でした。この目的のために、送信ゲートウェイコンポーネントに requires-reply 属性を導入しました。ほとんどの場合、requires-reply のデフォルト値は true です。結果がない場合、ReplyRequiredException がスローされます。値を false に変更すると、外部サービスが何も返さない場合、送信チャネルアダプターと同様に、その時点でメッセージフローが終了します。

WebService 送信ゲートウェイには、ignore-empty-responses と呼ばれる追加の属性があります。レスポンスが受信されなかったかのように、空の String レスポンスを処理するために使用されます。デフォルトでは true ですが、レスポンスメッセージのペイロードで空の String をアプリケーションが受信できるように、false に設定できます。属性が true の場合、空の文字列は requires-reply 属性の目的でレスポンスなしとして扱われます。デフォルトでは、requires-reply は WebService 送信ゲートウェイに対して false です。

requiresReply プロパティは以前から存在していましたが、AbstractReplyProducingMessageHandler では false に設定されていたため、XML 名前空間を使用して送信ゲートウェイで設定する方法はありませんでした。

以前は、応答を受信しないゲートウェイは、フローをサイレントに終了しました(DEBUG ログメッセージを使用)。デフォルトでは、この変更により、ほとんどのゲートウェイで例外がスローされるようになりました。前の動作に戻すには、requires-reply を false に設定します。
AMQP 送信ゲートウェイヘッダーマッピング

以前は、<int-amqp:outbound-gateway/> はメッセージコンバーターを呼び出す前にヘッダーをマップし、コンバーターは content-type などのヘッダーを上書きできました。送信アダプターは、変換後にヘッダーをマッピングします。つまり、送信 Message (存在する場合)からの content-type などのヘッダーが使用されます。

このリリース以降、ゲートウェイはメッセージ変換後にヘッダーをマップするようになり、アダプターと一致します。アプリケーションが以前の動作に依存している場合(コンバーターのヘッダーがマッピングされたヘッダーを上書きする場合)、それらのヘッダーをフィルタリングする(メッセージがゲートウェイに到達する前に)か、適切に設定する必要があります。SimpleMessageConverter の影響を受けるヘッダーは content-type と content-encoding です。カスタムメッセージコンバーターは他のヘッダーを設定できます。

ストアドプロシージャコンポーネントの改善

標準の CallableStatement.getObject メソッドではサポートされていない、より複雑なデータベース固有の型については、OUT 方向の <sql-parameter-definition/> 要素に 2 つの新しい追加属性を導入しました。

  • type-name

  • return-type

ストアドプロシージャの受信チャネルアダプター <returning-resultset/> 子要素の row-mapper 属性は、RowMapper Bean 定義への参照をサポートするようになりました。以前は、クラス名のみが含まれていました(まだサポートされています)。

詳しくは、ストアドプロシージャーを参照してください。

Web サービスの送信 URI 設定

Web サービスの送信ゲートウェイ 'uri' 属性は、Spring Web Services でサポートされるすべての URI スキームの <uri-variable/> 置換をサポートするようになりました。詳細については、送信 URI 設定を参照してください。

Redis アダプターの変更

Redis 受信チャネルアダプターは、serializer プロパティに null 値を使用できるようになりました。生データはメッセージペイロードです。

Redis 送信チャネルアダプターには、topic-expression プロパティがあり、実行時に Message の Redis トピックを決定します。

Redis 受信チャネルアダプターは、既存の topics 属性に加えて、topic-patterns 属性を備えています。

詳しくは、Redis サポートを参照してください。

アドバイスフィルター

以前は、<filter/> に <request-handler-advice-chain/> があった場合、破棄アクションはすべて、アドバイスチェーンの範囲内で実行されました(discard-channel のダウンストリームフローを含む)。フィルター要素には、discard-within-advice (デフォルト: true)という属性があり、破棄アクションを実行できるようになりました after the アドバイスチェーンが完了します。アドバイスフィルターを参照してください。

アノテーションを使用したエンドポイントのアドバイス

リクエストハンドラーのアドバイスチェーンは、アノテーションを使用して構成できるようになりました。アノテーションを使用したエンドポイントへのアドバイスを参照してください。

ObjectToStringTransformer の改善

このトランスフォーマーは、byte[] および char[] ペイロードを String に正しく変換します。詳細については、Transformer を参照してください。

JPA サポートの変更

持続またはマージするペイロードは、型 java.lang.Iterable (標準 Javadoc) (英語) になりました。

その場合、Iterable によって返された各オブジェクトはエンティティとして扱われ、基になる EntityManager を使用して永続化またはマージされます。イテレータから返された null 値は無視されます。

JPA アダプターには、永続操作を実行した後に、オプションで関連する永続コンテキストからエンティティをフラッシュおよびクリアするための追加属性があります。

ゲートウェイの取得には、取得する最初のレコードを指定するメカニズムがありませんでした。これは一般的な使用例です。検索ゲートウェイは、first-result および first-result-expression 属性をゲートウェイ定義に追加することにより、このパラメーターの指定をサポートするようになりました。詳細については、送信ゲートウェイの取得を参照してください。

JPA 取得ゲートウェイと受信アダプターには、結果セットの結果の最大数を式として指定する属性があります。さらに、非推奨となった max-number-of-results を置き換える max-results 属性を導入しました。max-results および max-results-expression は、それぞれ結果セット内の最大結果数または最大結果数を計算する式を提供するために使用されます。

詳しくは、JPA サポートを参照してください。

遅延器: 遅延式

以前は、<delayer> は delay-header-name 属性を提供して、実行時の遅延値を決定していました。複雑なケースでは、<delayer> の前に <header-enricher> を付ける必要がありました。Spring Integration 3.0 は、動的遅延を決定するために expression 属性と expression 子要素を導入しました。expression でヘッダー評価を指定できるため、delay-header-name 属性は非推奨になりました。さらに、式の評価が失敗したときの動作を制御する ignore-expression-failures を導入しました。詳細については、遅延器を参照してください。

JDBC メッセージストアの改善

Spring Integration 3.0 は、MySQL バージョン 5.6.4 以降用の DDL スクリプトの新しいセットを追加します。MySQL は小数秒をサポートするようになり、MySQL ベースのメッセージストアからポーリングする際の FIFO の順序が改善されています。詳細については、汎用 JDBC メッセージストアを参照してください。

IMAP アイドル接続の例外

以前は、IMAP アイドル接続が失敗するとログに記録されましたが、アプリケーションに通知するメカニズムがありませんでした。このような例外により、ApplicationEvent インスタンスが生成されるようになりました。アプリケーションは、<int-event:inbound-channel-adapter> または ImapIdleExceptionEvent (またはそのスーパークラスの 1 つ)を受信するように構成された ApplicationListener を使用して、これらのイベントを取得できます。

メッセージヘッダーと TCP

TCP 接続ファクトリにより、選択されたヘッダー(およびペイロード)を TCP 経由で転送するための柔軟なメカニズムの構成が可能になりました。新しい TcpMessageMapper を使用すると、ヘッダーを選択できます。適切なシリアライザーまたはデシリアライザーを構成して、結果の Map を TCP ストリームに書き込む必要があります。TCP 経由でヘッダーとペイロードを転送する便利なメカニズムとして MapJsonSerializer を追加しました。詳細については、ヘッダーの転送を参照してください。

JMS メッセージ駆動型チャネルアダプター

以前は、特定の TaskExecutor を使用する場合は、<message-driven-channel-adapter/> を構成するときに、コンテナー Bean を宣言し、container 属性を設定してアダプターに提供する必要がありました。task-executor を追加し、アダプターに直接設定できるようにしました。これは、すでに利用可能であった他のいくつかのコンテナー属性に追加されます。

RMI 受信ゲートウェイ

RMI 受信ゲートウェイは、error-channel 属性をサポートするようになりました。受信 RMI を参照してください。

XsltPayloadTransformer

transformer-factory-class 属性を設定して、トランスフォーマーファクトリクラス名を指定できるようになりました。XsltPayloadTransformer を参照してください。

2.1 および 2.2 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。wiki [GitHub] (英語) で 2.1 に戻るすべてのバージョンの移行ガイドを見つけることができます。

新規コンポーネント

バージョン 2.2 は、多くの新しいコンポーネントを追加しました。

RedisStore 受信および送信チャネルアダプター

Spring Integration に RedisStore 受信および送信チャネルアダプターが追加され、Redis コレクションとの間で Message ペイロードを読み書きできるようになりました。詳細については、RedisStore 送信チャネルアダプターおよび Redis ストア受信チャネルアダプターを参照してください。

MongoDB 受信および送信チャネルアダプター

Spring Integration には MongoDB 受信および送信チャネルアダプターがあり、MongoDB ドキュメントストアとの間で Message ペイロードを読み書きできるようになりました。詳細については、MongoDB 送信チャネルアダプターおよび MongoDB 受信チャネルアダプターを参照してください。

JPA エンドポイント

Spring Integration には、JPA エンティティオブジェクトを取得および永続化する Java Persistence API(JPA)のコンポーネントが含まれるようになりました。JPA アダプターには、次のコンポーネントが含まれています。

詳しくは、JPA サポートを参照してください。

一般的な変更

このセクションでは、バージョン 2.1 からバージョン 2.2 への一般的な変更について説明します。

デフォルトで使用される Spring 3.1

Spring Integration は Spring 3.1 を使用するようになりました。

エンドポイントへの動作の追加

<advice-chain/> をポーラーに追加する機能はしばらくの間利用可能です。ただし、これによって追加される動作は、統合フロー全体に影響します。個々のエンドポイントに(たとえば)再試行を追加する機能については言及していません。2.2 リリースは、多くのエンドポイントに <request-handler-advice-chain/> を導入しました。

さらに、この目的のために 3 つの標準アドバイスクラスを追加しました。

  • MessageHandlerRetryAdvice

  • MessageHandlerCircuitBreakerAdvice

  • ExpressionEvaluatingMessageHandlerAdvice

詳しくは、エンドポイントへの動作の追加を参照してください。

トランザクションの同期と疑似トランザクション

ポーラーは、Spring のトランザクション同期機能に参加できるようになりました。これにより、トランザクションがコミットするかロールバックするかに応じて、受信チャネルアダプターによるファイル名の変更などの操作を同期できます。

さらに、PseudoTransactionManager を使用して、「実際の」トランザクションが存在しないときにこれらの機能を有効にできます。

詳しくは、トランザクションの同期を参照してください。

ファイルアダプター: ファイルの上書きと追加処理の改善

ファイル送信チャネルアダプターまたはファイル送信ゲートウェイを使用する場合、新しい mode プロパティを使用できます。Spring Integration 2.2 より前のバージョンでは、ターゲットファイルが存在する場合、それらが置き換えられました。これで、次のオプションを指定できます。

  • REPLACE (default)

  • APPEND

  • FAIL

  • IGNORE

詳しくは、既存の宛先ファイルの処理を参照してください。

より多くの送信ゲートウェイに追加された返信タイムアウト

XML 名前空間のサポートにより、reply-timeout 属性が次の送信ゲートウェイに追加されます。

  • AMQP 送信ゲートウェイ

  • ファイル送信ゲートウェイ

  • FTP 送信ゲートウェイ

  • SFTP 送信ゲートウェイ

  • WS 送信ゲートウェイ

Spring-AMQP 1.1

Spring Integration は Spring AMQP 1.1 を使用するようになりました。これにより、Spring Integration アプリケーション内で次のようないくつかの機能を使用できます。

  • 送信ゲートウェイの固定応答キュー

  • HA(ミラー化された)キュー

  • パブリッシャーの確認

  • 返されたメッセージ

  • デッドレター交換およびデッドレターキューのサポート

JDBC サポート - ストアドプロシージャのコンポーネント
SpEL サポート

Spring Integration JDBC Adapter のストアドプロシージャコンポーネントを使用する場合、Spring Expression Language(SpEL)を使用して、ストアドプロシージャ名またはストアド関数名を提供できるようになりました。

これにより、実行時に呼び出されるストアドプロシージャを指定できます。例: メッセージヘッダーを介して実行するストアドプロシージャ名を指定できます。詳細については、ストアドプロシージャーを参照してください。

JMX サポート

ストアドプロシージャコンポーネントは基本的な JMX サポートを提供し、それらのプロパティの一部を MBean として公開します。

  • ストアドプロシージャ名

  • ストアドプロシージャ名の式

  • JdbcCallOperations キャッシュ統計

JDBC サポート: 送信ゲートウェイ

JDBC 送信ゲートウェイを使用する場合、更新クエリは必須ではなくなりました。リクエストメッセージをパラメーターのソースとして使用して、選択クエリのみを提供できるようになりました。

JDBC サポート: チャネル固有のメッセージストアの実装

新しいメッセージチャネル固有のメッセージストア実装を追加し、データベース固有の SQL クエリを使用したよりスケーラブルなソリューションを提供しました。詳細については、バッキングメッセージチャネルを参照してください。

正常なシャットダウン

stopActiveComponents() というメソッドを IntegrationMBeanExporter に追加しました。これにより、Spring Integration アプリケーションを正常にシャットダウンし、特定のアダプターへの新しい受信メッセージを許可せず、飛行中のメッセージが完了するまでしばらく待つことができます。

JMS 送信ゲートウェイの改善

これで、MessageListener コンテナーを使用して応答を受信するように JMS 送信ゲートウェイを構成できます。そうすることで、ゲートウェイのパフォーマンスを改善できます。

ObjectToJsonTransformer

デフォルトでは、ObjectToJsonTransformer は content-type ヘッダーを application/json に設定するようになりました。詳細については、Transformer を参照してください。

HTTP サポート

HTTP を介した Java 直列化は、デフォルトでは無効になっています。以前は、Serializable オブジェクトに expected-response-type を設定するときに、Accept ヘッダーが正しく設定されていませんでした。SerializingHttpMessageConverter を更新して、Accept ヘッダーを application/x-java-serialized-object に設定しました。ただし、これにより既存のアプリケーションとの非互換性が生じる可能性があるため、このコンバーターを HTTP エンドポイントに自動的に追加しないことにしました。

Java 直列化を使用する場合は、message-converters 属性(XML 構成を使用する場合)または setMessageConverters() メソッド(Java)を使用して、SerializingHttpMessageConverter を適切なエンドポイントに追加する必要があります。

または、代わりに JSON の使用を検討することもできます。クラスパスに Jackson を置くことで有効になります。

2.0 および 2.1 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。

新規コンポーネント

バージョン 2.1 は、多くの新しいコンポーネントを追加しました。

JSR-223 スクリプトのサポート

Spring Integration 2.0 では、Groovy (英語) のサポートを追加しました。Spring Integration 2.1 では、JSR-223 (英語) (「Java ™プラットフォームのスクリプト」)のサポートを実装することにより、追加の言語のサポートを大幅に拡張しました。これで、JSR-223 をサポートする次のようなスクリプト言語を使用できるようになります。

  • Javascript

  • Ruby および JRuby

  • Python および Jython

  • Groovy

詳細については、スクリプトのサポートを参照してください。

GemFire サポート

Spring Integration は、エントリおよび連続照会イベント用の受信・アダプター、エントリをキャッシュに書き込む送信・アダプター、MessageStore (Javadoc) および MessageGroupStore (Javadoc) 実装を提供することにより、GemFire のサポートを提供します。Spring 統合は、Spring Gemfire プロジェクトを活用して、コンポーネントの薄いラッパーを提供します。

詳細については、重要な GemFire および Apache Geode サポートを参照してください。

AMQP サポート

Spring Integration 2.1 は、高度なメッセージキュープロトコル (英語) (AMQP)を使用してメッセージを送受信するためのいくつかのチャネルアダプターを追加しました。さらに、Spring Integration は、ポイントツーポイントメッセージチャネルとパブリッシュサブスクライブメッセージチャネルも提供します。どちらも AMQP Exchange とキューによってサポートされています。

詳細については、AMQP サポートを参照してください。

MongoDB サポート

バージョン 2.1 の時点で、Spring Integration は MongoDB ベースの MessageStore を提供することにより、MongoDB (英語) のサポートを提供します。

詳細については、MongoDb サポートを参照してください。

Redis サポート

バージョン 2.1 の時点で、Spring Integration は、Redis ベースの MessageStore およびパブリッシュ / サブスクライブメッセージングアダプターを提供することにより、高度なキーバリューストアである Redis (英語) をサポートします。

詳細については、Redis サポートを参照してください。

Spring のリソース抽象化のサポート

バージョン 2.1 では、Spring のリソース抽象化に基づいて構築される新しいリソース受信チャネルアダプターを導入し、ファイル、URL、クラスパスリソースなど、さまざまな実際の型の基礎となるリソース全体の柔軟性をサポートします。ファイル受信チャネルアダプターに似ていますが、より一般的です。

詳細については、リソース受信チャネルアダプターを参照してください。

ストアドプロシージャコンポーネント

Spring Integration 2.1 を使用すると、JDBC モジュールは、受信および送信のチャネルアダプターや送信ゲートウェイなどのいくつかの新しいコンポーネントを追加することで、ストアドプロシージャのサポートも提供します。ストアドプロシージャのサポートは、Spring の SimpleJdbcCall (Javadoc) クラスを活用し、その結果、次のストアドプロシージャをサポートします。

  • Apache Derby

  • DB2

  • MySQL

  • Microsoft SQL Server

  • Oracle

  • PostgreSQL

  • Sybase

ストアドプロシージャコンポーネントは、次のデータベースの SQL 関数もサポートしています。

  • MySQL

  • Microsoft SQL Server

  • Oracle

  • PostgreSQL

詳細については、ストアドプロシージャーを参照してください。

XPath および XML 検証フィルター

Spring Integration 2.1 は、新しい XPath ベースのメッセージフィルターを提供します。XML モジュールの一部です。XPath フィルターを使用すると、XPath 式を使用してメッセージをフィルター処理できます。XML 検証フィルターのドキュメントも追加しました。

詳細については、XPath フィルターの使用および XML 検証フィルターを参照してください。

ペイロードエンリッチャー

Spring Integration 2.1 以降、ペイロードエンリッチャーを追加しました。ペイロードエンリッチャーは、公開されたリクエストチャネルに通常 Message (Javadoc) を渡し、応答メッセージを予期するエンドポイントを定義します。次に、応答メッセージは、式を評価してターゲットペイロードを強化するためのルートオブジェクトになります。

詳細については、ペイロードエンリッチャーを参照してください。

FTP および SFTP 送信ゲートウェイ

Spring Integration 2.1 は、リモートファイル転送プロトコル(FTP)またはセキュアファイル転送プロトコル(SFT)サーバーと対話するための 2 つの新しい送信ゲートウェイを提供します。これら 2 つのゲートウェイを使用すると、リモートコマンドの限られたセットを直接実行できます。

たとえば、これらの送信ゲートウェイを使用して、リモートファイルをリスト、取得、削除し、Spring Integration メッセージの流れをリモートサーバーのレスポンスで継続させることができます。

詳細については、FTP 送信ゲートウェイおよび SFTP 送信ゲートウェイを参照してください。

FTP セッションキャッシング

バージョン 2.1 の時点で、リモートファイルアダプター(FTP、SFTP など)のセッション管理に関して、より柔軟に対応しています。

具体的には、cache-sessions 属性を廃止しました(XML 名前空間のサポートを介して利用可能です)。別の方法として、sessionCacheSize および sessionWaitTimeout 属性を CachingSessionFactory に追加しました。

詳細については、FTP セッションキャッシングおよび SFTP セッションキャッシングを参照してください。

フレームワークリファクタリング

Spring Integration フレームワークをさまざまな方法でリファクタリングしました。すべてこのセクションで説明します。

ルーター構成の標準化

より一貫したユーザーエクスペリエンスを提供するために、Spring Integration 2.1 を使用してすべてのルーター実装にわたってルーターパラメーターを標準化しました。

Spring Integration 2.1 では、ignore-channel-name-resolution-failures 属性を削除して、その動作を resolution-required 属性に統合しました。また、resolution-required 属性のデフォルトは true になりました。

Spring Integration 2.1 以降、デフォルトの出力チャネルが定義されていない場合、ルーターはメッセージを表示することなくメッセージをドロップしなくなりました。つまり、デフォルトでは、ルーターは少なくとも 1 つの解決済みチャネルを必要とし(default-output-channel が設定されていない場合)、チャネルが決定されなかった(または送信の試行が成功しなかった)場合、デフォルトで MessageDeliveryException をスローします。

ただし、メッセージをサイレントにドロップする場合は、default-output-channel="nullChannel" を設定できます。

前述のルーターパラメーターの標準化とパラメーターの統合により、古い Spring Integration ベースのアプリケーションが機能しなくなる可能性があります。

詳細については、Routers を参照してください。

2.1 に更新された XML スキーマ

Spring Integration 2.1 には、更新された XML スキーマ (バージョン 2.1) が付属しています。前述した Router の標準化など、多くの改善が加えられています。

今後、開発者は常に最新の XML スキーマ(現在のバージョン 2.1)を宣言する必要があります。または、バージョンなしのスキーマを使用できます。一般的に、最良のオプションは、バージョンなしの名前空間を使用することです。これらは、Spring Integration の利用可能な最新バージョンを自動的に使用するためです。

次の例では、バージョンのない Spring Integration 名前空間を宣言しています。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:int="http://www.springframework.org/schema/integration"
   xsi:schemaLocation="http://www.springframework.org/schema/integration
           https://www.springframework.org/schema/integration/spring-integration.xsd
           http://www.springframework.org/schema/beans
           https://www.springframework.org/schema/beans/spring-beans.xsd">
...
</beans>

次の例では、明示的なバージョンで Spring Integration 名前空間を宣言しています。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:int="http://www.springframework.org/schema/integration"
   xsi:schemaLocation="http://www.springframework.org/schema/integration
           https://www.springframework.org/schema/integration/spring-integration-2.2.xsd
           http://www.springframework.org/schema/beans
           https://www.springframework.org/schema/beans/spring-beans.xsd">
...
</beans>

古い 1.0 および 2.0 スキーマはまだあります。ただし、アプリケーションコンテキストがこれらの非推奨スキーマのいずれかをまだ参照している場合、バリデーターは初期化に失敗します。

ソース管理とビルドインフラストラクチャ

バージョン 2.1 では、ソース管理とビルドインフラストラクチャに多くの変更が導入されました。このセクションでは、これらの変更について説明します。

Github でホストされるソースコード

バージョン 2.0 以降、Spring Integration プロジェクトはバージョン管理に Git (英語) を使用します。コミュニティの可視性をさらに高めるために、プロジェクトは SpringSource がホストする Git リポジトリから Github (英語) に移動されました。Spring Integration Git リポジトリは、spring-integration にあり [GitHub] (英語) ます。

このプロジェクトでは、コードの提供プロセスも改善しました。さらに、すべてのコミットがピアレビューされるようにします。実際、コアコミッターはコントリビューターと同じプロセスに従います。詳細については、コントリビュートする [GitHub] (英語) を参照してください。

Sonar によるソースコードの可視性の向上

ソースコードの可視性を向上させ、結果として Spring Integration のソースコードの品質を監視するために、ソナー (英語) のインスタンスを設定しました。メトリクスを毎晩収集し、sonar.spring.io (英語) で利用できるようにします。

新しいサンプル

Spring Integration の 2.1 リリースでは、Spring Integration サンプルプロジェクトも拡張し、AMQP サポートをカバーするサンプル、新しいペイロードエンリッチャーを紹介するサンプル、Spring Integration フローフラグメントをテストするための手法を示すサンプル、サンプルなど、多くの新しいサンプルを追加しました。Oracle データベースに対してストアドプロシージャを実行するため。詳細については、spring-integration-samples [GitHub] (英語) をご覧ください [GitHub] (英語)

バージョン 1.0 および 2.0 間の変更

アプリケーションに影響する可能性のある重要な変更については、移行ガイド [GitHub] (英語) を参照してください。

Spring 3 サポート

Spring Integration 2.0 は Spring 3.0.5 上に構築され、その機能の多くをユーザーが利用できるようにします。

[[2.0-spel-support]] ===== Spring 式言語のサポート (SpEL)

トランスフォーマー、ルーター、フィルター、スプリッター、アグリゲーター、サービスアクティベーター、ヘッダーエンリッチャー、Spring Integration コア名前空間のさまざまな要素内、およびさまざまなアダプター内で SpEL 式を使用できるようになりました。このガイドには多くのサンプルが含まれています。

変換サービスとコンバーター

データ型チャネル (英語) などの多くの Spring Integration コンポーネントを構成しながら、Spring で提供される変換サービスのサポートを利用できるようになりました。メッセージチャネルの実装およびサービスアクティベーターを参照してください。また、前のポイントで述べた SpEL サポートも変換サービスに依存しています。コンバーターを一度登録すると、SpEL 式を使用する場所であればどこでも利用できます。

TaskScheduler および Trigger

Spring 3.0 は、スケジューリングに関連する 2 つの新しい戦略 TaskScheduler と Trigger を定義しています。Spring Integration(これは多くのスケジューリングを使用します)はこれらに基づいています。実際、Spring Integration 1.0 は元々一部のコンポーネント(CronTrigger など)を定義しており、現在は Spring 3.0 のコア API に移行されています。これで、(Spring Integration 構成だけでなく)アプリケーションコンテキスト全体で同じコンポーネントを再利用するメリットが得られます。また、レート、遅延、cron 式、トリガー参照を直接構成するための属性を提供することにより、Spring Integration ポーラーの構成を大幅に簡素化しました。構成例については、チャンネルアダプターを参照してください。

RestTemplate および HttpMessageConverter

送信 HTTP アダプターは、Spring の RestTemplate に委譲して、HTTP リクエストを実行し、そのレスポンスを処理します。これは、カスタム HttpMessageConverter 実装を再利用できることも意味します。詳細については、HTTP 送信コンポーネントを参照してください。

エンタープライズ統合パターンの追加

また、2.0 では、Hohpe and Woolf のエンタープライズ統合パターン (英語) 本で説明されているパターンのサポートを追加しました。

メッセージ履歴

メッセージ履歴 (英語) パターンをサポートするようになりました。これにより、各チャネルとエンドポイントの名前、そのトラバースのタイムスタンプなど、トラバースされたすべてのコンポーネントを追跡できます。詳細については、メッセージ履歴を参照してください。

メッセージストア

メッセージストア (英語) パターンのサポートを提供するようになりました。メッセージストアは、アグリゲーターやリシーケンサーなど、スコープが単一のトランザクションを超えて広がるプロセスに代わってメッセージを永続化するための戦略を提供します。このガイドの多くのセクションには、Spring Integration のいくつかの領域に影響するため、メッセージストアの使用方法のサンプルが含まれています。詳細については、メッセージストアクレームチェックメッセージチャンネルアグリゲーターJDBC サポート `"、およびリシーケンサーを参照してください。

クレームチェック

クレームチェック (英語) パターンの実装を追加しました。クレームチェックパターンの背景となる考え方は、メッセージペイロードを「クレームチケット」と交換できるということです。これにより、帯域幅を削減し、チャネル間でメッセージを送信する際の潜在的なセキュリティ課題を回避できます。詳細については、クレームチェックを参照してください。

制御バス

制御バス (英語) パターンの実装を提供しており、メッセージングを使用してエンドポイントとチャネルを管理および監視できます。実装には、SpEL ベースのアプローチと Groovy スクリプトを実行するアプローチの両方が含まれます。詳細については、制御バスおよび制御バスを参照してください。

新しいチャネルアダプターとゲートウェイ

Spring Integration 2.0 にいくつかの新しいチャネルアダプターとメッセージングゲートウェイを追加しました。

TCP および UDP アダプター

TCP および UDP インターネットプロトコルを介してメッセージを送受信するためのチャネルアダプターを追加しました。詳細については、TCP および UDP のサポートを参照してください。次のブログも参照してください: “Spring Integration 2.0 M3 での UDP および TCP アダプターの使用” (英語)

Twitter アダプター

Twitter アダプターは、Twitter ステータスの更新とダイレクトメッセージの送受信をサポートします。受信チャネルアダプターを使用して Twitter 検索を実行することもできます。詳細については、Spring Integration ソーシャル Twitter [GitHub] (英語) を参照してください。

XMPP アダプター

新しい XMPP アダプターは、チャットメッセージとプレゼンスイベントの両方をサポートします。詳細については、XMPP サポートを参照してください。

FTP および FTPS アダプター

FTP および FTPS を介した受信および送信のファイル転送サポートが利用可能になりました。詳細については、FTP/FTPS アダプターを参照してください。

SFTP アダプター

SFTP を介した受信および送信のファイル転送サポートが利用可能になりました。詳細については、SFTP アダプターを参照してください。

フィードアダプター

ニュースフィード(ATOM および RSS)を受信するためのチャネルアダプターも追加しました。詳細については、フィードアダプターを参照してください。

その他の追加

Spring Integration は、他の多くの機能を追加します。このセクションではそれらについて説明します。

Groovy サポート

Spring Integration 2.0 は Groovy サポートを追加し、Groovy スクリプト言語を使用して統合およびビジネスロジックを提供できるようにしました。詳細については、Groovy サポートを参照してください。

マップ Transformers

これらの対称トランスフォーマーは、ペイロードオブジェクトを Map オブジェクトとの間で変換します。詳細については、Transformer を参照してください。

JSONTransformers

これらの対称トランスフォーマーは、ペイロードオブジェクトと JSON を相互に変換します。詳細については、Transformer を参照してください。

直列化トランス

これらの対称トランスフォーマーは、ペイロードオブジェクトをバイト配列との間で変換します。また、Spring 3.0.5 が追加したシリアライザおよびデシリアライザ戦略インターフェースもサポートしています。詳細については、Transformer を参照してください。

フレームワークリファクタリング

コア API は、大幅にリファクタリングされ、よりシンプルで使いやすくなりました。開発者への影響は最小限であると予測していますが、このドキュメントを読んで、変更点を見つけてください。具体的には、動的ルーターメッセージングゲートウェイHTTP 送信コンポーネントメッセージアグリゲーターを読む必要があります。一部のコアコンポーネント(MessageMessageHeadersMessageChannelMessageBuilder など)に直接依存している場合、インポートステートメントを更新する必要があります。循環依存関係を回避しながらドメインモデルを継承するために必要な柔軟性を提供するために、一部のパッケージを再構築しました(このような「もつれ」を回避するのはフレームワークのポリシーです)。

新しいソース管理とビルドインフラストラクチャ

Spring Integration 2.0 を使用して、ソース管理に Git を使用するようにビルド環境を切り替えました。リポジトリにアクセスするには、https://git.springsource.org/spring-integration (英語) にアクセスしてください。また、ビルドシステムを Gradle (英語) に切り替えました。

新しい Spring Integration サンプル

Spring Integration 2.0 を使用して、サンプルをメインのリリース配布から切り離しました。詳細については、新しい Spring Integration サンプル (英語) のブログを参照してください。また、すべての新しいアダプターのサンプルを含む、多くの新しいサンプルを作成しました。

Eclipse Spring Tool Suite Spring Integration 用ビジュアルエディター

SpringSource Tool Suite の最新バージョンには、Spring Integration 用の驚くべき新しいビジュアルエディターが含まれています。まだ STS を使用していない場合は、Pleiades All in One (JDK, STS, Lombok 付属) Eclipse Spring Tool Suite (英語) でダウンロードできます。