在多个EAR应用程序之间共享对象

时间:2018-09-18 13:34:39

标签: java-ee

是否可以在同一台机器上部署的多个EAR应用程序之间共享对象?

我们有多个充当微服务的核心服务。它不是严格的ms体系结构,但无论如何,每个服务都部署为单独的EAR。请求流(用例)需要命中许多应用程序(EAR)才能完成该过程。如何在不同的ejb应用程序之间传递“用户数据对象”?

@ApplicationScoped CDI上下文仅在一个EAR中可见...

是否有可以用于应用容器共享内存之类的东西?

2 个答案:

答案 0 :(得分:1)

许多解决方法。这完全取决于您对EE的熟悉程度以及会话有效负载的大小。从默认的角度(没有太多项目细节),您可以:

  • 将会话放入映射到JNDI中的映射。然后,每个服务都可以使用一些哈希/键来查找地图并获取会话对象。
  • 将会话放入有状态会话Bean(购物车模型)中,该会话Bean公开服务可以绑定到的远程接口。
  • 探索EE容器的专有功能。一些容器(jboss,websphere,也许还有其他容器)为部署提供了共享身份验证的用户会话的工具(基本上是穷人的SSO)。

这些是我能想到的最明显的解决方案,不会违反EE标准。我确信还有其他可以利用的异国情调或第三方解决方案。

腔体清空器

答案 1 :(得分:0)

在一台应用程序服务器中部署的所有应用程序之间的内存是共享的(在vm上),但是每个应用程序都有不同的类加载器,因此,如果您获得(通过JNDI查找或其他机制)由另一只耳朵创建的对象,将获得classcastexception

除非将类放在系统库(父类加载器)中,否则

不同耳朵之间的调用服务始终是远程的(按值调用),并且不同耳朵之间的对象共享不可能。应用程序类加载器)

有关更多信息,请参见下面的链接(它描述了weblogic中的类加载,但基本概念在不同的应用程序服务器中相同)

https://docs.oracle.com/cd/E13222_01/wls/docs100/programming/classloading.html

相关问题