package example; import java.io.PrintWriter; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ejb.EntityManager; import javax.ejb.Inject; import javax.ejb.EJB; import javax.transaction.UserTransaction; /** * The SwapServlet swaps cources. */ public class SwapServlet extends HttpServlet { @Inject private EntityManager _manager; @Inject private UserTransaction _uTrans; @EJB(jndiName="swap") private Swap _swap; /** * Initializes the database for the demo. */ public void init() throws ServletException { Course course = null; try { course = (Course) _manager.find("Course", new Integer(1)); if (course != null) return; } catch (Exception e) { } Course potions = new Course(); potions.setCourse("Potions"); potions.setTeacher("Severus Snape"); _manager.create(potions); Course xfig = new Course(); xfig.setCourse("Transfiguration"); xfig.setTeacher("Minerva McGonagall"); _manager.create(xfig); } /** * Illustrates how to swap with a transaction. */ public void service(HttpServletRequest req, HttpServletResponse res) throws java.io.IOException, ServletException { PrintWriter out = res.getWriter(); res.setContentType("text/html"); Course []courses = new Course[2]; courses[0] = (Course) _manager.find("Course", new Integer(1)); courses[1] = (Course) _manager.find("Course", new Integer(2)); printCourses(out, "Initial Teachers", courses); // Swaps the courses using a session bean to handle the transaction. _swap.swap(courses[0], courses[1]); printCourses(out, "Swapped Teachers", courses); // Swaps the courses inside a transaction. The swap will be atomic, // i.e. either the swap will succeed or fail. It will not end up // in an intermediate state. try { _uTrans.begin(); try { String teacher = courses[0].getTeacher(); courses[0].setTeacher(courses[1].getTeacher()); courses[1].setTeacher(teacher); } finally { _uTrans.commit(); } } catch (Exception e) { throw new ServletException(e); } } private void printCourses(PrintWriter out, String title, Course []courses) throws IOException { out.println("<h3>" + title + "</h3>"); for (Course course : courses) { out.println("course: " + course.getCourse() + "<br>"); out.println("teacher: " + course.getTeacher() + "<br>"); out.println("<br>"); } } }