Googleの英語を翻訳してDataStoreを使ってみた
damePGは翻訳好きになってきました。
GoogleAPPEngineを使用してデータの登録や検索をしたい。
みんなが最初はそう思います。
GoogleAppEngineの提供しているAPIを使用すればデータの読み書きも
可能です。
というよりJDOを使用します。
damePGはORマッピングを経験したことがないので
ほんとにここで苦労してます。
で早速翻訳して写経してみました。
package guestbook; import java.io.IOException; import java.util.Date; import java.util.logging.Logger; import javax.jdo.PersistenceManager; 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 SignGuestbookServlet extends HttpServlet { private static final Logger log = Logger.getLogger(SignGuestbookServlet.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); PersistenceManager pm = PMF.get().getPersistenceManager(); try { pm.makePersistent(greeting); } finally { pm.close(); } resp.sendRedirect("/guestbook.jsp"); } }
package guestbook; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManagerFactory; public final class PMF { private static final PersistenceManagerFactory pm = JDOHelper.getPersistenceManagerFactory("transactions-optional"); private PMF(){ } public static PersistenceManagerFactory get() { return pm; } }
ここまではあまり変わりませんね。
肝はここから
package guestbook; import java.util.Date; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; import com.google.appengine.api.users.User; @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Greeting { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private User author; @Persistent private String content; @Persistent private Date date; public Greeting(User author, String content, Date date) { this.author = author; this.content = content; this.date = date; } public Long getId() { return id; } 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; } }
<%@ page contentType="text/html;charset=UTF-8" language="java"%><%@ page import="java.util.List"%><%@ page import="javax.jdo.PersistenceManager"%><%@ 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.PMF"%><html> <body> <% 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> <% } %> <% PersistenceManager pm = PMF.get().getPersistenceManager(); String query = "select from " + Greeting.class.getName(); List<Greeting> greetings = (List<Greeting>) pm.newQuery(query) .execute(); 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> <% } } pm.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>
するとこんな感じになります。
まず、もうすでに紫になっていますが、
sign inをクリックします。
するとこんなダイアログが出力されます。
これはGoogleが提供する
Userクラス
UserFactoryクラスを使用しているからです。
この詳細についてはググッてください。
以外に便利です。
でここで自分のアドレスを入れます。
するとcontentに文字を入力すると
おお!!すごい!!
ってか、damePGはマニュアル通りの人間なので、
「Jspにいっぱいロジックかいたらいかんって!!」
ておもいましたので、
写経だけじゃなくてすごいわかりやすいの作りました。
普段僕がアプリを作るときのように作ってみたら・・・・。
動かない・・・・。
めっちゃ見せたかったのでがんばったのですが
ダメでした。
明日先輩に見ていただこう。
きっと解決できます。