我需要将遗留的corba系统迁移到任何最新的java技术。我面临的主要问题是在建议的系统中提供长寿命事务(db)。目前,客户机(swing-app)保留corba服务对象,并在实际提交/回滚所有txn之前执行多个db txn。服务层通过保持连接对象的状态来完成事务。
我想在我的新系统(rest/ws)中重现这种机制,以便swing客户机/web(future)都可以按原样工作。
如:
try {
service1.updateXXData(); // --> insert in to table XX
service2.updateUUData() //--> insert in to table UU
service1.updateZZData(); // --> insert in to table ZZ
service2.updateAAData(); // --> insert in to table AA
service1.commit(); // con.commmit();
service2.commit(); // con.commmit();
}
exception(){
service1.rollback(); // con.rollback();
service2.rollback(); // con.rollback();
}
现在我想把corba移植到任何现代技术中,但我仍然在寻找解决方案问题是客户机不想对服务层或数据库层做任何更改,他们只想删除corba。
我有两个选择
将corba迁移到rmi-->以便对当前系统所需的更改最小,但事务管理、连接池、保留状态需要自己完成。
将corba迁移到有状态ejb-->比较rmi需要更多的更改,但是更好,因为我可以使用容器管理的连接池,以更好的方式维护状态。
将corba迁移到有状态Web服务(soap)-->更具未来感,但需要做很多更改—如何将idl转换为wsdl,并将调用委托给实现层
将corba迁移到rest——如果可能的话,这是最理想的——但是迁移所需的时间是巨大的,代码需要从ui层更改到服务层。
事先非常感谢
1条答案
按热度按时间kqlmhetl1#
从最好到最差,我选择选项的顺序是4、3、2和1,但是如果人力所能做到的话,我会避免使用有状态bean或服务。
我将详细讨论您将要做的事情的实现细节。
对于这些解决方案中的任何一个,您都必须使用与xa兼容的数据源和事务,这样您就可以保证acid兼容,最好是从应用服务器上,这样您就不必自己生成事务。这应该是您现有应用程序的一个改进,因为它几乎肯定不能保证这一点,但请注意,根据我的经验,人们投入了大量的黑客来彻底改造jta,所以要注意这一点。
对于4,您需要使用容器管理事务和xa。你可以通过注射
@PersistenceContext
由jta连接支持。是的,这需要花费大量的时间、测试和努力,但它有两个好处:第一,移动到web将更容易,而且听起来这个时间即将到来。其次,那些紧随其后的人更可能精通较新的web服务技术,而不是纯corba和rmi。对于3,您还需要将容器管理的事务与xa一起使用。soap不会是我的首选,因为它使用非常冗长的消息,rest更受欢迎,但它可以做到。但是,如果它是有状态的,则必须改用bean管理的事务,然后在web服务调用中保留资源。这是危险的,因为它有可能使整个系统陷入僵局。
对于2,您可以采用两种方式,一种是使用容器管理的事务和xa,另一种是为有状态ejb使用无状态会话外观。您可以将客户机jar用于ejb,并将其与swing应用程序打包。最好使用无状态facade,因为它将减少应用程序服务器上的负载。请记住,您也可以从无状态ejbbean生成web服务,基本上将其转换为#3。
对于1。。。好吧,祝你好运。可以使用rmi与ejb接口,并生成您自己的存根和连接,尽管不建议这样做,这是有充分理由的。这已经不是一个流行的做法多年了,可能需要定期重新生成存根和绑定,并且可能需要了解应用服务器的底层功能。即使在这里,您也需要xa事务。如果可能的话,您不想自己处理事务管理。
最终,我相信每个人都会同意,做什么是你的选择,没有“对”或“错”的方式,尽管有上述意见。如果是我(事实并非如此),我会问自己和客户两个重要的问题:
这是合同还是临时约定,如果是,期限是什么?当他们需要额外的更新时,我是否会在同一个系统的另一个合同中得到第一选择(换句话说,我能从中得到多少钱,我能花多少时间?如果是长期的,那么我会选择4或3,否则3或2会更好。)
为什么要摆脱corba?”“因为它是旧的”是一个诚实的答案,但什么是摆脱“旧热”的动力?他们计划在未来扩大使用这个系统吗?有没有一些许可证即将到期,他们只是想继续开着灯?是不是因为他们不想把这件事推给一些年轻的程序员,他们可能不知道如何处理这种低级的东西?您希望系统在两年、五年或更长时间内做什么?
(好吧,这不仅仅是两个问题:d)