几个月后,我将不得不对我的应用程序进行水平分区。我的应用程序中有某些服务需要大量的 CPU 和内存,为了可扩展性,我希望将其分片到多个 JVM。
我有一个 EAR,它封装了我需要分区的服务。当我这样做时,服务的客户端(例如 UI)将需要能够处理服务的特定实例。例如,假设我有一个名为 Account 的服务,但实际上我有 3 个该服务的实例在三个不同的 JVM 中运行(但都在同一个 Java EE 域中)。假设我有一个可以从帐户 ID 映射到特定 VM 的服务定位器,我将如何访问可以为该特定帐户提供服务的 EJB?
我可以看到的一个潜在解决方案是利用应用程序容器为单独应用程序中的 EJB 提供的 JNDI 名称。如果我以不同的名称将模块部署三个不同的时间,我可以进行 JNDI 查找以找到它们:
java:global/AccountServer1/AccountFacade
java:global/AccountServer2/AccountFacade
java:global/AccountServer3/AccountFacade
为了使它工作,我永远不能使用依赖注入来访问 AccountFacade,我必须使用能够获取 AccountID 并将其映射到 Account 应用程序之一的 AccountLocator EJB。如果我想变得棘手,我可能会实现一个“本地”帐户外观,它透明地进行查找,假设方法的参数可以识别要使用的服务器......
这种方法可行吗?有更好的选择吗?