resinインストールからMYSQLアクセスまで

スポンサーリンク
Linux
スポンサーリンク

JAVA初心者による記録です。
幾度かresinを利用したMYSQLにアクセスるjavaプログラムを作成したが、パソコンの内臓ディスク障害により情報が紛失した。
思い出しながら、resinインストールから動作確認、JDBC設定、MYSQLへのアクセスまでの一連の作業を記載する。

スポンサーリンク

resinをインストールする。

ソースファイルをダウンロードする。

2025/07/23現在WEBで検索するがダウンロードURLにアクセスできないたため、ダウンロードできるURLが存在する様になったら無料版をダウンロードして下さい。
resin-4.0.66.tar.gzはmakeが失敗するので、新しいバージョンをダウンロードする必要がある。

configureが失敗した。

以下のエラーになったらjavaの開発パッケージ(devel)がインストールされていないのでインストールしてください。

# tar xvfz resin-4.0.67.tar.gz
resin-4.0.67/automake/
resin-4.0.67/compat/
resin-4.0.67/conf/
resin-4.0.67/conf/sample/
resin-4.0.67/contrib/
	:
resin-4.0.67/win32/resinssl.dll
resin-4.0.67/win64/isapi_srun.dll
resin-4.0.67/win64/resin_os.dll
resin-4.0.67/win64/resinssl.dll
#
# cd resin-4.0.67
# ./configure --prefix=/usr/local/resin --enable-64bit --enable-ssl
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
 :
checking if /usr/bin/cp accepts -u... yes
configure: error: 

 *** Can't find JNI directory in JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.x86_64/bin
 *** JNI is expected in /usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.x86_64/bin/include/linux

#

 

インストールされているjavaパッケージを確認する。

やはりjava-17-openjdk-develがインストールされていない。

# rpm -aq | grep ^java
javapackages-filesystem-6.0.0-7.el9_5.noarch
javapackages-tools-6.0.0-7.el9_5.noarch
java-17-openjdk-headless-17.0.14.0.7-2.el9.x86_64
java-17-openjdk-17.0.14.0.7-2.el9.x86_64
java-kolabformat-1.2.0-12.el9.x86_64
#

 

java-17-openjdk-develをインストールする。

resinのコンパイルにjavaのincludeファイルの情報などが必要なためか開発パッケージ(devel)をインストールする。

# yum -y install java-17-openjdk-devel
メタデータの期限切れの最終確認: 2:45:43 前の 2025年03月08日 06時45分18秒 に実施しました。
依存関係が解決しました。
===================================================================================================================================
 パッケージ                             アーキテクチャー        バージョン                            リポジトリー           サイズ
===================================================================================================================================
インストール:
 java-17-openjdk-devel                  x86_64                  1:17.0.14.0.7-2.el9                   devel                  4.7 M

トランザクションの概要
===================================================================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 4.7 M
インストール後のサイズ: 8.9 M
パッケージのダウンロード:
java-17-openjdk-devel-17.0.14.0.7-2.el9.x86_64.rpm                                                 6.2 MB/s | 4.7 MB     00:00
-----------------------------------------------------------------------------------------------------------------------------------
合計                                                                                               3.3 MB/s | 4.7 MB     00:01
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
  準備中           :                                                                                                           1/1
  インストール中   : java-17-openjdk-devel-1:17.0.14.0.7-2.el9.x86_64                                                          1/1
  scriptletの実行中: java-17-openjdk-devel-1:17.0.14.0.7-2.el9.x86_64                                                          1/1
  検証中           : java-17-openjdk-devel-1:17.0.14.0.7-2.el9.x86_64                                                          1/1

インストール済み:
  java-17-openjdk-devel-1:17.0.14.0.7-2.el9.x86_64

完了しました!
#

 

configureとmakeとinstallを実行する。

今回nginxのバックエンドでresinが動作するため(nginxからは平文でresinと送受信する)、sslを有効化は不要であるが定義してみる。

