自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

2010年4月2日金曜日

GAE JDOサンプル

この記事でGEAデータストーレージの利用サンプルを紹介します。

GAEでデータストアの API 標準としてサポートされているのは、JDO(Java Data Objects)と JPA(Java Persistence API)の 2 つです。これらのインターフェースは、複数の Java 永続性標準のオープン ソース実装である DataNucleus Access Platform で、App Engine データストア用のアダプタを使って提供されます。

このサンプルでは、JDO インターフェースを使用して、簡単なデータ処理を説明します。

まずはサンプル機能はすごく簡単なので、一つのテキストボックスと三つのボタンからなります。テキストに何かを入力して、【追加】ボタンを押したら、入力された内容をデータストアに追加します。【削除】ボタンを押したら、データストアに保存しているデータを全部消します。【更新】ボタンを押したら、全てのデータの後ろに【*】を追加します。

このサンプルは四つのファイルで実現します。
jdotest.jsp:クライアントJSPページ
JDOTestServlet.java:クライアントリクエストの処理サーブレット
SystemUser.java:システムユーザーデータクラス
PMF.java:データ処理クラス

JDOデモURL:http://endiasoft.appspot.com/jdotest.jsp

jdotest.jsp
<h1>JDOテスト</h1>
<form name="frmMain" id="frmMain" action="/jdotestservlet" method="post">
<input id="content" name="content" type="text" size="20">
<button name="cmd" onclick="button_onclick('add');" value="add">追加</button>
<button name="cmd" onclick="button_onclick('del');" value="del">削除</button>
<button name="cmd" onclick="button_onclick('upd');" value="upd">更新</button>
<input id="hdnValue" name="hdnValue" value="0" type="hidden" /></form>
<%
PersistenceManager pm = PMF.get().getPersistenceManager();
String query = "select from " + SystemUser.class.getName();
List<SystemUser> systemUsers = (List<SystemUser>) pm
.newQuery(query).execute();
if (systemUsers.isEmpty())
{
%>
<p>The guestbook has no messages.</p>
<%
} else
{
for (SystemUser g : systemUsers)
{
%>
<blockquote><%= g.getContent() %></blockquote>
<%
}
}
pm.close();
%>
JDOTestServlet.java
package jdo;
import java.util.*;
import java.io.IOException;
import javax.servlet.http.*;
import java.util.logging.Logger;
import javax.jdo.PersistenceManager;
@SuppressWarnings("serial")
public class JDOTestServlet extends HttpServlet
{
private static final Logger log = Logger.getLogger(JDOTestServlet.class
.getName());
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException
{
log.info("JDOTestServlet Start");
String hndCmd = req.getParameter("hdnValue");
String content = req.getParameter("content");
Date date = new Date();
if (hndCmd.equals("add"))
{
SystemUser user = new SystemUser(content, date);
PersistenceManager pm = PMF.get().getPersistenceManager();
try
{
pm.makePersistent(user);
} finally
{
pm.close();
}

} else if (hndCmd.equals("del"))
{
PersistenceManager pm = PMF.get().getPersistenceManager();
String query = "select from " + SystemUser.class.getName();
List execute = (List) pm
.newQuery(query).execute();
List systemUsers = execute;
if (!systemUsers.isEmpty())
{
try
{
for (SystemUser g : systemUsers)
{
pm.deletePersistent(g);
}
}
finally
{
pm.close();
}
}
} else if (hndCmd.equals("upd"))
{
PersistenceManager pm = PMF.get().getPersistenceManager();
String query = "select from " + SystemUser.class.getName();
List execute = (List) pm
.newQuery(query).execute();
List systemUsers = execute;
if (!systemUsers.isEmpty())
{
try
{
for (SystemUser g : systemUsers)
{
g.setContent(g.getContent() + "*");
pm.makePersistent(g);
}
}
finally
{
pm.close();
}
}
}
resp.sendRedirect("/jdotest.jsp");
log.info("JDOTestServlet End");
}
}
SystemUser.java
package jdo;
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;
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class SystemUser
{
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String content;
@Persistent
private Date adddate;
public SystemUser(String content, Date adddate)
{
super();
this.content = content;
this.adddate = adddate;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public Date getAdddate()
{
return adddate;
}
public void setAdddate(Date adddate)
{
this.adddate = adddate;
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
}
PMF.java
package jdo;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
public class PMF
{
private static final PersistenceManagerFactory pmfInstance = JDOHelper
.getPersistenceManagerFactory("transactions-optional");
private PMF()
{
}
public static PersistenceManagerFactory get()
{
return pmfInstance;
}
}

0 件のコメント:

コメントを投稿

ホームページ