恕我直言,REAL软件模块至少应具有用于业务逻辑,持久性,用户界面和配置的部件。 在理想情况下,软件模块应该能够在运行的应用程序中轻松插入和拔出,而无需重新启动它。 例如,在J2EE应用程序服务器(例如Jboss或GlassFish)中,正在运行的应用程序(核心系统)是.war文件。 开发了核心系统的其他一些模块(包含上述部分),并将其打包在单独的jar文件中。 这些jar文件应该部署在应用服务器中,并与核心系统集成(通过业务逻辑和用户界面中的某些扩展点),而无需重新部署它。 我们可以做这样的事情吗?
让我们看看相关技术对此有何建议。 自从JBoss Modules迈出第一步以来,我一直是它的粉丝,而在最近发布的JBoss AS最新版本之后,我希望看到它们的实际应用。 说实话,JBoss模块提供了一种非常简单方便的方法来定义模块之间的依赖关系。 糟糕! 我写了“模块”吗? 这些是什么样的模块? 它们可以包括业务逻辑,配置,数据模型,但是用户界面呢? 不幸的是,没有任何提及,经过一番研究,我发现JBoss模块中的模块化概念不包含任何用户界面。
OSGI呢? 构建模块化应用程序的最有前途的方式。 如今, OSGI已获得许多应用程序服务器的支持,尽管其配置看起来像是工业革命时代的恐龙,但它似乎是一种非常不错的方法。 大量可用的服务,使用的许多框架,当然也没有引用任何用户界面功能。 另一方面,正如相关文章所暗示的, Vaadin与OSGI很好地集成(?)以构建模块化的Web应用程序。 我想知道是否有使用OSGI和Vaadin开发的真实/生产性模块化企业应用程序。
Spring是SpringSource的独立框架, SpringSource目前是开发Java企业应用程序的领导者。 与OSGI结合使用的Spring动态模块被认为是构建动态和模块化Web应用程序的最复杂的方法,但是我仍然感到即使Spring也无法解决我提出的问题。 根据我的研究经验,将上述技术集成到模块化系统中是一项艰巨的任务。
最后但并非最不重要的是J2EE。 Web的最新版本和完整的配置文件规范已将J2EE转换为非常强大的框架集。 JSF2和CDI以及所有新功能极大地提高了它在Java开发人员中的知名度。 当我第一次阅读本文时 ,我相信最终我找到了模块化Web应用程序的标准解决方案。 尽管每个jar可以包含所有不同的部分:使用EJB和CDI的业务逻辑,使用JPA及其实现的持久性,使用JSF及其实现的配置和用户界面),根据此问题 ,无法将带有JSF组件的jar作为单独的组件来处理模块。 再一次失望。 J2EE中的模块应该是一次打包的jar。 太接近了!! 我猜,我们必须等到JSF 2.2的发布以及几个月后才能获得最知名的应用程序服务器的支持。
由于没有用于构建模块化系统的标准,因此许多知名项目都基于上述框架之一或从头开始开发了自己的模块系统。 SonarSource的Jenkins , Atlassian的Jira和Sonar都是基于Java的应用程序,具有强大的模块/插件系统。 您按照一些准则开发插件(包括用户界面),然后通过模块/插件管理器将其部署为单个jar。 在大多数情况下,您需要重新启动系统,但是我认为这不会打扰任何管理员,因为您可以轻松地增加软件的功能。
所以我的困境仍然有效。 我应该开始构建自己的模块/插件系统还是应该等待标准出台并促进全球模块化Web应用程序的开发? 我不知道为什么这种标准化尚不可用,为什么我们不得不在所有这些技术和框架中最终尝试(仍然没有资源)! 我们是否接近开发真正的模块化企业Web应用程序的标准?
参考: 为什么没有用于开发真正的模块化Web应用程序的标准? 从我们的JCG合作伙伴 Patroklos Papapetrou在Only Software Matters博客上获得 。
相关文章 :
- OSGi将Maven与Equinox结合使用
- Tomcat中的零停机部署(和回滚); 演练和清单
- Java Code Geeks Andygene Web原型
- Java最佳实践系列
- Java教程和Android教程列表
翻译自: https://www.javacodegeeks.com/2011/09/real-modular-web-applications-why-there.html