Servlet日記(1999/04/25)

本日の成果

 前回までで掲示板もどきの雛形のようなもの(^^;)ができたので、そのデータをデータベースに保存することを考えてみました。データベースとしては、前々から興味があった、オブジェクトデザイン社のObjectStore PSEを使ってみました。まず最初に、一つの文字列からなるデータを保存することから試してみました。

 いろいろ参考にしながら次のようなプログラムをひねり出したのですが、データの登録のところで例外が起こってしまいます。ポストプロセッサを実行していないのが原因かと思いましたが、やってみるとHttpServletに対してもポストプロセッサを実行せよと言われ、何か違うような気がしています。データを表すクラスを分離するといいのかもしれません。

 休日にちょっと調べて試すには荷が重そうなので、何か手がかりが見つかるまで、これはおいておくことにします。

import  COM.odi.*;
import  COM.odi.util.*;
import  java.io.*;
import  java.util.*;
import  javax.servlet.*;
import  javax.servlet.http.*;

public class Pse1 extends HttpServlet {
    private Database db = null;
    static int listCount = 0;

    public void doGet(
        HttpServletRequest req,
        HttpServletResponse res
    ) throws ServletException, IOException
    {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        out.print("<html><head><title>PSE Test Servlet</title></head>");
        out.print("<body><form method=post>data1:<input type=text name=\"data1\"><br>");
        out.print("<input type=submit name=\"btn\" value=\"Add\">");
        out.print("<input type=submit name=\"btn\" value=\"List\"></form></body></html>");
    }

    public void doPost(
        HttpServletRequest req,
        HttpServletResponse res
    ) throws ServletException, IOException
    {
        OSHashtable     addList;

        if (req.getParameter("btn").equals("Add")) {
            Transaction tr = Transaction.begin(ObjectStore.UPDATE);
            addList = (OSHashtable)db.getRoot("addList");
            addList.put(new Integer(listCount++), req.getParameter("data1"));
            tr.commit();
            doGet(req, res);
        } else {
            res.setContentType("text/html");
            PrintWriter out = res.getWriter();
            out.println("<html><head><title>List Data</title></head><body><ul>");

            Transaction tr = Transaction.begin(ObjectStore.READONLY);
            addList = (OSHashtable)db.getRoot("addList");
            Enumeration en = addList.elements();
            while (en.hasMoreElements())
                out.println("<li>" + (String)en.nextElement());
            tr.commit();

            out.println("</ul></body></html>");
        }
    }

    public void init(ServletConfig config) throws ServletException {
        super.init(config);

        Session.create(null, null).join();
        try {
            db = Database.open("c:/servPse.odb", ObjectStore.OPEN_UPDATE);
        } catch (DatabaseNotFoundException e) {
        }
        if (db == null) {
            db = Database.create("c:/servPse.odb",
                    ObjectStore.ALL_READ | ObjectStore.ALL_WRITE);
            Transaction tr = Transaction.begin(ObjectStore.UPDATE);
            db.createRoot("addList", new OSHashtable());
            tr.commit();
        }
    }

    public void destroy() {
        db.close();
        Session.getCurrent().terminate();
    }

本日の教訓

 やはり素人は、無理せずのんびりやっていくのがいいと、痛感しました。

参考文献

いつもの、Jave Servlet Programming, Java Servletに加えて、

  1. 萩本順三, 福村真奈美, 不破康人, 最新オブジェクト指向技術応用実践, エーアイ出版, 1998

Servlet日記(1999/04/03) Servlet日記の目次 Servlet日記(1999/07/10)