3

次のバージョンを使用しています。

  • 春 3.1.1.RELEASE
  • Netty 3.4.0.Final
  • Hibernate 3.5.6-ファイナル

現在、かなりうまく機能する Netty サーバーがあります。サーバーのルート、パイプライン ファクトリ、およびすべてを所有するサーバーのベース「スタブ」はすべて、Spring でセットアップされています。このスタブでは、Spring@Transactionalアノテーションは問題なく機能します。

ただし、ステートフルで、ユーザーの状態に応じて動的に作成されるハンドラーでは、@Transactional機能しません。その理由を理解していると確信しています。私は「解決策」さえ持っていますが、それはあまり良くありません。

デコーダーとエンコーダーの後に、ExecutionHandler を追加します。

pipeline.addLast("execution", new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(16,1000000, 1000000)));

これは、Spring トランザクション サポートが壊れている場所のようです。Spring はこれらのスレッドを認識しないため、トランザクションをそれらにバインドすることはできません。クラスは正しくプロキシされますが、デバッグでは関連付けられたトランザクションがありません。

私の解決策はくだらないものであり、実際の解決策に置き換える必要があります:

Session sess = SessionFactoryUtils.getSession(getSessionFactory(), true);

セッションを解放するのは私に依存しているため、それは悪いことです。トランザクションでさえない可能性があります。私は確認していません。それは多くの点で吸う。

とにかく - 質問の根源。上記の技術を考えると@Transactional、Netty ハンドラーで表記法を機能させるにはどうすればよいでしょうか?

ExecutionHandlerSpring を意識したものを書きますか?

注: グループ内の別のプロジェクトで使用されている Spring-Flex との互換性がないため、Hibernate 4 にアップグレードできません。おそらく、Spring バージョンの同じ話ですが、思い出せません。

4

1 に答える 1

0

これらの netty のハンドラーを spring コンテナー内に作成し、サービスまたは永続レイヤーをハンドラーに挿入して、これらのレイヤーを netty から独立させることができるようにすることをお勧めします。もちろん、これらは古い学校の spring Bean です。

于 2012-05-20T08:41:34.503 に答える