大型企业Java应用程序-模块化
我在一家全国性的公司工作,所以我们开发的软件规模很大 我们的核心系统是基于Web的,包括大型企业Java应用程序-模块化,java,jakarta-ee,web-applications,module,osgi,Java,Jakarta Ee,Web Applications,Module,Osgi,我在一家全国性的公司工作,所以我们开发的软件规模很大 我们的核心系统是基于Web的,包括webservices。我们目前正在重新设计整个项目,现在正是开始项目结构的时候 我们有7个web模块,包括基于Struts2和spring3.1的web项目。基于JAX-WS和spring3.1 我的问题是,对于这样的项目,设计项目结构和模块化的最佳实践是什么: 如果需要,我们肯定会使用Maven和OSGi。我在想类似的事情 WebProject.war |---Web.xml |--- Lib
webservices
。我们目前正在重新设计整个项目,现在正是开始项目结构的时候
我们有7个web模块,包括基于Struts2
和spring3.1
的web项目。基于JAX-WS
和spring3.1
我的问题是,对于这样的项目,设计项目结构和模块化的最佳实践是什么:
如果需要,我们肯定会使用Maven
和OSGi
。我在想类似的事情
WebProject.war
|---Web.xml
|--- Libs
|
|--- Web Module1.jar
|--- Web Module2.jar
|--- Web Module3.jar
|--- Web Module4.jar
|--- Web Module5.jar
|--- Web Module6.jar
WebService.war
|---Web.xml
|--- Libs
|
|--- Service.jar
|--- Service2.jar
EJBProject.jar
|
|--- module.jar
|--- module2.jar
这是我个人的想法,但我们正在寻找更好的模块化产品,以便在不影响其他模块和主项目的情况下工作和部署WebModule1.jar
。同样,我们希望专业团队只拥有他们项目的代码,因此如果一个团队必须在他们的IDE
中只使用Service2.jar
,那么他们将只拥有Service2.jar
的代码,以及一个已经编译的资源项目
谢谢我强烈推荐雷丁的。在迁移到OSGi之前,您可以先对应用程序进行模块化(如果您还没有良好的测试覆盖率,我肯定会进行投资) 如果您使用的是servlet spec 3.0,那么看看如何使用web片段 就您展示的结构而言,我要说的是不要嵌套任何东西(除了web片段),战争可以变成WABs(web应用程序包-基本上是一场骨瘦如柴的战争)。同时尽可能多地利用OSGi的μ服务——这就是乐趣的开始=)
Karaf和Virgo等企业OSGi框架在跨越JEE-OSGi鸿沟时提供了大量支持(Equinox和Felix本身就有点露骨)。我认为您的结构不错,这是大多数项目的典型结构-我建议您对依赖项进行版本化,例如,让您的webproject.war依赖于webmodule1-1.3,也就是说,通过这种方式,可能不同的最终项目可能具有不同版本的依赖JAR 使用maven肯定会简化对这些依赖项的管理
如果您的需求是在运行时替换依赖项,那么是的,您将不得不使用OSGI之类的技术,但是如果您所寻求的不是运行时模块化,我建议不要从OSGi开始,让堆栈更简单。基于您的项目需求,如独立模块开发和运行时更新,Maven是最好的解决方案。它提供了对依赖项和插件的强大支持,看起来您的项目所需的一切都已经就绪:
- 弹簧/支柱/CXF/等maven工件
- WAR/JAR等插件
- 应用服务器部署/测试插件等
- 对于只开发特定模块而不共享所有代码库的团队,您只能提供公共maven工件李>
- Maven由所有持续集成服务器(Hudson/TeamCity等)支持
奥斯基。如果您想使用它,您必须仔细查看当前的设计,并尝试使其适应μ服务。通常,您将拥有带有API、API使用者和API提供者的模块。它更能帮助您在团队之间划分开发(例如,一个开发API使用者模块,另一个开发API提供者模块)。如果需要,可以将API使用者/提供者模块拆分为2+OSGi捆绑包(即Maven模块) 模块化的关键方面是,您的模块尽可能少地了解人类的知识,因此可以在许多不同的环境中重用。错误只有在违反假设时才会发生,最小化假设是最大的错误杀手。OSGi提供了像µservices这样的工具,这些工具在允许假设保持本地性方面非常好 您的布局看起来非常像一个web项目,这是错误的,因为我们必须自己开发的大多数代码应该独立于用于呈现它的技术。所有这些技术在不久的将来都可能发生变化,因为web应用程序正在迅速转向浏览器,浏览器再次成为胖客户端。也就是说,如果您了解纯消息传递的功能,那么非常现代的REST接口已经感觉非常过时了。所有这些波动性意味着您希望使您的模块尽可能地解耦
因此,我决不会将任何域代码耦合到任何与web技术耦合的库。这些可传递的依赖关系将在不久的将来伤害您。构建小型内聚的非耦合模块,然后将它们用作乐高积木来构建应用程序。在处理了OSGi之后,我们为Spring开发了OSGi较少的模块化功能。您很好 对你的“全国性公司”感到好奇。哪个国家?哈哈!一个人口比多米尼加共和国佛罗里达州少的国家。如果你想让事情变得更简单,我将从OSGiµ服务开始,不包括今天网络世界中庞大的堆栈…书籍链接提供了这个问题的所有答案,很棒的资源,thanks@gersonZaragocin,同意-我特别喜欢它讨论模块化原则而不强制OSGi。。(但确实指出了OSGi有多棒)