JAX-WS中的容器管理事务,weblogic

时间:2011-12-14 17:03:58

标签: java jax-ws

我正在尝试在webservice中使用容器管理的事务,但是没有创建事务。我有类似的东西:

@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:必须在事务的上下文中调用方法public abstract void javax.persistence.EntityManager.persist(java.lang.Object)。

我做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:1)

我记得'TransactionAttributeType.REQUIRED'意味着只有在当前线程的事务正在进行时(换句话说'在事务的上下文中调用')才应该调用该方法。目前尚不清楚是否有人在你的案件中开始交易。如果没有人,那么你获得的例外情况就非常有意义。

现在我不确定当前是否可以通过Web服务调用传播事务。即使可能,我认为这样做也不是特别好。

在您的情况下,也许您需要TransactionAttributeType.REQURES_NEW,以便Container在将控制传递给您带注释的方法之前启动事务?