title: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName CrudPU
body: <p>I need to perform test task for new job, but it seems I'm in a stupor.
  I have some problems with persistence context. I use Glassfish 3 and this tutorial: <a href="http://uaihebert.com/?p=834" rel="nofollow">http://uaihebert.com/?p=834</a> </p>
  
  <p>jdbc/CrudDS already configured on server and ping is successfull.
  When application deployed, I see just ejb, web in "engines" column but no JPA engine.</p>
  
  <p>Here is the Entity bean:</p>
  
  <pre><code>@Entity
  @Table(name = "tasks")
  public class Task implements Serializable {
  
  @Id
      @GeneratedValue(strategy=GenerationType.AUTO)
      private int id;
  
  @Column(name="title")
  private String title;
  
  @Column(name="mail")
  private String mail;
  
  @Column(name="text")
  private String text;
  
  @Column(name="time")
  private Date time;
  
  @Column(name="interval")
  private int interval;
  
  @Column(name="repeats")
  private int repeats;
  
  public int getId() {
      return id;
  }
  
  public void setId(int id) {
      this.id = id;
  }
  
  public String getTitle() {
      return title;
  }
  
  public void setTitle(String title) {
      this.title = title;
  }
  
  public String getMail() {
      return mail;
  }
  
  public void setMail(String mail) {
      this.mail = mail;
  }
  
  public String getText() {
      return text;
  }
  
  public void setText(String text) {
      this.text = text;
  }
  
  public Date getTime() {
      return time;
  }
  
  public void setTime(Date time) {
      this.time = time;
  }
  
  public int getInterval() {
      return interval;
  }
  
  public void setInterval(int interval) {
      this.interval = interval;
  }
  
  public int getRepeats() {
      return repeats;
  }
  
  public void setRepeats(int repeats) {
      this.repeats = repeats;
  }
  
  @Override
  public int hashCode() {
      return getId();
  }
  
  
  }
  </code></pre>
  
  <p>Here is my DAO abstract Class:</p>
  
  <pre><code>public abstract class GenericDAO&lt;T&gt; {
  
  private final static String UNIT_NAME = "CrudPU";
  
  @PersistenceContext(unitName = UNIT_NAME)
  private EntityManager em;
  
  private Class&lt;T&gt; entityClass;
  
  public GenericDAO(Class&lt;T&gt; entityClass) {
      this.entityClass = entityClass;
  }
  
  public void save(T entity) {
      em.persist(entity);
  }
  
  protected void delete(Object id, Class&lt;T&gt; classe) {
      T entityToBeRemoved = em.getReference(classe, id);
  
      em.remove(entityToBeRemoved);
  }
  
  public T update(T entity) {
      return em.merge(entity);
  }
  
  public T find(int entityID) {
      return em.find(entityClass, entityID);
  }
  
  @SuppressWarnings({ "unchecked", "rawtypes" })
  public List&lt;T&gt; findAll() {
      CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
      cq.select(cq.from(entityClass));
      return em.createQuery(cq).getResultList();
  }
  
  @SuppressWarnings("unchecked")
  protected T findOneResult(String namedQuery, Map&lt;String, Object&gt; parameters) {
      T result = null;
  
      try {
          Query query = em.createNamedQuery(namedQuery);
  
          if (parameters != null &amp;&amp; !parameters.isEmpty()) {
              populateQueryParameters(query, parameters);
          }
  
          result = (T) query.getSingleResult();
  
      } catch (Exception e) {
          System.out.println("Error while running query: " + e.getMessage());
          e.printStackTrace();
      }
  
      return result;
  }
  
  private void populateQueryParameters(Query query, Map&lt;String, Object&gt; parameters) {
  
      for (Entry&lt;String, Object&gt; entry : parameters.entrySet()) {
          query.setParameter(entry.getKey(), entry.getValue());
      }
  }
  }
  </code></pre>
  
  <p>Extending of DAO class:</p>
  
  <pre><code>@Stateless 
  public class TaskDAO extends GenericDAO&lt;Task&gt;{
  
  public TaskDAO() {
      super(Task.class);
  }
  
  public void delete(Task task) {
      super.delete(task.getId(), Task.class);
  }
  
  }
  </code></pre>
  
  <p>Facade interface:</p>
  
  <pre><code>@Local
  public interface TaskFacade {
  
  public abstract void save(Task task);
  
      public abstract Task update(Task task);
  
      public abstract void delete(Task task);
  
      public abstract Task find(int entityID);
  
      public abstract List&lt;Task&gt; findAll();
  
  }
  </code></pre>
  
  <p>... and it's implement:</p>
  
  <pre><code>@Stateless
  public class TaskFacadeImpl implements TaskFacade {
  
      @EJB
      private TaskDAO taskDAO;
  
      public void save(Task task) {
          isTaskWithAllData(task);
  
          taskDAO.save(task);
      }
  
      public Task update(Task task) {
          isTaskWithAllData(task);
  
          return taskDAO.update(task);
      }
  
      public void delete(Task task) {
          taskDAO.delete(task);
      }
  
      public Task find(int entityID) {
          return taskDAO.find(entityID);
      }
  
      public List&lt;Task&gt; findAll() {
          return taskDAO.findAll();
      }
  
      private void isTaskWithAllData(Task task){
          boolean hasError = false;
  
          if(task == null){
              hasError = true;
          }
  
          if(task.getInterval() &lt; 0){
              hasError = true;
          }
  
          if(task.getRepeats() &lt; 0){
              hasError = true;
          }
  
          if (task.getMail() == null || "".equals(task.getMail().trim())){
              hasError = true;
          }
  
          if (hasError){
              throw new IllegalArgumentException("The task is missing data. Check the e-mail, it should have value. Interval and repeats should be &gt;= 0 ");
          }
      }
  }
  </code></pre>
  
  <p>And persistence.xml from /src/META-INF/:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;persistence version="2.0" 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_2_0.xsd"&gt;
  &lt;persistence-unit name="CrudPU" transaction-type="JTA"&gt;
      &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
      &lt;jta-data-source&gt;jdbc/CrudDS&lt;/jta-data-source&gt;
      &lt;properties&gt;
          &lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt;
      &lt;/properties&gt;
  &lt;/persistence-unit&gt;
  &lt;/persistence&gt;
  </code></pre>
  
  <p>And when I try to perform some operation ( save() ) I get an exception:</p>
  
  <pre><code>javax.faces.el.EvaluationException: javax.ejb.EJBTransactionRolledbackException
  at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
  at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
  at javax.faces.component.UICommand.broadcast(UICommand.java:315)
  at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
  at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
  at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
  at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
  at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
  at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
  at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
  at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
  at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
  at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
  at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
  at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
  at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
  at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
  at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
  at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
  at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
  at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
  at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
  at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
  at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
  at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
  at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
  at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
  at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
  at java.lang.Thread.run(Thread.java:722)
  Caused by: javax.ejb.EJBTransactionRolledbackException
  at com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2314)
  at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2096)
  at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)
  at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
  at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89)
  at $Proxy235.save(Unknown Source)
  at com.zhalostnikov.dao.__EJB31_Generated__TaskDAO__Intf____Bean__.save(Unknown Source)
  at com.zhalostnikov.facade.TaskFacadeImpl.save(TaskFacadeImpl.java:20)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:601)
  at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
  at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
  at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
  at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
  at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
  at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
  at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
  at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:601)
  at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
  at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
  at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
  at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
  at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
  at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
  at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89)
  at $Proxy236.save(Unknown Source)
  at TestBean.doo(TestBean.java:21)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:601)
  at com.sun.el.parser.AstValue.invoke(AstValue.java:254)
  at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
  at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
  at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
  ... 32 more
  Caused by: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
  at com.sun.ejb.containers.BaseContainer.checkExceptionClientTx(BaseContainer.java:5071)
  at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4906)
  at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)
  ... 71 more
  Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName CrudPU
  at com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper.java:132)
  at com.sun.enterprise.container.common.impl.EntityManagerWrapper.doTxRequiredCheck(EntityManagerWrapper.java:152)
  at com.sun.enterprise.container.common.impl.EntityManagerWrapper.doTransactionScopedTxCheck(EntityManagerWrapper.java:145)
  at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:263)
  at com.zhalostnikov.dao.GenericDAO.save(GenericDAO.java:27)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:601)
  at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
  at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
  at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
  at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
  at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
  at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
  at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
  at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:601)
  at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
  at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
  at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
  at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
  at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
  at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
  ... 69 more
  </code></pre>
  
  <p>It looks like persistence unit couldn't be found, but I can't find the reason.
  Could enybody help me with it please?</p>