zipファイルを解凍するだけでインストールが完了する、お手軽 JavaEE ランタイム、WebSphere Liberty。
WebSphere Liberty から Oracle に接続したときの、構成方法のログです。
使ったアプリは、ServletからJDBCでOracle DBに接続して、SQL実行結果をJSPに出力するクラシックなもの。
OracleデータベースとJavaSEランタイムは導入済の環境に、Libertyを追加で導入しました。
ここからの手順は最適解でない可能性はありますが、ひとまずこれで出来ました、というメモです。
WebSphere Libertyのダウンロード
ここからダウンロードするモジュールを選べます。
https://developer.ibm.com/wasdev/downloads/
…Full profile と Web profile の違いって何でしたっけ。(← 残念なレベル感)
https://www.oracle.com/technetwork/java/javaee/tech/index.html
<--- このページで、WebProfile列にチェックが入っているAPIのみ包含されるのが、Web profile。
Servlet/JSON/JSF/JSP/EJB/JTA/JPA など Webアプリケーション開発で使われる主なAPIは全部入ってるので、Web Profileで十分、機能は足りそうです。
WAS Liberty with Java EE 8 Web Profile
https://developer.ibm.com/wasdev/downloads/#asset/runtimes-wlp-webProfile8
このページから任意のディレクトリに導入イメージ(zip)をダウンロードしておきます。
WebSphere Liberty のインストール(≒解凍)
ダウンロードしたzipファイルを解凍します。解凍ソフトは何でも良さそうで、今回は7zipを使いました。
ちょっと変なパス名になってしまいましたが、特に困らないのでこのまま使います。
アプリケーションの配置
配置先は下記のディレクトリ:
<WLP_ROOT>\usr\servers<server_name>\apps ディレクトリ(※)
複数のアプリケーションサーバ間で共有されるアプリであれば「<WLP_ROOT>\shared\apps」ディレクトリに配置してもよさそうです。
JDBCドライバの配置
Oracle JDBCドライバ配置用のディレクトリ作成(任意)
ここでは、下記ディレクトリにドライバを配置することにします
<WLP_ROOT>\usr\shared\resources\oracle ディレクトリを作成
ドライバ類が1個しかない環境なら、resources直下にそのまま置いても良いと思いますが
Oracle、Db2など複数のデータベースにつながる環境なので、一応ディレクトリを分けます。
Oracle JDBCドライバファイルの配置
Oracleサーバから入手できない場合は、以下のサイトからダウンロードします。
https://www.oracle.com/technetwork/database/application-development/jdbc/downloads/jdbc-ucp-19c-5460552.html
Oracleサーバが導入済みであれば、下記のディレクトリにJDBCドライバファイルがあるので、1つ前の手順で作成しておいたディレクトリにコピーしてきます
%ORACLE_HOME%\jdbc\lib
このディレクトリには以下のファイルがあります。
Oracle 19cに同梱されるファイルは下記の5つで、それぞれのファイルの位置づけ・役割をOracle社のページから引用しておきます。
今回は、ごく普通にThinドライバが使えればよいだけなので、ojdbc8.jar のみ使います。
- ojdbc8.jar
- Thinドライバで基本機能をサポートするためのすべてのクラス
- ojdbc8_g.jar
- ojdbc8.jarと同じ。ただし、デバッグ情報を含めるために-gオプションを指定してコンパイルし、java.util.loggingコールが含まれる点を除く
- ojdbc8dms.jar
- ojdbc8.jarと同じ。ただし、 Oracle Dynamic Monitoring Service(Oracle DMS)をサポートするためのコードが含まれる点を除く。また、JDBCロギング・サポートを含めた場合も除きます。このファイルが使用できるのは、dms.jarも クラスパスにある場合のみです。dms.jarファイルは、RDBMS製品の一部としては付属してい ません。Oracle Application Server製品の一部としてのみ使用できます。
- ojdbc8dms_g.jar
- ojdbc8dms.jarと同じ。ただし、デバッグ情報を含めるために-gオプションを指定してコンパイルし、全JDBCロギング・サポートが含まれる点を除く。
- simplefan.jar
- ONS経由でRACイベントをサブスクライブするためのJava API
(参考)Oracle JDBC FAQ
https://www.oracle.com/technetwork/jp/database/application-development/jdbc/overview/default-090281-ja.html
(参考)Windows環境で ORACLE_HOME がわからない場合は、環境変数やレジストリ変数にて確認します
https://www.shift-the-oracle.com/config/show-environment-variable.html
http://replication.hatenablog.com/entry/20130109/1357659799
server.xmlファイルの編集・配置
配置先は下記のディレクトリ:
<WLP_ROOT>\usr\servers ディレクトリ
server.xmlの内容は、動いたものをそのまま添付しています。
- featureとして、servlet-3.0/jdbc-4.0/jsp-2.2 を追加しておく
- listen port は 9080/9443
- LibraryエレメントにJDBCドライバの配置先ディレクトリ名とファイル名を記述(ファイル名はワイルドカード利用可)
- dataSourceエレメントにはデータベースの接続情報(OracleサーバのURL、ユーザ名、パスワード)、JNDI名を記述
- ドライバの種別(OCI or THIN)は、dataSource内のURL文字列で指定
- アプリケーションと設定を一致させるべき箇所としては、DB接続アプリ側のデータソースのJNDI名と、server.xml側のデータソースJDNI名(jndiName)を一致させます。このserver.xmlの例では、jdbc/sample としています。
(server.xmlファイルの例)
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>jsp-2.2</feature>
<feature>jdbc-4.0</feature>
<feature>servlet-3.0</feature>
</featureManager>
<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint id="defaultHttpEndpoint" host="*"
httpPort="9080"
httpsPort="9443" />
<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="true"/>
<!-- DataSource Conig(oracle) -->
<!-- Declare the jar files for Oracle access through JDBC. -->
<library id="OracleLib">
<fileset dir="${shared.resource.dir}/oracle" includes="*.jar"/>
</library>
<!-- Declare the runtime database -->
<dataSource id="OrclDS-1" jndiName="jdbc/sample">
<jdbcDriver libraryRef="OracleLib"/>
<properties.oracle URL="jdbc:oracle:thin:@//myhost:1521/ORCL" user="kana" password="password"/>
</dataSource>
<!-- Declare the application -->
<application id="SessionTest" location="Session.ear" name="SessionTest" type="ear"/>
<application id="JDBCSample" location="JDBCsample.war" name="JDBCSample" type="war"/>
</server>
dataSource エレメントは以下のように書いても接続できます。
tnsnames.oraと同一形式の記述方法ができる意味では、上の書き方(URL)にアドバンテージあり。
<dataSource id="OrclDS-2" jndiName="jdbc/sample" transactional="false">
<jdbcDriver libraryRef="OracleLib"/>
<properties.oracle driverType="thin" databaseName="ORCL"
serverName="myhost"
user="kana" password="password"/>
</dataSource>
必要なフィーチャーのインストール
試しにサーバ起動してみたら、messages.logファイルにフィーチャーをインストールせよとの指令あり。
server-3.0 / jsp-2.2 / jdbc-4.0 のフィーチャーをコマンドでインストール。
C:\sw\ibm\was\wlp-webProfile8-19.0.0.6\wlp\bin>installUtility install jsp-2.2
構成されたリポジトリーへの接続を確立しています...
このプロセスは、完了するまでに数分間かかる場合があります。
構成されたすべてのリポジトリーへの接続が成功しました。
資産をインストールする準備をしています。 このプロセスは、完了するまでに数分間かかる場合があります。
ステップ 1 / 18: servlet-3.0 をダウンロード中...
ステップ 2 / 18: servlet-3.0 をインストール中...
ステップ 3 / 18: jsp-2.2 をダウンロード中...
ステップ 4 / 18: jsp-2.2 をインストール中...
ステップ 5 / 18: cdi-1.2 をダウンロード中...
ステップ 6 / 18: cdi-1.2 をインストール中...
ステップ 7 / 18: restConnector-1.0 をダウンロード中...
ステップ 8 / 18: restConnector-1.0 をインストール中...
ステップ 9 / 18: jaxrs-1.1 をダウンロード中...
ステップ 10 / 18: jaxrs-1.1 をインストール中...
ステップ 11 / 18: servlet-3.1 をダウンロード中...
ステップ 12 / 18: servlet-3.1 をインストール中...
ステップ 13 / 18: jaxrsClient-2.0 をダウンロード中...
ステップ 14 / 18: jaxrsClient-2.0 をインストール中...
ステップ 15 / 18: jaxrs-2.0 をダウンロード中...
ステップ 16 / 18: jaxrs-2.0 をインストール中...
ステップ 17 / 18: インストール済みフィックスを検証中...
ステップ 18 / 18: 一時ファイルをクリーンアップしています...
すべての資産が正常にインストールされました。
製品妥当性検査を開始します...
製品妥当性検査が正常に完了しました。
C:\sw\ibm\was\wlp-webProfile8-19.0.0.6\wlp\bin>installUtility install jdbc-4.0
構成されたリポジトリーへの接続を確立しています...
このプロセスは、完了するまでに数分間かかる場合があります。
構成されたすべてのリポジトリーへの接続が成功しました。
資産をインストールする準備をしています。 このプロセスは、完了するまでに数分間かかる場合があります。
ステップ 1 / 4: jdbc-4.0 をダウンロード中...
ステップ 2 / 4: jdbc-4.0 をインストール中...
ステップ 3 / 4: インストール済みフィックスを検証中...
ステップ 4 / 4: 一時ファイルをクリーンアップしています...
すべての資産が正常にインストールされました。
製品妥当性検査を開始します...
製品妥当性検査が正常に完了しました。
C:\sw\ibm\was\wlp-webProfile8-19.0.0.6\wlp\bin>
Oracle RACとつなぐ時の server.xml
Liberty の Oracle RAC を構成するには、以下のように server.xml に接続文字列を記述します。
<dataSource id="ds_id" jndiName="jdbc/ds_id ">
<jdbcDriver>
<library>
<fileset dir="path_to_oracle_jar" includes="ojdbcX.jar"/>
</library>
</jdbcDriver>
<properties.oracle
URL="jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=ON)(LOAD_BALANCE=OFF)(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=port1))
(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=port2))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=name)))"
user="username" password="password" />
</dataSource>