0

Spring Integration を使用して永続的なイベント キューを作成しようとしています。最初のバージョンでは JPA (MySQL データベースを使用) を使用したいと考えており、将来的には JMS バージョンに移行する可能性が非常に高くなります (移行をできるだけ簡単にしたい)。

私は、必要なものと同様のことを行うサンプルバージョンを(JPAに永続化せずに)作成しました。

<?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/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/beans">

    <int:channel id="customerEventChannel">
        <int:queue/>
    </int:channel>

    <bean id="customerEventService" class="springintegration.CustomerEventService"/>

    <int:outbound-channel-adapter ref="customerEventService" method="handleCustomerEvent" channel="customerEventChannel">
        <int:poller fixed-delay="3000" max-messages-per-poll="1" />
    </int:outbound-channel-adapter>

</beans>

しかし、JPA インバウンドおよびアウトバウンド チャネル アダプターを使用するように例を変更しようとすると、うまくいきません。

私の考えは、5 秒ごとにデータベースを読み取り (構成可能)、データベースから復元された「キュー」内の要素を処理することです。一方で、サービス クラスのメソッドを呼び出してデータベースに新しい要素を挿入したいと考えています。これを行うために、私は試しました:

    <int:channel id="customerEventInputChannel" />
    <int:channel id="customerEventOutputChannel" />

        <int-jpa:inbound-channel-adapter channel="customerEventInputChannel"
                                         entity-class="springintegration.CustomerEvent"
                                         entity-manager-factory="entityManagerFactory"
                                         auto-startup="true"
                                         expect-single-result="true"
                                         delete-after-poll="true">

            <int:poller fixed-rate="5000">
                <int:transactional propagation="REQUIRED" transaction-manager="transactionManager"/>
            </int:poller>
        </int-jpa:inbound-channel-adapter>

        <int-jpa:outbound-channel-adapter channel="customerEventOutputChannel"
                                          entity-class="springintegration.CustomerEvent"
                                          entity-manager-factory="entityManagerFactory">
            <int-jpa:transactional transaction-manager="transactionManager" />
        </int-jpa:outbound-channel-adapter>

しかし、データベースを読み書きできないため、何かが欠けています。サービスアクティベーター、ブリッジ、ゲートウェイなどでも試してみましたが、同じ結果が得られました。

どんな助けでも大歓迎です。

4

1 に答える 1