Listing 1: A stateless session bean that manages persistance:

@Stateless
public class OrderManager implements OrderManagerLocal, OrderManagerRemote {

  @PersistenceContext(name="ejb3example")
  private EntityManager em;

  public Object mergeEntity(Object entity) {
    return em.merge(entity);
  }
  public Object persistEntity(Object entity) {
    em.persist(entity);
    return entity;
  }
  public List<Customer> queryCustomerFindAll() {
    return em.createNamedQuery("Customer.findAll").getResultList();
  }
  ...

Listing 2: An EJB 3 entity:

@Entity
@NamedQuery(name = "OrderItem.findAll", query = "select o from OrderItem o")
@Table(name = "CUSTOMER_ORDER_ITEMS")
public class OrderItem implements Serializable
{  
  @Id
  @Column(nullable = false)
  @GeneratedValue(strategy=GenerationType.SEQUENCE)
  private int id;

  @ManyToOne(cascade=CascadeType.MERGE)
  @JoinColumn(name = "ORDER_ID", referencedColumnName = "ID")
  private Order order;

  @OneToOne
  @JoinColumn(name = "PRODUCT_ID", referencedColumnName = "ID")
  private Product product;
  ...

Listing 3: The servlet with the injected session bean:

		@EJB
  private OrderManagerLocal manager;

  protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException {
    PrintWriter out = new PrintWriter(response.getOutputStream());
    response.setContentType("text/plain");

    List<Product> productlist= manager.queryProductFindAll();
    if(productlist.isEmpty()) {
   	  productlist=fillProducts();
      for(Product product:productlist) {
        manager.persistEntity(product);
      }
    }
    out.println("Customer Order Simulation:\n");
    ...

Listing 4: The META-INF/persistence.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="ejb3example" transaction-type="JTA">
    <jta-data-source>
    java:openejb/Connector/Default JDBC Database
    </jta-data-source>
    <non-jta-data-source>
    java:openejb/Connector/Default Unmanaged JDBC Database
    </non-jta-data-source>
    <properties>
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
    </properties>
  </persistence-unit>
</persistence>