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

发布于 2024-11-30 10:23:40 字数 637 浏览 1 评论 0原文

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

  1. 资源(Jax-rs 资源)
    • 对象验证
    • 对象映射器
  2. 服务层
  3. 存储库层
  4. JPA 实体

一切都使用 Spring 依赖注入进行连接。

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

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

假设您想要创建一个 WordPress 博客文章扩展,它允许您创建带有一些核心中尚不存在的额外字段的博客文章。设计当前 Java EE 应用程序最简单、最干净的方法是什么,这样对于插件/扩展开发人员来说很容易?任何可能有用的模式(例如策略或模板方法模式)?

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

I have a Java EE based REST api application. It has a layered architecture like the following:

  1. Resources (Jax-rs resources)
    • Object Validation
    • Object Mapper
  2. Service Layer
  3. Repository Layer
  4. JPA Entities

Everything is wired using Spring dependency injection.

I need to design this core application in such a way that it allows other external developers to write extensions/plugins and override or extends any minor or major functionality in the core. Think of it like Wordpress CMS in Java EE if that helps. How would you design a plugin system around the current architecture?

One obvious way that I can think of is override or add new functionality to the proper resource (with validation, objectmapper), service, repository and entity and create a jar + xml out of it. But I want to make sure that the plugin developer has to write the absolutely minimum amount of code to get the new functionality working, while reusing mush of the core code.

Assume, you want to create a wordpress blog post extension that lets you create blog posts with few extra fields that don't exist in core yet. What would be the simplest and cleanest way to go about designing the current Java EE app, so its easy for the plugin/extension developers? Any patterns that could be useful like strategy or template method pattern?

Are there any open source Java CMS that follow the model using Spring/JPA and standard technologies?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情话已封尘 2024-12-07 10:23:40

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

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

I think you mean to extend the functionality, rather than override the core. Typical architecture examples define concerns which can be overridden (separate from core) and make provisions. Eclipse framework achieves this using a combination of plugin-extensions & extension-points mechanism. This is taken further using OSGI bundling.

Another alternative is to breakdown the application into smaller independent modules/services. All you need to do is host these modules over an ESB/Application Integrator (like Mule/Spring Integration) and allow users to configure their version of routing/transformation. Extension would mean creation of new transformers which get added to the message flow.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文