我应该如何在分层Java EE应用程序中设计插件系统?

时间:2011-08-20 03:30:29

标签: java java-ee inheritance design-patterns plugin-architecture

我有一个基于Java EE的REST api应用程序。它具有如下的分层架构:

  1. 资源(Jax-rs资源)
    • 对象验证
    • Object Mapper
  2. 服务层
  3. 存储库层
  4. JPA实体
  5. 使用Spring依赖注入来连接所有内容。

    我需要以这样一种方式设计这个核心应用程序,它允许其他外部开发人员编写扩展/插件,并覆盖或扩展核心中的任何次要或主要功能。可以把它想象成Java EE中的Wordpress CMS,如果有帮助的话。您将如何围绕当前架构设计插件系统?

    我能想到的一个显而易见的方法是覆盖或添加新功能到适当的资源(使用验证,objectmapper),服务,存储库和实体,并从中创建一个jar + xml。但我想确保插件开发人员必须编写绝对最少量的代码才能使新功能正常工作,同时重用核心代码。

    假设您要创建一个wordpress博客帖子扩展程序,该扩展程序允许您创建博客帖子,其中包含核心中尚不存在的额外字段。设计当前Java EE应用程序的最简单,最简洁的方法是什么,这对插件/扩展开发人员来说很容易?任何可能有用的模式,如策略或模板方法模式?

    使用Spring / JPA和标准技术是否有任何开源Java CMS遵循该模型?

1 个答案:

答案 0 :(得分:1)

我认为你的意思是扩展功能,而不是覆盖核心。典型的体系结构示例定义了可以被覆盖(与核心分离)并做出规定的问题。 Eclipse框架使用插件扩展和组合来实现这一点。扩展点机制。这是使用OSGI捆绑进一步采取的。

另一种方法是将应用程序分解为更小的独立模块/服务。您需要做的就是通过ESB / Application Integrator(如Mule / Spring Integration)托管这些模块,并允许用户配置其路由/转换版本。扩展意味着创建新的变换器,并将其添加到消息流中。