Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 如何向Java web应用程序添加模块化特性_Jakarta Ee_Modularity - Fatal编程技术网

Jakarta ee 如何向Java web应用程序添加模块化特性

Jakarta ee 如何向Java web应用程序添加模块化特性,jakarta-ee,modularity,Jakarta Ee,Modularity,我已经开发了一个基于JavaEE的web应用程序作为一个应用程序 现在,一些贡献者通过插入到web应用程序中的模块 你能解释一下如何做到这一点,或者给我一个参考资料吗 我的项目也有类似的任务。我希望用户添加独立于基本算法的测试Mockito对象、Rest服务或Ejb服务的功能,并且只包括那些必要的功能 我使用的原则是由oracle(java)在中定义的 因此,我定义了一个由模块在META-INF/services中实现和定义的框架,这些模块应该以灵活的方式添加。例如:用于测试rest Web服务

我已经开发了一个基于JavaEE的web应用程序作为一个应用程序

现在,一些贡献者通过插入到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