Sun GlassFish Communications Server 1.5 リリースノート

第 4 章 Sun GlassFish Enterprise Server の既知の問題と制限事項

この章では、Sun GlassFish Enterprise Server 2.1 ソフトウェアに関する既知の問題とそれに関連する回避方法について説明します。これらの問題は、Sun GlassFish Enterprise Server 2.1 上に構築された Communications Server にも影響を与えます。問題の説明にプラットフォームが明記されていない場合、その問題はすべてのプラットフォームに適用されます。この節は次の項目から構成されています。

管理

ここでは、管理上の既知の問題とその解決方法を示します。

IBM MQ に対して Generic RA Resource Adapter を配備できない (Issue 6605)

説明

IBM Message Queue 製品に対する Generic RA アダプタの配備が失敗します。server.policy ファイルで付与される権限は、次のようになります。


grant {

      permission java.util.logging.LoggingPermission "control";

      permission java.util.PropertyPermission "*", "read,write";

      }

解決方法

server.policy ファイル中の権限を、次のように変更します。


grant codeBase

"file:${com.sun.aas.installRoot}/lib/install/applications/adminapp/-" {

  permission java.util.logging.LoggingPermission "control";

 };

domain1 が存在しない場合、package-appclient スクリプトが動作しない。(6171458)

説明

デフォルトでは、as-install/lib/package-appclient.xml に、asenv.conf から参照される domain1AS_ACC_CONFIG 変数の値がハードコードされています。domain1 を削除して新たなドメインを作成した場合、AS_ACC_CONFIG 変数は新たなドメイン名で更新されません。その結果、package-appclient スクリプトの処理が失敗します。

解決方法

次のいずれかの操作を行います。

  1. domain1 はそのままにしておき、その前後に別のドメインを作成します。

  2. domain1 を削除し、as-install/lib/package-appclient.xml 内のハードコードされた domain1 の値を、新しいドメイン名で置き換えます。

domain1 がない場合、新たなドメインが作成されるたびにこれを行う必要があります。

JMX エージェントを追加した Application Server の起動はサポートされていない (6200011)

説明

Application Server では、J2SE 1.4.x または 5.0 以降を設定できます。J2SE 5.0 プラットフォームの重要な特徴は、JMX エージェントを起動できることです。サーバーの起動時にシステムプロパティーを明示的に設定すると、JMX エージェントがアクティブになります。

次に例を示します。


name="com.sun.management.jmxremote" value="true"

name="com.sun.management.jmxremote.port" value="9999"

name="com.sun.management.jmxremote.authenticate" value="false"

name="com.sun.management.jmxremote.ssl" value="false"

JMX プロパティーを設定してからサーバーを起動すると、Application Server VM 内に新たな jmx-connector サーバーが起動します。この場合は、望ましくない副作用の 1 つとして、管理機能が悪影響を受け、Application Server の管理コンソールやコマンド行インタフェースで予期しない結果が発生することがあります。問題は、組み込みの jmx-connector サーバーと新たな jmx-connector サーバーとの間で衝突が発生することにあります。

解決方法

jconsole または何らかの JMX 互換クライアントを使用する場合には、Application Server とともに起動する標準の JMX コネクタサーバーを再利用することを検討してください。

サーバーの起動時に、次に示すような行が server.log に記録されます。ここで指定されている JMXService の URL に接続し、資格を正常に指定した後、同様の管理および設定操作を実行することができます。次に例を示します。