# ./configure --prefix=/usr/local/resin --enable-64bit --enable-ssl
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
	:
config.status: creating bin/resinctl
config.status: executing depfiles commands
config.status: executing libtool commands


Resin Configuration Summary:

  RESIN       : 4.0.67
    home      : /usr/local/resin
    root      : /usr/local/resin
    conf      : /usr/local/resin/conf
    log       : /usr/local/resin/log
    plugins   : common resin_os
    init      : /etc/rc.d

  JAVA_HOME   : /usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.x86_64

  JNI         : 64-bit
    include       : -I/usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.x86_64/include -I/usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.x86_64/include/linux
    CFLAGS        :
    cflags_shlib  : -fpic
    ld_shlib      : gcc
    ldflags_shlib : -shared -fPIC -m64
    libs_shlib    :
    epoll() for keepalives


#
# make
make[1]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src' に入ります
for dir in common resin_os ; do (cd $dir; make); done
make[2]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src/common' に入ります
gcc -c -I/usr/include -g -O2 -DEPOLL -D_POSIX_PTHREAD_SEMANTICS -DB64 -pthread -fPIC -fno-omit-frame-pointer -O2 -DHAS_SOCK_TIMEOUT -DHAS_SENDFILE -DHAS_SPLICE -DPOLL -DHAS_JVMTI  -fpic  stream.c
	:
gcc -shared -fPIC -m64 -o libresin_os.so boot.o java.o jni_os.o jni_jvmti.o jni_socket.o memory.o std.o -lpthread -lrt -lc
make[2]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src/resin_os' から出ます
make[1]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src' から出ます
#
# make install
make[1]: ディレクトリ '/usr/local/src/resin/resin-4.0.67' に入ります
make[1]: 'install-exec-am' に対して行うべき事はありません.
make[1]: 'install-data-am' に対して行うべき事はありません.
make[1]: ディレクトリ '/usr/local/src/resin/resin-4.0.67' から出ます
Installing Resin root /usr/local/resin.
Installing Resin root subdir /usr/local/resin/project-jars.
updated /usr/local/resin/project-jars
Installing Resin root subdir /usr/local/resin/webapps.
updated /usr/local/resin/webapps
Installing Resin root subdir /usr/local/resin/webapp-jars.
cp: 'webapp-jars/*' を stat できません: そのようなファイルやディレクトリはありません
skipped webapp-jars
Installing Resin root subdir /usr/local/resin/endorsed.
updated /usr/local/resin/endorsed
Installing Resin root subdir /usr/local/resin/resin-inf.
cp: 'resin-inf/*' を stat できません: そのようなファイルやディレクトリはありません
skipped resin-inf
Installing Resin root subdir /usr/local/resin/app-inf.
cp: 'app-inf/*' を stat できません: そのようなファイルやディレクトリはありません
skipped app-inf
Installing Resin root subdir /usr/local/resin/doc.
Installing Resin home /usr/local/resin.
Installing Resin home subdir /usr/local/resin/libexec64.
cp: 'libexec64/*' を stat できません: そのようなファイルやディレクトリはありません
skipped libexec64
Installing Resin home subdir /usr/local/resin/bin.
updated /usr/local/resin/bin
Installing Resin home subdir /usr/local/resin/lib.
updated /usr/local/resin/lib
Installing Resin log /usr/local/resin/log.
Setting /usr/local/resin/bin/resinctl executable.
Setting /usr/local/resin/bin/resin.sh executable.
Installing Resin conf /usr/local/resin/conf.
Installing Resin conf subdir /usr/local/resin/conf/keys.
cp: 'keys/*' を stat できません: そのようなファイルやディレクトリはありません
skipped keys
Installing Resin conf subdir /usr/local/resin/conf/licenses.
cp: 'licenses/*' を stat できません: そのようなファイルやディレクトリはありません
skipped licenses
Installing Resin conf file /usr/local/resin/conf/resin.xml.
Installing Resin conf file /usr/local/resin/conf/resin.properties.
Installing Resin conf file /usr/local/resin/conf/app-default.xml.
Installing Resin conf file /usr/local/resin/conf/cluster-default.xml.
Installing Resin conf file /usr/local/resin/conf/health.xml.
Installing Resin init.d script /etc/rc.d.
make[1]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src' に入ります
Installing configured Resin plugins common resin_os
make[2]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src/common' に入ります
Installing plugin common
make[2]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src/common' から出ます
make[2]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src/resin_os' に入ります
Installing plugin resin_os
cp libresin_os.so /usr/local/resin/libexec64
make[2]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src/resin_os' から出ます
make[1]: ディレクトリ '/usr/local/src/resin/resin-4.0.67/modules/c/src' から出ます
#

 

