WTP&Tomcatのデータソースの設定

なんか、そこらじゅうでデータソースのlookupに失敗するってのを聞くので、試してみる。
ついでに、WTPをさわってみる。そろそろ慣れとかないと。


環境


Tomcatが5.0の場合は、Resourceのパラメータへの指定方法が違ってるので、
参考にならないはず。
あと、WTPは直感オンリーで触っていくので、間違ってても知らん。

サンプルプロジェクトの作成

Tomcatのデータソースの指定方法は(知ってる限りで)3種類あるけど、
ベーシックなserver.xmlへの指定でやってみる。


で、まずはプロジェクトの作成から。久しぶりにServletを1から作成してみる。
なつかしひ。


プロジェクトを作成しようとすると、Web→動的Webプロジェクトなんてのがあるので、
これて行ってみる。名前は適当。サーバもそのときに設定する。
あとはデフォルトのまんま。
作成すると、J2EEパースペクティブなるものに出会える。

サーバの作成

プロジェクト作成時に新規サーバで指定したのに、それがサーバのとこに出てこない。
仕方ないので、手動で作成する。


サーバー(サーバじゃないところがミソ)のとこで新規作成→その他とする。
ウィンドウでサーバー→サーバーを選択してTomcat5.5用のサーバを設定する。
んで、サンプルプロジェクトを追加して終了する。
よくわからないけど、これでいいっぽい。


サーバを作成すると、サーバの情報(ホームがどこだとか)が見れないんだけど、
こんなもんなのかね?

ServletやらJSPやらの作成

久しぶりのServletの作成。
別に必要ないけど、無駄にJSPServletJSPとやって、
Servlet内でデータソースが取得できるかを試す。


Servletも、ウィザードに従ってくと簡単にできる。
InitParameterまで指定できるなんて、ちょい感激。


できたのは、こんなの(データソースの部分はあとで)。
JSPはどーでもいいので省略。


public class TestServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

public TestServlet() {
super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String next = getInitParameter("next");
request.getRequestDispatcher(next).forward(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

server.xmlの設定

ここからが本題。
server.xmlにデータソースを設定する。


まずはserver.xmlだけど、WTPは直でTomcatを動かすのではなく、webappをコピーするとか
なんたらかんたら・・・と聞いたことがあるので、インストールしたTomcatのconf/server.xml
いじっても有効なのかどうか、まったくわからん。




と思ってたら、ワークスペースに作成したサーバーの中に、server.xmlがあるじゃん。
こいつでいけると勝手に確信し、編集する。


データソースはマニュアル通りに要素を追加するだけ。
今回はHSQLDBを使うので、このようになった。


<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="-1"
username="sa" password="" driverClassName="org.hsqldb.jdbcDriver"
url="jdbc:hsqldb:hsql://localhost" />

Connection取得処理の追加

設定は終わったので、Servletにデータソースとそのコネクションを取得する処理を追加する。
といっても↓のメソッドを追加して、コールした結果をsysoutするだけ。
# こんなコード、良い子はマネをしちゃいかん。


private Connection getConnection() {
try {
InitialContext ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/TestDB");
return ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


あとは、ドライバのjarファイルをどっかに入れるんだが・・・どこに置けばいいかわからん。
ワークスペースのサーバにはそれっぽいフォルダはないので、
とりあえず、Tomcatインストールディレクトリのcommon/libに置いてみる。

実験

サーバを起動して、Servlet内でデータソースが取得できているかを確認する。
サーバの起動は、サーバーviewから起動するだけ。


そして、ブラウザからアクセスすると・・・




org.apache.tomcat.dbcp.dbcp.PoolableConnection@158f9d3
と、コンソールに表示された。


なんかつまらないけど、一発でできちゃったっぽいです。
というわけで終了。

終わり

WTPはクセがあるけど、慣れてくるといい感じなのかも。
特にXMLエディターが素敵な気がする。
にしても、WTPのせいか知らんけど、Eclipseがめっちゃ重くなるっす。


あと、Servletのウィザードはあって、なぜFilterのウィザードはないんだー!!
と言ってみる。まぁ、いらないけどさ。