スタンドアローンJavaアプリケーションからJNDIプロバイダへの接続 |
このプログラムも前のページと同様、指定したテーブルに対して
SELECT * FROM {テーブル名} WHERE 1=2
というSQLを発行して、
出てくるカラムの情報(ResultSetMetaDataオブジェクト)
を表示するプログラムです。
カラムの名前、データ型、小数点以下の桁数を表示します。
今度のプログラムは、自分でデータベース接続情報を定義せずに、
近くで動いているJNDIプロバイダ
に登録されているDataSourceを検索して取得します。
ここでは、JNDIプロバイダとして2つのJ2EEアプリケーションサーバ、
マクロメディアのJRun 4.0SP1と、JBoss.orgのJBoss 3.2.1を試します。
/**
* TableDefListerJndi.java
* 2003/06/07
*/
import java.sql.*;
import java.io.*;
import javax.naming.*;
import javax.sql.DataSource;
/**
* 指定したテーブルの表定義を表示するクラスです。
*/
public class TableDefListerJndi {
//static final String jndiName = "java:comp/env/jdbc/mudb";
static final String jndiName = "jdbc/mudb";
/**
* パラメータで指定された名前の表の定義を検索して表示します。
*/
public void list(String tableName)
throws SQLException, NamingException {
Context c = new InitialContext();
DataSource ds = (DataSource) c.lookup(jndiName);
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement ();
ResultSet rset = stmt.executeQuery(
"SELECT * FROM " + tableName + " WHERE 1 = 2"
);
ResultSetMetaData rsmd = rset.getMetaData();
int colCount = rsmd.getColumnCount();
for(int i=1; i<=colCount; i++){
System.out.println(rsmd.getColumnName(i) + "\t" +
rsmd.getColumnTypeName(i) + "\t" + rsmd.getScale(i));
}
rset.close();
stmt.close();
conn.close();
}
public static void main(String[] args) throws SQLException {
TableDefListerJndi lister = new TableDefListerJndi();
try {
lister.list("SHITEN");
System.out.println("正常終了");
} catch(Exception ex){
ex.printStackTrace();
}
}
}
// end.
|
プログラムは本来JNDIプロバイダによって変える必要はありませんが、
JNDI名の解決の仕方がJRunはちょっと特殊
(java:comp/envをつける必要がない)なので、
そこの部分だけ切り替えが必要な場合があります。
JNDIプロバイダへの接続情報は、
「jndi.properties」というファイルを作って、CLASSPATHの通っている位置に置くか、
Propertiesオブジェクトに情報を格納してInitialContextのコンストラクタに渡すか、
の方法があります。今回はjndi.propertiesを書く方法で試しました。
上がJRun、下がJBossに接続するときのごく標準的な
jndi.propertiesです。
java.naming.factory.initial=jrun.naming.JRunContextFactory
java.naming.provider.url=localhost:2908
java.naming.factory.url.pkgs=jrun.naming
|
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
|
(first uploaded 2003/06/08 last updated 2003/06/08, URANO398)
|