ヘッダーをスキップ
Oracle Containers for J2EEデプロイメント・ガイド
10g(10.1.3.5.0)
B56032-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

4 大型アプリケーションのデプロイ

この章では、多数(およそ100以上)のEnterprise JavaBeans(EJB)モジュールを含む大型のJ2EEアプリケーションをデプロイする際のOC4JおよびJavaコンパイラの構成方法を示します。

次の項目について説明します。

使用するコンパイル・モードの指定

1つ以上の注釈を含むEJB 3.0アプリケーションをデプロイすると、OC4Jはメモリー内ejb-jar.xmlファイルをデプロイ・ディレクトリ内のorion-ejb-jar.xmlファイルと同じ場所に自動的に書き込みます。このejb-jar.xmlファイルは、注釈とデプロイされたejb-jar.xmlファイル(存在する場合)の両方から取得された構成を表します。

1つ以上のEJB 2.1 JARファイルを含むアプリケーションがデプロイされると、OC4Jは各EJBモジュールに対して、アプリケーションにパッケージされた様々なコンポーネント・インタフェースを実装するラッパー・クラスを自動的に生成します。次に、OC4Jは、Javaコンパイラを起動して、生成したEJBラッパー・クラスをコンパイルします。

OC4Jは、EJBラッパー・クラスをコンパイルするために、バッチ・モードと非バッチ・モードという2つのモードをサポートしています。

バッチ・モード

これはOC4Jで使用されるデフォルトのコンパイル・モードです。一般的に、バッチ・モードでは、多数のEJBを含む大型アプリケーションをデプロイするときに処理が迅速に行われます。ただし、非バッチ・モードでのデプロイよりも大容量のヒープ・メモリー割当てが必要です。

このモードでは、OC4JはJavaコンパイラを1回コールして、デプロイしているEAR内のすべてのEJBモジュールに対するすべてのJavaラッパー・コードをコンパイルします。

コンパイラがプロセス外モードで実行するように構成されている場合(OC4Jのデフォルト)、OC4Jは1つのJVMプロセスを作成して、ラッパー・コードのコンパイルを実行します。コンパイラをプロセス外で実行するように構成する方法や、OC4Jと同じJVMプロセスで実行するように構成する方法は、「プロセス外またはプロセス内でのコンパイラ実行の構成」を参照してください。

非バッチ・モード

OC4Jがバッチ・モードでのコンパイル中にjava.lang.OutOfMemory例外をスローした場合は、必要なメモリー割当てが少ない非バッチ・モードでコンパイルしてください。ただし、このモードを使用するとデプロイの時間が長くかかります。

このモードでは、OC4Jは複数のコンパイラをコールします。つまり、デプロイしているEAR内のEJB JARファイルごとに1つずつコールします。

Javaコンパイラがプロセス外モードで実行するように構成されている場合、OC4Jは、デプロイしているEARファイルに含まれるEJB JARファイルごとにJVMプロセスを作成します。

非バッチ・モードでデプロイするには、application.xmlまたはorion-application.xml<orion-application>要素のbatch-compile属性をfalseに設定します。次に例を示します。

<orion-application ... batch-compile="false" .../>

ラッパー・コードのデバッグ

OC4JはEJB 2.1 CMPアプリケーションをデプロイすると、デフォルトでラッパー・コードをORACLE_HOME/j2ee/instance/application-deployments/ear-name/ejb-name/generatedディレクトリに生成し、そのコードをコンパイルし、コンパイルされたクラスを含むJARファイルを作成してから、生成したラッパー・コードを削除します。生成したラッパー・コードを保持するようにOC4Jを設定することもできます。ラッパー・コードを調べると、アプリケーションのなんらかの問題のデバッグに役立つ場合があります。


注意:

コンパイルのバッチ・モードと非バッチ・モードの指定に使用していたejbdeploy.batchシステム・プロパティは、OC4J 10g(10.1.3.5.0)では非推奨になります。

生成したラッパー・コードのデバッグもこのリリースでは非推奨になります。

これらのオプションはコンテナ管理の永続性を持つEJB 2.1エンティティBeanのみに適用されます。セッションBean、メッセージドリブンBeanまたはEJB 3.0エンティティには適用されません。OC4Jは、コンテナ管理の永続性を持つ各EJB 2.1エンティティBeanに対して1ファイルだけ生成します。ユーザーがEJB 3.0エンティティのみを使用すると、OC4Jはアーティファクトを生成しません。


Javaコンパイラの構成

