2011-12-14 68 views
3

我試圖在webservice中使用容器管理事務,但事務沒有被創建。我有類似的東西:JAX-WS中的容器管理的事務,weblogic

@WebService(...) 
@Stateless 
@TransactionManagment(TransactionManagmentType.CONTAINER) 
public class ExampleService { 

    // EntityManager and other fields 

    @TransactionAttribure(TransactionAttributeType.REQUIRED) 
    public void test(String s){ 
    // persist something with EntityManager 
    } 
} 

當我把這種方法,我得到javax.persistence.TransactionRequiredException:方法公共抽象無效javax.persistence.EntityManager.persist(java.lang.Object中)必須被調用交易的上下文。

我在做什麼錯? 謝謝!

+1

persistence.xml中的持久單元是否設置爲transaction-type =「JTA」? – Puce 2011-12-14 17:33:30

+0

普西,它並沒有幫助 – 2011-12-18 18:09:57

回答

1

從我記得'TransactionAttributeType.REQUIRED'意味着該方法應該只在當前線程的事務正在進行時(換句話說就是'在事務上下文中調用')時被調用。目前還不清楚是否有人開始交易。如果沒有人,那麼你得到的例外是非常有意義的。

現在我不確定如何甚至是現在可以通過Web服務調用傳播事務。即使可能,我認爲這不是特別好的主意。

也許你在你的情況下需要TransactionAttributeType.REQURES_NEW所以容器會在把控制傳遞給你的註釋方法之前啓動事務?