javaの環境変数を設定する。

JAVA_HOME変数やRESIN_HOME変数を設定する。

# vi /etc/profile /etc/profile_org
#
# vi /etc/profile
#
# diff /etc/profile_org /etc/profile
8a79,83
>
> export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.x86_64
> export PATH=$PATH:$JAVA_HOME/bin
> export CLASSPATH=.:$JAVA_HOME/lib
> export RESIN_HOME=/usr/local/resin
#
# source /etc/profile
#

 

resinを起動する。

rootユーザでインストールすると、resinの起動と停止を行うシェルが以下にインストールされる。
  /etc/rc.d/resin
resinを起動する。

# chmod 755 /etc/rc.d/resin
#
# /etc/rc.d/resin start
Starting resin: .
#
# ps -fea | grep java
root      237142       1 25 21:33 pts/0    00:00:02 /usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.x86_64/bin/java -Dresin.watchdog=app-0 -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Djava.awt.headlesslib=true -Dresin.home=/usr/local/resin/ -Dresin.root=/usr/local/resin -Xrs -server com.caucho.boot.WatchdogManager -root-directory /usr/local/resin -conf /usr/local/resin/conf/resin.xml -log-directory /usr/local/resin/log start-all --log-directory /usr/local/resin/log
root      237208  237142 69 21:33 pts/0    00:00:06 /usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.x86_64/bin/java -Dresin.server=app-0 -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djava.system.class.loader=com.caucho.loader.SystemClassLoader -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Djava.awt.headlesslib=true -Dresin.home=/usr/local/resin/ -server com.caucho.server.resin.Resin --root-directory /usr/local/resin -conf /usr/local/resin/conf/resin.xml -server app-0 -socketwait 33483 -root-directory /usr/local/resin -log-directory /usr/local/resin/log start-all --log-directory /usr/local/resin/log
root      237302  222069  0 21:34 pts/0    00:00:00 grep --color=auto java
#

javaプロセスが起動されている。

resinの動作を確認する。

ポート番号8080にアクセスして、resinのデフォルト・ホーム・ページが表示される事を確認する。
     http://<IPアドレス>:8080/
※ポート番号を変更する場合は、conf/resin.propertiesファイルのポート番号を変更する必要がある。

nginx経由でresinにアクセス

javaプログラムをnginx経由でresinにアクセスして実行させる。

nginxにproxyを設定する。

location ~ ^/api/.*$
  ・/api/にアクセスされたら、/api/を削除してresinに転送して処理させる。
location /resin-admin/
  ・resin summary(resin管理画面)を表示させるため、resinに転送して処理させる。
  ・インターネットからアクセスできるため、認証処理を定義する。
       ※インターネットからアクセスすると他の画面に遷移できない。proxyの設定が間違っていると思うが、インターネットからアクセスすることは無いと思われるためそのままとする。
location /resin-doc/
  ・resinのドキュメントを表示するため、resinに転送して処理させる。