[#|2004-11-24T17:49:08.203-0800|INFO|sun-appserver-ee8.1|

javax.enterprise.system.tools.admin|_ThreadID=10;|ADM1501: 

Here is the JMXServiceURL for the JMXConnectorServer: 

[service:jmx:rmi:///jndi/rmi://hostname:8686/management/

rmi-jmx-connector]. This is where the remote administrative 

clients should connect using the JSR 160 JMX Connectors.|#]

詳細は、『Sun GlassFish Communications Server 1.5 管理ガイド』 を参照してください。

マニュアルに .asadmintruststore ファイルが記述されていない (6315957)

説明

マニュアルに .asadmintruststore ファイルが記述されていません。このファイルがサーバー管理者の home ディレクトリに存在しないと、そのサーバー上にホストされている特定のアプリケーションをアップグレードしたときに重大なバグが発生する場合があります。

解決方法

JMS ブローカに到達するまでにタイムアウトになるため、クラスタ化されたインスタンスが起動できない (6523663)

説明

Communications Server クラスタインスタンスのデフォルト MQ 統合モードは LOCAL です。Communications Server がインストールされている場所の PATH が長い、つまり短くない場合、クラスタインスタンス起動時に imqbrokerscv.exe で障害が発生します。imqbrokersvc のメモリー割り当てに問題があります。

解決方法

クラスタインスタンスの JMS サービスタイプを、デフォルトの LOCAL から REMOTE に変更する必要があります。この設定では、すべてのインスタンスは DAS ブローカを指します。次の手順に従って、REMOTE モードでクラスタを設定してください。


注 –

REMOTE モード使用時には、すべてのインスタンスが 1 つのブローカ (DAS) を使用しているため、Communications Server クラスタが起動してもブローカクラスタは作成されません。詳細は、http://www.glassfishwiki.org/gfwiki/attach/OnePagersOrFunctionalSpecs/as-mq-integration-gfv2.txt の第 4.1 節「iii. Auto-clustering」を参照してください。それによると、上記の機能は将来使用できなくなります。


Procedureコマンド行の使用

始める前に

ご使用の環境に合わせて、ポートおよびパスワードファイルを変更してください。次に示す手順では、クラスタ名が racluster、DAS 管理ポートが 5858、および DAS JMS ポートが 7676 になっています。

  1. JMS タイプを REMOTE に変更して、クラスタ設定を変更します。


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    
    as-install/bin/password_file racluster.jms-service.type=REMOTE
  2. DAS JMS ホストに対応する JMS ホストを作成します。


    as-install/bin/asadmin.bat create-jms-host --port 5858 --user admin --passwordfile \
    
    as-install/bin/password_file --target racluster --mqhost localhost --mqport 7676 \
    
    --mquser admin --mqpassword admin dashost
  3. デフォルトの JMS ホストが前のステップで作成した DAS JMS ホストになるように設定します。


    as-install/bin/asadmin.bat set --port 5858 --user admin --passwordfile \
    
    as-install/bin/password_file racluster.jms-service.default-jms-host=dashost

Procedure管理 GUI の使用

  1. 「設定」->「cluster-name-config」->「Java メッセージサービス」->「JMS ホスト」の順に移動します。

  2. 新規」をクリックして新規 JMS ホストを作成し、dashost という名前を付けます。

  3. DAS の JMS サービスに対応する設定を入力します。デフォルト設定は次のとおりです。

    • ホスト名: localhost

    • ポート: 7676

    • 管理者ユーザー: admin

    • パスワード: admin

    これらの設定をご使用の DAS JMS サービスに適した値に変更してください。

  4. 「Java メッセージサービス」タブに戻って、JMS サービスタイプを REMOTE に変更します (デフォルトは LOCAL)。

  5. default-jms-host ドロップダウンリストから dashost を選択します。

  6. 変更を保存してから、ノードエージェントまたはクラスタを起動します。

Netscape 8.1.3、Mozilla 1.7、および Safari 2.0.4 ブラウザで jmaki チャートが表示できない (6543014)

説明

「ログ統計の監視」ページから一部のサポートされていないブラウザを使用してチャートを表示しようとすると、次のエラーがスローされます。


Error loading jmaki.widgets.jmaki.charting.line.Widget : id=form1:jmaki_chart11

Script: http://easqelx5.red.iplanet.com:4848/resources/jmaki/charting/ \

line/component.js (line:5437).

Message: area.initialize is not a function

解決方法

サポートされているブラウザを使用します。Communications Server でサポートされるブラウザのリストについては、「「ブラウザ」」を参照してください。

AIX でカスタムマスターパスワードを使用すると create-domain コマンドが失敗する (6628170)

説明

AIX オペレーティングシステムで、カスタムマスターパスワードを使用してドメインを作成しようとすると、次のエラーが発生して失敗します。


keytool error (likely untranslated): java.lang.NullPointerException

 Enter keystore password:  New keystore password:

アプリケーションクライアント

ここでは、アプリケーションクライアントに関する既知の問題とその解決方法を示します。

アプリケーションクライアントアーカイブのライブラリ JAR が MANIFEST ファイルを上書きする (6193556)

説明

クライアント JAR (たとえば reporter.jar) 内に最上位レベルの JAR ファイルがある場合、クライアント JAR を配備すると、その JAR の MANIFEST ファイルがクライアント JAR の MANIFEST ファイルを上書きします。

解決方法

現時点ではありません。

ACC が常に localhost:3700 に接続しようとする (6527987)

説明

アプリケーションクライアントが常に localhost:3700 に接続しようとします。問題は、クライアントノードを呼び出す前に、一部のシステムプロパティーが読み取られていなければならないことにあります。

解決方法

次をシステムプロパティーとして ( JAVA_CMD-D を指定して) 設定します。これらを appclient コードで設定しないでください。


org.omg.CORBA.ORBInitialHost = server-instance-host

org.omg.CORBA.ORBInitialPort = server-instance-port

ASQuickStartupSelectionKey の代わりに NULL を返して、SocketChannel.keyFor() をブレークする (Issue Tracker 3027)

説明

複数のセレクタに SocketChannel が登録されている場合、socketChannel.keyFor(lastRegisteredSelector) を実行すると SelectionKey の代わりに NULL が返されます。

解決方法

これは JDK バグ 6562829 に関連しており、6.0 U3 で修正される予定です。回避方法は Communications Server に組み込まれており、keyFor API を読み込む前はセレクタがラップ解除されています。これにより、JDK バグが修正されるまで、keyFor の正常な動作が可能になっています。

付属の Sun JDBC ドライバ

ここでは、Sun の JDBC ドライバに関する既知の問題とその解決方法を示します。

PreparedStatement エラーが発生する (6170432)

説明 1

1 つのトランザクションで 3000 を超える PreparedStatement オブジェクトを生成する場合、DB2 では次のエラーが発生する可能性があります。

[sunm][DB2 JDBC Driver] No more available statements. Please recreate your package with a larger dynamicSections value.

解決法 1

次のプロパティーを接続プール定義に追加して、ドライバが DB2 パッケージをより大きな動的セクション値に再バインドするようにします。

createDefaultPackage=true replacePackage=true dynamicSections=1000

接続プールの設定の詳細は、『Sun GlassFish Communications Server 1.5 管理ガイド』 を参照してください。

説明 2

前述の PrepardStatement エラーに関連して、次のエラーメッセージがスローされることがあります。

[sunm][DB2 JDBC Driver][DB2]Virtual storage or database resource is not available.

解決法 2

DB2 サーバー設定パラメータ APPLHEAPSZ の値を増やします。適度な値は 4096 です。

説明 3

遮断レベル TRANSACTION_SERIALIZABLE。アプリケーションが遮断レベル TRANSACTION_SERIALIZABLE を採用し、前述したパラメータの 1 つを使用している場合、そのアプリケーションは接続を取得するときにハングアップすることがあります。

解決法 3

希望の遮断レベルを接続に対して設定するには、対応する接続プールをその遮断レベルで作成する必要があります。手順については、『Sun GlassFish Communications Server 1.5 管理ガイド』 を参照してください。

マシンのリブート後または Application Server 開始後に、Java DB が起動しない (6515124)

説明

ホストシステムまたは Solaris ゾーンのリブート後、または Communications Server 起動後に、付属の Java DB データベースが自動的に再起動しません。これはバグではなく、付属または他社製のアプリケーションで所定の動作です。問題は、Communications Server インスタンスの前に Java DB を起動する必要があるということです。

解決方法

ホストマシンまたは Solaris ゾーンのリブート後、必ず Communications Server が開始する前に Java DB が起動するようにしてください。一例として、次のようにします。


/opt/SUNWappserver/appserver/bin/asadmin start-database

asadmin コマンドのオプションについては、『Sun GlassFish Communications Server 1.5 クイックスタートガイド』「管理ツール」 in the 『Sun GlassFish Communications Server 1.5 クイックスタートガイド』を参照してください。

配備

クラスタで自動配備に失敗することがある (6610527)

説明

タイミングの問題によって、クラスタをサポートするように設定されているドメインで自動配備に失敗することがあります。この問題は、クラスタをサポートしないドメインでは発生しません。

解決方法

次の解決方法のいずれかを使用します。

マニュアル

ここでは、マニュアル上の既知の問題とその解決方法を示します。

Javadoc に矛盾がある。(さまざまな ID)

いくつかの AMX インタフェースおよびメソッドについて、Javadoc が欠けているか間違っています。

付属の ANT によって java.lang.NoClassDefFoundError 例外がスローされる (6265624)

説明

スレッド「main」で java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher の例外がスローされます。

解決方法

付属の ANT を Communications Server の外部で使用することはお勧めできません。

グローバル化

SuSE 10 で CJK サポートを必要とする (6416177)

説明

SuSE 10 では CJK ロケールがインストールされている場合でも CJK のグリフが 全て四角形として表示されます。

解決方法

SuSE 10 上では、ソフトウェアインストーラーと CLI コマンドを C ロケールで 実行して下さい。

Sun Online Account の情報を入力する際、ラテン文字のみ使用可能 (6704238)

説明

ユーザーがインストールの最後に新規 Sun Online Account を作成する上で、氏 名を入力する際、マルチバイト文字を入力することができません。

解決方法

Sun Online アカウントを作成する際は、アルファベットで氏名を入力して下さい

インストール

ここでは、インストール上の既知の問題とその解決方法を示します。

一部の Linux システムで、「完了」ボタンをクリックしたあとにインストールの終了でハングアップする (5009728)

説明

この問題は、いくつかの Linux システム上で発生していました。これは Java Desktop System 2 でもっとも一般的に見られますが、Linux Red Hat ディストリビューションでも見られます。

インストールプログラムの最後の画面で「完了」ボタンをクリックすると、インストールプログラムは製品の「バージョン情報」ページまたは製品登録ページを表示するブラウザウィンドウの起動に失敗し、コマンドプロンプトに戻ることなくハングアップします。

解決方法

インストールプログラムを起動した端末ウィンドウで Ctrl+C を押すことにより、インストールプログラムを終了します。そのあとで、製品の「バージョン情報」ページまたは登録ページを表示するブラウザウィンドウが起動することがあります。ブラウザウィンドウが現れない場合には、ブラウザを起動してから次の URL を入力して「バージョン情報」ページを確認してください。


file://as-install/docs-ee/about.html

製品を登録するインストールオプションを選択した場合には、「バージョン情報」ページ上の登録ページへのリンクをたどってください。

Windows では、インストール中に imq ディレクトリを作成する必要がある (6199697)

説明

Windows では、Application Server Enterprise Edition をインストールした直後に、ディレクトリ drive:\as\domains\domain1\imq が存在しない旨のメッセージを出力して Message Queue ブローカが起動に失敗します。

domain1 を起動してからブローカを起動した場合には、Application Server によってディレクトリが作成され、この問題は発生しません。

解決方法

  1. ブローカを作成する前に var_home_dir_location を作成します。次のようにします。


    $imqbrokerd -varhome var_home_dir_location
    

    次に例を示します。


    $imqbrokerd -varhome D:\as\domains\domain1\imq

アンインストール時に productregistry ファイルが正しく更新されない。サイレントモードを使用してインストールできない (6571598)

説明

Communications Server の productregistry ファイルに共用コンポーネント設定が含まれている場合、Communications Server のアンインストール処理で productregistry ファイルが正しく更新されないため、productregistry ファイルを名前変更または削除しないかぎり、それ以降のインストールでサイレントモードを使用できなくなります。productregistry ファイル内の共用コンポーネントエントリを変更せずに残しておくことは意図的ですが、そのためにそれ以後のインストールで混乱が生じます。

解決方法

アンインストールが正常に完了したことがアンインストールログファイルによって報告されたあとに、続けてインストールを実行する前に productregistry ファイルを削除します。以前のアンインストールが正常に完了したことを確認するには、as-installappserv_uninstall.class ファイルがあるかどうかを調べます。アンインストールが正常に完了した場合には、このファイルはありません。


注 –

インストールが正常に完了していない場合は、productregistry ファイルを削除しないでください。


productregistry ファイルは、Solaris では /var/sadm/install に、Linux では /var/tmp にあります。

Java EE Tutorial

管理コンソールを使用して何らかのリソースを作成する場合には、「ターゲット」タブを使用してサーバーをターゲットとして指定します。コマンド行または asant ターゲットを使用する場合、サーバーがデフォルトのターゲットになるため、特別な処置は必要ありません。

Java Persistence

TopLink は Collection フィールド/プロパティーがクローン可能であることを想定する (Issue Tracker 556)

説明

Object[] から Collection への変換に java.util.Arrays.asList() API を使用している場合、JDK はクローン可能ではない java.util.ArrayList の実装を返します。結果として次の例外が発生します。


The method invocation of the method [protected native java.lang.Object 

java.lang.Object.clone() throws java.lang.CloneNotSupportedException] on the object 

[[pkg.A id = xxx]], of class [class java.util.Arrays$ArrayList], triggered an 

exception. Internal Exception: java.lang.reflect.InvocationTargetException Target 

Invocation Exception: java.lang.CloneNotSupportedException: 

java.util.Arrays$ArrayList

この問題は、https://glassfish.dev.java.net/issues/show_bug.cgi?id=556 で説明されています。

解決方法

別のコレクションをそのコンストラクタを使用して作成します。一例として、次のようにします。


myCollection = new ArrayList(java.util.Arrays.asList(a))

GenerationType.IDENTITY および SyBase とともに使用する DataDirect ドライバ (Issue Tracker 2431)

説明

DataDirect ドライバを SyBase とともに使用すると、GenerationType.IDENTITY を使用するエンティティーの挿入に失敗します。この失敗は、パラメータ化された PreparedStatement ごとに DataDirect ドライバがストアドプロシージャーを作成するために発生します。

解決方法

domain.xml ファイルで、対応するデータソースのプロパティー PrepareMethod=direct を設定します。

ライフサイクル管理

ここでは、ライフサイクル管理に関する既知の問題とその解決方法を示します。

ejb-timer-service プロパティーを設定すると set コマンドが失敗する (6193449)

説明

ejb-timer-service プロパティーの minimum-delivery-interval9000 に設定したあと、ejb-timer-service プロパティーの redelivery-interval-in-mills7000 に設定しようとすると、set コマンドが次のエラーにより失敗します。


[echo] Doing admin task set

[exec] [Attribute(id=redelivery-interval-internal-in-millis) : 

Redelivery-Interval (7,000) 

should be greater than or equal to Minimum-delivery-interval-

in-millis (9,000)]

[exec] CLI137 Command set failed.

これは、再発生間隔のプロパティーを最小発生間隔のプロパティーと関連付けるロジックが間違っていて、GUI または CLI を使用して再発生間隔よりも最小発生間隔が大きくなるような値を設定できないという問題です。

minimum-delivery-interval-in-millis を、ejb-timer-service プロパティーの redelivery-interval-in-millis 以上の値に設定する必要があります。redelivery-interval-in-millis の値が minimum-delivery-interval-in-millis の値よりも大きいことを確認する Application Server でのチェックに問題があります。

解決方法

次のように、これらプロパティーのデフォルト値を使用します。


minimum-delivery-interval(default)=7000

redelivery-interval-in-millis(default)=5000

これらデフォルト以外の値を指定するとエラーが発生します。

DAS 以外の config 内の JMS 物理送信先を一覧表示すると、エラーがスローされる (6532532)

説明

default-config を使用して JMS 物理送信先を表示しようとすると、エラーメッセージが表示されます。

解決方法

これは予想どおりの動作です。Communications Server 2.1 では、default-config は設定情報のテンプレートであるため、JMS 操作 (listcreate など) を default-config に対して実行できません。しかし、これらの JMS 操作をクラスタまたはスタンドアロンインスタンスの設定に対して実行することは可能です。

Win2003 のみ: ページング不可能なプールでメモリーリークが発生し、TCP スタックおよび RichAccess テストが中断する (6575349)

説明

(Windows 2003 のみ) Windows 2003 では、リッチアクセス機能実行時にメモリーリークが発生します。Win32 ページング不可能プールが増大し続け、ついには TCP/IP スタック全体が停止してしまうために起きる問題です。一度この障害が発生すると、TCP/IP スタックは回復可能状態のままになり、TCP/IP スタックを復元するには Windows 2003 システムをリブートするしかありません。

回避策

この問題には 2 つの回避方法があります。

ロギング

この節では、ログに関する既知の問題とその解決方法を示します。

access,failure のデバッグ文を設定すると、Application Server の起動時にハングする (6180095)

説明

JVM の java.security.debug オプションを設定すると、サーバーインスタンスの起動がデッドロックで動かなくなります。たとえば、domain.xml で次の設定を行うと、この問題が発生します。


<jvm-options>-Djava.security.debug=access,failure</jvm-options>

解決方法

現時点ではありません。このフラグは設定しないでください。

メッセージキュー

ここでは、Java メッセージキューに関する既知の問題とその解決方法を示します。

タイミングに依存する特定の場合に、JMS 再接続が正常に完了しない (ID 6173308、6189645、6198481、6199510、6208728)

説明

タイミングに依存する場面での再接続の失敗は、さまざまな問題によって引き起こされます。

解決方法

これらの問題は、次の方法で回避できます。

Linux 上にクラスタプロファイルがあると MQ ブローカが起動に失敗する (6524871)

説明

ドメインを作成しクラスタプロファイルを Linux システム上に配置すると、java.lang.OutOfMemoryError: Java heap space エラーが発生する場合があり、MQ ブローカが起動しないためにサーバーインスタンスが再起動できないことがあります。この状況になったシステムが回復することはありません。問題は /etc/hosts ファイルの設定ミスです。特に、サーバーホスト名がループバックアドレス 127.0.0.1 を指している場合です。

解決方法

設計上、ネットワークデバイスがループバックアドレスを指すように設定された状態で MQ ブローカクラスタが開始することはできません。これはバグではありません。回避方法は、Communications Server ホストの /etc/hosts ファイルが 127.0.0.1 を指さないようにすることです。

アップグレードの前に imqjmsra.jar を読み込む際、旧バージョンと新バージョンのクラスが一致しない (6740794)

説明

Application Server の起動中に、サーバーは Message Queue のバージョンをチェックします。Message Queue のバージョンが正しくない場合、サーバーは imqjmsra.jar を使用してアップグレードを行います。このアップグレード用の JAR とそのクラスは、次に Application Server が再起動されるまでサーバーから利用できません。この状況は、Message Queue が単独でアップグレードされる場合、または Application Server のみにパッチが適用される場合に発生します。この状況の副次的な影響として、Application Server が起動しない場合があります。

解決方法

Message Queue と Application Server の両方を同じパッチレベルに維持する必要があります。または、Application Server を再起動してください。

監視

ここでは、監視上の既知の問題とその解決方法を示します。

HTTP サービスの監視統計には有益な情報を提示しないため、無視する必要があるものがある (6174518)

説明

HTTP サービスの特定要素の監視統計を表示しているときに、表示される一部の値が現在の値に対応していないか、常に 0 になります。特に、次の HTTP サービスの統計は、Application Server に適用できる情報を示していません。これらの値は無視してください。

解決方法

これらの監視情報は将来のリリースで削除され、より適切な情報で置き換えられる予定です。

管理 GUI から JNDI ブラウザを開くと、server.log に大量の例外がダンプされる (6591734)

説明

管理 GUI から JNDI ブラウザを開くと、多くの例外がスローされます。

解決方法

現時点ではありません。

セキュリティー

ここでは、Communications Server と Web アプリケーションのセキュリティーおよび証明書に関する既知の問題とその解決方法を示します。

負荷が非常に高い場合に SSL のシナリオで OutofMemory エラーが発生する (JDK 6 Issue 23)

説明

非常に負荷の高い状況で特定の SSL シナリオを実行すると、JDK6 Sun PKCS11 Provider の JDK バグ (https://jdk6.dev.java.net/issues/show_bug.cgi?id=23 を参照) により、OutOfMemory エラーが発生する場合があります。

解決方法

この問題が発生した場合は、JRE インストールの java.security ファイルから sun.security.pkcs11.SunPKCS11 プロバイダを削除してください。

SSL 終了が機能しない (6269102)

説明

SSL 終了が機能しない。ロードバランサ (ハードウェア) を SSL 終了用に設定すると、リダイレクト中に Communications Server がプロトコルを https から http に変更する。

解決方法

ハードウェアロードバランサと Communications Server の間にソフトウェアロードバランサを追加します。

SSL でソケット接続リークが発生する (6492477)

説明

JVM バグのため、HTTP リスナで security-enabledtrue に設定すると、一部の JDK バージョンでリークの問題が起きます。具体的には、このバグを再現する手順は次のようになります。

  1. HTTP リスナで security-enabledtrue に設定します。


    <http-listener acceptor-threads="1" address="0.0.0.0" 
    
    blocking-enabled="false" default-virtual-server="server" enabled="true" 
    
    family="inet" id=" http-listener-1" port="8080" security-enabled="true" 
    
    server-name="" xpowered-by="true">
  2. クイックルックテストの末尾にあるドメイン停止をコメントにします。

  3. クイックルックテストを実行します。

  4. ソケット使用状況を確認します。


    netstat -an | grep 8080

    使用状況が次のように表示されます。


    *.8080               *.*                0      0 49152      0 LISTEN
    
    *.8080               *.*                0      0 49152      0 BOUND

この問題は、GlassFish サイトの https://glassfish.dev.java.net/issues/show_bug.cgi?id=849 で説明されています。

解決方法

最新の JDK バージョンにアップグレードします。

Web コンテナ

ここでは、Web コンテナに関する既知の問題とその解決方法を示します。

Windows で、--precompilejsp=true を使用してアプリケーションを配備すると、アプリケーションの JAR ファイルがロックされ、そのあとの配備取り消しや再配備に失敗する (5004315)

説明

Microsoft Windows にアプリケーションを配備するときに JSP のプリコンパイルを要求すると、それ以降、そのアプリケーションの配備取り消しや、そのアプリケーション (または同一モジュール ID を持つ任意のアプリケーション) の再配備を試みても、予期したとおりに動作しません。この問題は、JSP のプリコンパイル処理でアプリケーションの JAR ファイルが開かれたまま閉じられないため、Microsoft Windows がこれらのファイルを配備取り消しで削除することや、これらのファイルを再配備で上書きすることを許可しないことにあります。

配備取り消しは、Application Server からアプリケーションが論理的に削除されるという点では成功します。また、asadmin ユーティリティーからエラーメッセージは返されませんが、そのアプリケーションのディレクトリとロックされた jar ファイルはサーバー上に残っています。サーバーのログファイルには、ファイルとアプリケーションディレクトリの削除に失敗した旨のメッセージが出力されます。

配備取り消し後のアプリケーションの再配備が失敗するのは、既存のファイルとディレクトリをサーバーが削除しようとして失敗するからです。これは、最初に配備されたアプリケーションと同じモジュール ID を持つアプリケーションを配備しようとしたときにも発生します。アプリケーションのファイルを保持するディレクトリの名前を、サーバーはモジュール ID から決定するからです。

同様の理由から、配備取り消しをせずにアプリケーションを再配備しようとすると失敗します。

診断

アプリケーションを再配備しようとすると、または、配備取り消しを行なってから配備しようとすると、asadmin ユーティリティーは次のようなエラーを返します。


An exception occurred while running the command. The exception 

message is: CLI171 Command deploy failed : Deploying application in 

domain failed; Cannot deploy. Module directory is locked and can't 

be deleted.

解決方法

アプリケーションを配備するときに --precompilejsps=false (デフォルトの設定) を指定すると、この問題は発生しません。そのアプリケーションを最初に使用するときに JSP コンパイルが起動されるため、最初の要求に対する応答時間は、その後の要求に比べて長くなります。

また、プリコンパイルを行う場合には、そのアプリケーションを配備取り消しまたは再配備する前に、サーバーを終了して再起動する必要があります。シャットダウンすると、ロックされている JAR ファイルが解放されるため、再起動後の配備取り消しや再配備が成功します。

空の <load-on-startup> 要素を持つ Servlet 2.4 ベースの web.xml を使用して WAR を配備できない (6172006)

説明

web.xml のオプションの load-on-startup 要素は、サーブレットを宣言する Web アプリケーションの起動の一環として、そのサーブレットをロードおよび初期化すべきことを示します。

この要素のオプションの内容は、Web アプリケーションのその他のサーブレットとの関係で、そのサーブレットをロードおよび初期化する順序を示す整数です。空の <load-on-startup> は、そのサーブレットを含む Web アプリケーションの起動時にそのサーブレットがロードおよび初期化される場合、その順序は意味を持たないことを表します。

web.xml の Servlet 2.4 スキーマでは、空の <load-on-startup> がサポートされなくなりました。つまり、Servlet 2.4 ベースの web.xml を使用する場合は、整数値を指定する必要があります。<load-on-startup/> の場合と同様に、空の <load-on-startup> を指定すると、web.xmlweb.xml の Servlet 2.4 スキーマに対する妥当性検証に失敗し、Web アプリケーションの配備も失敗します。

下位互換性の問題もあります。空の <load-on-startup> は、Servlet 2.3 ベースの web.xml では有効です。

解決方法

Servlet 2.4 ベースの web.xml を使用する場合は、<load-on-startup>0</load-on-startup> を指定して、サーブレットの読み込み順序が問題にならないことを示します。

リソースに制約のあるサーバー上で JSP ページをコンパイルできない (6184122)

説明

JSP ページにアクセスしてもコンパイルに失敗し、サーバーログには「Unable to execute command」というエラーメッセージと次のスタックトレースが記録されます。


at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.

exec(Execute.java:655) at org.apache.tools.ant.taskdefs.Execute.

launch(Execute.java:416) 

at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:427) 

at org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter.

executeExternalCompile(DefaultCompilerAdapter.java:448) 

at org.apache.tools.ant.taskdefs.compilers.JavacExternal.execute

(JavacExternal.java:81) 

at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:842) 

