データの追加機能を作る
では、作成したSampleDataを使い、データを保存する処理を作ってみましょう。ここでは、「add.html」というHTMLページに値を入力するフォームを用意し、送信先のサーブレットで保存の処理を行うようにしてみましょう。
まずは、サーブレットを作ります。ここでは、jp.allaboutパッケージに「Gae_addServlet.java」というソースコードファイルを用意し、以下のように記述をします。
package jp.allabout;
import javax.jdo.*;
import java.io.IOException;
import java.util.*;
import javax.servlet.http.*;
@SuppressWarnings("serial")
public class Gae_addServlet extends HttpServlet {
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("can not access!!");
}
protected void doPost(HttpServletRequest request,
HttpServletResponse resp)
throws IOException {
request.setCharacterEncoding("UTF-8");
String message = request.getParameter("message");
String account = request.getParameter("account");
Date date = Calendar.getInstance().getTime();
SampleData data = new SampleData(message,account,date);
PersistenceManagerFactory pmf = PMF.get();
PersistenceManager pm = pmf.getPersistenceManager();
try {
pm.makePersistent(data);
} finally {
pm.close();
}
resp.sendRedirect("/index.jsp");
}
}
ここでは、doGetでアクセスした場合には「can not access!!」と表示するだけです。データ保存の処理はPOST送信されたときに行います。SampleDataでは、ID、メッセージ、アカウント、日時の4つの情報をプロパティに持たせますが、このうちIDは自動生成しますので不要です。また日時は現在の日時を示すDateを作成して保存します。したがって、フォームから送信してもらうのは、メッセージとアカウントの情報だけです。ここでは、"message"と"account"という名前で送られてくるものとして、getParameterで値を取り出しています。
必要な値が揃ったら、SampleDataインスタンスを作成します。そして、保存のための処理に進みます。
PersistenceManagerFactory pmf = PMF.get();
まず、PMF.getを呼び出して、PersistenceManagerFactoryインスタンスを取得します。そして、ここから一切に永続化の操作を行うPersistenceManagerクラスのインスタンスを取り出します。
PersistenceManager pm = pmf.getPersistenceManager();
getPersistenceManagerで取得したPersistenceManagerインスタンスには、永続化されたデータを操作するためのさまざまなメソッドが用意されています。保存は、以下のように行います。
try {
pm.makePersistent(data);
} finally {
pm.close();
}
makePersistentは、引数に渡したオブジェクトを永続化します(つまり、保存するということです)。そして実行後、closeでPersistenceManagerを閉じます。これでdataはデータストアに保管され、いつでも取り出して利用できるようになります。案外、簡単な操作ですね。