在同一JVM上使用JavaEE应用程序共享对象(使用JNDI)

时间:2014-03-12 08:52:41

标签: java jboss jndi wildfly

我正在使用大量应用程序运行JBoss AS 7.1.3.Final安装。其中一个应用程序提供了所有应用程序使用的公共资源和功能(我们称之为框架)。我还打算转到WildFly 8,如果这对你的答案来说是一个有用的信息。

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

这是否可以使用JVM的JNDI,其中所有应用程序+框架都在运行?如何实施?很难找到关于JNDI如何工作以及它可能带来什么的有用信息。您是否有其他更简单的想法,如何在应用程序之间共享类实例?

谢谢。

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

-

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

  • 框架提供的一个功能是维护模式。如果正常用户被阻止,应用程序将在启动后立即检查。它还将收到有关计划维护的通知。 (中央数据库,应用程序没有权利)
  • 使用框架部署常见的样式表或布局。
  • 用户信息由框架提供。 (中央数据库,应用程序没有权利)

主要问题是:我怎么能避免任何计时器?我不知道,我怎么能确保框架在其他一切之前完成。

2 个答案:

答案 0 :(得分:2)

一些想法:

  • JBoss可以根据其依赖性对部署进行排序。请参阅herehere。所以,如果所有"应用程序"明确依赖"框架",您的问题可以解决。

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

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

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

祝你好运


编辑#1:

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

  • 常见样式表:我相信维护模式标志确实涵盖了这一点。 布局:这取决于视图技术/布局技术。

  • 用户信息:这是SOAP / REST实施的理想选择。它不会被频繁调用,所以我认为开销并不重要。

答案 1 :(得分:0)

我认为OSGi是你应该考虑的技术。基本上,您有一个OSGi容器,其中包含提供或使用服务的应用程序(称为bundle)。因此,您将拥有一个由所有应用程序使用的框架服务。据我所知,JBoss是一个OSGi容器。