# cd /etc/nginx/default.d/
#
# vi resin_proxy.conf
#
# cat resin_proxy.conf
location ~ ^/api/.*$ {
        # JAVAアプリ領域
        rewrite         /api/(.*)$ /$1 break;
        proxy_pass    http://127.0.0.1:8080;
}
location /resin-admin/ {
        # resin-admin
        proxy_pass      http://127.0.0.1:8080$uri;
        include         /etc/nginx/resin_proxy_param.conf;

        auth_basic      "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
}
location /resin-doc/ {
        # resin-doc
        proxy_pass      http://127.0.0.1:8080$uri;
        include         /etc/nginx/resin_proxy_param.conf;
}
#
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#
# systemctl restart nginx
#

 

proxyの動作を確認する。

nginxのproxy設定によりresinにアクセスしてresin-docを表示する。
  http://<nginxアクセスのIPアドレス>/resin-doc/

 

javaプログラムでhello world表示

javaソースファイルを記述して、「hello world!」をブラウザに表示させる。

javaプログラムを実行環境のweb.xmlファイルを作成する。

web.xmlファイルを作成する。
/helloにアクセスされたら、/test/HelloServletクラスを実行する定義を記述する。
・<servlet-class>に実行するJAVAのクラスファイルの「test.HelloServlet」を記述する。
・<url-pattern>にJAVAクラスファイルを実行するアクセス先のURLを記述する。

# cd /usr/local/resin/webapps/ROOT/WEB-INF 
#
# vi web.xml
#
# cat web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
     <servlet>
             <servlet-name>hello</servlet-name>
             <servlet-class>test.HelloServlet</servlet-class>
     </servlet>
 
     <servlet-mapping>
              <servlet-name>hello</servlet-name>
              <url-pattern>/hello</url-pattern>
     </servlet-mapping>
</web-app>
#

 

javaソースを作成する。

resinのドキュメントのソースファイルを記載する。
「Hello, world!」を表示するjavaプログラムソースを作成する。
package名test内にHelloServletクラスが有る記述のため以下のパスにソースファイルを作成する。
/usr/local/resin/webapps/ROOT/class/test/HelloServlet.java

# cd /usr/local/resin/webapps/ROOT/class
#
# mkdir test
#
# cd test
#
# vi HelloServlet.java
#
# cat HelloServlet.java
package test;

import java.io.*;

import javax.servlet.http.*;
import javax.servlet.*;

public class HelloServlet extends HttpServlet {
        public void doGet (HttpServletRequest req,
                HttpServletResponse res)
        throws ServletException, IOException
        {
                PrintWriter out = res.getWriter();

                out.println("Hello, world!");
                out.close();
        }
}
#

 

resinを再起動する。

ビルドされた実行ファイルを実行可能な環境に配置し、実行できるようにする(デプロイ)ためresinを再起動する。
※約2分待てば、自動的にデプロイが実行されるが、すぐに確認したいためresinを再起動してデプロイを実行させる。

# /etc/rc.d/resin stop
Stopping resin: .
#
# /etc/rc.d/resin start
Starting resin: .
#

 

javaアプリにアクセスる。

nginx経由でresinのjavaアプリにアクセスする。
   http://<nginxアクセスのIPアドレス>/api/hello

MYSQLにJAVAからアクセス

javaプログラムでMYSQLデータベースにアクセスしてテーブルの内容を表示する。

データベースのデータを確認する。

# mysql -u test000 -p -h localhost test
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1996
Server version: 10.5.27-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [test]>
MariaDB [test]>
MariaDB [test]> select * from usertable;
+--------+--------+--------+---------------+---------------+-------------+-------+-------+-------+
| number | sei    | mei    | phone         | mailaddress   | password    | yobi1 | yobi2 | yobi3 |
+--------+--------+--------+---------------+---------------+-------------+-------+-------+-------+
|      1 | せい    | 太郎   | phone         | mail1@address | mypassword  |       |       |       |
+--------+--------+--------+---------------+---------------+-------------+-------+-------+-------+
|      2 | せい    | 次郎   | 090-9999-9999 | mail2@address | mypassword2 |       |       |       |
+--------+--------+--------+---------------+---------------+-------------+-------+-------+-------+
2 rows in set (0.000 sec)

