次のバージョンを使用しています。
- 春 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 ハンドラーで表記法を機能させるにはどうすればよいでしょうか?
ExecutionHandler
Spring を意識したものを書きますか?
注: グループ内の別のプロジェクトで使用されている Spring-Flex との互換性がないため、Hibernate 4 にアップグレードできません。おそらく、Spring バージョンの同じ話ですが、思い出せません。