2011-12-14 2 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 для транзакции типа = "JTA"? – Puce

+0

Puce, это не помогает –

ответ

1

Из того, что я помню, «TransactionAttributeType.REQUIRED» означает, что метод должен вызываться только тогда, когда транзакция уже выполняется для текущего потока (другими словами, «вызываемого в контексте транзакции»). Неясно, кто, если кто-то начнет транзакцию в вашем случае. Если никто, то исключение, которое вы получаете, имеет смысл.

Теперь я не уверен, как или в настоящее время возможно распространять транзакцию между вызовами веб-сервисов. Я не думаю, что это особенно хорошая идея, если это возможно.

Возможно, вам понадобится TransactionAttributeType.REQURES_NEW в вашем случае, чтобы контейнер начал транзакцию, прежде чем передавать управление вашему аннотированному методу?

+0

Спасибо за ваш ответ, однако, согласно http://docs.oracle.com/javaee/6/api/javax/ejb/TransactionAttributeType.html#REQUIRED, должна быть запущена новая транзакция. Точно, я хотел бы получить новую транзакцию при вызове метода –

+0

Не должно быть что-то вроде: @Transactional (value = Transactional.TransactionFlowType.MANDATORY, version = com.sun.xml.ws.api.tx.at .Transactional.Version.WSAT10) – maximdim

+0

См. Здесь: http://metro.java.net/guide/Using_Web_Services_Atomic_Transactions.html – maximdim

Смежные вопросы