MariaDB [test]> exit
Bye
#

 

MYSQLドライバを入手する。

以下のurlからMYSQLのドライバ(mysql-connector-j-9.2.0-1.el9.noarch.rpm)を入手する。
  https://dev.mysql.com/downloads/connector/j/

MYSQLドライバをインストールする。

# rpm -ivh ./mysql-connector-j-9.2.0-1.el9.noarch.rpm
#
# rpm -ql mysql-connector-j-9.2.0-1.el9.noarch
/usr/share/doc/mysql-connector-j
/usr/share/doc/mysql-connector-j/CHANGES
/usr/share/doc/mysql-connector-j/INFO_BIN
/usr/share/doc/mysql-connector-j/INFO_SRC
/usr/share/doc/mysql-connector-j/LICENSE
/usr/share/doc/mysql-connector-j/README
/usr/share/java/mysql-connector-j.jar
/usr/share/java/mysql-connector-java.jar
#

 

MYSQLドライバをresinが利用できる様に設定する。

mysqlドライバがresinのlibディレクトリに無いため、認識できる様にリンクを設定する。

# cd /usr/local/resin/webapps/ROOT/WEB-INF
#
# mkdir lib
#
# cd lib
#
# ln -s /usr/share/java/mysql-connector-j.jar mysql-connector-j.jar
# ls -l
合計 0
lrwxrwxrwx 1 root root 37  3月  9 18:57 mysql-connector-j.jar -> /usr/share/java/mysql-connector-j.jar
#

 

resin-web.xmlについて

javaソースにデータベース情報を記載するためresin-xmlファイルは作成しない。

 

javaプログラムを実行環境のweb.xmlファイルを作成する。

/databaseselectにアクセスされたら、/DatabaseSelectクラスを実行する定義を記述する。

# cp web.xml web.xml_org
#
# vi web.xml
#
# diff -c web.xml_org web.xml
*** web.xml_org    2025-03-11 19:57:54.430389269 +0900
--- web.xml     2025-03-09 18:49:22.915337431 +0900
***************
*** 5,13 ****
--- 5,21 ----
                <servlet-name>hello</servlet-name>
                <servlet-class>test.HelloServlet</servlet-class>
        </servlet>
+       <servlet>
+               <servlet-name>databaseselect</servlet-name>
+               <servlet-class>DatabaseSelect</servlet-class>
+       </servlet>

        <servlet-mapping>
                <servlet-name>hello</servlet-name>
                <url-pattern>/hello</url-pattern>
        </servlet-mapping>
+       <servlet-mapping>
+               <servlet-name>databaseselect</servlet-name>
+               <url-pattern>/databaseselect</url-pattern>
+       </servlet-mapping>
  </web-app>
#

 

MYSQLにアクセスするソースを作成する。

MYSQLデータベースにアクセスするjavaプログラムソースを作成する。
package化していないため、以下のパスにソースファイルを作成する。
/usr/local/resin/webapps/ROOT/class/DatabaseSelect.java

