数か月後に私はアプリケーションを水平に分割する必要があります。私のアプリケーションには、CPUとメモリの負荷が必要な特定のサービスがあります。拡張性のために、複数のJVMに分割したいと思っています。水平シャーディング、Java EE&JNDI
私はパーティション化する必要があるサービスをカプセル化するEARを持っています。私がこれを行うと、サービスのクライアント(UIなど)はサービスの特定のインスタンスに対処できる必要があります。たとえば、Accountという名前のサービスがあるとしますが、実際にはそのサービスのインスタンスが3つの異なるJVM(ただし、すべて同じJava EEドメイン内)で実行されています。アカウントIDから特定のVMにマッピングできるサービスロケータがあると仮定すると、その特定のアカウントにサービスできるEJBにはどのようにアクセスしますか?
私が見ることができる潜在的な解決策は、アプリケーションコンテナが別々のアプリケーションでEJBに与えるJNDI名を利用することです。私は別の名前でモジュールを3つの異なる時間を展開する場合、私は彼らに取得するためにJNDIルックアップを行うことができます。
のjava:グローバル/ AccountServer1/AccountFacade
のjava:グローバル/ AccountServer2/AccountFacade
のjava: accountFacadeに到達するために依存性注入を使用することはできませんでした。私はAccountLocator EJBを使用してAccountIDを取得し、Accountアプリケーションの1つにマッピングする必要があります。私が厄介なことをしたいのであれば、おそらく、メソッドの引数がどのサーバーを使用するかを特定できると仮定して、ルックアップを透過的に行う「ローカル」アカウントファサードを実装できます...
このアプローチは実行可能ですか?より良い選択肢はありますか?