2015-04-01 4 views
0
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:Как Self-Invoke метод бобы в OSGI

<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 создает новую транзакцию (если она уже не в сделке). Я хотел бы вызвать метод «требуетNewMethod» изнутри «requiredMethod» и заставить менеджера JPA создать новую (вложенную) транзакцию.

Например, если выше были EJB, и я был в EJB контейнер я мог бы сделать это

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

ответ

1

Вы могли бы попытаться придать свой собственный компонент в собственность MyTestBean и доступ к нему таким образом.

+0

Спасибо, христианин. Я хотел бы получить более чистое решение. Мне не нравится иметь такую ​​ссылку цикла внутри боба. Я попробую ваше предложение, чтобы убедиться, что это работает, и я буду использовать его в качестве последнего решения. Благодаря! – Pitelk

+0

Выключает инжекцию компонента в сам компонент как свойство, а затем вызывать нужные методы с помощью инъецируемого компонента, не работает, ведет себя так же, как вызов метода непосредственно. С другой стороны, если я создаю новый bean-компонент и внедряю, он работает как шарм .. но создание нового компонента не то, что я хотел. благодаря – Pitelk