在多个WAR中访问库的通用接口 - 这在jboss中是否可行?

时间:2011-06-21 15:11:22

标签: java java-ee classloader jboss5.x

作为一些背景 - 我正在使用JBoss 5.1,用于Web应用程序。应用程序是垂直部署的,因此每个功能都在一个单独的WAR文件中结束。它有一个用于dao和业务逻辑的jar文件。到目前为止,这很好,但是我需要部署另一个本身没有太多逻辑的应用程序 - 它基本上就像仪表板一样。仪表板需要聚合来自不同数据提供者的数据(通常是其他应用程序/功能)。现在,仪表板对其他功能了解得太多了。因此,每次添加新功能时,此仪表板都会重新部署,并添加相关代码。

如果此仪表板有一个公共接口,很少有其他功能可以实现,并且每当部署新功能(WAR)时,仪表板也可以动态地从新提供程序获取数据。这可能吗?如果没有,那么在不操纵应用程序的类加载器的情况下,我可以获得什么?如果首先在jboss中可以做到这一点,那将是很好的。

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

有几种方法可以做你正在谈论的事情,所以我会提出两种解决方案,我可以为你提供更多关于你最需要的信息。

一个相对快速的解决方案是使用像GateIn这样的门户服务器。您的WAR可以显示在同一页面上,但它们位于单独的位置而未集成。您必须将WAR转换为portlet并让管理员将它们添加到门户网站的UI中,但门户网站将能够扫描并检测所有可用的portlet。

更灵活的解决方案是让每个部署的一个类实现一个公共MBean接口。然后,您的仪表板可以使用JMX,特别是javax.management.MBeanServerConnection的{​​{1}}方法来获取所有MBean(或属于特定包的MBean子集,您可以将其指定为查询参数)。然后,您可以通过queryMBeans的{​​{1}}方法执行接口方法。要使用JBoss获取MBeanServerConnection,请调用javax.management.MBeanServerConnection

请求的一些额外细节(注意,以下是JBoss特定的):

1)将部署转为MBean 对于每个JAR文件,将invokeorg.jboss.mx.util.MBeanServerLocator.locateJBoss()文件添加到jboss-service.xml目录(其中*-xmbean.xml是您选择的名称)。请关注this example这些文件。

META-INF *元素的jboss-service.xml属性(示例中为mbean)中指定的任何路径上实现MBean。为code org.jboss.chap2.xmbean.JNDIMap元素的jboss-service.xml属性(示例中为mbean)指定一致的命名空间和参数。您在name文件中指定的操作和属性应该映射到您的界面。

2)创建仪表板,并在其中一个类中轮询服务(此代码尚未经过测试,但应提供良好的大纲)

chap2.xmbean:service=