0


0

Webアプリケーション間でHibernate SessionFactoryを共有するにはどうすればよいですか?

単一のTomcatサーバーで実行されている2つのWebアプリケーションがあり、Hibernateで同じデータベースに接続されています。 2つのSessionFactoryインスタンスを実行すると、いくつかの問題が発生する可能性があります。

また、両方のWebアプリケーションが同じアプリケーションロジックの多くを共有しているため、できる限り集中化することをお勧めします。 また、Spring for DIおよびHibernate構成を使用しているため、単一のApplicationContextを使用するのも理にかなっています。

このようなことはどうすればいいですか? ApplicationContext、したがってSessionFactoryを作成し、各アプリケーションがそれにアクセスできるようにするヘッドレスWARをデプロイする必要がありますか? これでもいい考えですか?

3 Answer


1


_ 2つのSessionFactoryインスタンスを実行すると、いくつかの問題が発生する可能性があります。 _

Webアプリケーションは、専用の「ClassLoader」で互いにシールドされています。 だから、私は衝突がどのように起こるかわかりませんし、単純にそれを気にしません。 2つの「SessionFactory」で十分です。


1


ただし、セッションを作成し、共有クラスローダー(通常は/ sharedのJAR)にアクセスするアプリケーションロジックを_can_配置できます-あなたが何に慣れているかを知らない限り、奇妙な例外を生成しやすいので、非常に注意してください再しています。

また、これには多くの利点がありそうにありません(webappのセッション状態の同期について心配する必要があるなど)unless 2つのwebappでトランザクションを同期する必要があります-この場合、JTAまたは他のオプションはおそらくまだより良いソリューション。


1


JNDIを介して `SessionFactory`を共有することが可能です(理想的には、HibernateをJMXサービスとしてアプリケーションサーバーにデプロイします)。

しかし、正直なところ、2つ以上の `SessionFactory`インスタンスを持つことは、実際には問題ではなく、本当に心配することはありません。 これは、単一のアプリケーション(クラスター環境)でも非常に一般的なシナリオです。