我目前正在制定一个策略来重构基于Monolith Java / J2EE的应用程序,该应用程序在Weblogic 12c平台上作为多个MicroServices运行多个Web服务和通用EJB代码。常见的EJB代码具有特定于每个的会话bean Web服务,它还有通用代码,可由多个服务访问。重构常见EJB代码的最佳方法是什么?我遇到的一些选项是
1.将公共EJB bean作为共享库进行重构并将其部署为EAR - 这里的问题是Web服务如何查找bean(CDI将无法工作,因为它们在上下文之外,本地JNDI查找是可能的)
2.将公共EJB bean包装为JAR文件并将其包含在所有Web服务APP-INF / lib目录中 - 此选项将在各种服务上创建多个代码副本
请建议任何其他选项
答案 0 :(得分:1)
将monolith拆分为多个微服务应该会导致多个应用程序通过网络进行通信。因此,微服务的内部结构从其他微服务的角度来看是不透明的。在这种情况下,应该将共享/公共代码复制/粘贴到使用它的任何微服务。这是必要的,因为它将微服务彼此解耦,因此它们可以独立发展,这是使用微服务架构所期望的好处之一。例如,将来您可以将编程语言从Java
更改为JavaScript
或PHP
, nobody 会注意到。
详细了解此here,第33页,“DRY以及微服务世界中代码重用的危险”。
答案 1 :(得分:0)
如何使用渐进式设计方法而不是使用旧EJB进行重构?
事实上,许多微服务团队通过明确期望许多服务被废弃而不是长期发展来进一步采取这种做法。
Guardian网站是一个设计和构建为整体的应用程序的一个很好的例子,但是在微服务方向上不断发展。 monolith仍然是网站的核心,但他们更喜欢通过构建使用monolith API的微服务来添加新功能。