-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: CMT Error EntityManager must be access within a transaction
PostPosted: Mon Feb 08, 2010 10:50 am 
Newbie

Joined: Mon Feb 08, 2010 10:17 am
Posts: 4
Hi,

I am trying to use CMT with EJB3 on JBoss 5.1.0GA. I have an EJB that calls an EJB DAO method to persist an entity. As soon as I call this method I get the following stack trace in the JBoss server.log:

Code:
14:29:58,316 ERROR [TxPolicy] javax.ejb.EJBTransactionRolledbackException: EntityManager must be access within a transaction
14:30:01,801 ERROR [TxPolicy] javax.ejb.EJBTransactionRolledbackException: EntityManager must be access within a transaction
14:30:01,811 ERROR [[HtmlAdaptor]] Servlet.service() for servlet HtmlAdaptor threw exception
javax.persistence.TransactionRequiredException: EntityManager must be access within a transaction
   at org.jboss.jpa.deployment.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory.java:155)
   at org.jboss.jpa.tx.TransactionScopedEntityManager.persist(TransactionScopedEntityManager.java:186)
   at ie.eread.ebook.dao.impl.GenericDAOImpl.persist(GenericDAOImpl.java:38)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
   at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
   at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
   at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
   at sun.reflect.GeneratedMethodAccessor282.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
   at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_6373702.invoke(InvocationContextInterceptor_z_fillMethod_6373702.java)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
   at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_6373702.invoke(InvocationContextInterceptor_z_setup_6373702.java)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
   at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:194)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:176)
   at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:216)
   at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
   at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
   at $Proxy359.persist(Unknown Source)
   at ie.eread.ebook.service.ebook.management.impl.DeploymentProcessorImpl.processDeploymentPersistStatus(DeploymentProcessorImpl.java:92)
   at ie.eread.ebook.service.ebook.management.impl.DeploymentProcessorImpl.processDeployments(DeploymentProcessorImpl.java:76)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
   at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
   at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
   at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
   at sun.reflect.GeneratedMethodAccessor282.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
   at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_6373702.invoke(InvocationContextInterceptor_z_fillMethod_6373702.java)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
   at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_6373702.invoke(InvocationContextInterceptor_z_setup_6373702.java)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
   at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:194)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:176)
   at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:216)
   at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
   at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
   at $Proxy329.processDeployments(Unknown Source)
   at ie.eread.ebook.service.jmx.impl.EbookManagementMBeanImpl.deployEbooks(EbookManagementMBeanImpl.java:36)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
   at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
   at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
   at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
   at sun.reflect.GeneratedMethodAccessor282.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
   at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_6373702.invoke(InvocationContextInterceptor_z_fillMethod_6373702.java)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
   at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_6373702.invoke(InvocationContextInterceptor_z_setup_6373702.java)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
   at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
   at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
   at org.jboss.ejb3.service.ServiceContainer.localInvoke(ServiceContainer.java:451)
   at org.jboss.ejb3.service.ServiceMBeanDelegate.invoke(ServiceMBeanDelegate.java:215)
   at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)
   at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
   at org.jboss.jmx.adaptor.control.Server.invokeOpByName(Server.java:258)
   at org.jboss.jmx.adaptor.control.Server.invokeOp(Server.java:223)
   at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet$3.run(HtmlAdaptorServlet.java:380)
   at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet$3.run(HtmlAdaptorServlet.java:378)
   at java.security.AccessController.doPrivileged(Native Method)
   at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.invokeOp(HtmlAdaptorServlet.java:376)
   at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.invokeOp(HtmlAdaptorServlet.java:287)
   at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.processRequest(HtmlAdaptorServlet.java:104)
   at org.jboss.jmx.adaptor.html.HtmlAdaptorServlet.doPost(HtmlAdaptorServlet.java:86)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
   at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
   at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
   at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
   at java.lang.Thread.run(Thread.java:619)


Here is my Generic DAO class
Code:
package ie.eread.ebook.dao.impl;

