数か月以内に、アプリケーションを水平に分割する必要があります。アプリケーション内に CPU とメモリの負荷を必要とする特定のサービスがあり、スケーラビリティのために、複数の JVM 間でサービスを分割したいと考えています。
パーティション化する必要があるサービスをカプセル化する EAR があります。これを行う場合、サービス (UI など) のクライアントは、サービスの特定のインスタンスに対処できる必要があります。たとえば、Account という名前のサービスがあるとしますが、実際にはそのサービスの 3 つのインスタンスが 3 つの異なる JVM で実行されています (ただし、すべて同じ Java EE ドメインにあります)。アカウント ID から特定の VM にマップできる Service Locator があると仮定すると、その特定のアカウントにサービスを提供できる EJB にどのようにアクセスすればよいでしょうか?
考えられる解決策は、アプリケーション コンテナが別のアプリケーションの EJB に与える JNDI 名を利用することです。モジュールを異なる名前で 3 回デプロイすると、JNDI ルックアップを実行してそれらにアクセスできます。
java:global/AccountServer1/AccountFacade
java:global/AccountServer2/AccountFacade
java:global/AccountServer3/AccountFacade
これを機能させるには、依存性注入を使用して AccountFacade にアクセスすることはできません。AccountID を取得して Account アプリケーションの 1 つにマッピングできる AccountLocator EJB を使用する必要があります。巧妙になりたい場合は、メソッドへの引数が使用するサーバーを識別できると仮定して、ルックアップを透過的に行う「ローカル」アカウント ファサードをおそらく実装できます...
このアプローチは実行可能ですか? より良い代替手段はありますか?