现有一c语言开发的系统A,还有一java开发的系统B,A和B发布在不同的机器上,但它们操作的是同一个数据库(mysql),A和B通过socket进行通讯,请问有什么办法,让A和B的业务逻辑在同一事务?也就是当系统B的事务回滚时,系统A的事务回滚。

解决方案 »

  1.   

    不是一个 session 好像不能
      

  2.   


    1:不知道有没有这种EAI产品,交易中间件或开源实现?2:http://www.jdon.com/jive/thread.jsp?forum=46&thread=23422中提到J2EE --> JMS --> cobol,不知道具体怎么做?非常感谢各位高手!
      

  3.   

    在MYSQL中建立一个互斥作用的表,哪边开始操作数据库就在该表中做一个标记,所有对事务关联的表进行操作的时候就要从该表中获得一个锁,并且锁定标记,直到操作完毕,放锁。
      

  4.   

    http://www.jdon.com/jive/thread.jsp?forum=46&thread=23422
    上面的论坛中说可以通过jms实现,我不是很明白,请高手解释一下!
      

  5.   

    上javaeye问下吧,那边牛人很多....
      

  6.   

    有点麻烦,当某一方要事务回滚的时候得马上发Socket报文,另一方收到后先回滚,成功后回送Socket报文,这一方再回滚.......还没想清楚,再想想....
      

  7.   

    说用JMS的人,请给下解释JMS(Java Message Service) Java 与 Java 的通讯用 JMS 还有可能,Java 和 C 也能用JMS??????
    跨平台的语言是Java ,跨语言的技术是 Web Service ,数据库也用的是同一个数据库,感觉有可能实现
      

  8.   

    Web Service 应该可以实现吧
      

  9.   

    能不能把对数据库的操作集中到C或java一个上进行
    例如所有的数据库操作由C来做,java这边需要读取或更新数据数据库都通过
    socket等方式经由C来实现呢
    这样能不能控制所有的事务
      

  10.   

    to xxedge(好钢用在刀刃上) :不可行,因为业务逻辑不能简单的分割,就是要这样做的话,工作量非常大to ll42002(灰舌):如果A系统同步调用B系统,如果B系统成功提交,但A系统失败,这个时候B系统的数据能回滚吗?
      

  11.   

    Following are Roc's solutions:solution 1: Do not communication by Socket use web service instead, since we have so much remote invoking solutions, why not choose the better one? for example: EJB, Web Service, JMS, http, socket, in your case, I think web servie is the better one by my intuition. More detail, write webservice on system B in Java(but I am not know C with Web service well, if C can work with Web Service well, this solution is ok);solution 2: if system A know the System B's status(event), this issue is easy to handle, after system A sent invoke message(event) to System b, system b sent status(eventResponse) back to system A, accord B's feedback to handle system A's transaction;solution 3: I have a remote invoke solution which support isomerous architecture and based on http protocal, I think it can help you to do this work. The bad news is I can not share with you all currently, the good news is I want to open its source recently(maybe after labor festival :) ).Regards,
    Roc
      

  12.   

    另一给分点
    http://community.csdn.net/Expert/topic/4723/4723081.xml?temp=.4756128
      

  13.   

    我觉得采用中间件技术应该能实现你所说的,象CORBA就可以,能集成不同的编程语言。
    但是具体操作还不了解,请大家继续关注!
      

  14.   

    事务不能跨服务器,那你就
    判断一下呀。A调用B的时候判断B调用是否成功,如果失败就抛出一个异常,让A回滚。
    因为B也是作为事务执行,这样B自然是先回滚了。
      

  15.   

    在你的A,B与数据库之间嵌入一层webservce,在webservice中分别用实现A,B的数据库操作,然后new2个conn,把conn的autoCommit设为false,如果两个都执行成功了conn.commit,只要有一个没有成功,在抛出的异常中两个都rollback
      

  16.   

    我模糊的感觉也应该是通过webservice来解决此类异构系统的互操作
    楼上的也许是个不错的主意
      

  17.   

    定义一个简单的网络协议,当A的事务回滚时,通过socket通知B。