Jakarta ee 如何在重构monolith应用程序时将公共EJB代码重构为微服务
我目前正在研究一种策略,以重构一个基于Java/J2EE的整体式应用程序,该应用程序在Weblogic 12c平台上运行,使用多个web服务和公共EJB代码作为多个微服务。公共EJB代码具有特定于每个web服务的会话bean,它还具有多个用户访问的公共代码重构公共EJB代码的最佳方法是什么?我遇到的一些选择是 1.将公共EJB bean重构为共享库,并将其部署为EAR—这里的问题是web服务如何查找这些bean(CDI不起作用,因为它们在上下文之外,可以进行本地JNDI查找) 2.将公共EJB bean打包为JAR文件,并将其包含在所有web服务APP-INF/lib目录中-此选项将在各种服务上创建多个代码副本Jakarta ee 如何在重构monolith应用程序时将公共EJB代码重构为微服务,jakarta-ee,architecture,microservices,weblogic12c,ejb-3.1,Jakarta Ee,Architecture,Microservices,Weblogic12c,Ejb 3.1,我目前正在研究一种策略,以重构一个基于Java/J2EE的整体式应用程序,该应用程序在Weblogic 12c平台上运行,使用多个web服务和公共EJB代码作为多个微服务。公共EJB代码具有特定于每个web服务的会话bean,它还具有多个用户访问的公共代码重构公共EJB代码的最佳方法是什么?我遇到的一些选择是 1.将公共EJB bean重构为共享库,并将其部署为EAR—这里的问题是web服务如何查找这些bean(CDI不起作用,因为它们在上下文之外,可以进行本地JNDI查找) 2.将公共EJB
请建议任何其他选项将一个整体拆分为多个微服务将导致多个应用程序通过网络进行通信。因此,从其他微服务的角度来看,微服务的内部是不透明的。在这种情况下,共享/公共代码应该复制/粘贴到使用它的任何微服务。这是必要的,因为它将微服务彼此分离,这样它们就可以独立地发展,这是使用微服务体系结构所期望的好处之一。例如,将来您可以将编程语言从
Java
更改为JavaScript
或PHP
,没有人会注意到
请阅读第33页“微服务世界中的枯燥和代码重用的危险”中的更多信息。使用进化设计方法而不是使用旧的EJB进行重构如何 事实上,许多微服务组织更进一步,明确地期望许多服务被废弃,而不是在长期内进化 卫报网站是一个很好的例子,它是作为一个整体设计和构建的应用程序,但一直朝着微服务方向发展。monolith仍然是网站的核心,但他们更喜欢通过构建使用monolith API的微服务来添加新功能
()如果你能贴出一张事情的样子……我想你是从错误的一端开始的。您应该首先从通用代码中创建微服务。感谢Constantin GALBENU的建议。我也倾向于您建议的选项,但我看到的唯一缺点是JAR的副本将出现在应用程序服务器上,而且对于JAR中的任何更改,构建和部署受影响的服务也有缺点(Weblogic提供了一种很好的版本控制方法)。这是一个很好的观点。我一直遵循进化设计。我认为构建在一个整体式应用程序上是一个糟糕的设计。当构建在一个整体式应用程序上的新功能依赖于作为整体式应用程序一部分的代码时,设计中的挑战就来了。将整体式应用程序重构为可重复使用的jar需要大量的工作,可以用来构建了附加的微服务。这就是重点。。。新代码没有依赖项,因为它尚未编写。只有你自己决定你想把什么代码放在那里,什么不放在那里。其他一切都可以暂时保留在整体中,仅在REST界面上公开。