eclipse(Lomboz+EasyStruts)でJBoss Webアプリ開発

作成者 城風敏彦 2005/05/02

まえがき

JBOSSを前提にしたJ2EEアプリーケーションの開発環境を説明する。
JBOSSのHTTPポートはデフォルトで8080であり、オラクルサーバーなどとぶつかるの可能性があるので、
C:\java\jboss-3.2.5\server\default\deploy\jbossweb-tomcat50.sar\server.xml
でポート番号を8080から8082などに変更した方が良い。
ここではjboss3.2.5でポート番号を8082にしているので、自分の環境のjbossのバージョンとポート番号に 読み替えて欲しい。

Lomboz設定

まずLombozの設定をする。これでJSPなどの文法チェックや、 Webサーバーへのデプロイ(配置、インストール)ができる。

を解凍する。C:\java\jboss-3.2.5以下にbinがあるように配置する。
JBOSSは以下からダウンロードできる。
http://www.jboss.org/products/index

注:うまく動作しなかった場合jboss325.serverを修正する。
eclipse.exeを起動する。

ウインドウ>設定>Lomboz
JDK Tool jarで、C:\java\j2sdk1.4.2\lib\tools.jar など、JDKのtools.jarを指定する。



ServerDefinitionで以下のように設定してOKを押する。


Server typesにJBOSS 3.2.5が出てこない時は、eclipseを再起動してやってみる。 ここでJBOSS3.2.5を設定しても、デフォルトはJboss2.4.4のまま。プロジェクトごとにサーバーを選べるので これで良い。

OK を押す。

ファイル>新規>プロジェクト>Java>Lomboz J2EE Project



次へ


ここではプロジェクト名「jboss」とする。

次へ



フォルダーの追加


srcを入れてOK


はい


次へ



Add



jbossWebと入力してOKを押す。



Ejbを作る人は、Ejbタブを押してjbossEjbなどと打つが、今回は省略する。

Targeted Serversタブを押す。



JBOSS3.2.5を選択して、Add を押し、終了を押す。



Easy Strutsプラグイン設定

http://www.apache.org/dist/jakarta/struts/binaries/
からjakarta-struts-1.1.zipを落として、適当なフォルダに展開しておく。ここでは、C:\java\jakarta-struts-1.1フォルダとした。
ウインドウ>設定>EasyStruts Struts1.1 で以下のように、
Add JARS で、C:\java\jakarta-struts-1.1\lib の全てのjarを一つずつ追加する。
Add TLDS で、C:\java\jakarta-struts-1.1\lib の全てのtldを一つずつ追加する。
以下のようになる。




jbossプロジェクトを右クリックし、設定>Easy Struts を選択



Add Struts support to project…



Webapp folder のdefaultroot をjbossWeb と書き換えて「終了」

Base packageはパッケージ規約が決まってから修整するとして、今回は修整しない。


OK

サーバーへのアプリの配置とサーバーの起動

eclipseのパッケージエクスプローラのjbossプロジェクトのjbossWebを右クリックし、 Lomboz J2EE > Deploy Module を選択。

コンソールにメッセージが出てくる。

eclipseのパッケージエクスプローラのjbossプロジェクトのjbossWebを右クリックし、 Lomboz J2EE > Run Server を選択。

コンソールにメッセージが出てくる。

http://localhost:8082/jbossWeb/ にブラウザでアクセスする。
Lomboz J2EE > Show in Browserでもアクセスできる。



コネクションプーリング設定

DBへのコネクションプーリングを実現するデータソースの設定をする。

LAN環境にOracleとPostgresのサーバーが動いている前提。

Webではこちらから入手。
http://otn.oracle.co.jp/software/products/oracle9i/index.html
http://www.postgresql.org/ftp/binary/v8.0/win32/

ここではPostgres8がlocalhostで動いていて、DB名はtemplate1、ユーザ名postgres、パスワードpasswordとする。
Oracleについては、localhost、DB名orcl,ユーザscott,パスワードpasswordとする。
Oracle9,10であればclasses12.jar(Oracle9iの場合 C:\oracle\ora92\jdbc\lib 、
Oracle10の場合 C:\oracle\product\10.1.0\Db_1\jdbc\lib  にある)
をsample/sampleWeb/WEB-INF/lib にコピーする。

Postgres8であればpostgresql-8.0.309.jdbc3.jar (C:\Program Files\PostgreSQL\8.0\jdbcにある)
をsample/sampleWeb/WEB-INF/lib にコピーする。

jbossWebを右クリックし、Lomboz J2EEで Add WEB-INF/lib jars to classpath を選択する。

上の2つのjarを、
C:\java\jboss-3.2.5\server\default\lib
にコピーする。

C:\java\jboss-3.2.5\server\default\deploy に以下のような内容のoracle-ds.xmlを作成する。
http://www5.plala.or.jp/shirokaze/java/oracle-ds.xml
同様に、postgres-ds.xmlを作成する。
http://www5.plala.or.jp/shirokaze/java/postgres-ds.xml

jbossWeb/jndi.jsp を以下の内容で作成する。
http://www5.plala.or.jp/shirokaze/java/jndi.jsp.txt

