[jboss-user] [EJB 3.0] - TransactionRequiredException: EntityManager must be access w
paoletto
do-not-reply at jboss.com
Mon Nov 5 08:38:39 EST 2007
it's somehow strange,because i said in the code that for my method i REQUIRE_NEW transaction...
| package bps.ejb;
|
| import javax.ejb.*;
| import javax.persistence.*;
|
| import java.util.*;
| import java.sql.*;
|
|
| @Stateless
| public class BpsProcessQueueBean implements BpsProcessQueue {
| public static final String RemoteJNDIName = BpsProcessQueueBean.class.getSimpleName() + "/remote";
|
| public static final String LocalJNDIName = BpsProcessQueueBean.class.getSimpleName() + "/local";
|
| @PersistenceContext
| private EntityManager em;
|
| @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
| private Process fetchProcess_real(int subsystem) {
|
| String fetchQuery =
| "SELECT " +
| " p " +
| "FROM " +
| " Process AS p " +
| "WHERE " +
| " p.state = 0 AND " +
| " p.processQueue.id IN " +
| " (SELECT " +
| " pq.id " +
| " FROM " +
| " ProcessQueue AS pq " +
| " WHERE " +
| " (pq.subsystem.id = " +
| " (SELECT " +
| " s.id " +
| " FROM " +
| " Subsystem AS s " +
| " WHERE " +
| " (s.id = " + subsystem + ") AND " +
| " (s.connected = true) " +
| " ) " +
| " ) AND " +
| " (pq.connected = true) AND " +
| " (pq.curActiveProcesses < pq.maxActiveProcesses) " +
| " ) " +
| "ORDER BY p.priority ASC, p.id ASC";
|
| Query query = em.createQuery(fetchQuery);
| //Query query = em.createNamedQuery("fetchQuery");
| //query.setParameter("subsystem", subsystem);
| query.setMaxResults(1);
| Process p = (Process) query.getResultList().get(0);
|
| ProcessQueue pq = p.getProcessQueue();
|
| p.use();
| pq.incrementActive();
|
| em.persist(p);
| em.persist(pq);
|
| return p;
| }
|
| @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
| public Process fetchProcess(int subsystem) {
| boolean failed = true;
|
| while (failed == true) {
| failed = false;
| try {
| return fetchProcess_real(subsystem);
| } catch (Exception e) {
| e.printStackTrace();
| //failed = true;
| return null;
| }
| }
| return null;
| }
|
|
| @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
| private void releaseProcess_real(int id) {
| Process p = em.find(Process.class,id);
|
| CompletedProcess cp = new CompletedProcess(p);
| em.remove(p);
| em.persist(cp);
| }
|
| @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
| public void releaseProcess(int id) {
| releaseProcess_real(id);
| }
| @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
| public void releaseProcess(Process p) {
| releaseProcess_real(p.getId());
| }
|
|
| @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
| private void decreaseQueue_real(int id) {
| ProcessQueue pq = em.find(ProcessQueue.class, id);
| pq.decrementActive();
| em.persist(pq);
| }
| @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
| public void decreaseQueue(int id) {
| boolean failed = true;
|
| while (failed == true) {
| failed = false;
| try {
| decreaseQueue_real(id);
| } catch (Exception e) {
| //failed = true;
| e.printStackTrace();
| }
| }
| }
|
| @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
| public void completeProcess(int id) {
| releaseProcess(id);
| decreaseQueue(id);
| }
|
| @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
| public void completeProcess(Process p) {
| completeProcess(p.getId());
| }
|
| @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
| public void doProcess(int subsystem) {
| int i = 0;
| Process p = null;
| System.out.println("doProcess: before entering the while");
| while ((p = fetchProcess(subsystem)) != null) {
| i++;
|
| // do some work
| System.out.println("doProcess() - " + p);
|
| completeProcess(p.getId());
| }
| System.out.println("doProcess: " + i + " process dequeued");
| }
|
| }
|
And the exception
| 14:30:22,827 ERROR [STDERR] javax.persistence.TransactionRequiredException: EntityManager must be access within a transaction
| 14:30:22,828 ERROR [STDERR] at org.jboss.ejb3.entity.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory.java:150)
| 14:30:22,828 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManager.persist(TransactionScopedEntityManager.java:181)
| 14:30:22,828 ERROR [STDERR] at bps.ejb.BpsProcessQueueBean.fetchProcess_real(BpsProcessQueueBean.java:89)
| 14:30:22,829 ERROR [STDERR] at bps.ejb.BpsProcessQueueBean.fetchProcess(BpsProcessQueueBean.java:102)
| 14:30:22,829 ERROR [STDERR] at bps.ejb.BpsProcessQueueBean.doProcess(BpsProcessQueueBean.java:169)
| 14:30:22,829 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| 14:30:22,830 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| 14:30:22,830 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| 14:30:22,830 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
| 14:30:22,830 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
| 14:30:22,830 ERROR [STDERR] at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
| 14:30:22,831 ERROR [STDERR] at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
| 14:30:22,831 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,831 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
| 14:30:22,831 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,831 ERROR [STDERR] at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
| 14:30:22,831 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,831 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.invokeInNoTx(TxPolicy.java:66)
| 14:30:22,831 ERROR [STDERR] at org.jboss.aspects.tx.TxInterceptor$NotSupported.invoke(TxInterceptor.java:102)
| 14:30:22,832 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,833 ERROR [STDERR] at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
| 14:30:22,833 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,833 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
| 14:30:22,833 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,833 ERROR [STDERR] at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
| 14:30:22,833 ERROR [STDERR] at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:106)
| 14:30:22,834 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,834 ERROR [STDERR] at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
| 14:30:22,834 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,834 ERROR [STDERR] at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
| 14:30:22,834 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,834 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:278)
| 14:30:22,834 ERROR [STDERR] at org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:79)
| 14:30:22,834 ERROR [STDERR] at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:70)
| 14:30:22,835 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,835 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:103)
| 14:30:22,835 ERROR [STDERR] at $Proxy187.doProcess(Unknown Source)
| 14:30:22,835 ERROR [STDERR] at bps.ejb.BpsAgent.onMessage(BpsAgent.java:34)
| 14:30:22,835 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| 14:30:22,835 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| 14:30:22,835 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| 14:30:22,835 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
| 14:30:22,835 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
| 14:30:22,836 ERROR [STDERR] at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
| 14:30:22,836 ERROR [STDERR] at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
| 14:30:22,836 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,836 ERROR [STDERR] at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
| 14:30:22,836 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,836 ERROR [STDERR] at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
| 14:30:22,836 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,836 ERROR [STDERR] at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
| 14:30:22,837 ERROR [STDERR] at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195)
| 14:30:22,837 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,837 ERROR [STDERR] at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
| 14:30:22,837 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| 14:30:22,837 ERROR [STDERR] at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:245)
| 14:30:22,837 ERROR [STDERR] at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
| 14:30:22,837 ERROR [STDERR] at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
| 14:30:22,837 ERROR [STDERR] at $Proxy182.onMessage(Unknown Source)
| 14:30:22,837 ERROR [STDERR] at org.jboss.resource.adapter.jms.inflow.JmsServerSession.onMessage(JmsServerSession.java:178)
| 14:30:22,838 ERROR [STDERR] at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:891)
| 14:30:22,838 ERROR [STDERR] at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:170)
| 14:30:22,838 ERROR [STDERR] at org.jboss.mq.SpySession.run(SpySession.java:323)
| 14:30:22,838 ERROR [STDERR] at org.jboss.resource.adapter.jms.inflow.JmsServerSession.run(JmsServerSession.java:237)
| 14:30:22,838 ERROR [STDERR] at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
| 14:30:22,838 ERROR [STDERR] at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
| 14:30:22,838 ERROR [STDERR] at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
| 14:30:22,838 ERROR [STDERR] at java.lang.Thread.run(Thread.java:595)
|
before i tried to state the whole session bean as transactionattribute.NOT_SUPPORTED, and state REQUIRES_NEW only on the methods i wanted. but i got same error so i tried to specify for each method.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4101766#4101766
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4101766
More information about the jboss-user
mailing list