# cd /usr/local/resin/webapps/ROOT/WEB-INF/classes
#
# vi DatabaseSelect.java
#
# cat DatabaseSelect.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class DatabaseSelect extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>データベーステスト</title>");
        out.println("</head>");
        out.println("<body>");

        Connection conn = null;
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "test000";
        String password = "mypassword";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
            conn = DriverManager.getConnection(url, user, password);

            Statement stmt = conn.createStatement();

            String sql = "select * from usertable";
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()){
                int number = rs.getInt("number");
                String sei = rs.getString("sei");
                String mei = rs.getString("mei");
                String mailaddress = rs.getString("mailaddress");
                out.println("<p>");
                out.println("番号:" + number + ", 姓:" + sei + ", 名:" + mei + ", メールアドレス:" + mailaddress);
                out.println("</p>");
            }

            rs.close();
            stmt.close();
        }catch (ClassNotFoundException e){
            out.println("ClassNotFoundException:" + e.getMessage());
        }catch (SQLException e){
            out.println("SQLException:" + e.getMessage());
        }catch (Exception e){
            out.println("Exception:" + e.getMessage());
        }finally{
            try{
                if (conn != null){
                    conn.close();
                }
            }catch (SQLException e){
                out.println("SQLException:" + e.getMessage());
            }
        }

        out.println("</body>");
        out.println("</html>");
    }
}
#

 

resinを再起動する。

ビルドされた実行ファイルを実行可能な環境に配置し、実行できるようにする(デプロイ)ためresinを再起動する。

# /etc/rc.d/resin stop
Stopping resin: .
#
# /etc/rc.d/resin start
Starting resin: .
#

 

javaアプリにアクセスる。

nginx経由でresinのjavaアプリにアクセスする。
   http://<nginxアクセスのIPアドレス>/api/databaseselect



xmlファイルを利用してMYSQLにアクセスする

resin-web.xmlファイルにデータベース情報を記述して、アクセスする。

resin-web.xmlを作成する。

resin-web.xmlに、<database>や<driver>などを定義する。

# cd /usr/local/resin/webapps/ROOT/WEB-INF
#
# vi resin-web.xml
# cat resin-web.xml
<web-app xmlns="http://caucho.com/ns/resin">
<database> <jndi-name>jdbc/mysql</jndi-name>] <driver> <type>com.mysql.cj.jdbc.Driver</type> <url>jdbc:mysql://localhost:3306/test</url> <user>test000</user> <password>mypassword</password> <init-param useUnicode="true"/> </driver> </database> </web-app> #

 

MYSQLにアクセスするソースを作成する。

InitialContextを使用して、jdbc/mysqlというJNDI名でデータソースを取得します。

# cd /usr/local/resin/webapps/ROOT/WEB-INF/classes
#
# vi DatabaseSelect2.java
#
# cat DatabaseSelect2.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;

public class DatabaseSelect2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{

        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>データベーステスト</title>");
        out.println("</head>");
        out.println("<body>");

        Connection conn = null;
        PreparedStatement statement = null;

        try {
            // JNDIを使用してデータソースを取得
            Context initContext = new InitialContext();
            DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/mysql");

            conn = ds.getConnection();

            Statement stmt = conn.createStatement();

            String sql = "select * from usertable";
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()){
                int number = rs.getInt("number");
                String sei = rs.getString("sei");
                String mei = rs.getString("mei");
                String mailaddress = rs.getString("mailaddress");
                out.println("<p>");
                out.println("番号:" + number + ", 姓:" + sei + ", 名:" + mei + ", メールアドレス:" + mailaddress);
                out.println("</p>");
            }

            rs.close();
            stmt.close();
        // }catch (ClassNotFoundException e){
        //    out.println("ClassNotFoundException:" + e.getMessage());
        }catch (SQLException e){
            out.println("SQLException:" + e.getMessage());
        }catch (Exception e){
            out.println("Exception:" + e.getMessage());
        }finally{
            try{
                if (conn != null){
                    conn.close();
                }
            }catch (SQLException e){
                out.println("SQLException:" + e.getMessage());
            }
        }

        out.println("</body>");
        out.println("</html>");
    }
}
#

 

差分を比較する。

# diff -c DatabaseSelect.java DatabaseSelect2.java
*** DatabaseSelect.java 2025-03-31 19:49:27.262361522 +0900
--- DatabaseSelect2.java        2025-04-01 20:20:02.624951684 +0900
***************
*** 2,9 ****
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.sql.*;

