「EJB + J2EE 入門 -JBoss と Struts で作る Web アプリケーション- 」のサンプルアプリケーション (EJB+Struts) を、使用する RDB を JBoss 付属の Hypersonic DB から DB2/400 に変えて稼動させてみました。(アプリケーションサーバーは JBoss のまま)
結論から言うと、たいへん簡単に変更は行え、特に問題なく稼動しました。実質的にはデータソース定義ファイルの変更のみです。
やはり EJB といい Struts といい、J2EE アプリケーションの可搬性というのはたいしたものなんですね。
EJB は CMP であれば Java のコンポーネントそのものは変更なしで、データベースを変更したり、アプリケーションサーバーそのものを変えたりすることができます。
Web アプリケーションもデータソースを使って標準的な JDBC コーディングをしている限りはかなりの可搬性があると考えられますが、SQL の違いや取得するデータの属性などについてはちょっとした違いが問題になるケースがありますので、CMP の EJB ほどではないでしょうね。
アプリケーションサーバーを変更する場合は、必ずプラットフォーム固有のファイルがありますのでそれを作成しなくてはなりません。
一から作るのはけっこう大変なことが多く、XDoclet などを使用して生成させるのが手段としては考えられます。
データベースのみを変更するのはそれほど大変なことではありません。(サポートされているデータベースに限りますが)
既存の資源 (たいていはデータソース) の JNDI 名とアプリケーションで予期している資源
(データソース) の JNDI 名のマッピングを jboss-web.xml や jboss.xml を使って変更するか、新たに資源を作成するか、くらいの作業で行えます。
どちらで行うかは後述しますが、アプリケーション/実行環境上の要件や作業量から決めればいいでしょう。
このサンプルでは ant の実行中にデータベースの作成とデータソース定義ファイルのコピーを行っています。
ant を実行するという操作は変えないとすると、build.xml の修正が必要になります。
修正はまた今度考えるとして、データベースの作成やデータソース定義ファイルの修正は今回手動で行います。
DB2/400 は V5R2 (V5R1 でもやってみましたが OK でした)、JBoss は 3.2.2RC3
で default の環境、データベースへの接続は JBoss を PC 等で稼動させる場合も
OS/400 で稼動させる場合も両方使えるように JTOpen での接続環境を使用しています。
(JTOpen の接続環境といっても特に大変ではなく、ただ jt400.jar をサーバーの
lib ディレクトリ (JBoss-3.2.2RC3\server\default\lib) にコピーしてあるだけです)
あまり iSeries につなぎっぱなしにしてテストできなかったので、画面例の大半は PC で JBoss を実行し、データベースを JBoss のデフォルトも含めてすべて DB2/400 用に構成した環境でのものです。
まずは最初に ant を実行してしまってください。
ant で作成される ear ファイルはそのまま使用可能です。
(実際に ant で作成した ear ファイルと、修正 (後述) 済みのデータソース定義ファイルを他
PC 上で稼動している JBoss に持っていっただけでちゃんと稼動しました)

データベース作成用のスクリプトがありました (createdb.sql) ので、これをそのままオペレーション・ナビゲーターの「SQL スクリプトの実行」で実行させます。
createdb.sql については、最初に shopDB というスキーマを作成する以外は特に変更する必要はないのですが、SQL 文そのものにところどころ全角のブランクが入っていますので、これを除去するか半角のブランクに変更しなくてはなりません。
また、V5R2 であれば最初に SET SCHEMA SHOPDB でデフォルトのデータベースを指定でき、INSERT
文は修正することなく実行できます。
V5R1 の場合は INSERT 文の product というテーブルの指定に SHOPDB.product
というようにスキーマの修飾をしてやる必要があります。
以下のようにコメントをはずして必要な文だけにして、じかに CREATE SCHEMA や SET SCHEMA を直接最初に入力してしまった方が実行は簡単ですよ。

何箇所か全角のブランクがあるため、取り除いておかないとエラーになりますのでご注意くださいませ。

ちゃんと PRODUCT テーブルが SHOPDB ライブラリーに作成されているのが確認できます。

JBoss の導入ディレクトリ下に bin\shopdb といったディレクトリができますが、内容も含めて削除してしまってください。
このアプリケーション用のデータソース定義ファイル (shop-ds.xml) が ant の実行の結果として JBoss の server\default\deploy ディレクトリにコピーされます。
このデータソース定義ファイル (shop-ds.xml) は Hypersonic DB 用に出来ているので内容を変更する必要があります。
接続用の URL とドライバーのクラス、接続に使用するユーザーとパスワード (必要であれば作成します)
などを指定します。
<?xml version="1.0"?>
<!-- DataSource config for Shop sample application -->
<datasources>
<local-tx-datasource>
<jndi-name>ShopDS</jndi-name>
<connection-url>jdbc:as400://domino400/shopdb</connection-url>
<driver-class>com.ibm.as400.access.AS400JDBCDriver</driver-class>
<user-name>J2EEONLINE</user-name>
<password>PASSWORD</password>
<min-pool-size>5</min-pool-size>
</local-tx-datasource>
</datasources>
|
接続 URL のところでアクセスするスキーマの指定を行っています。
jdbc:as400://domino400/shopdb
アプリケーションによっては、システムに既存のデータソースをそのまま使用して、jboss.xml
や jboss-web.xml でアプリケーションが使用している JNDI 名とのマッピングを行うだけでも
OK なケースもあります。
たとえば、この時の構成で jboss.xml を以下のように変更すると
<resource-ref>
<res-ref-name>jdbc/ShopDS</res-ref-name>
<jndi-name>java:/DefaultDS</jndi-name>
</resource-ref>
ユーザーは JBOSSUSER が使用され、データベーススキーマは JBOSS が使用されます。
今回は上記のように接続 URL でデータベーススキーマを SHOPDB に限定しているのと、やはりユーザーをこれ専用にしたかったので、データソースの定義そのものを変更するようにしています。

|
|