/* * JpaServlet.java */ package web; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; import java.io.*; import javax.persistence.*; import javax.transaction.*; import javax.annotation.*; import entity.*; import util.*; public class JpaServlet extends ServletUtil { @PersistenceUnit(name = "myemf", unitName="pu1") private EntityManagerFactory emf; private EntityManager em; private @Resource UserTransaction utx; private final int customerId = 1; private final String customerName = "Joe Smith"; private final int order1Id = 100; private final int order2Id = 200; private final String order1Addr = "123 Main St. Anytown, US"; private final String order2Addr = "567 1st St. Random City, USA"; public EntityManager getEntityManager() { return emf.createEntityManager(); } public boolean testInsert() { boolean result = false; try { utx.begin(); //out.println("createEM EntityManager=" + em); em = getEntityManager(); // Create new customer Customer customer0 = new Customer(); customer0.setId(customerId); customer0.setName(customerName); // Persist the customer em.persist(customer0); // Create 2 orders Order order1 = new Order(); order1.setId(order1Id); order1.setAddress(order1Addr); Order order2 = new Order(); order2.setId(order2Id); order2.setAddress(order2Addr); // Associate orders with the customer. The association // must be set on both sides of the relationship: on the // customer side for the orders to be persisted when // transaction commits, and on the order side because it // is the owning side. customer0.getOrders().add(order1); order1.setCustomer(customer0); customer0.getOrders().add(order2); order2.setCustomer(customer0); utx.commit(); result = true; }catch(Exception ex){ ex.printStackTrace(); } finally { if (em != null) { em.close(); } } return result; } public boolean testDelete() { boolean result = false; try { utx.begin(); em = getEntityManager(); Customer c = findCustomer(customerName); Customer c0 = em.merge(c); em.remove(c0); utx.commit(); result = true; } catch(Exception ex){ ex.printStackTrace(); } finally { if (em != null) { em.close(); } } return result; } public boolean verifyInsert() { boolean result = false; try { em = getEntityManager(); System.out.println("Customer name in verifyInsert:"+customerName); Customer c = findCustomer(customerName); Collection<Order> orders = c.getOrders(); if (orders == null || orders.size() != 2) { throw new RuntimeException("Unexpected number of orders: " + ((orders == null)? "null" : "" + orders.size())); } result = true; } finally { if (em != null) { em.close(); } } return result; } public boolean verifyDelete() { boolean result = false; try { em = getEntityManager(); Query q = em.createQuery("select c from Customer c"); List results = q.getResultList(); if (results == null || results.size() != 0) { throw new RuntimeException("Unexpected number of customers after delete"); } q = em.createQuery("select o from Order o"); results = q.getResultList(); if (results == null || results.size() != 0) { throw new RuntimeException("Unexpected number of orders after delete"); } result = true; } finally { if (em != null) { em.close(); } } return result; } public Customer findCustomer(String name) { Query q = em.createQuery("select c from Customer c where c.name = :name"); q.setParameter("name", name); Customer c = (Customer)q.getSingleResult(); return c; } }