現在、ビジネス オブジェクト、DAO オブジェクト、および Hibernate のスタックをインスタンス化する Spring アプリケーション コンテキストをロードする Web アプリケーションがあります。このスタックを別の Web アプリケーションと共有して、同じオブジェクトのインスタンスが複数になるのを回避したいと考えています。
いくつかのアプローチを検討しました。JMX または JNDI、または EJB3 を使用してオブジェクトを公開します。
さまざまなアプローチにはすべて問題があり、軽量な方法を探しています。
これを解決する方法について何か提案はありますか?
編集:少し詳しく説明するように要求するコメントを受け取ったので、ここに行きます:
解決したい主な問題は、Hibernate のインスタンスを 1 つだけにしたいということです。これは、同じデータソースで動作する複数のクライアント アプリケーションを実行しているときに、Hibernate の第 2 レベル キャッシュが無効になるという問題によるものです。また、ビジネス/DAO/Hibernate スタックはかなり大きくなっているため、複製しない方が理にかなっています。
まず、ビジネス層だけを他の Web アプリに公開する方法を調べてみました。Spring は、わずかな XML の価格で JMX ラッピングを提供します。ただし、JMX エンティティを JNDI ツリーにバインドできなかったため、Web アプリからオブジェクトを検索できませんでした。
次に、ビジネス層を直接 JNDI にバインドしてみました。Spring はこれに対するメソッドを提供していませんでしたが、JNDITemplate を使用してそれらをバインドすることも簡単でした。しかし、これによりいくつかの新しい問題が発生しました。1) セキュリティ マネージャが RMI クラスローダへのアクセスを拒否するため、JNDI リソースでメソッドを呼び出そうとすると、クライアントが失敗しました。2) セキュリティの問題が解決されると、JBoss は IllegalArgumentException: object is not an instance of declaring class. をスローしました。少し読むと、JNDI リソースのスタブ実装が必要であることがわかりますが、これは面倒なように思えます (おそらく Spring が役立つのでしょうか?)。
EJB についてはまだ詳しく調べていませんが、最初の 2 回の試行の後、私たちが達成しようとしていることが本当に可能かどうか疑問に思っています。
私たちが達成しようとしていることを要約すると、1 つの JBoss インスタンス、DAO レイヤーと Hibernate の上でビジネス オブジェクトの 1 つのスタックを利用する複数の Web アプリです。
よろしくお願いします、
ニルス