Jakarta ee 如何向Java web应用程序添加模块化特性
我已经开发了一个基于JavaEE的web应用程序作为一个应用程序 现在,一些贡献者通过插入到web应用程序中的模块Jakarta ee 如何向Java web应用程序添加模块化特性,jakarta-ee,modularity,Jakarta Ee,Modularity,我已经开发了一个基于JavaEE的web应用程序作为一个应用程序 现在,一些贡献者通过插入到web应用程序中的模块 你能解释一下如何做到这一点,或者给我一个参考资料吗 我的项目也有类似的任务。我希望用户添加独立于基本算法的测试Mockito对象、Rest服务或Ejb服务的功能,并且只包括那些必要的功能 我使用的原则是由oracle(java)在中定义的 因此,我定义了一个由模块在META-INF/services中实现和定义的框架,这些模块应该以灵活的方式添加。例如:用于测试rest Web服务
你能解释一下如何做到这一点,或者给我一个参考资料吗 我的项目也有类似的任务。我希望用户添加独立于基本算法的测试Mockito对象、Rest服务或Ejb服务的功能,并且只包括那些必要的功能 我使用的原则是由oracle(java)在中定义的 因此,我定义了一个由模块在META-INF/services中实现和定义的框架,这些模块应该以灵活的方式添加。例如:用于测试rest Web服务或在cdi测试中引入mockito Mock 然后使用识别当前配置。该查找器将能够调用部署的可部署系统中包含的所有模块(JAR)的所有接口。
在ioc单元情况下,分析器使用接口以特殊方式解释找到的类。如果包含IOC单元EJB,则识别EJB注释,如果IOC单元MOCKEAY,@ MOCK被识别,如果IOC单元RESSTASY:@ PATH和@提供者…
我会说OSGi是您应该考虑的东西。我没有这方面的专业知识,但您可以在stackoverflow和其他在线资源中找到示例和说明
本教程使用和提供了一个关于创建服务包的看似简单的教程。在本教程中: 开放服务网关计划是定义基于Java的组件系统的规范。它目前由OSGi联盟管理,其第一个版本可以追溯到1999年。从那时起,它已被证明是组件系统的一个伟大标准,并在当今得到了广泛的应用。例如,EclipseIDE是一个基于OSGi的应用程序 一个看似更复杂的教程可能是 提供了一个简单的服务提供商加载工具。,但看起来很简单,可以满足您的需要。它适用于spring引导,但似乎并不适用于企业应用程序。一个简单的例子如下: 应用程序的框架
:
public class FrameworkClass {
public static void main(String[] args) {
new FrameworkClass().run();
}
private void run() {
ServiceLoader<IFrameworkModule> modules = ServiceLoader.load(IFrameworkModule.class);
modules.forEach(IFrameworkModule::initialize);
modules.forEach(IFrameworkModule::execute);
}
}
应用程序的模块(位于单独的jar中)
public class Module1 implements IFrameworkModule {
@Override
public void initialize() {
System.out.println("initialize module1");
}
@Override
public void execute() {
System.out.println("execute module1");
}
}
它需要META-INF/services
文件夹中的frameworkModule
文件
fmodule.Module1
但考虑到应用程序的复杂性,我认为使用OSGi更有意义。这取决于您希望用户如何插入东西。首先,您是在开发人员端(例如,通过向pom.xml添加依赖项)还是在最终用户端(例如,通过在某个管理屏幕中上载文件)寻求模块化?最终用户从某个管理屏幕进行模块化。在我看来,使用OSGi需要非常仔细地设计所有捆绑包。能够随意添加和删除它们是非常诱人的,但如果你是一个消费者,那么总是要能够应付这一点,这会带来巨大的成本。
fmodule.Module1