at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:682) 

at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:396)

解決方法

JSP のコンパイルスイッチを「fork」から「false」に設定します。

これは、次のいずれかの方法で行えます。

これらのいずれかを設定することにより、ant が javac コンパイルのための新規プロセスを生成することが防止されます。

Web サービス

ここでは、Web コンテナに関する既知の問題とその解決方法を示します。

Ant タスク wsimport が Java EE SDK b33d (JDK 1.6 を使用) で NoClassDefFoundError を出して失敗する(6527842)

説明

Java EE SDK b33d に含まれる JDK 1.6 を使用して JAX—WS テストを実行するときに、問題が発生する場合があります。テストはただちに停止し、次のメッセージが表示されます。


[wsimport] Exception in thread "main" java.lang.NoClassDefFoundError: \

com/sun/tools/ws/WsImport

webservices-tools.jarcom/sun/tools/ws/WsImport.classcom/sun/tools/ws/ant/WsImport.class、および com/sun/tools/ws/ant/WsImport2.class が含まれていても、このエラーは起きます。さらに、1.5.0-10 JDK を使用すると、同じテスト作業空間が問題なく機能します。

解決方法

JAX-WS テストを実行する前に、webservices-api.jar$JAVA_HOME/jre/lib/endorsed にコピーします。

IFR EE ビルドで publish-to-registry コマンドが失敗する (6602046)

