带有 Jetty 的 SpringBoot 与带有 OSGI Jetty 的核心 Java
SpringBoot with Jetty Vs Core Java with OSGI Jetty
我的项目需要将基于 Java 的应用程序部署为操作系统作业(并且不使用任何容器)。该应用程序需要具有以下功能:-
- 正在安排
- 很少有基于 HTTPS 的服务
- 能够进行 JMX 调用
- 存储:最近 5 到 10 分钟交易的数据(不超过 600 行 X 20 列)。诸如嵌入式 H2 或内存中选项之类的东西
- 决策树:类似于 Drools..
我的经理想使用 OSGized Jetty 版本将此应用程序编写为核心 Java。我建议使用 Spring 带有嵌入式 Jetty 的引导(这将使我准备好使用调度、JMX 集成和 REST 服务的功能)。
他对核心的偏爱 Java 源于此应用程序需要极其高效、快速和独立的要求。他想减少对任何开源的依赖。我从未直接在 OSGI 上工作过,但使用过它的产品——比如 eclipse。
有人可以指导基于 OSGI 的开发如何优于 SpringBoot 吗?
对于很多人来说,OSGi 是多余的,因为他们看不到模块化的价值。不值得麻烦。
考虑应用程序生命周期,或多或少是 plan-develop-test-deploy。
您有多少开发人员?如果有的话,OSGi 有很大帮助,因为模块化使界限非常清晰。你可以很容易地委派事情。
如果外包是你的事,你可以只处理模块 API 并告诉他们根据它进行开发。他们永远不会知道其余的是如何实现的,不用担心泄露秘密。
单元测试是如此简单。 你显然知道你可以测试什么,其他的你 mock/stub/spy/fake。单元测试可以在集成测试中重复使用,当然这不是新闻,但诀窍是 运行 在 OSGi 容器外部进行单元测试,并在内部进行集成测试。因此,如果您认为 OSGi 不值得,您的代码仍然可以正常工作(单元测试就是证明)。
您可以让您的应用程序成为模块的集合,并且每个模块都有独立的版本控制和源存储库。更容易处理和查找错误。例如,当前应用程序崩溃,您发现 sub-module-1.2 抛出错误,尝试使用版本 sub-module-1.1(仍然很糟糕),然后使用版本 1.0(良好),错误是在 1.1 中引入的(避免将源代码一分为二)。如果程序员在不同的模块中工作,则不需要彼此完美同步。
你打算如何更新应用程序? 大多数框架都是 all-or-nothing 方法,你必须停止世界,更新,然后重新启动应用程序.如果你把东西模块化,你只需要更新那个东西。使停机时间非常短,有时甚至为零。
如果您需要对您的应用进行重大更改,但现在无力重构所有内容。使用 OSGi,您可以 运行 系统my-module-1.0 和 my-module-2.0。您甚至可以调整 my-module-1.0 以将调用重定向到 my-module-2.0,但这是一种不得已的破解方法(只是说您可以,如果您愿意的话)。
没有 OSGi 我可以做你说的一切,对吧? 好吧,也许你可以,但最终,会像 OSGi 那样。
我喜欢我的框架的依赖注入。没问题,OSGi 有类似的东西。
我讨厌依赖注入,它会破坏我的应用程序性能。没问题,你可以使用类似 osgi.getService(MyService.class);
的东西。 OSGi 容器不关心拦截应用程序的每个调用。
OSGi 就像 Java++,Java 加上模块。
您可以将 Spring Boot 与 OSGi 混合使用,不能说这是好是坏。有许多库和框架适合您的列表,许多都可以 out-of-the-box 与 OSGi 一起工作。
我的项目需要将基于 Java 的应用程序部署为操作系统作业(并且不使用任何容器)。该应用程序需要具有以下功能:-
- 正在安排
- 很少有基于 HTTPS 的服务
- 能够进行 JMX 调用
- 存储:最近 5 到 10 分钟交易的数据(不超过 600 行 X 20 列)。诸如嵌入式 H2 或内存中选项之类的东西
- 决策树:类似于 Drools..
我的经理想使用 OSGized Jetty 版本将此应用程序编写为核心 Java。我建议使用 Spring 带有嵌入式 Jetty 的引导(这将使我准备好使用调度、JMX 集成和 REST 服务的功能)。
他对核心的偏爱 Java 源于此应用程序需要极其高效、快速和独立的要求。他想减少对任何开源的依赖。我从未直接在 OSGI 上工作过,但使用过它的产品——比如 eclipse。
有人可以指导基于 OSGI 的开发如何优于 SpringBoot 吗?
对于很多人来说,OSGi 是多余的,因为他们看不到模块化的价值。不值得麻烦。
考虑应用程序生命周期,或多或少是 plan-develop-test-deploy。
您有多少开发人员?如果有的话,OSGi 有很大帮助,因为模块化使界限非常清晰。你可以很容易地委派事情。 如果外包是你的事,你可以只处理模块 API 并告诉他们根据它进行开发。他们永远不会知道其余的是如何实现的,不用担心泄露秘密。
单元测试是如此简单。 你显然知道你可以测试什么,其他的你 mock/stub/spy/fake。单元测试可以在集成测试中重复使用,当然这不是新闻,但诀窍是 运行 在 OSGi 容器外部进行单元测试,并在内部进行集成测试。因此,如果您认为 OSGi 不值得,您的代码仍然可以正常工作(单元测试就是证明)。
您可以让您的应用程序成为模块的集合,并且每个模块都有独立的版本控制和源存储库。更容易处理和查找错误。例如,当前应用程序崩溃,您发现 sub-module-1.2 抛出错误,尝试使用版本 sub-module-1.1(仍然很糟糕),然后使用版本 1.0(良好),错误是在 1.1 中引入的(避免将源代码一分为二)。如果程序员在不同的模块中工作,则不需要彼此完美同步。
你打算如何更新应用程序? 大多数框架都是 all-or-nothing 方法,你必须停止世界,更新,然后重新启动应用程序.如果你把东西模块化,你只需要更新那个东西。使停机时间非常短,有时甚至为零。
如果您需要对您的应用进行重大更改,但现在无力重构所有内容。使用 OSGi,您可以 运行 系统my-module-1.0 和 my-module-2.0。您甚至可以调整 my-module-1.0 以将调用重定向到 my-module-2.0,但这是一种不得已的破解方法(只是说您可以,如果您愿意的话)。
没有 OSGi 我可以做你说的一切,对吧? 好吧,也许你可以,但最终,会像 OSGi 那样。
我喜欢我的框架的依赖注入。没问题,OSGi 有类似的东西。
我讨厌依赖注入,它会破坏我的应用程序性能。没问题,你可以使用类似 osgi.getService(MyService.class);
的东西。 OSGi 容器不关心拦截应用程序的每个调用。
OSGi 就像 Java++,Java 加上模块。
您可以将 Spring Boot 与 OSGi 混合使用,不能说这是好是坏。有许多库和框架适合您的列表,许多都可以 out-of-the-box 与 OSGi 一起工作。