2008-09-16 7 views
6

私は、EJB 2.xエンティティBean(BMP)を使用する大きなアプリケーションを持っています。これは恐ろしい持続戦略であることがよく知られています(必要な場合は私が詳しく説明できます)。EJB 2.x BMPエンティティBeanとHibernate 3.xの混在

私はこのアプリケーションの移行をより表現力豊かで透過的で非侵襲性の永続性戦略を使用したいと考えています。これまでの私の経験では、Hibernate 3.xが当然の選択です。

アプリケーションの100を超えるテーブルがエンティティBeanを使用するため、Hibernateへの移行にはしばらく時間がかかります。だから私は、可能であれば、同じテーブル上で理想的には、2つの持続戦略を並行して実行する段階的アプローチを検討しています。

私の質問は、これらの2つの持続戦略を組み合わせるという落とし穴は何ですか?彼らは互いのやり方でやりますか?

答えて

2

Hibernateで第2レベルのキャッシュを使用し、テーブルがHibernate以外で変更された場合、Hibernateはそのキャッシュエントリが古くなっていることを知る方法がないため、キャッシングに注意する必要があります。

トランザクションの場合は、コンテナによって提供されるJTAを使用する必要があります。そのため、安全である必要があります。

+0

第1レベルのキャッシュ(セッション)にも同じことが適用されます –

+0

長時間のセッションを使用する場合はyesです。しかし、それは本当にアドバイスされていません。 –

+0

これまでの私の限られた実験に基づいて、2つの技術は、直接的なJDBCの第3の技術とともに、楽しく並んで動作します。アプリケーションサーバのTransactionManagerは、3つのモードが同じトランザクション内で使用されている場合でも、実際に望ましい動作を提供します。 –

2

私は、実際にはHibernateセッションで作業していることには注意が必要です。 Hibernateキャッシュのものは、途中で取得する可能性があります。

私は、Hibernateを採用する場合、Entity Beanを完全に削除することをお勧めします。 HibernateはセッションBean内で動作し、セッションBeanにトランザクションを管理させます。

代わりに、Java Persistence APIに標準化されたHibernateであるEJB 3を使用します。

+0

実際にはHibernateをプロバイダとしてJPAに対してプログラミングしていますが、100個のBMPエンティティBeanを即時に移行できないため、2つのテクノロジを並行して実行することについての質問は残ります。 –

関連する問題