此为http://community.csdn.net/Expert/topic/4719/4719608.xml?temp=.9442102的另一给分点
解决方案 »
- JAVA编程
- 刚刚解除swt,写了一小段代码,怎么样才能使这个界面里的控件,根据这个shell的大小,自动变化大小呢?
- 求助:JDK1.6编译后,用java执行解释,不行???
- 如何远距离访问数据库服务器比较妥当呢?
- 我想知道到底有几斤几两
- 一个方法用synchronized修饰,是不是说这个方法被调用的话,再没有释放之前不能被再次调用?假如修饰一个instance()是不是说着对象被创建
- 看看这是什么错误!!
- 如果一个类有内部类,且main方法定义在内部类中,这个程序应该怎么运行???
- 如何让DIV的大小不变??
- java新手小白求教(救救孩子吧!)
- 线程通信问题的解决方案~求助【50分】
- 我怎么没有在CHM API HELP帮助文件中找到关于switch语句的介绍呢,
例如:oss的一个方法m1同步调用billing的一个方法m2,如果m2失败,那m1能根据m2的返回结果让m1也不提交就是了。
但如果如果m2成功提交,但m1失败,这个时候m2已经提交的数据不会回滚 再举个极端的例子:billing的方法执行成功,数据成功提交,但这时oss服务器当机,这个时候billing已经提交的数据也不会回滚2:能否让处理流程最后一步的系统负责的数据提交? 可以考虑。 例如:一个业务从oss--->billing--->radius,那么oss和billing都不提交数据,只负责把这些数据保存到一个中间表(或者干脆保存sql语句),最后才由radius取中间表的信息,并统一提交数据,同时清空中间表。 在INFINET中,这种分布式事务并不多,所以可以考虑。3:能用TP Monitor中间件实现吗? 可行性不大。 因为如果用BEA 的 Tuxedo 、 IBM 的 CICS等实现的话,除了这些产品的价格不菲之外,我们的系统结构需要变化,而且也需要修改代码,对已有的系统做这样的变动不是个好消息。结论: 建议采用解决方法2
也就是当Billing提交数据到数据库后,会发送一个消息到MQ,然后Radius监控并接受这个消息,一直等到Radius接收并处理这个消息成功,如果处理不成功,MQ事务会回滚,而且Billing也能知道Radius有没有处理这条消息,参见下图:
诸如一些TP Monitor中间件,如:BEA 的 Tuxedo及IBM的CICS;
一些消息中间件MOM,如:IBM的MQSeries等都可以解决这个问题,但这些产品的价格不菲。如果不用这些商业产品的话,我们可用开源MQ(如:OpenJMS、UberMQ、ActiveMQ、MantaRay、JORAM)来来解决上述问题,但这个开源MQ必须有java、c、c++调用接口。
如果用webservice,最后对对象的2个conn引用commit或者rollback,是否更好一点呢