import ie.eread.ebook.dao.api.GenericDAO;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public abstract class GenericDAOImpl<T, ID extends Serializable>
                  implements GenericDAO<T, ID>
{
   @PersistenceContext
   private EntityManager em;
   private Class<T> persistentClass;
      
   
   @SuppressWarnings("unchecked")
   public GenericDAOImpl()
   {
      this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
         .getGenericSuperclass()).getActualTypeArguments()[0];
   }
   
   public T findById(ID id)
   {
      return (T) getEntityManager().find(getPersistentClass(), id);
   }

   public void persist(T entity)
   {
      getEntityManager().persist(entity);
   }
   
   public T merge(T entity)
   {
      return (T) getEntityManager().merge(entity);
   }

   public void delete(T entity)
   {
      getEntityManager().remove(entity);
   }
   public void flush()
   {
      getEntityManager().flush();
   }
   
   public void clear()
   {
      getEntityManager().clear();
   }

   public void setPersistentClass(Class<T> persistentClass)
   {
      this.persistentClass = persistentClass;
   }
   
   public Class<T> getPersistentClass()
   {
      return persistentClass;
   }
   
   public void setEntityManager(EntityManager em)
   {
      this.em = em;
   }
   public EntityManager getEntityManager()
   {
      return em;
   }
}


This is my DAO implementation class:

Quote:
@Stateless(name="EbookDAO")
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class EbookDAOImpl extends GenericDAOImpl<Ebook, Long>
implements EbookDAO
{
...Lots of query methods...
}


This is the class that calls my DAO class:
Code:
package ie.eread.ebook.service.ebook.management.impl;

import java.util.List;

import ie.eread.ebook.dao.api.EbookDAO;
import ie.eread.ebook.model.Ebook;
import ie.eread.ebook.model.enums.ECurrStatus;
import ie.eread.ebook.service.ebook.management.api.DeploymentPersister;
import ie.eread.ebook.service.ebook.management.api.DeploymentProcessor;
import ie.eread.ebook.service.ebook.management.api.DeploymentValidator;
import ie.eread.ebook.service.exception.DeploymentPersistenceException;
import ie.eread.ebook.service.exception.DeploymentProcessorException;
import ie.eread.ebook.service.exception.DeploymentValidationException;
import ie.eread.ebook.util.ebook.DeploymentListener;
import ie.eread.ebook.util.exception.DeploymentListenerException;

import javax.annotation.Resource;
import javax.ejb.*;

import org.apache.log4j.Logger;

@Stateless(name = "DeploymentProcessor")
@TransactionManagement(TransactionManagementType.CONTAINER)
public class DeploymentProcessorImpl implements DeploymentProcessor
{
   @Resource SessionContext context;
   
   @EJB(mappedName="EbookDAO/local")
   private EbookDAO eBookDAO;

   @EJB(mappedName="DeploymentValidator/local")
   private DeploymentValidator deploymentValidator;

   @EJB(mappedName="DeploymentPersister/local")
   private DeploymentPersister deploymentPersister;

   private static DeploymentListener deploymentListener;

   private int successCnt;

   private Logger logger = Logger.getLogger(DeploymentProcessorImpl.class.getName());

   public DeploymentProcessorImpl()
   {
   }

   /**
    * Processes all ebooks flagged for deployment. This method cannot have
    * transaction demarcation as this could cause a rollback for successfully
    * deployed ebooks.
    */
   public int processDeployments()
   {
      logger.info("Searching for ebooks with status ['"+
         ECurrStatus.AwDplymntCheck.getLabel() +"']");
      
      List<Ebook> deployedEbooks =
         eBookDAO.getEbooksByStatus(ECurrStatus.AwDplymntCheck.getLabel());
      logger.info("["+ deployedEbooks.size() +"] ebooks found waiting for deployment check");
      
      if (deployedEbooks.size() == 0)
      {
         logger.info("No further work required here - bailing out...");
         return 0;
      }
      
      successCnt = 0;
      for (Ebook ebook : deployedEbooks)
      {
         processDeploymentPersistStatus(ebook);
      }
      return successCnt;
   }
   
