GWT 2.0のDevelopment Modeにおいて、JNDI経由でMySQLを使う方法

Google Web Toolkit(以下GWT)で開発をするときに、Google Plugin for Eclipseを利用するとEclipse上からGWTのコードを実行でき非常に便利です。
GWT2.0から新しく導入されたDevelopment Modeは、Javaで記述されたGWTのコード(正確にはJavaのbytocode)をブラウザのプラグインで直接実行させるという非常にクレイジーな方法を採用しており、このおかげでJavaのコードをJavaScriptにコンパイルせずにブラウザ上で直接実行できるようになりました。
以下、GWT 2.0で、JNDI経由でMySQLを使う方法。ちなみに、設定ファイルをちょっと変更するだけで、PostgreSQLなど他のDBでも利用できます。
まず、Eclipse上でGWTのプロジェクトを作成します。「Use Google Web Toolkit」にチェックが入っており、「Use Google App Engine」にチェックが入っていないことを確認して下さい。
Google Plugin for Eclipseを導入してない方はこちらの私の記事でご確認ください。

次に、war/WEB-INF/libにjetty-naming-6.1.11.jarとjetty-plus-6.1.11.jar、さらにmysql-connector-java-5.1.12-bin.jar(これは使いたいDB用のJDBC)の3ファイルをコピーします。
*jetty-namingやjetty-plus、mysql-connector-javaのバージョンに理由がある訳ではないので、少しぐらいバージョンが違っても動くと思います。
war/WEB-INFの直下にjetty-web.xmlというファイルを作成して、以下のように記述します。DBのホスト名、ポート番号、ユーザ名、パスワードは適宜設定してください。
< ?xml version="1.0" encoding="UTF-8"?> < !DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <configure class="org.mortbay.jetty.webapp.WebAppContext"> <new id="logstore" class="org.mortbay.jetty.plus.naming.Resource"> <arg>java:comp/env/jdbc/mysqldb</arg> <arg> <new class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> <set name="Url">jdbc:mysql://192.168.0.111:3306/DB名</set> <set name="User">DBのユーザ名</set> <set name="Password">DBのパスワード</set> </new> </arg> </new> </configure>
GWTのサーバー側のRemoteServiceServletを拡張したServletクラス内に以下の記述を追加すると、このクラス内からds.getConnection()でSQLのJDBCコネクションが取得できます。
private static final String LOOKUP_DB = "java:comp/env/jdbc/mysqldb"; //$NON-NLS-1$
private static DataSource ds = null;
@Override
public void init() throws ServletException {
super.init();
try {
Context ctx = new InitialContext();
ds = (DataSource) ctx.lookup(LOOKUP_DB);
} catch (NamingException e) {
e.printStackTrace();
}
}
良くわからない人は、Google Web Toolkit 勉強会 in 京都 (#gwt_kyoto)に来るといいよ!


