WebLogic - デプロイを簡単にしよう

作成 2004/9/16

ひさびさにWebLogicを使いました。デプロイやデバッグは簡単に行いたいっすよね。

試した環境

簡易デプロイ

昔JBossを使ったとき、「ディレクトリにEJB-JARやWARを置いただけで、デプロイが実行される」というのに衝撃を受けた記憶がありますが、WebLogicでもけっこう前から(?)そういう機能があります。デプロイ用のディレクトリにアーカイブしたファイルをコピーすればデプロイ完了です。例えば、ウィザードを利用してハイハイすすめてサーバを構築した場合は、C:\bea\user_projects\domains\mydomain\applications が簡易デプロイディレクトリです。

ディレクトリデプロイ

JSPの開発では、ちょっとした修正をするたびにイチイチWARやEARにパッケージングして、デプロイするのは時間もかかるし手間です。WebLogicでは「分割開発ディレクトリ」という機能を利用して、迅速なJ2EEアプリケーションの開発が可能です。

参考
http://edocs.beasys.co.jp/e-docs/wls/docs81/programming/environment.html#1097239
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9438&forum=12&8

やりかた

方法はけっこう単純で、例えば、hoge.earというアーカイブを作る代わりに、hoge.earというディレクトリを作成します。このディレクトリの下にEAR形式でファイルを配置します。そして、このhoge.earディレクトリをWebLogicにデプロイすればいいだけです。WARやEJB-JARも同様です。

EARのディレクトリ構造の例

ディレクトリのデプロイは管理コンソールから可能です

管理コンソールでデプロイ

ビルド

Eclipseなどでは、ソースフォルダごとに出力ディレクトリを指定できるので、EJB、WARごとにクラス出力先を指定するとよいでしょう。正式なEARを作るビルドは別途Antなどで記述します。EARのディレクトリ構造に置いているので、Antビルドファイルの記述も簡単です。

クラスの置き場所に注意

WebLogicではEAR直下のAPP-INF/lib、APP-INF/classesに各モジュールから利用する共通のJARやクラスを配置できます。じゃあ、APP-INF/classesに全部つっこんじゃえばいいか?と思ったらそれはダメです。WebLogicのクラスローダはWebアプリ上のクラスから取得すると、以下のような階層になっています(下が親ローダー)。こんな感じで確認できます。

weblogic.utils.classloaders.ChangeAwareClassLoader(app@hello) ←Webアプリのクラスローダ@
weblogic.utils.classloaders.GenericClassLoader(app@) ←EAR共通クラスローダA
weblogic.utils.classloaders.GenericClassLoader
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader

APP-INF以下においたものはAのローダーで読まれます。対してWebアプリのブツ(WEB-INF/lib以下のJARなど)は、@のローダーで読まれます。なので、APP-INF/classes以下のクラスからは、WEB-INF/lib以下のJARが読めません。なので、横着せずに、WebアプリのクラスはちゃんとWebアプリの中に置いた方がよいでしょう。EJBのクラスも適当に配置すると、ObjectNotFoundExceptionやら謎のエラーが出ることがあるのと、一応コンポーネントでもあるので、相互の依存はなるべく避け、コンポーネント内で完結する作りにした方がよいでしょう。

今回作ったサンプル。Eclipseプロジェクト。重いのでJARはぬいてます。
wlsample.zip

リモードデバッグ

Eclipseからサーバの起動構成を作成し、ソースデバッグを行うことが可能ですが、リモートデバッグを利用することでもデバッグが可能です。やり方は以下のページをどうぞ。

http://www.eclipsewiki.net/eclipse/?%A5%EA%A5%E2%A1%BC%A5%C8%A5%C7%A5%D0%A5%C3%A5%B0#content_1_1


TOP