sampleプロジェクトをデプロイして、サーバーを再起動してブラウザで見ると以下のように出る。



データソースが取得できれば、Jakarta-dbUtilsが使えるし、自分でJDBCを駆使してDBアクセスもできる。

またTomcatなどのコンテナがない環境で、DBアクセスするプログラムの開発をするために、 コンテナが無いとプロパティファイルから接続情報を取得してJNDIを経由しないでデータソースを 作成するクラスも作成すると便利である。
OracleDataSourceManager
PostgresDataSourcemanager
という名前で作成してある。以下のソースにあるように、catalina_baseシステムプロパティからコンテナを判別する。


    /* コンテナの判別 */

    static {

        String catalina_base = System.getProperty("catalina.base");

        if(catalina_base != null && !catalina_base.equals("")) {

            String base = catalina_base.toLowerCase();

            if(base.indexOf("tomcat") != -1) {

                container_flag = 1;

            } else if(base.indexOf("jboss") != -1) {

                container_flag = 2;

            }

        }

    }



http://ueno.cool.ne.jp/shirokaze185/java/sample.jar からダウンロードできる。
使い方は、jbossプロジェクトにsample.jar中のソースをインポートする。
jbossプロジェクトを右クリックして、インポートを選ぶ。

Zipファイル を選択して、次へ



sample.util.db パッケージができて、ソースとプロパティが見える。

DBアクセス本体については、
jakarta-commons-dbutil が DAO(DataAccessObject)の部品となる。
commons-dbutils-1.1-dev.jarをF:開発ツール\libか、上のページから取得(最新のNightly Builldをダウンロード) して、 WEB-INF/libに入れて、Add WEB-INF/lib jars to classpathを行う。
C:\java\jboss-3.2.5\server\default\libにもコピーする。

DBアクセスJSPとDBアクセスAction

以下の内容のsql.jsp をjndi.jspと同様の手順でjbossWebに作成する。 http://www5.plala.or.jp/shirokaze/java/sql.jsp.txt
strutsのtablibを用いていないが、これは初心者への説明のためであり、 通常はbean:write などのtaglibを用いる。
以下の内容の style.css もjspと同様に作成する。


TABLE {border:solid 0.5px gray;
border-collapse:collapse;
background:black;
}
TH { border: solid 1px darkblue;
background:yellow}
TD {border: solid 1px darkred;
background:white; }

デプロイと再起動して実行すると以下のようになる。
http://localhost:8082/jbossWeb/sql.jsp



これをStrutsのActionで作ってみる。入力JSPと結果JSPをつなぐのがActionである。
jbossプロジェクトで、新規>その他



East Struts> Easy Action associed with a form を選択して「次へ」



Use case にsql と入力、 Form properties 右のAdd…を押す。



Nameにsqlを入力して、「OK]



「終了」。他にあれば入力し最後に「終了」を押す。



「次へ」



「次へ」



「終了」



「終了」



com.youcompany.struts.action.SqlAction.java
com.youcompany.struts.action.SqlForm.java
tomcatWeb.form/sql.java
ができており、config.xmlが変更されている。

SqlForm.java のvalidateメソッドがUnsupportedException を投げて実装していないことを表しているので、


public ActionErrors validate(

ActionMapping mapping,

HttpServletRequest request) {

// Perform validator framework validations

ActionErrors errors = super.validate(mapping, request);



return errors;

}



と何もチェックしないように修整しておく。チェックする場合は、チェック処理を実装する。

SqlAction.java のexecuteメソッドを以下のように実装する。Inport文は、前記のsql.jspを参考にされたい。 public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { SqlForm sqlForm = (SqlForm) form; String sql = sqlForm.getSql(); if(sql == null || sql.equals("")) { sql = "select * from pg_tables"; } DataSource ds = PostgresDataSourceManager.getDataSource(); QueryRunner qr = new QueryRunner(ds); ResultSetHandler rsh = new MapListHandler(); List list = (List)qr.query(sql, rsh); request.setAttribute("result", list); return mapping.findForward("success"); }

requestにlistをセットして、次のページsqlresult.jspでゲットして使うようにしている。
この例はサンプルであり、Formのチェックがない、requestにセットするキーをMappingから取って いない、例外処理を記述していない。
実際の業務で複数人で開発をする場合は、チェックは行い、キーは設定ファイルや定数で共有し、 適切な例外処理を書くことになる。


結果表示のJSPをtomcatWeb直下にsqlresult.jsp という名前で、以下のように作成する
。 DataSourceやDbUtilsのクラスが消えて、Listの表示だけに特化している。
http://www5.plala.or.jp/shirokaze/java/sqlresult.jsp.txt

http://localhost:8082/jbossWeb/form/sql.jsp



なにも入れないでSubmitすると、select * from pg_tables が実行され、 URLが http://localhost:8082/jbosscatWeb/sql.do に変わって、 以下のように、JSPだけで記述したのと同じ結果になる。



Oracleの場合は、Action中のPostgresDataSourceManagerをOracleDataSourceManagerに、 pg_tablesをcatに変更すれば良い。

<参考URL>

著者:城風敏彦

Java道場に戻る。