   @TransactionAttribute(TransactionAttributeType.REQUIRED)
   public void processDeploymentPersistStatus(Ebook ebook)
   {
      try
      {
         processDeployment(ebook);
         ebook.setCurrStatus(ECurrStatus.Active);
         eBookDAO.persist(ebook);
      } catch (DeploymentProcessorException e)
      {
         ebook.setCurrStatus(ECurrStatus.FailedDplymntCheck);
         [color=#FF0000]eBookDAO.persist(ebook);[/color]
      }
   }

   @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
   public void processDeployment(Ebook ebook) throws DeploymentProcessorException
   {
      DownloadFileDetails dfd;
      try
      {
         dfd = deploymentValidator.validateDeployment(ebook);
         deploymentPersister.persistDownloadDetails(ebook, dfd);
         if (deploymentListener != null) deploymentListener.deploy(ebook);      
      } catch (DeploymentValidationException e)
      {
         context.setRollbackOnly();
         throw new DeploymentProcessorException(e);
      } catch (DeploymentPersistenceException e)
      {
         context.setRollbackOnly();
         throw new DeploymentProcessorException(e);
      } catch (DeploymentListenerException e)
      {
         context.setRollbackOnly();
         throw new DeploymentProcessorException(e);
      }
      
   }

   @SuppressWarnings("static-access")
   public void setDeploymentListener(DeploymentListener deploymentListener)
   {
      this.deploymentListener = deploymentListener;
   }
}


The line of code highlighted in red is when I get the transaction exception.

persistence.xml
Code:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                         http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
          version="1.0">

<persistence-unit name="ebooks" transaction-type="JTA">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
   <jta-data-source>java:/DefaultDS</jta-data-source>
   <class>ie.eread.ebook.model.Category</class>
   <class>ie.eread.ebook.model.CategoryEbook</class>
   <class>ie.eread.ebook.model.CurrStatus</class>
   <class>ie.eread.ebook.model.Ebook</class>
   <class>ie.eread.ebook.model.EbookAltTitle</class>
   <class>ie.eread.ebook.model.EbookDwnld</class>
   <class>ie.eread.ebook.model.EbookDwnldDet</class>
   <class>ie.eread.ebook.model.EbookPattern</class>
   <class>ie.eread.ebook.model.Language</class>
   <class>ie.eread.ebook.model.Person</class>
   <class>ie.eread.ebook.model.PersonRole</class>
   <class>ie.eread.ebook.model.PersonRoleEbook</class>
   <class>ie.eread.ebook.model.Subject</class>
   <class>ie.eread.ebook.model.SubjectEbook</class>
   <class>ie.eread.ebook.model.User</class>
   <class>ie.eread.ebook.model.UserDwnld</class>
   <properties>
      <property name="hibernate.archive.autodetection" value="class"/>
      <!-- <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> -->
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.transaction.manager_lookup_class"
              value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
      <property name="hibernate.transaction.auto_close_session" value="true"/>
      <property name="hibernate.transaction.flush_before_completion" value="true"/>
<!--
      <property name="hibernate.transaction.factory_class"
              value="org.hibernate.transaction.CMTTransactionFactory"/>
-->
   </properties>
</persistence-unit>

</persistence>


As you will see above I have commented out the "hibernate.transaction.factory_class" parameter as this was
causing an error each time I called a DAO method. I have read that the factory_class should be handled by the entity manager.

The actual factory class used is.. (from server.log)

Code:
2010-02-08 14:12:08,815 INFO  [org.hibernate.transaction.TransactionFactoryFactory] (main) Transaction strategy: [color=#FF0000]org.hibernate.ejb.transaction.JoinableCMTTransactionFactory[/color]
2010-02-08 14:12:08,821 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] (main) instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
2010-02-08 14:12:08,828 INFO  [org.hibernate.transaction.TransactionManagerLookupFactory] (main) instantiated TransactionManagerLookup


I am new to CMT but I think the EJBs are annotated ok for transactional demarcation.

Could you also please tell me how I can debug when a transaction is started/committed/rolled back? I have "org.hibernate.transaction" set to DEBUG and have
tried "org.hibernate.sql" set to DEBUG in my log4j files but do not get any transaction logging.

Any help would be most appreciated as I've been stuck on this for a few days now!!

Regards,

Michaek


Top
 Profile  
 
 Post subject: Re: CMT Error EntityManager must be access within a transaction
PostPosted: Mon Feb 08, 2010 3:51 pm 
Newbie

Joined: Mon Feb 08, 2010 10:17 am
Posts: 4
Hi,

Could someone pls take a look at this - our project is on hold until we can get CMT working.

Regards,

Michael


Top
 Profile  
 
 Post subject: Re: CMT Error EntityManager must be access within a transaction
PostPosted: Tue Feb 09, 2010 1:12 pm 
Newbie

Joined: Mon Feb 08, 2010 10:17 am
Posts: 4
Can anyone pls help with this?


Top
 Profile  
 
 Post subject: Re: CMT Error EntityManager must be access within a transaction
PostPosted: Wed Feb 10, 2010 10:03 am 
Newbie

Joined: Mon Feb 08, 2010 10:17 am
Posts: 4
Any ideas?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.