Javaです。
まずは、JBossのほうに設定。deployディレクトリに設定ファイルであるpostgres-ds.xmlを入れます。
このdsファイルは、docファイルに各種データベース用のサンプルがあるので、例えばMySQLとつなぎたいとかOracleとつなぎたいという場合でも簡単にできます。
postgres-ds.xml
<datasources>
<local-tx-datasource>
<jndi-name>PostgresDS</jndi-name>
<connection-url>jdbc:postgresql://localhost:5454/test</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<user-name>postgres</user-name>
<password>postgres</password>
<metadata>
<type-mapping>PostgreSQL 7.2</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
ではではJavaで実装。
ちょっとクラス分けしてみました。
まずはコネクションを取得するためのクラス。
ConnectionManager.java
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class ConnectionManager {
/**
* コネクションを取得するメソッド
* @return Connection
* @throws SQLException
* @throws NamingException
*/
public Connection getConnection() throws SQLException, NamingException {
InitialContext icx = new InitialContext();
//postgres-ds.xmlに書いたJNDI名を書く。
//JBossを起動したときにコンソールに表示されるので、それを書くと尚確実。
DataSource ds = (DataSource) icx.lookup("java:PostgresDS");
Connection conn = ds.getConnection();
return conn;
}
}
こちらはちゃんと実行できるかどうかのテスト用Servlet。
ConnectionGetSample.java
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ConnectionGetSample extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 準備
ConnectionManager cm = new ConnectionManager();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
// SQL文(ここではテストでpostgresユーザーを出すSQLにしてみる)
String sql = "select * from pg_user";
try {
// コネクション取得。
// ConnectionManagerクラスでthrowしてるExceptionを
// こっちでcatchする。
conn = cm.getConnection();
// SQL実行
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
// 結果取得→出力
while (rs.next()) {
System.out.println(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (NamingException e) {
e.printStackTrace();
} finally {
// クローズ処理
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
で、できました。