0

我有一个 Web 应用程序,它的数据有一个可选的 SOAP 接口(作为一组 EJB 实现)。主应用程序和 SOAP 接口是分开的,只共享数据库访问代码,但最近它们被集成为一个应用程序(SOAP 接口被打包为一个 JAR,添加到主应用程序的依赖项中)。两者都托管在 JBoss 服务器上。

该解决方案有效,但我们的应用程序使用模块化插件界面,允许从应用程序的用户界面打开和关闭特定功能,使用 Maven 来定位插件。然后使用URLClassLoader应用程序的默认类加载器作为父级加载插件,并注册到映射到的通用页面调度程序 servlet *.page

<!-- from web.xml -->
<servlet-mapping>
  <servlet-name>dispatcer</servlet-name>
  <url-pattern>*.page</url-pattern>
</servlet-mapping>

在当前解决方案中,EJB 使用以下方式公开web.xml

<!-- the very same web.xml -->
<servlet>
  <display-name>BaseService</display-name>
  <servlet-name>BaseService</servlet-name>
  <servlet-class>ourapp.services.BaseService</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>BaseService</servlet-name>
  <url-pattern>/services/Base/*</url-pattern>
</servlet-mapping>

当然,当 EJB:s 在运行时加载时,我们不能提前指定它们,所以:

如何从 JAR 加载 EJB:s 并在运行时将它们公开为 Web 服务?

4

2 回答 2

1

没有标准的 API 可以动态加载 EJB(我什至不知道有任何供应商 API 允许这样做)。通常,EE 部署侧重于预先打包,使应用程序服务器能够内省您的应用程序并执行各种准备和优化。

于 2012-07-04T14:14:25.013 回答
1

您可以将 Web 应用程序拆分为 EJB jar 和 WAR 并部署/重新部署。然后在您的应用程序中,您可以检查特定服务的可用性。

如果您使用 JBoss AS 7,那么您可以利用管理 API 来部署/取消部署插件 EJB jar。
看这里:

于 2012-07-04T14:20:24.000 回答