Javaによる Webアプリケーション入門 第8回 JDBC (2) Javaによる Webアプリケーション入門 第8回
ここでの内容 JDBC を使った Servlet について学ぶ。 JNDI と DataSource を使ったプログラミングスタイルについて学ぶ。 コネクション・プーリングの手法について学ぶ。
JDBC を使った Servletの コンパイル 次のパッケージはJ2SEには入っていない。 javax.servlet パッケージ javax.servlet.http パッケージ Tomcat にはこのパッケージが含まれているので、classpath に含めてコンパイル javac –classpath “%CATALINA_HOME%\common\lib\servlet.jar; %HSQLDB_HOME%\lib\hsqldb.jar” JDBCTestServlet.java
TomcatにWebアプリケーションを置く %CATALINA_HOME/webapps/ に配置 ひとつのファイル (war ファイル) にまとめても良い。 test/ | |-- WEB-INF/ --- web.xml 必須 | |- classes/ Servlet ・Beanなどの | クラス | |- lib/ 使用するライブラリ |-- loop.jsp JSP
Tomcat への配置 Servlet はコンパイルして、WEB-INF/classes に置く。 JDBCドライバを WEB-INF/lib に置く。 WEB-INF/ --- web.xml |- classes/ --- LoopServlet.class |- lib/ --- hsqldb.jar (JDBCドライバ)
Connection の取得 JDBC を使うのは、まず Connection の取得が必要。 JNDI と DataSource を使う方法もある。
JNDI Java で ディレクトリサービス (LDAPなど) にアクセスするための API 抽象的な「名前」をキーにしてオブジェクトを取得できる。 オブジェクトの作成に必要な情報は設定ファイルに記述する。 JDBC, EJB, JavaMail などでも利用される。
サンプルプログラム // Context (ディレクトリ), InitailContext (ルート) Context context = new InitialContext(); // 名前に対応する DataSource を取得 DataSource ds = (DataSource)context.lookup( "java:comp/env/jdbc/library"); // Connection を取得 // ドライバ名、URL、ユーザ名、パスワードは設定 // ファイルに Connection con = ds.getConnection();
JNDI を使うと何が良いのか? プログラムに記述するのは「名前」だけ。 JDBCドライバ、URL、ユーザ名、パスワードといった情報は server.xml や web.xml に記述する。 データベースを変更しても、設定ファイルの変更だけで済む。 プログラムの保守性が高まる。
web.xml の記述 <resource-ref> <res-ref-name>jdbc/library</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
server.xml の記述 (1) %CATALINA_HOME%\conf フォルダにある。 Tomcat 全体に関する設定や、Webコンテナの実装に依存するような内容を記述 このファイルに、データベースへの接続に必要な情報を記述する。
server.xml の記述 (2) <Context path=“/test” docBase=“test” reloadable=“true”> <Resource name=“jdbc/library” auth=“Container” type=“java.sql.DataSource”/> <ResourceParams name=“jdbc/library”> (JDBCドライバ、URL、ユーザ名、パスワード) </ResourceParams> </Context>
Tomcat への配置 %CATALINA_HOME%\conf\server.xml にデータベースの設定を記述した。 そこで、JDBCドライバが含まれている jar ファイルを、%CATALINA_HOME%\common\lib にコピーする。
コネクション・プーリング Connection の取得 = 「重い」処理 コネクション・プーリング アプリで Connection が close されたら元に戻す データベースに早くアクセスできる
DBCP Jakarta Project によるコネクション・プーリングの機能 Tomcat に組み込まれているので、server.xml と web.xml の編集だけで利用できる。 DBCP のクラスを操作することもできる JNDI / DataSource を利用する
server.xml の例 <Context path=“/test” docBase=“test” reloadable=“true”> <Resource name=“jdbc/library” auth=“Container” type=“java.sql.DataSource”/> <ResourceParams name=“jdbc/library”> (JDBCドライバ、URL、ユーザ名、パスワード) (ためておく Connection の数などを指定) </ResourceParams> </Context>