感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

【プログラミング 40時間目】サーブレットでデータソースとlookup

<スポンサーリンク>

長かったサーブレット/JSPの基礎固めももうすぐ終わる。
この本で勉強してよかった。

昔、10日で〜とか、サーブレットサンプル集的な本で勉強した時は、肝心の設定の説明とか、環境構築の説明が省略されていて、全く理解できなかった。

初心者が1番つまづくのは、環境構築や設定ファイルなのだ。
どこのディレクトリにどんなファイルを置けばいいのか。そして、それはなぜなのか。

そういうのを説明しない入門書はクソだ。
初心者の気持ちを何もわかっていない。そういう本で勉強すると、余計に混乱して、プログラミングが嫌いになる。

基礎からのサーブレット/JSPは、「初心者がプロになるための硬派な教科書」という明確なスタンスの元、手抜きなしに説明の省略もなしに、最後までしっかりとした説明を貫いてくれた。

下手にサンプルを載せて中身が無い類書とは一線を隠す。
著者の宮本信二さんには心から感謝したい。この本のおかげでタイトル通り、サーブレットの基礎を学ぶことができました。

一日10万とかかかる研修の100分の1の値段で10倍くらいの効果があると思います。
てゆうか、集合研修とか廃止して、こういう本を自習させたほうが絶対いいと思うんだけど。
研修が1番コストパフォーマンスが悪い。あんなんでプログラミングができるようになるはずがない。


★★★

・コネクションプールでは、あらかじめコネクションを複数取得しておき、実施に利用する時は新たに接続しにいくのではなく、プールの中から割り当てる

・コネクションプールなどの機能を提供する技術は「データソース」と呼ばれる。

・JNDI(Java Naming and Directory Interface)はネーミングサービス及びディレクトリサービスを利用するためのAPI

・ネーミングサービスに登録されたオブジェクトをアプリケーションから検索して取得する処理はルックアップと呼ばれる。

Tomcatでデータソースを登録する方法
・コンテキストファイルに要素を登録するのが一番簡単
→WebアプリケーションのMETA-INFディレクトリにcontext.xmlを作成する。
 EclipseTomcatプラグインを利用している場合は、/conf/Catalina/localhost/以下にある<プロジェクト名>.xmlを編集する。

以下のような要素を追加記述する。

<Context>
	
	<Resource name="jdbc/myds" auth="Container"
				type="javax.sql.DataSource"
				username="sa" password=""
				driverClassName="org.hsqldb.jdbcDriver"
				url="jdbc:hsqldb:hsql://localhost"/>

</Context>

■Resource要素に指定する値、属性の説明
name:リソースにつける名前
type:クラス名(インターフェース名)
auth:認証のタイプ
username:ユーザ名
password:パスワード
driverClassName:JDBCドライバのクラス名
url:JDBCのURL

データソースにアクセスするサンプル

package kisokara;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;

import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

public class DataSourceTest extends HttpServlet {
	
	public void doGet(HttpServletRequest requset,
						HttpServletResponse response)
						throws ServletException, IOException {
		
		response.setContentType("text/plain; charset=Windows-31J");
		PrintWriter out = response.getWriter();
		
		try {
			InitialContext ctx = new InitialContext();
			DataSource ds = 
					(DataSource)ctx.lookup("java:comp/env/jdbc/myds");
			Connection con = ds.getConnection();
			out.println("con=" + con);
		} catch(Exception e) {
			throw new ServletException(e);
		}
	}
}

結果はブラウザにこう表示される。

con=jdbc:hsqldb:hsql://localhost, UserName=SA, HSQL Database Engine Driver

・javax.naming.InitialContextはJNDI経由でリソースを取得する場合の窓口となるクラス

・lookup()メソッドの引数には取得するオブジェクトの名前を指定する。

"java:comp/env"まで決まり文句と考える。