- public class DatabaseSelect extends HttpServlet {
      public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException{

--- 2,18 ----
  import javax.servlet.*;
  import javax.servlet.http.*;
  import java.sql.*;
+ import java.sql.Connection;
+ import java.sql.DriverManager;
+ import java.sql.PreparedStatement;
+ import java.sql.ResultSet;
+ import java.sql.SQLException;
+ import javax.sql.DataSource;
+ import javax.naming.Context;
+ import javax.naming.InitialContext;
+
+ public class DatabaseSelect2 extends HttpServlet {

      public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException{

***************
*** 16,29 ****
          out.println("</head>");
          out.println("<body>");

!         Connection conn = null;
!         String url = "jdbc:mysql://localhost:3306/test";
!         String user = "test";
!         String password = "ESZesz7()0";

          try {
!             Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
!             conn = DriverManager.getConnection(url, user, password);

              Statement stmt = conn.createStatement();

--- 25,39 ----
          out.println("</head>");
          out.println("<body>");

!       Connection conn = null;
!       PreparedStatement statement = null;

          try {
!           // JNDIを使用してデータソースを取得
!           Context initContext = new InitialContext();
!           DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/mysql");
!
!             conn = ds.getConnection();

              Statement stmt = conn.createStatement();

***************
*** 42,49 ****

              rs.close();
              stmt.close();
!         }catch (ClassNotFoundException e){
!             out.println("ClassNotFoundException:" + e.getMessage());
          }catch (SQLException e){
              out.println("SQLException:" + e.getMessage());
          }catch (Exception e){
--- 52,59 ----

              rs.close();
              stmt.close();
!         // }catch (ClassNotFoundException e){
!         //    out.println("ClassNotFoundException:" + e.getMessage());
          }catch (SQLException e){
              out.println("SQLException:" + e.getMessage());
          }catch (Exception e){
#

 

web.xmlファイルを修正する。

web.xmlファイルを修正して、URLとclassファイルを関連付けます。

# cd /usr/local/resin/webapps/ROOT/WEB-INF
#
# cp web.xml web.xml_org
#
# vi web.xml
#
# diff -c web.xml_org web.xml
*** web.xml_org    2025-03-31 19:35:05.370930642 +0900
--- web.xml     2025-03-25 22:13:35.450540155 +0900
***************
*** 9,14 ****
--- 9,18 ----
                <servlet-name>databaseselect</servlet-name>
                <servlet-class>DatabaseSelect</servlet-class>
        </servlet>
+       <servlet>
+               <servlet-name>databaseselect2</servlet-name>
+               <servlet-class>DatabaseSelect2</servlet-class>
+       </servlet>

        <servlet-mapping>
                <servlet-name>hello</servlet-name>
***************
*** 18,21 ****
--- 22,29 ----
                <servlet-name>databaseselect</servlet-name>
                <url-pattern>/databaseselect</url-pattern>
        </servlet-mapping>
+       <servlet-mapping>
+               <servlet-name>databaseselect2</servlet-name>
+               <url-pattern>/databaseselect2</url-pattern>
+       </servlet-mapping>
  </web-app>
#

 

javaアプリにアクセスる。

nginx経由でresinのjavaアプリにアクセスする。
   http://<nginxアクセスのIPアドレス>/api/databaseselect2

結果は、javaソースにデータベースの情報を記述した時と同様です。

 

データベースにアクセスするパスワードの暗号化

安全のためにパスワードを暗号化しようと思ったが、暗号化はResin Proでないとダメ見たいです。

# /usr/local/resin/bin/resinctl password-encrypt "mypassword"
password-encrypt requires Resin Pro
java.lang.ClassNotFoundException: com.caucho.admin.PasswordImpl
#

 

まとめ

意外と簡単にMYSQLデータベースにアクセスするjavaプログラムが作成できた。インターネットのおかげである。
再度、パソコンの内臓ディスクが壊れた場合を考えての記録ですが、皆さんの参考になれば幸いです。