【问题标题】:Managing transactions in iPOJO在 iPOJO 中管理事务
【发布时间】:2016-09-17 08:15:11
【问题描述】:

我将事务定义为一个组件中的一组连续活动(一个方法或一组方法)。

我写了一个简单的例子如下:

//service interface
public interface Hello {
    String sayHello(String name);
    String sayBonjour(String name);
}

//service implementation 
@Component
public class HelloImpl implements Hello {  

    public String sayHello(String name) {
       //start local transaction
       return "hello " + name; 
       //finish local transaction
    }
    public String sayBonjour(String name) {
       //start local transaction
       return "bonjour " + name; 
       //finish local transaction
    }
}

//client
@Component
public class Client {

   Hello client;
   public Client() {
      //start local transaction
      client.sayBonjour(client.sayHello("world"));
      //finish local transaction 
   }
  }

在本例中,组件 HelloImpl 和 Client 中有本地事务。我定义系统的全局事务由一组通过所有组件的本地事务组成。

如何在 OSGi 或 iPOJO 中管理事务(本例中为全局事务和本地事务)?

问候,

【问题讨论】:

  • 正如您在任何其他非 JEE 应用程序中所做的那样:使用最好作为服务提供的TransactionManager,以便可以将其注入到各种组件中。
  • 你能给我更详细的吗?
  • 那么你需要提供更多关于事务在哪里需要的信息:你是否访问数据库,如果是,如何访问(通过 JPA、JDBC,...),或者你是否需要同步远程资源等?

标签: java transactions osgi apache-felix ipojo


【解决方案1】:

如示例中,当客户端在HelloImpl组件上调用“client.sayBonjour(client.sayHello("world"))”时,客户端发起事务(T0)发送“world”,然后发送结果sayHello("world") 到 HelloImpl 组件。 HelloImpl 组件收到“world”后,发起子事务(T1)处理请求并将结果“helloworld”返回给客户端。然后 HelloImpl 组件也接收到“helloworld”请求(在方法 sayBonjour 中),它启动一个新的子事务 T2 来处理它。如果同时有多个客户端,如何知道 T1 和 T2 服务于 T0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2010-11-29
    • 2017-03-29
    • 2015-07-16
    相关资源
    最近更新 更多