如何在OSGI中自行调用bean方法

时间:2015-04-01 08:56:05

标签: osgi apache-karaf blueprint-osgi

Class MyTestBean {
    public void requiredMethod(){
         //somehow call the "requiresNewMethod" with a new transaction
         //provided from the container
         this.requiresNewMethod(); //this does not work.. no new transaction is created            
     }

    public void requiresNewMethod(){ //code..}
}

Blueprint xml:

  <bean id="myTestBean "
    class="MyTestBean ">
    <jpa:context property="entityManager" unitname="sample" />
    <tx:transaction method="requiredMethod" value="Required" />
    <tx:transaction method="requiresNewMethod" value="RequiresNew" />
  </bean>

当调用requiredMethod时,JPA管理器会创建一个新事务(如果它尚未在事务中)。我想从“requiredMethod”中调用方法“requiresNewMethod”并强制JPA管理器创建一个新的(嵌套的)事务。

例如,如果以上是EJB,而我在EJB容器中,我可以这样做

public void requiredMethod(){
    sessionContext.getBusinessObject(MyTestBean.class).requiresNewMethod();
 }

1 个答案:

答案 0 :(得分:1)

您可以尝试将自己的bean注入MyTestBean的属性并以这种方式访问​​它。