我们将一个 websphere 应用程序迁移到使用 spring boot 运行的云环境中。一切顺利!
第二步,我们将消息从 ibm-mq 迁移到 kafka。通过此迁移,我们不需要两阶段提交,因为 go、数据库和消息传递都需要一次提交到数据库。
现在我们应该使用 jakarta-namespace 升级到 spring boot 3 和 tomcat 10。在那里,我们面临着 orm、eclipselink 和 bitronix transactionmanager 的定义的问题:
final SessionManager manager = org.eclipse.persistence.sessions.factories.SessionManager.getManager();
Server server = (Server) manager.getSession(xmlLoader, ECLIPSELINK_SESSION_CONFIG, classLoader, false, false);
// Set the external transaction controller and use JTA transacion manager
server.setExternalTransactionController(eclipselinkTransactionController);
Eclipselink 3.0 支持 jakarta 命名空间,但 bitronix 不支持。
我看到两个解决方案:(1.)找到一个支持 jakarta 的 jee 事务管理器(即使我们不再需要两阶段提交)或(2.)我们使用 spring boot 中的 jpa 实体管理器。
我尝试了(2.),但在代码中它从 eclipse-link 获取了一个会话和一个工作单元,但工作单元为空。
EclipseLinkSessionService service = EclipseLinkSessionServiceFactory.createService();
UnitOfWork uow = service.getUnitOfWork();
uow.registerObject(myEntity);
有什么建议如何继续吗?
如果您的事务管理器支持 JTA 并且您正在使用 JTA API,那么迁移到 Jakarta 命名空间将是相对容易的工作,因为大多数事务管理器都会执行相同的操作并且 API 不会更改,但如果不是,您可能需要进行一些更改和测试.