在WildFly项目中,我有一个大的WAR文件(大约100MB),其中包含JAR文件中的整个应用程序(EJB、GUI、Web服务等)
在这个WAR中,有一些函数实现了自定义的Function
接口(还有其他类,如AbstractFunction
等)。现在我想用用户提供的函数扩展应用程序(它们应该在类路径上,然后应用程序可以访问它们。
问题是我无法在主WAR之前部署函数,因为Function
、AbstractFunction
等是尚未部署的WAR。
出于同样的原因,添加带有函数的WildFly模块失败。
一种可能性是重构WAR文件,使Function
、AbstractionFunction
位于单独部署的自己的jar中。不幸的是,这将是一个重大的重构,目前还不可能。
那么,将JAR中的用户定义函数放入WAR文件中的唯一(简单)可能性是什么呢?
您可以使用EJB将用户代码部署为独立的jar/war。EJB实现了Function
。主模块可以通过JNDI查找和查找它们。您还必须使诸如Function
和DTO之类的通用类可用于用户模块和主战争。最简单的方法是共享来自主战争的类。您可以将META-INF/jbost-部署结构. 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 srv = (Plugin) new InitialContext().lookup(jndi);
我的插件看起来像:
@Stateless
public class UserPlugin implements Plugin
JNDI看起来像java: global/user-plugin/UserPlugin