JBoss EAP と PostgreSQL を接続した際のメモ

JBoss EAPPostgreSQL を接続した際のメモを整理します。


  • 以下のページを参考に PostgreSQL を導入

    • Fedora 34 : PostgreSQL 13 : インストール
      (補足)導入、初期設定、各コマンドなどについて簡潔に整理されていて参考になりました。
      (補足)ここではデータベース名 : demo、ユーザー名 : demo_user を指定しています。


パスワード認証を許可するためには、以下のようにMETHODをmd5に変更します。

# tail /var/lib/pgsql/data/pg_hba.conf
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5


$ psql -U demo_user -h localhost -d demo
ユーザ demo_user のパスワード: 
psql (13.6)
SSL 接続 (プロトコル: TLSv1.3、暗号化方式: TLS_AES_256_GCM_SHA384、ビット長: 256、圧縮: オフ)
"help"でヘルプを表示します。

demo=> 

(補足)上記環境は SSL を有効にしています。


  • テスト用 DB を作成し、検索が可能なことを確認 (超適当な SQL 文ですが…)
create table aaa ( bbb varchar(100), ccc varchar(100) );
insert into aaa values ( '0001', 'テスト0001' );
select * from aaa;

\q



  • JDBC ドライバをコアモジュールとして導入
module add --name=com.postgresql --resources=/usr/share/java/postgresql-42.4.0.jar --dependencies=javaee.api,sun.jdk,ibm.jdk,javax.api,javax.transaction.api

(補足)上記例では入手した JDBC ドライバを /usr/share/java へ配置しています。


  • JDBC ドライバを登録
/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=com.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)


  • データソースを作成
data-source add --name=PostgresDS --jndi-name=java:jboss/PostgresDS --driver-name=postgresql --connection-url=jdbc:postgresql://localhost:5432/demo --user-name=demo_user --password=<demo_userのパスワード> --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter


  • 以下のような JSP を用意して PostgreSQL から検索が可能なことを確認
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jdbc postgresql demo</title>
</head>
<body>
<%
Context ctx = null;
DataSource ds = null;
Connection con = null;
Statement stmt = null;
ResultSet rset = null;

try{
    ctx = new InitialContext();
    ds = (DataSource)ctx.lookup("java:jboss/PostgresDS");
    con = ds.getConnection();

    stmt = con.createStatement();
    rset = stmt.executeQuery("SELECT bbb,ccc FROM aaa");

    while(rset.next()){
        out.println("SQL実行結果 : " + rset.getString("CCC"));
    }

    try { rset.close(); } catch (Exception ignore) {}
    try { stmt.close(); } catch (Exception ignore) {}

    con.close();

} catch (Exception e) {
    e.printStackTrace();
}

%>
</body>
</html>


  • JSP へアクセスし、以下の画面が表示されることを確認
SQL実行結果 : テスト0001


上記手順が何かしら参考になれば幸いです。