我正在使用大量应用程序运行JBoss AS 7.1.3.Final安装。其中一个应用程序提供了所有应用程序使用的公共资源和功能(我们称之为框架)。我还打算转到WildFly 8,如果这对你的答案来说是一个有用的信息。
如果框架可用(启动并运行),则只能访问所有应用程序。我目前实现这种依赖性的实现并不是那么好**而且我正在重新设计环境的某些部分,我正在寻找一种更简洁的解决方案。我的第一个想法是创建一种管理器,它将由应用程序服务器实例化,并可供所有应用程序使用。因此,在应用程序启动后,它可以在管理器上注册,一旦框架启动,将通知应用程序。
这是否可以使用JVM的JNDI,其中所有应用程序+框架都在运行?如何实施?很难找到关于JNDI如何工作以及它可能带来什么的有用信息。您是否有其他更简单的想法,如何在应用程序之间共享类实例?
谢谢。
**目前我在应用程序中使用EJB计时器,在框架中使用单例EJB。一旦EJB查找成功,该框架就可用。
-
编辑#1 根据Nikos Paraskevopoulos的要求提供更多信息
主要问题是:我怎么能避免任何计时器?我不知道,我怎么能确保框架在其他一切之前完成。
答案 0 :(得分:2)
一些想法:
JBoss可以根据其依赖性对部署进行排序。请参阅here和here。所以,如果所有"应用程序"明确依赖"框架",您的问题可以解决。
您似乎有一个非常强耦合的配置。是否有可能将它们分离,例如通过Web服务(SOAP / REST)提供服务?当然,这会为通信和重构带来额外的开销......
JNDI可以(非常粗略地)看作跨应用程序共享的对象映射的名称。因此,您可以通过它分享内容。但我不知道你将如何解决时间问题,即在使用"应用程序"之前等待服务可用。您提到的管理器组件可以放在JNDI中。
这不是一个完整的答案,但它也不适合作为评论。也许如果您提供有关应用程序性质,使用的框架等的更多详细信息,您可以获得更具体的答案。
祝你好运
编辑#1:
维护模式:这可能适合与JNDI一起使用。拦截每个(适用的)请求的servlet过滤器将检查全局JNDI名称;如果没有找到(即框架未启动)或它是false
,它将使请求的处理短路,发回"维护模式"页。框架必须在它开始时立即在全局JNDI名称中设置Boolean
并保持其值,即如果维护模式处于活动状态,则将其设置为false
。
常见样式表:我相信维护模式标志确实涵盖了这一点。 布局:这取决于视图技术/布局技术。
用户信息:这是SOAP / REST实施的理想选择。它不会被频繁调用,所以我认为开销并不重要。
答案 1 :(得分:0)
我认为OSGi是你应该考虑的技术。基本上,您有一个OSGi容器,其中包含提供或使用服务的应用程序(称为bundle)。因此,您将拥有一个由所有应用程序使用的框架服务。据我所知,JBoss是一个OSGi容器。