Oracle Developer Suiteリリース・ノート 10gリリース2(10.1.2)for Solaris Operating System (SPARC), Microsoft Windows, and Linux x86 B25106-03 |
|
![]() 戻る |
この章では、Oracle Application Server Containers for J2EE(OC4J)に関する問題について説明します。この章の内容は次のとおりです。
10.1.2.0.2では、次のOC4J関連のバグが修正されました。
Bug 4373794 - OC4J 10.1.2 - FATAL ERROR CODE ENHANCEMENT - この修正内容については、このドキュメントの「致命的なエラー・コードの拡張」で説明しています。
Bug 4226465 - MULTIPLE CONNECTION POOLS EXIST FOR SAME DATA SOURCE - コードのBug 4226465とドキュメントのBug 4373802が修正されました。修正内容については、このドキュメントの「修正された接続プールの問題」で説明しています。
この項では、OC4Jの構成に関する問題とその対処方法について説明します。この項の内容は次のとおりです。
クライアント・ライブラリの互換性の制約により、任意のOracle JDBC-OCIドライバ・バージョンにアップグレードすることはできません。Oracle Application Server 10g(10.1.2)内にインストールされたOracleクライアント・ライブラリに対応するOCIドライバ・バージョンへのアップグレードのみがサポートされています。たとえば、Oracle JDBC 10.1.xドライバはサポートされていますが、Oracle JDBC 9.2.xドライバはサポートされていません。
Oracle Application Server内でJDBC-OCIを使用できる場合、各OC4Jインスタンスのopmn.xml
エントリが適切なORACLE_HOME
とライブラリ・パスの値をその起動環境に伝播することも必要になります。
環境変数ORACLE_HOME
はすべてのプラットフォームに共通ですが、ライブラリ・パスを指定する環境変数の名前はオペレーティング・システムによって異なります。
LD_LIBRARY_PATH
(Solarisの場合)
SLIB_PATH
(AIXの場合)
SHLIB_PATH
(HP-UXの場合)
PATH
(Windowsの場合)
ライブラリ・パスをopmn.xml
で指定する一般的な構文は次のとおりです。
<variable id="<LIB_PATH_VARIABLE>" value="<LIB_PATH_VARIABLE_VALUE>"/>
<LIB_PATH_VARIABLE>
は、ライブラリ・パスを指定するプラットフォーム固有の適切な変数名と置き換えてください。また、
<LIB_PATH_VARIABLE_VALUE>
を、その変数の値と置き換えてください。
次に、Solaris OSの場合の例を示します。
<process-type id="OC4J_SECURITY" module-id="OC4J"> <environment> <variable id="ORACLE_HOME" value="/u01/app/oracle/product/inf10120"/> <variable id="LD_LIBRARY_PATH" value="/u01/app/oracle/product/inf10120/lib" /> </environment> ...
デプロイするアプリケーションに対してOC4JのデフォルトのJVMヒープ・サイズが小さすぎる場合、OC4Jプロセスでメモリー不足エラーが発生することがあります。ディレクトリ$ORACLE_HOME/opmn/logs
にあるOC4Jインスタンスのログ・ファイルを確認すると、次のようなエラーが含まれる場合があります。
java.lang.OutOfMemoryError
この問題を回避するには、OC4JインスタンスのJavaコマンドライン・オプションを変更し、指定されているヒープ・メモリーを増やします。
Application Server Controlコンソールを使用して、OC4Jインスタンスのホーム・ページを開き、次の手順を実行します。
OC4Jインスタンスを停止します。
「サーバー・プロパティ」ページにドリルダウンします。
「サーバー・プロパティ」ページの「コマンドライン・オプション」で、「複数仮想マシン構成」ヘッダーの下にある「Javaオプション」を設定します。
たとえば、JVMヒープ・サイズを512MBに設定するには、次のように入力します。
-Xmx512m
「適用」ボタンを使用して変更を適用します。
OC4Jインスタンスを起動します。
詳細は、『Oracle Application Serverパフォーマンス・ガイド』を参照してください。
OC4J 10.1.2に同梱されていないJDK 1.3を使用するには、JDK 1.3を次の手順に従って変更します。
http://java.sun.com/products/jaas
からJAAS1.0_01をダウンロードし、インストールします。
JAAS1.0_01ディストリビューションからjaas.jar
をjre/lib/ext
にドロップします。
jre/lib/security/java.security
に次の行を追加します。
#These two lines are Oracle-specific definitions # auth.policy.provider=oracle.security.jazn.spi.PolicyProvider @ login.configuration.provider=oracle.security.jazn.spi.LoginConfigProvider
スタンドアロンOC4Jで、最大接続数を構成するには、server.xml
ファイルの<application-server>
の<max-http-connections>
サブ要素を使用します(詳細は、『Oracle Application Server Containers for J2EEユーザーズ・ガイド』を参照)。
<application-server>
の<max-ajp-connections>
サブ要素を使用して、Oracle HTTP Serverの最大接続数も構成できます。次に例を示します。
<application-server>
...
<max-ajp-connections value="10000" max-connections-queue-timeout="10"
close-idle-connection="allow">
http://optional.redirect.url/page.jsp
</max-ajp-connections>
...
<application-server>
要素の(任意の)値は、「redirect-URL」を示します。その使用方法を次に説明します。
<max-ajp-connections>
の属性
value
: 最大接続数。デフォルト値は、制限のない場合、-1です(0は予約値)。
max-connections-queue-timeout
: 接続数が最大接続数未満に減少するまでの待ち時間(秒単位)。接続が試行されたときに、最大接続数に達しており、タイムアウト値を経過しても利用できる接続がない場合は、他の設定(後述)に応じて適切なアクションが実行されます。デフォルト値は0秒です。
close-idle-connection
: "allow
"(デフォルト値)を指定すると、最大接続数に達し、queue-timeout値を経過した場合に、最低使用頻度(LRU)の空き接続が切断され、新しい接続を使用できるようになります。LRUの空き接続が切断されないようにするには、"deny
"を指定します。
socket-backlog
: ソケット・レベルで接続が拒否されるまで、待機できる接続数。デフォルト値は30です。これは、<max-http-connections>
機能から継承された値ですが、他の<max-ajp-connections>
属性で設定する以外の用途はありません。つまり、デフォルト以外の値を使用する理由はありません。
接続が試行されたときに、最大接続数に達してタイムアウト値が経過していた場合は、次の3つのレスポンスを指定できます。
close-idle-connection="allow"
を指定した場合は、接続リスナーがクライアント・ソケットを切断して(稼動中のスレッドはタスクが完了した後で)、最も古い空き接続を切断します。これにより、接続試行は受け入れられます。
close-idle-connection="deny"
を指定し、前述の<max-ajp-connections>
要素値でredirect-URLを指定している場合、接続リスナーはHTTPレスポンス302「一時的に移動されました」によって接続試行を拒否します(クライアント・システムは、ただちに別のURLへの接続を再試行します)。その後、接続試行のクライアント・ソケットは切断されます。
close-idle-connection="deny"
を指定し、redirect-URLを指定していない場合は、接続リスナーは接続試行を拒否して、HTTPレスポンス503「サービスが使用不可です」を送信します。その後、接続試行のクライアント・ソケットは切断されます。
この項では、Enterprise JavaBeans(EJB)に関する問題について説明します。この項の内容は次のとおりです。
リリース9.0.4.1と10.1.2では、次のorion-ejb-jar.xml
属性が非推奨になりました。リリース10.1.3では削除される予定です。
max-instances-per-pk
min-instances-per-pk
disable-wrapper-cache
また、次のlocking-mode
属性設定も非推奨になりました。
locking-mode="old_pessimistic"
多数のEJBを含むEARファイルをデプロイすると、OutOfMemory
例外が発生します。
デプロイ・プロセスでは、各EJBに対してラッパー・コード・クラスが生成されます。これらのクラスのサイズは、Bean上のビジネス・メソッドの数に比例します。パフォーマンスを最適化するために、OC4Jはすべてのラッパー・コード・クラスを1回のコンパイラ起動でコンパイルします。生成されるラッパー・コードの数が使用可能メモリーに対して多すぎる場合、エラーが発生することがあります。
これを回避するには、デプロイ・プロセスで、各EJBモジュールのラッパー・コードを個別にコンパイルします。これには、次のようにejbdeploy.batch
システム・プロパティをfalse
に設定して、OC4Jを起動します。
-Dejbdeploy.batch=false
注意: この対処方法は、この例外が発生した場合にのみ使用してください。これにより、アプリケーションのデプロイ時間が長くなる場合があります。 |
zh_CN.GB18030ロケールで実行すると、EJBラッパー・コードのコンパイル・エラーが発生します。zh_CN.GB18030ロケールで実行すると、一部のEJBラッパー・ソース・コードの生成で文字が欠落する場合があります。この結果、コンパイル・エラーが発生します。生成されるソース・コードで文字が欠落するのは、次のサイトに記載されているSun社のバグが原因です。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4954023
これを回避するには、別のロケールを使用します。詳細は、Sun社のバグの説明を参照してください。
インスタンス・プーリングを無効にするには、orion-ejb-jar.xml
ファイルで新しい<max-instances>
設定にマイナス値を使用します。これにより、EJBコールの開始時に新しいインスタンスが作成され、コールの終了時にそのインスタンスが解放されます。
非バッチ・モードでコンパイルするには(たとえば、バッチ・モードでのコンパイル時に、OC4Jがjava.lang.OutOfMemory
例外をスローする場合)、-Dejbdeploy.batch=false
オプションを使用します。非バッチ・モードでは、メモリの使用量が少なくて済みますが、デプロイ時間は長くなります。
この項では、OC4Jサービスに関するリリース・ノートについて説明します。OC4Jサービスには、Java Naming and Directory Interface(JNDI)、Java Message Service(JMS)、データソース、Oracle Remote Method Invocation(ORMI)、J2EE Interoperability(IIOP)、Java Transaction API(JTA)、J2EE Connector Architecture(J2CA)およびJava Object Cacheが含まれています。
この項の内容は次のとおりです。
この項では、データソースに関する問題について説明します。この項の内容は次のとおりです。
リリース9.0.4では、データソースは同じデータソースに対して複数の接続プールを正しく作成していませんでした。つまり、トランザクション接続と非トランザクション接続ごとにプールが作成されていました。
この動作はリリース10.1.2で修正されています。
data-sources.xml
で定義された各データソースに、データソースが通信するバックエンド・データベースがアクセス不可能になったことを示す、致命的なエラー・コードを定義できます。OC4Jがこれらのエラー・コードの1つを検出すると(JDBCドライバによってSQLExceptionがスローされると)、OC4Jはその接続プールを一掃します。つまり、接続プール内のすべての接続が切断されます。Oracleの場合、あらかじめ定義されている致命的なエラー・コードは、3113
、3114
、1033
、1034
、1089
および1090
です。
Oracleの致命的なエラー・コードを追加するには、次の手順を実行します。
<data-source>
要素のサブタグである<fatal-error-codes>
要素を使用します。<fatal-error-codes>
要素では子要素である<error-code>
を使用して致命的エラー・コードを1つずつ定義します。各<fatal-error-codes>
要素の下に0〜n個の<error-code>
要素を定義できます。たとえば、致命的エラー・コード10
、20
および30
の場合、データソース定義は次のように記述できます。
<data-source class="com.evermind.sql.DriverManagerDataSource" name="ds" location="jdbc/ds" xa-location="jdbc/xa/ds" ejb-location="jdbc/ejb/ds" @ connection-driver="oracle.jdbc.driver.OracleDriver" username="scott" @ password="tiger" @ url="jdbc:oracle:thin:@//localhost:1521/oracle.regress.rdbms.dev.us.oracle.com"> <fatal-error-codes> <error-code code='10'/> <error-code code='20'/> <error-code code='30'/> </fatal-error-codes> </data-source>
10.1.2.0.2では、次の接続プール問題が修正されました。
10.1.2.0.2バージョンより前のOC4Jでは、データソース・サブシステムは、次のような場合に、同じデータソースに対して複数の接続プールを作成していました。
同じスレッドの実行時に(たとえば、サーブレットの実行時)、グローバル・トランザクションの内部とグローバル・トランザクションの外部で接続が使用される場合。この場合、グローバル・トランザクション内で使用する接続に1つの接続プールが作成され、グローバル・トランザクションの外部で使用する接続に別の接続プールが作成されていました。
デフォルト以外のユーザー/パスワードを使用してデータソースから接続を獲得する場合。たとえば、getConnection()
を使用すると、1つの接続プールが作成され、getConnection("user", "password")
を使用すると別の接続プールが作成されていました。これは、ユーザー/パスワードの組合せごとに別の異なる接続プールが作成されるため、適切ではありません。
データソースの接続を共有する構成を行うと、別のデータソースが作成され、前述した接続プール問題のすべてが発生していました。
この問題は、コードのBug 4226465とドキュメントのBug 4373802で修正されています。
この項では、ORMIに関する問題について説明します。この項の内容は次のとおりです。
OC4Jは、IPv4ソケットのみを作成します。デュアル・ネットワーク・スタック・マシン(IPv4とIPv6の両方のスタックが使用可能なマシン)上でも、OC4JはIPv4ソケットのみを作成します。このため、クライアントが発行したリクエストがIPv6システムからである場合、問題が発生することがあります。これは、サーバーからIPv6クライアントへの接続拒否メッセージによって示されます。この問題を回避するには、システム・プロパティjava.net.preferIPv4Stack=true
を使用してクライアント・プロセスを起動します。これにより、クライアントが発行するのはIPv4リクエストのみとなり、サーバーとの通信が可能になります。
ORMIプロトコルはセキュアでないことに注意してください。ORMIを介した通信は、セキュリティ資格証明を含めて暗号化されません。ORMIトラフィックの暗号化が必要な場合は、ORMIをHTTPSで使用することをお薦めします。HTTPSでは、クライアントとサーバー間のすべての通信が暗号化されます。
リリース10.1.2.0.2でOracle Application Server Java Authentication and Authorization Service(JAAS)Provider(OracleAS JAAS Provider)を使用する場合の注意点について説明します。
Oracle Internet Directory 10.1.2の実装前までは、アクセス制御リスト(ACL)機能はJAZNAdminGroupに対して正しく設定されませんでした。OracleAS JAAS Provider 10.1.2の実装にOracle Internet Directory 9.0.4の実装を使用するには、ファイルに次のコードを追加し、%s_MgmtRealmDN%
を適切なID管理レルムと置き換えて(たとえば、dc=us,dc=oracle,dc=com
)、後述の手順を実行します。
dn: cn=JAZNContext,cn=Products,cn=OracleContext,%s_MgmtRealmDN% changetype: modify replace: orclaci orclaci: access to entry by group= "cn=JAZNAdminGroup,cn=Groups,cn=JAZNContext,cn=Products,cn=OracleContext" (browse, add, delete) by group= "cn=IASAdmins,cn=Groups,cn=OracleContext,%s_MgmtRealmDN% added_object_constraint=(objectclass=orclApplicationEntity) (add, delete, browse) by * (none) orclaci: access to attr=(*) by group= "cn=JAZNAdminGroup,cn=Groups,cn=JAZNContext,cn=Products,cn=OracleContext" (search, read, write, compare) by group= "cn=IASAdmins,cn=Groups,cn=OracleContext,%s_MgmtRealmDN%" (read, search, write, compare) by * (none)
ファイルに.ldif
拡張子を付けて名前を指定します。たとえば、jaznacl.ldif
のように指定します。
新しく作成したファイルを入力に指定し、必要に応じてoidport
、oidhost
、adminuser_dn
、passwordおよびfilenameを指定して、ldapmodify
ユーティリティを実行します。
ldapmodify -c -a -p oidport -h oidhost -D adminuser_dn -w password \ -f filename.ldif
OracleAS JAAS Provider 10.1.2.0.2の実装は、orion-web.xml
ファイルまたはorion-application.xml
ファイルで、<jazn-web-app>
要素のauth-method="DIGEST"
設定をサポートするようになりました。これは、すでにサポートされている設定auth-method="SSO"
に追加されます。DIGEST
のサポートは、すでに10.1.2.0.2の『Oracle Application Server Containers for J2EEサーブレット開発者ガイド』(orion-web.xml
の参照ドキュメントを含む)に記載されていますが、10.1.2.0.2の『Oracle Application Server Containers for J2EEユーザーズ・ガイド』(orion-application.xml
の参照ドキュメントを含む)には記載されていません。「SSO
」は、Oracle Application Server Single Sign-OnをHTTPクライアント認証用に使用するためのもので、「DIGEST
」はダイジェスト認証メカニズムを使用するためのものです。詳細は、10.1.2.0.2の『Oracle Application Server Containers for J2EEセキュリティ・ガイド』を参照してください。
この項では、Oracle Application Server 10gリリース2(10.1.2)のOC4Jドキュメントの記載内容の誤りについて説明します。この項の内容は次のとおりです。
第7.6.1項「『Oracle Application Server Containers for J2EEユーザーズ・ガイド』の記載内容の誤り」
第7.6.3項「『Oracle Application Server Containers for J2EEサービス・ガイド』の記載内容の誤り」
第7.6.4項「『Oracle Application Server Containers for J2EEセキュリティ・ガイド』」
この項では、『Oracle Application Server Containers for J2EEユーザーズ・ガイド』の記載内容の誤りについて説明します。この項の内容は次のとおりです。
付録A「OC4Jのトラブルシューティング」の「ステートフル・ファイアウォールによる接続タイムアウトがシステム・パフォーマンスに影響」で説明されている解決策に、非推奨のパラメータOc4jUserKeepalive
に関する記述があります。この記述は無視してください。パラメータは、httpd.conf
およびmod_oc4j.conf
のどちらの構成ファイルでも使用しないでください。
『Oracle Application Server Containers for J2EEユーザーズ・ガイド』のデプロイに関する説明には、アンデプロイおよび再デプロイについての次の注意も必要です。
アンデプロイ/再デプロイに関する一般的な注意:
アプリケーションはOC4Jからアンデプロイされると、クライアントにアクセスできなくなります。Oracle Application Server環境では、Oracle HTTP Serverが再起動され、OC4Jのマウント・ポイントが削除されます。これによって、既存のHTTPセッションが失われます。
再デプロイ時には、新しいEARを再デプロイする前に、OC4Jによって既存のアプリケーション(EAR/WAR)が削除されます。このため、たとえば、以前のアプリケーションに含まれていて、新しいアプリケーションには含まれていないHTMLファイルにアクセスしようとすると、「File Not Found
」というエラーになります。
再デプロイされたWARファイルは、以前に展開されたWARの上に重ねて配置され、これによって新しいデプロイメントに古いファイルが保持される場合があるため、古いファイルを削除する必要があります。たとえば、新しいWARには含まれていない以前のデプロイメントの静的HTMLファイルは、展開されたWARディレクトリ構造にも含まれるため、手動で削除する必要があります。
ホット再デプロイに関する注意:
実行中のOC4JインスタンスでEARを再デプロイまたはホット再デプロイすると、以前のアプリケーションからJVMにロードされたクラスのステータスが変更される場合があります。ClassLoaderはファイル・システムのクラスまたはJARファイルが変更されたと認識し、クラスやライブラリを再ロードする場合があります。その他の場合として、新しいクラス定義がロードされるかどうかが、ガベージ・コレクタによる既存のクラス定義の削除をJVMチューニングが許可しているかどうかに依存する場合があります。
セッション・データを含むシリアライズされたオブジェクトに関する問題もあります。セッション・オブジェクトに関連するクラスが変更された場合、そのクラスは、元のクラスへ一般的なセッション・オブジェクトをキャストできない場合があります。これは、クラスが変更されると、その変数では、異なるメモリーを使用する場合があるためです。これによって、セッション・データが失われる場合があります。
Oracle Application Server環境では、ホット・デプロイ(OC4Jの再起動を伴わないアプリケーションのデプロイ)によって、Oc4jMountディレクティブがmod_oc4j.confに追加され、Oracle HTTP Serverが再起動されます。これによって、既存のHTTPセッションが失われます。
この項では、『Oracle XML APIリファレンス』の記載内容の誤りについて説明します。この項の内容は次のとおりです。
『Oracle XML APIリファレンス』の第15章「C++用のDOM APIパッケージ」に次の情報を追加してください。
表15-7「DOMImplRefメソッドの概要: DOMパッケージ」に、formDocument()
メソッドのエントリを追加し、その説明を「ドキュメントへのポインタを与えられると、ドキュメント参照を形成します。」にします。
次のメソッドの説明を追加します。
formDocument()
説明
ドキュメントへのポインタを与えられると、ドキュメント参照を形成します。
構文
DocumentRef< Node>* formDocument( Node* node);
----------------------------------------------------
パラメータ 説明
----------------------------------------------------
node ドキュメント・ノードへのポインタ
----------------------------------------------------
戻り値
ドキュメント参照へのDocumentRef< Node>*
ポインタ
この項では、『Oracle Application Server Containers for J2EEサービス・ガイド』の記載内容の誤りについて説明します。この項の内容は次のとおりです。
9.0.4および10.1.2.x用の『Oracle Application Server Containers for J2EEサービス・ガイド』の「データソース」、DataDirectデータソースのエントリ例に関する項にある例のURLは間違っています。
URLの次の部分が誤りです。
url="jdbc:databasevendor://...
正しいURLは、次のようになります。
url="jdbc:oracle:databasevendor://...
DataDirectデータソースのエントリの正しい例は次のとおりです。
SQLServer
SQLServerデータベースのデータソースの構成例は次のとおりです。
<data-source class="com.evermind.sql.DriverManagerDataSource" name="OracleDS" location="jdbc/OracleCoreDS" xa-location="jdbc/xa/OracleXADS" ejb-location="jdbc/OracleDS" schema="database-schemas/ms-sql.xml" connection-driver="com.oracle.ias.jdbc.sqlserver.SQLServerDriver" username="mssql" password="mssql" url="jdbc:oracle:sqlserver://PZWU-PC\WUPZIAS;User=mssql;Password=mssql" inactivity-timeout="30" />
DB2
DB2データベースのデータソースの構成例は次のとおりです。
<data-source class="com.evermind.sql.DriverManagerDataSource" connection-driver="com.oracle.ias.jdbc.db2.DB2Driver" name="OracleDS" location="jdbc/OracleCoreDS" xa-location="jdbc/xa/OracleXADS" ejb-location="jdbc/OracleDS" schema="database-schemas/db2.xml" username="db2admin" password="db2admin" url="jdbc:oracle:db2://ying.us.oracle.com:50000;DatabaseName=sample;CreateDefa ultPackage=TRUE" inactivity-timeout="30" />
Sybase
Sybaseデータベースのデータソースの構成例は次のとおりです。
<data-source class="com.evermind.sql.DriverManagerDataSource" name="OracleDS" location="jdbc/OracleCoreDS" xa-location="jdbc/xa/OracleXADS" ejb-location="jdbc/OracleDS" schema="database-schemas/sybase.xml" connection-driver="com.oracle.ias.jdbc.sybase.SybaseDriver" username="JDBC_TEST" password="JDBC_TEST" url="jdbc:oracle:sybase://dlsun150:4101" inactivity-timeout="30" />
Informix
Informixデータベースのデータソースの構成例は次のとおりです。
<data-source class="com.evermind.sql.DriverManagerDataSource" name="OracleDS" location="jdbc/OracleCoreDS" xa-location="jdbc/xa/OracleXADS" ejb-location="jdbc/OracleDS" schema="database-schemas/informix.xml" connection-driver="com.oracle.ias.jdbc.informix.InformixDriver" username="tg4odbc" password="tg4odbc" url="jdbc:oracle:informix://dlsun150:3900;informixServer=gtw93;DatabaseName=ga tewaydb" inactivity-timeout="30" />
この項では、『Oracle Application Server Containers for J2EEセキュリティ・ガイド』に関する問題について説明します。この項の内容は次のとおりです。
『Oracle Application Server Containers for J2EEセキュリティ・ガイド』のデプロイのロールとユーザーに関する項の例で、<member>
要素のサブ要素である<type>
と<name>
が適切に閉じられていません。修正後の例は次のとおりです。
<role> <name>developer</name> <members> <member> <type>user</type> <name>john</name> </member> </members> </role>
『Oracle Application Server Containers for J2EEセキュリティ・ガイド』に、internal-settings.xml
ファイルでキーストア・パスワードとトラストストア・パスワードに関してパスワードの間接化がサポートされていると誤って記載されています。これは、間違っています。internal-settings.xml
ファイルでは、パスワードの間接化はサポートされていません。