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(); } } } } }
で、できました。