ユーザーがWebインターフェイスから「socketinfo」テーブル(データベースに格納されている)を追加/削除できるようにするJavaEEアプリケーションを作成しています。ユーザーがWebインターフェースから「socketinfo」を有効にする場合、アプリケーションサーバーは着信パケットのソケットリスナーを作成し、データを処理する必要があります。ユーザーが「socketinfo」を無効にするか削除する場合は、ソケットリスナーを削除する必要があります。製品全体が片方の耳に含まれている必要があり、できれば準拠している必要があります。私が検討したが問題に遭遇したいくつかのアプローチは次のとおりです。
ソケット用のJCAリソースアダプタを作成し、MDBをリスナーとして使用します。ここで遭遇した問題は、ユーザーがMDBを追加したときに、さまざまなソケットにMDBをプログラムでデプロイする方法がわからないことでした。
注意深く同期してデーモンスレッドを管理する@Singleton/ @Serviceejbを作成します。シングルトンejbをビジネスレイヤーに注入して、CRUD操作とソケット操作が適切なワークフローで行われるようにすることができます。ここでの問題は、EJBからスレッドを作成することは悪い習慣と見なされ、仕様に準拠していないことでした(シングルトンのライフサイクルが正しく処理され、適切な同期メカニズムが導入されている場合でも)。
スレッドをドメインモデル(別のシングルトン?)に配置し、EJBにモデルを使用させます。アプリケーションサーバーには複数のクラスローダーがあり、一般にコンテナサポートが少ない傾向があるため、これはすべての中で最悪でした。さらに、これは2.苦しむすべての問題に苦しんでいます。
Java EEでこの状況を正しく処理する方法はありますか?
編集:この質問の拡張:ewernliが彼のソリューション3で示唆しているように、この問題に取り組むことにしたと仮定すると、JCA(内部スレッドを追加するカスタムインターフェイスを使用)でこれを行うことで、(うまく設計された)シングルトン?リソースアダプタの作成は大変な作業のようには見えませんが、完全に些細なことではなく、少し時間がかかる可能性があります(他の開発者にとってはさらに難しいかもしれません)。