説明

JAXR は SAAJ を使用して SOAP メッセージをレジストリに送信します。IFR 以外では、SAAJ impl クラスは lib/webservices-rt.jar の下にあります。IFR の場合、SAAJ クラスは引き続き lib/webservices-rt.jar の下にあります。また、saaj-impl.jar/usr/share/lib ディレクトリにあります。この jar ファイルは Communications Server で格上げされ、webservices-rt.jar のクラスよりも優先されています。この jar ファイルには、SOAP メッセージを Web サービスレジストリに送信するために必要なセキュリティー権限がありません。/usr/share/lib ディレクトリ内の jar に権限を付与するか、/usr/share/lib の jar に依存しないように、パッケージを変更する必要があります。

解決方法

server.policy ファイルに次の内容を追加します。


grant codeBase "file:/usr/share/lib/saaj-impl.jar" {

   permission java.security.AllPermission;

};

JDK6 u4 b3 で wscompile は「package javax.xml.rpc does not exist」エラーが発生する (6638567)

説明

wscompile Ant タスクは、JDK 6 Update 4 では失敗します。JAX-RPC API クラスごとに、次のエラーメッセージが表示されます。


package package-name does not exist

解決方法

wscompile Ant タスクを実行する前にj2ee.jar ではなく javaee.jar がクラスパスに指定されていることを確認します。