この項では、デプロイ中にEJBラッパー・クラスやJSPをコンパイルするJavaコンパイラの構成に関するガイドラインを説明します。次の項目について説明します。

すべてのコンパイラ構成パラメータは、<java-compiler>要素の属性としてORACLE_HOME/j2ee/instance/config/server.xml(OC4Jサーバー構成ファイル)に指定されることに注意してください。

代替Javaコンパイラの指定

デフォルトでは、OC4JはSun Microsystems JDKに含まれるjavacコンパイラを使用して、生成したEJBラッパー・クラス、JavaServer Pages、Webサービス・クラス、およびアプリケーションにパッケージされた任意の.javaファイルをコンパイルします。ただし、server.xml<java-compiler>要素を代替コンパイラ構成に変更することで、別のJavaコンパイラを使用するようにOC4Jを構成できます。

たとえば、次の表記法では、OC4JはIBMのJikesコンパイラを使用します。

<java-compiler name="jikes" in-process="false"/>

プロセス外またはプロセス内でのコンパイラ実行の構成

Javaコンパイラは、2つのモード(プロセス外またはプロセス内)のいずれかで実行するようにOC4J内で構成できます。

プロセス外

このモードでは、コンパイラの実行のために個別のJVMプロセスが生成されます。これは、OC4Jで使用されるデフォルトのコンパイラ実行モードで、メモリー・リソースの管理に優れています。EJBラッパー・クラスのコンパイルが完了すると、関連するJVMに割り当てられていたメモリーが解放され、他のプロセスで使用できるようになります。

<java-compiler>要素のin-process属性をfalseに設定すると、このモードでコンパイルが実行されます。

プロセス内

このモードでは、コンパイラはOC4Jと同じJVMプロセスで実行されます。<java-compiler>要素のin-process属性をtrueに設定すると、このモードでコンパイルが実行されます。

Javaコンパイラ構成パラメータのまとめ

表4-1に、server.xml(OC4J構成ファイル)でJavaコンパイラの構成を定義する<java-compiler>要素の属性をまとめています。

表4-1 <java-compiler>要素の属性

属性 説明

name

値: 文字列

デフォルト: javac

コンパイラ名を指定します。デフォルト値のjavacを設定すると、Sun javacコンパイラが使用されます。

bindir

値: 文字列

コンパイラのディレクトリの絶対パスを指定します。

デフォルトのjavacコンパイラを使用するときはこの属性を指定する必要はありません。

in-process

値: ブール デフォルト: false

Javaコンパイラをプロセス内(true)とプロセス外(false)のどちらで実行するかを指定します。

options

コマンドライン・オプションをJavaコンパイラに渡すときに使用します。複数のオプションは空白で区切って指定します。次に例を示します。

<java-compiler name="javac" options="-J-Xmx2048m -J-Xss=8m"/>

encoding

値: 文字列 デフォルト: ISO-8859-1

使用するソース・ファイルのエンコーディングを指定します。

extdirs

コンパイラの拡張機能ライブラリの場所を指定します。

debug

値: ブール デフォルト: false

trueに設定すると、コンパイル時にデバッグ出力が生成されます。


大型デプロイ用のOC4J JVMのチューニング

大型アプリケーションをデプロイするときは、OC4J JVMのヒープ・サイズ(若い世代と古い世代)の設定のみでなく、永続的な世代のサイズにも注意してください。

JVMの永続的な世代は、大型アプリケーションをデプロイするときに重要な役割を果します。大型アプリケーションには、数百あるいは数千に及ぶEJBモジュールが含まれることがあり、OC4J JVMは多数のクラスをロードする必要があります。このため、永続的な世代のサイズ値を高く設定してください。

永続的な世代の設定サイズが小さすぎると、ヒープに十分な空きメモリーがある場合でも、JDKからjava.lang.OutOfMemoryErrorエラーを受け取ります。この場合は、-XX:MaxPermSizeプロパティを設定して永続的な世代(Perm)のサイズを増やしてください。

たとえば、合計ヒープ・サイズを768MBに設定するには、OC4Jの起動時に次のように設定します。

java -Xms512m -Xmx512m -XX:MaxPermSize=256m -jar oc4j.jar

若い世代と古い世代のサイズも含めて-XX:MaxPermSizeプロパティの値を決めるには、visualgcを使用してアプリケーションのデプロイ時にOC4J JVMを監視します。visualgcガベージ・コレクションのモニタリング・ツールは、Sun社が提供する無料のjvmstat 3.0ディストリビューションに含まれています。このツールの詳細やダウンロード方法は、次のWebサイトを参照してください。

http://java.sun.com/performance/jvmstat/