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にいっぱいロジックかいたらいかんって!!」
ておもいましたので、
写経だけじゃなくてすごいわかりやすいの作りました。
普段僕がアプリを作るときのように作ってみたら・・・・。
動かない・・・・。

めっちゃ見せたかったのでがんばったのですが
ダメでした。

明日先輩に見ていただこう。
きっと解決できます。