ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

Seasar用のJNDI文字列の切り替えクラスを作ったよ

仕事ではアプリケーションサーバーが、本番WebSphere、開発Tomcatになっています。
WebSphereの開発環境であるRationalApplicationDeveloperはライセンスが必要でお金がかかります。
せっかくフリーの物があるのでそれを使ったほうが経費削減になるしお得です。


アプリケーションサーバーが異なるので設定も異なってきます。
JNDIに関してはWebSphereの場合、「jdbc/hoge」でいいのですが、
Tomcatの場合、「java:comp/env/jdbc/hoge」と「java:comp/env」が必要です。


動かす環境によってその都度JNDIの文字列を変更するのがめんどくさいので、自動で切り替えてくれるクラスを作りました。
環境はSeasar2.4です。


JNDIの切り替えクラス

import test;

public class JndiSwitcher {

    private static final String ENC_PREFIX = "java:comp/env/";

    /**
     * JNDIの文字列を切り替えます。
     * WebSphereの場合、jdbc/hoge、Tomcatの場合、java:comp/env/jdbc/hogeの形にします。
     * 引数にはjava:comp/env/jdbc/hogeの値を想定しています。
     * @param name JNDI名
     * @return ret JNDIの結果
     */
	public static String doSwitch(String name) {

		String ret;

		try {
			// WebSphere
			Class.forName("com.ibm.wsspi.webcontainer.WebContainer");
			ret = name.replaceAll(ENC_PREFIX, "");
		}
		catch (ClassNotFoundException e) {
			// Tomcat
			ret = name;
		}

		// message
		System.out.println(String.format("JNDIは[%s]が設定されました", ret));

		return ret;
	}
}


jdbc.dicon

<!-- from JNDI -->
<component name="DataSource"
	class="javax.sql.DataSource">
	@org.seasar.extension.j2ee.JndiResourceLocator@lookup(@test.JndiSwitcher@doSwitch("java:comp/env/jdbc/hoge"))
</component>


Seasar 2 徹底入門 SAStruts/S2JDBC 対応Seasar 2 徹底入門 SAStruts/S2JDBC 対応
竹添 直樹

翔泳社 2010-04-20
売り上げランキング : 10315

Amazonで詳しく見る