title: Transaction is required to perform this operation (either use a transaction or extended persistence context)
body: <p>I'm using Wildfly 10.0.0 Final, Java EE7, Maven and JPA 2.1. When I am querying my database for records it works fine and lists out the employees, but when I am trying to persist a new employee it gives me the following exception:</p>
  
  <pre><code>javax.servlet.ServletException: WFLYJPA0060: Transaction is required to perform this operation (either use a transaction or extended persistence context)
  javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
  io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
  io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
  io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
  org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
  io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
  io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
  ...
  </code></pre>
  
  <p>I'm trying to implement this using JSF and CDI beans. I have a JTA data source, which I've configured in my persistence.xml file:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1"&gt;
      &lt;persistence-unit name="MyPersistenceUnit"&gt;
          &lt;provider&gt;org.hibernate.jpa.HibernatePersistenceProvider&lt;/provider&gt;
          &lt;jta-data-source&gt;java:/EmployeesDS&lt;/jta-data-source&gt;
          &lt;class&gt;com.home.entity.Employee&lt;/class&gt;
          &lt;properties&gt;
              &lt;property name="hibernate.archive.autodetection" value="class"/&gt;
              &lt;property name="hibernate.show_sql" value="true"/&gt;
              &lt;property name="hibernate.format_sql" value="true"/&gt;
              &lt;property name="hbm2ddl.auto" value="update"/&gt;
              &lt;property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/&gt;
          &lt;/properties&gt;
      &lt;/persistence-unit&gt;
  &lt;/persistence&gt;
  </code></pre>
  
  <p>The CDI bean can be seen below. It is relatively simple, there is a method to list out 25 employees and another which should persist a specific employee:</p>
  
  <pre><code>@Named
  @RequestScoped
  public class DataFetchBean {
      @PersistenceContext
      EntityManager em;
  
      public List getEmployees() {
          Query query = em.createNamedQuery("findEmployees");
          query.setMaxResults(25);
          return query.getResultList();
      }
  
      public String getEmployeeNameById(final int id) {
          addEmployee();
  
          Query query = em.createNamedQuery("findEmployeeNameById");
          query.setParameter("empno", id);
          Employee employee = (Employee) query.getSingleResult();
          return employee.getFirstName() + " " + employee.getLastName();
      }
  
      public void addEmployee() {
          em.persist(new Employee(500000, new Date(335077446), "Josh", "Carribean", 'm', new Date(335077446)));
      }
  }
  </code></pre>
  
  <p>The employee entity class can be found below:</p>
  
  <pre><code>@NamedQueries({
          @NamedQuery(
                  name = "findEmployees",
                  query = "select e from Employee e"
          ),           
          @NamedQuery(
                  name = "findEmployeeNameById",
                  query = "select e from Employee e where e.empNo = :empno"
          )
  })
  @Table(name = "employees")
  public class Employee {
      @Id
      @Column(name = "emp_no")
      private int empNo;
      @Basic
      @Column(name = "birth_date")
      private Date birthDate;
      @Basic
      @Column(name = "first_name")
      private String firstName;
      @Basic
      @Column(name = "last_name")
      private String lastName;
      @Basic
      @Column(name = "gender")
      private char gender;
      @Basic
      @Column(name = "hire_date")
      private Date hireDate;
  
      public Employee() { }
  
      public int getEmpNo() {
          return empNo;
      }
  
      public void setEmpNo(int empNo) {
          this.empNo = empNo;
      }
  
      public Date getBirthDate() {
          return birthDate;
      }
  
      public void setBirthDate(Date birthDate) {
          this.birthDate = birthDate;
      }
  
      public String getFirstName() {
          return firstName;
      }
  
      public void setFirstName(String firstName) {
          this.firstName = firstName;
      }
  
      public String getLastName() {
          return lastName;
      }
  
      public void setLastName(String lastName) {
          this.lastName = lastName;
      }
  
      public char getGender() {
          return gender;
      }
  
      public void setGender(char gender) {
          this.gender = gender;
      }
  
      public Date getHireDate() {
          return hireDate;
      }
  
      public void setHireDate(Date hireDate) {
          this.hireDate = hireDate;
      }
  
      public Employee(int empNo, Date birthDate, String firstName, String lastName, char gender, Date hireDate) {
          this.empNo = empNo;
          this.birthDate = birthDate;
          this.firstName = firstName;
          this.lastName = lastName;
          this.gender = gender;
          this.hireDate = hireDate;
      }
  
      @Override
      public boolean equals(Object o) {
          if (this == o) return true;
          if (o == null || getClass() != o.getClass()) return false;
  
          Employee employee = (Employee) o;
  
          if (empNo != employee.empNo) return false;
          if (gender != employee.gender) return false;
          if (birthDate != null ? !birthDate.equals(employee.birthDate) : employee.birthDate != null) return false;
          if (firstName != null ? !firstName.equals(employee.firstName) : employee.firstName != null) return false;
          if (lastName != null ? !lastName.equals(employee.lastName) : employee.lastName != null) return false;
          if (hireDate != null ? !hireDate.equals(employee.hireDate) : employee.hireDate != null) return false;
  
          return true;
      }
  
      @Override
      public int hashCode() {
          int result = empNo;
          result = 31 * result + (birthDate != null ? birthDate.hashCode() : 0);
          result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
          result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
          result = 31 * result + (int) gender;
          result = 31 * result + (hireDate != null ? hireDate.hashCode() : 0);
          return result;
      }
  }
  </code></pre>
  
  <p>Thanks in advance!</p>