EMF.java
package guestbook; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class EMF { private static final EntityManagerFactory emfInstance = Persistence.createEntityManagerFactory("transactions-optional"); private EMF(){} public static EntityManagerFactory get(){ return emfInstance; } }Greeting.java
package guestbook; import java.util.Date; import javax.jdo.annotations.Persistent; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.users.User; @Entity public class Greeting { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Key key; private User author; private String content; private Date date; public Greeting(User author, String content, Date date) { this.author = author; this.content = content; this.date = date; } public Key getKey() { return key; } public User getAuthor() { return author; } public String getContent() { return content; } public Date getDate() { return date; } public void setAuthor(User author) { this.author = author; } public void setContent(String content) { this.content = content; } public void setDate(Date date) { this.date = date; } }SignServlet.java
package guestbook; import java.io.IOException; import java.util.Date; import java.util.logging.Logger; import javax.persistence.EntityManager; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; public class SignServlet extends HttpServlet{ private static final Logger log = Logger.getLogger(SignServlet.class.getName()); public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException{ UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser(); String content = req.getParameter("content"); Date date = new Date(); Greeting greeting = new Greeting(user,content,date); EntityManager em = EMF.get().createEntityManager(); try{ em.persist(greeting); }finally{ em.close(); } resp.sendRedirect("/test.jsp"); } }test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.util.List" %> <%@ page import="javax.persistence.EntityManager" %> <%@ page import="com.google.appengine.api.users.User" %> <%@ page import="com.google.appengine.api.users.UserService" %> <%@ page import="com.google.appengine.api.users.UserServiceFactory" %> <%@ page import="guestbook.Greeting" %> <%@ page import="guestbook.EMF" %> <html> <body> <head> <link type="text/css" rel="stylesheet" href="/stylesheet/main.css" /> </head> <% UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser(); if (user != null) { %> <p>Hello, <%= user.getNickname() %>! (You can <a href="<%= userService.createLogoutURL(request.getRequestURI()) %>">sign out</a>.)</p> <% } else { %> <p>Hello!! <a href="<%= userService.createLoginURL(request.getRequestURI()) %>">Sign in</a> to include your name with greetings you post.</p> <% } %> <% EntityManager em = EMF.get().createEntityManager(); String query = "select i from Greeting i"; List<Greeting> greetings = (List<Greeting>)em.createQuery(query).getResultList(); if(greetings.isEmpty()){ %> <p>The guestbook has no messages.</p> <% }else{ for(Greeting g: greetings){ if(g.getAuthor() == null){ %> <p>An anonymous person wrote:</p> <% } else { %> <p><b><%= g.getAuthor().getNickname() %></b> wrote:</p> <% } %> <blockquote><%= g.getContent() %></blockquote> <% } } em.close(); %> <form action="/sign" method="post"> <div><textarea name="content" rows="3" cols="60"></textarea></div> <div><input type="submit" value="Post Greeting" /></div> </form> </body> </html>