java - 在同一 JVM 上的 JavaEE 应用程序之间共享对象(使用 JNDI)

标签 java jboss jndi wildfly

我正在运行带有大量应用程序的 JBoss AS 7.1.3.Final 安装。其中一个应用程序提供所有应用程序使用的公共(public)资源和功能(我们称之为框架)。如果这对您的答案有用,我还计划转向 WildFly 8。

只有框架可用(启动并运行)时,所有应用程序才应可访问。我当前实现这种依赖关系的实现并不是那么好**,并且由于我目前正在重新设计环境的某些部分,因此我正在寻找一个更简洁的解决方案。我的第一个想法是创建某种管理器,它将由应用程序服务器实例化并且可供所有应用程序使用。因此,应用程序启动后,可以在管理器上注册自己,一旦框架启动,应用程序就会收到通知。

使用运行所有应用程序+框架的 JVM 的 JNDI 是否可能?这必须如何实现?确实很难找到有关 JNDI 如何工作以及它的用途的有用信息。您还有其他更简单的想法,如何在应用程序之间共享类实例吗?

谢谢。

** 目前,我在应用程序中使用 EJB 计时器,在框架中使用单例 EJB。一旦 EJB 查找成功,该框架就可用。

--

编辑#1 Nikos Paraskevopoulos 要求提供更多信息

  • 该框架提供的一项功能是维护模式。应用程序将在启动后立即检查普通用户是否被阻止。它还将收到有关计划维护的通知。 (中央DB,应用程序对其没有权限)
  • 通用样式表或布局随框架一起部署。
  • 用户信息由框架提供。 (中央DB,应用程序对其没有权限)

主要问题是:我怎样才能避免任何计时器?我不知道如何确保框架先于其他一切启动。

最佳答案

一些想法:

  • JBoss 能够根据依赖关系对部署进行排序。请参阅herehere 。因此,如果所有“应用程序”都明确依赖于“框架”,那么您的问题可能会得到解决。

  • 看来您有一个相当强耦合的配置。是否可以将它们解耦,例如通过 Web 服务 (SOAP/REST) 提供服务?当然,这会带来额外的通信和重构开销......

  • JNDI 可以(非常粗略地)视为跨应用程序共享的对象映射的名称。因此,您可以通过它分享东西。但我不知道您将如何解决计时问题,即在从“应用程序”使用服务之前等待服务可用。你提到的管理器组件可以放在JNDI中。

这不是一个完整的答案,但也不适合作为评论。也许如果您提供有关应用程序的性质、所使用的框架等的更多详细信息,您可能会得到更具体的答案。

无论如何,祝你好运

<小时/>

编辑#1:

  • 维护模式:这可能非常适合与 JNDI 一起使用。拦截每个(适用的)请求的 servlet 过滤器将检查全局 JNDI 名称;如果没有找到(即框架未启动)或者为false,它将短路请求的处理,发送回“维护模式”页面。框架必须在启动后立即在全局 JNDI 名称中设置一个 Boolean 并保持其值,即如果维护模式处于 Activity 状态,则将其设置为 false

  • 通用样式表:我相信,维护模式标志确实涵盖了这一点。 布局:取决于 View 技术/布局技术。

  • 用户信息:这是 SOAP/REST 实现的良好候选者。预计它不会被频繁调用,因此我认为开销并不重要。

关于java - 在同一 JVM 上的 JavaEE 应用程序之间共享对象(使用 JNDI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22346319/

相关文章:

java - 在 Eclipse Luna 中配置 jboss-eap-6.4 服务器时分配正确的主目录时出错

java - 如何在 JBoss 中禁用 HTTP OPTIONS 方法?

java - Tomcat - 未找到 Spring DataSource JNDI 但它存在

java - 如何在 iBATIS 中使用 IN 子句?

java - 客户端套接字连接被终止后,ObjectInputStream 的 readObject() 卡住

jboss - SEAM中bean初始化链末端如何调用startup bean

java - 为什么使用 JndiObjectFactoryBean 配置 JNDI 数据源不起作用?

java - 为什么 Jacoco Coverage Report for Branches 说 if (a && b && c) 实际上是 6 个分支机构?

java - AndEngine - 根据父按钮是否被按下来启用禁用的子按钮

java - 如何将参数发送到 Ldap 中的 SocketFactory