この章では、Oracle Containers for J2EEに関連する問題と新機能について説明します。内容は次のとおりです。
HTTPクライアント・ライブラリは、OC4Jシステム・クラス・ローダーによってロードされるため、OC4Jインスタンスにデプロイされているすべてのアプリケーションによって継承されます。その結果、HTTPクライアントの静的メモリーは、すべてのアプリケーションで共有されます。HTTPクライアントの静的メモリーに格納されているデフォルト値をアプリケーションが変更すると、同じHTTPクライアント・ライブラリに依存する他のアプリケーションに影響を与える可能性があります。この問題の回避方法は、各アプリケーションでHTTPクライアント・ライブラリのローカル・コピーをインポートすることです。その結果、HTTPクライアントの静的メモリーは、そのアプリケーション専用となり、別のアプリケーションによって変更できません。
次の例では、HTTPクライアント・ライブラリのローカル・コピーをインポートし、OC4Jシステム・クラス・ローダーによってロードされたHTTPクライアント・ライブラリを継承しないように、アプリケーションを構成する方法を示しています。変更は、アプリケーションのorion-application.xml
ファイルで行う必要があります。
<orion-application>
...
<imported-shared-libraries>
<remove-inherited name="oracle.http.client">
</imported-shared-libraries>
...
<library path="ORACLE_HOME/j2ee/home/lib/http_client.jar"/>
...
</orion-application>
OracleAS JAAS Provider移行ツールを使用して、ファイルベースのプロバイダからOracle Identity Management(基本的にはOracle Internet Directory)セキュリティ・プロバイダに、policy
モードまたはall
モードのいずれかでポリシーを移行するときには、次の問題に注意してください。移行ツールは、ポリシー構成において、Oracle Internet Directoryレルム名を、権限受領者エントリのカスタムまたは非レルムのプリンシパル名の先頭に追加します。(カスタム・プリンシパルは、たとえば、カスタム・ログイン・モジュールを使用した認証時に、作用する可能性があります。)
移行された構成では、権限受領者エントリのカスタム・プリンシパル名は、たとえば、単なるanyone
ではなく、us/anyone
になります(us
はレルム名)。その結果、権限の問題が生じます。たとえば、ADFアプリケーションの場合、セキュリティ・プロバイダとしてのOracle Internet Directoryへの移行後に公開ページが機能しなくなります。
この問題には、次の回避方法があります。
移行ツールによって作成されたLDIFファイルが、Oracle Internet Directoryにインポートされる前に、LDIFファイルから手動でus/
接頭辞を削除します。
移行後、Oracle Internet Directoryの管理ツールを使用して、関連する権限受領者エントリから手動でus/
接頭辞を削除します。
アプリケーション用に外部LDAPプロバイダを使用する予定の場合、デフォルトのXMLセキュリティ・プロバイダで構成される中間層インストールの使用をお薦めします。
インフラストラクチャ・インストール(OIDなど)と関連する中間層インストールがあり、外部LDAPプロバイダを使用する場合、手動でjazn.xml
ファイルを編集する必要があります。<jazn>
要素のprovider属性とlocation属性を次のように変更します。
<jazn provider="XML" location="./system-jazn-data.xml" ... >
JDK 1.5をJDK 1.4.2に置き換えると、OC4Jが起動せず、OPMNログ(ORACLE_HOME/opmn/logs//default_group~home~default_group~1.log)
には次のようなエラーが記録されます。
-------- Start process -------- **************************** WARNING ****************************** You are currently running with data limits not set to unlimited. You may experience out of memory(OOM) conditions. In the event of an OOM error, please increase the data limit value. You may use "ulimit -d unlimited" to set data limit as unlimited. ******************************************************************* [ Unrecognized option: -Xjit:exclude={oracle/sysman/emSDK/eml/util/iAS/IASLogConfig.getViewLogsURL(Ljav ax/servlet/ServletContext;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/ http/HttpServletResponse;)Ljava/lang/String;}, exclude={oracle/security/jazn/util/OHSH.update([B)V}, exclude={com/phaos/ASN1/ASN1Sequence.<init>(Ljava/io/InputStream;)V}, exclude={com/phaos/crypto/DES.l([B[IZ)V} ] [ JVMCI123: Unable to parse 1.2 format supplied options - rc=-6 ] Could not create JVM.
JDK 1.4.2でOC4Jが確実に起動するようにするには、次の回避方法を使用します。
opmn.xml ($ORACLE_HOME/opmn/conf/opmn.xml)
から次の行を削除します。
-Xjit:exclude={oracle/sysman/emSDK/eml/util/iAS/IASLogConfig.getViewLogsURL( Ljavax/servlet/ServletContext;Ljavax/servlet/http/HttpServletRequest;Ljavax/s ervlet/http/HttpServletResponse;)Ljava/lang/String;}, exclude={oracle/security/jazn/util/OHSH.update([B)V}, exclude={com/phaos/ASN1/ASN1Sequence.<init>(Ljava/io/InputStream;)V}, exclude={com/phaos/crypto/DES.l([B[IZ)V}
次のコマンドを使用して、OC4Jインスタンスを起動します。
opmnctl startall
JDK 1.5をJDK 1.4.2に置き換えると、OC4Jが起動せず、OPMNログ(ORACLE_HOME/opmn/logs//default_group~home~default_group~1.log
には次のようなエラーが記録されます。
-------- Start process -------- Unrecognized VM option 'AppendRatio=3' Could not create the Java virtual machine.
JDK 1.4.2でOC4Jが確実に起動するようにするには、次の回避方法を使用します。
次のコマンドを使用して、OC4Jインスタンスを停止します。
opmnctl stopall
opmn.xml($ORACLE_HOME/opmn/conf/opmn.xml
)から次の行を削除します。
AppendRatio=3
次のコマンドを使用して、OC4Jインスタンスを起動します。
opmnctl startall
Oracle Application Server 10gリリース10.1.3.4でJDK 1.6の使用中に、JAZN移行ツールに障害が発生します。
JAZN移行ツールをJDK 1.6で実行する前に、次のコマンドを使用して、環境変数SHLIB_PATH
を設定する必要があります。
export SHLIB_PATH=$ORACLE_HOME/jdk/jre/lib/PA_RISC2.0/jli
この項では、Oracle Containers for J2EE用の新機能について説明します。この項の内容は次のとおりです。
orion-web.xml
内の<session-tracking>
要素に、URLのリライトを有効または無効にするurl-rewriting
属性が含まれるようになりました。次に例を示します。
<session-tracking url-rewriting="false"/>
url-rewriting
のデフォルト値はtrue
です。値がfalse
に設定されている場合、URLのリライトは無効です。
URLのリライトは、セッションIDをURLにエンコードする手法です。WebクライアントでCookieがサポートされておらず、アプリケーションでHTTPセッション・データにアクセスする必要がある場合、Cookieを使用するかわりに、URLのリライトを有効にすることができます。たとえば、CookieをサポートしていないWireless Application Protocol(WAP)クライアントに対して、URLのリライトを使用できます。
URLへのセッションIDのエンコードを抑止するには、<session-tracking>
のurl-rewriting
属性をfalse
に設定します。
データソース・プロキシ・セッション・サポートは、管理データソースの接続プールで自動的にプロキシ・セッションを使用できるようにすることで向上しました。プロキシ・セッションが有効の場合、OC4Jにより、プールで接続リクエストが作成されるたびに、アプリケーション認証されたユーザーの接続に対して、プロキシ・セッションが開かれます。接続がプールに返されると、プロキシ・セッションは閉じます。
プロキシ・セッション・サポートには、別のユーザーがあるユーザーとして接続できるプロキシ認証が含まれています。たとえば、プロキシ認証により、中間層で汎用アカウントを使用して一度データベースに対して認証されると、実際のユーザーにかわって軽量セッションを確立できます。プロキシ接続は、接続リクエスト時に現行のスレッド状態に関連付けられたユーザーによって取得されます。
プロキシ接続サポートを有効にするには、proxy-sessions
属性(true
に設定)を、次に示すように、data-sources.xml
の接続プール定義に追加します。デフォルトでは、プロキシ・セッションは無効です。
<managed-data-source name="OracleDS"
connection-pool-name="Example Connection Pool"
jndi-name="jdbc/OracleDS"/>
<connection-pool name="Example Connection Pool"
max-connections="100"
min-connections="20"
num-cached-statements="10"
proxy-sessions="true"
>
<connection-factory factory-class="oracle.jdbc.pool.OracleDataSource"
user="user"
password="password"
url="jdbc:oracle:thin:@localhost:5521:main">
</connection-factory>
</connection-pool>
プロキシ認証では、データベースにアプリケーション・ユーザーが存在し、適切なCONNECT THROUGH
権限を付与されていることが必要です。次のSQLは、app_user
がユーザーscott
として認証され、接続できるようにデータベースを設定するために使用されます。ユーザーscott
は、接続プール、またはdata-sources.xml
の管理データソースに対して定義する必要があります。
ALTER USER app_user GRANT CONNECT THROUGH scott