【问题标题】:WAR extension strategy in WildflyWildfly 中的 WAR 扩展策略
【发布时间】:2015-08-26 10:36:45
【问题描述】:

在 WildFly 项目中,我有一个大 WAR 文件(大约 100 MB),其中包含 JAR 文件中的整个应用程序(EJB、GUI、Web 服务等)

在这个 WAR 中,有一些函数实现了自定义的Function 接口(还有其他类,如AbstractFunction 等)。现在我想用用户提供的函数来扩展应用程序(它们应该在类路径上,然后应用程序可以访问它。

问题是我无法在主WAR之前部署功能,因为Function、AbstractFunction等是尚未部署的WAR。

由于同样的原因,添加带有函数的 WildFly 模块失败。

一种可能性是重组 WAR 文件,使 Function、AbstractionFunction 位于单独部署的自己的 jar 中。不幸的是,这将是一个目前无法实现的重大重构。

那么将 JAR 中的用户定义函数放入 WAR 文件中的唯一(简单)可能性是什么?

【问题讨论】:

  • 既然你的问题暂时存在,为什么不在每次部署时重新部署Function,并为每个 Wildfly 模块使用独立的类加载器(可能是默认值)?
  • 你的意思是把Function放到自定义模块的JAR里吗?如果是这样,问题是不幸的是它在一个或几个类上,但很多,因为在这个 WAR 中没有模块化

标签: java jakarta-ee war wildfly


【解决方案1】:

您可以使用 EJB 将用户代码部署为独立的 jar/war。 EJB 实现Function。主模块可以通过 JNDI 查找和找到它们。此外,您还必须为用户模块和主战提供像 Function 和 DTO 这样的公共类。最简单的方法是从主战中分享课程。您可以将 META-INF/jboss-deployment-structure.xml 添加到客户端模块:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
    <dependencies>
        <module name="deployment.main.war"/>
    </dependencies>
  </deployment>
</jboss-deployment-structure>

PS

我有类似的项目结构:

  • core.war 包含插件接口
  • plugin*.jar 集(依赖于 core.war)

在我的 core.war 中,我的代码如下:

 Plugin srv = (Plugin) new InitialContext().lookup(jndi);

我的插件看起来像:

 @Stateless
 public class UserPlugin implements Plugin

JNDI 看起来像 java:global/user-plugin/UserPlugin

【讨论】:

  • 是的,但在我的具体情况下,问题是分离这些类并创建 main.war 的工作量太大,因为代码库不是模块化的。到目前为止,我唯一的想法是将所有内容都放在 WAR 文件中。或者有任何黑客可能吗?
  • 可能我没抓到你,但你已经有大战争了(我称之为 main.war)。你不需要改变它。但是Function 的新用户定义实现可以放入新的小罐子中。这些 jar 将可以访问大战中的所有类(参见 jboss-deployment-structure.xml)。
  • 问题在于它是某种循环依赖。 main.war 应该由用户定义的函数扩展,但这些函数也应该在 main.war 的类路径中可用
  • 正如我所说,主战应该使用 JNDI 查找来实现Function 接口的客户端。这意味着 EJB 打破了依赖循环。主战只依赖于Function接口。
  • 好吧,我尝试在 plugin.jar 中包含 main.war,但是当包含 main.war 作为依赖项时,似乎 main.war 的 EJB 再次加载,因为它们现在位于类路径中plugin.jar ^。你有没有类似的问题?
猜你喜欢
  • 2023-03-04
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
相关资源
最近更新 更多