ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     jCOM リファレンス   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

トラブルシューティング

 

以下の節では、WebLogic jCOM の一般的な問題と、それらを解決するための有益なヒントについて説明します。

 


WebLogic jCOM のパフォーマンスの向上

ロギング短縮ランタイムの使用

パフォーマンスを向上する最も簡単な方法は、ロギング短縮 WebLogic jCOM ランタイムを使用することです。 jcom.jar を CLASSPATH に指定する代わりに、同じディレクトリにある jcom_reduced_logging.jar を使用します。

このランタイムを使用すると、WebLogic jCOM ログ ファイルの生成を禁止して問題を解決でき、環境によってはパフォーマンスが著しく向上します。

ネイティブ モードでの実行

WebLogic jCOM の DCOM モード(デフォルト)で実行し、JVM が MS Windows で動作している場合、ネイティブ モードに切り替えることを検討します。これにより、WebLogic jCOM ランタイムは DCOM の代わりにネイティブ コードを使用して Java と COM 間で対話を行います。 コードを変更する必要はまったくありません。ネイティブ モードへの切り替えは、ランタイム プロパティを定義することで行います。

詳細については、WebLogic jCOM リファレンスのネイティブ モードの節を参照してください。

 


DOS エラー

発生したエラー

この場合、PATH 環境変数に JDK bin ディレクトリが指定されていません。

発生したエラー

この場合、コンパイラにより多くのメモリを使用するよう指示します。 以下を使用してコンパイルします。
java -Jmx64m -J-ms64m YourProgram.java

発生したエラー

regtlb または regjvm を使おうとした場合。

この場合、PATH 環境変数に WebLogic jCOM の bin ディレクトリが指定されていません。

 


Java エラー

発生したエラー

この場合、CLASSPATH 環境変数に WebLogic jCOM ランタイム(jcom.jar)が指定されていません。

発生したエラー

Windows NT で実行している場合、NT イベント ログ([スタート|プログラム|管理ツール|イベント ビューア] の [ログ|システム])をチェックします。これにより、起動時の障害の理由を発見できる場合があります。

このエラーの一般的な原因は、サーバのレジストリ内の PATH が不正確であることです。

また、いくつかの NT のバグによってこのエラーが発生する場合もあります。 http://support.microsoft.com/support/kb/articles/q185/1/26.asphttp://support.microsoft.com/support/kb/articles/q158/5/08.asp を参照してください。

発生したエラー

このエラーは、Excel の実行中に発生する場合があります。 これは、Excel の制限であると見なしています。 Microsoft サポートの回答の 1 つは次のとおりです。「このエラーは通常サーバ アプリケーションがビジー状態でクライアントに応答できないときに発生します」。

com2java ツールの [Options] ダイアログ ボックスには、このエラーの発生時に WebLogic jCOM コードが再試行するオプションが用意されています。このオプションを選択して、プロキシを再生成します。

発生したエラー

「ocxhost」を使用しており、ActiveX コントロールをロードしようとしている場合、指定している prog ID が不正確か、またはコントロールが正確にマシンに登録されていません。

「checkconfig」コマンドを使用して、正確な prog ID を見つけます。

checkconfig /typelib config.log

生成された config.log ファイルを参照すると、使用する prog ID を確認できます。

発生したエラー

CLASSPATH が正確に定義されているかどうかを確認します。 クラスを異なるクラス ローダにロードするサーブレット環境またはその他の環境を使用する場合、生成されるプロキシと jcom.jar ファイルが同じクラス ローダによってロードされることを確認してください。

発生したエラー

jcom.jar ファイルがシステム クラス ローダによってロードされていることをチェックします。 これは、ネイティブ認証を使おうとしているが、システム クラス ローダによってロードされるクラスだけが JNI を使用できるので、JNI が適切に動作しないことを意味しています。 システム クラス ローダを使用するには、jcom.jar を CLASSPATH 環境変数にシステム レベルで指定します。 前述のトラブルシューティングも参照してください。

発生したエラー

エラー コードに関連するエラー メッセージが存在しない場合、AutomationException のケースでは、Microsoft Developer Network マニュアルでエラー コードを参照できます。また、Visual C++ がインストールされている場合は、winerr.h ファイルまたはエラー ルックアップ ユーティリティが役立ちます。

 


Visual BASIC エラー

発生したエラー

このエラーは、以下を使用して Java オブジェクトをインスタンス化しようとしたときに発生します。

Set o = GetObject("SomeJvmId:SomeJavaClass")

ここで SomeJvmId は、regjvm コマンドでマシンに登録されていません。

発生したエラー

このエラーが発生するのは、JVM が動作していないか、正確に登録されていないか、または Java クラスをインスタンス化できなかった場合です。 以下を使用してロギングを有効にして JVM を起動します。

java -DJCOM_DCOM_PORT=??? -DJCOM_LOG_LEVEL=3 YourMainClassName

VB クライアントを実行しているときに、WebLogic jCOM ランタイムが VB クライアントから接続を受け取るかどうかを確認します。 接続を受け取らない場合、以下のいずれかです。

com.bea.jcom.Jvm.register("jvmId") を呼び出すときに使用される jvmId が間違っています。

JVM の起動時に指定されるポートが間違っているか、既に使用中です。 ロギングを有効にした場合、WebLogic jCOM ランタイムが使用するポートを確認できます。

929376053810 : OXID Resolver started. Listening on port 1111

JVM の登録時に間違いを犯しています。つまり、VB クライアント マシン上で regjvm jvmId host[port] を呼び出したときに JvmID、ホスト、ポートのいずれかを間違って指定しています。

VB 環境は非常に古いので、GetObject への「MyJvm:MyClass」パラメータ フォーマットをサポートしていません。 これを解決するには、WebLogic jCOM の「regprogid」コマンドを使用して progid を JVM/クラスにマップします。

regprogid My.ProgId "MyJvm:MyClass"

次に、コードで GetObject("My.ProgId") を使用します。

発生したエラー

このエラーは、COM オブジェクトにアーリー バインド アクセスし、そのオブジェクトのメソッドを呼び出すときに発生します。 java2com ツールで生成された Java ラッパー ファイルをコンパイルしていないか、またはそれらが CLASSPATH に存在しないため WebLogic jCOM ランタイム(jcom.jar)によってロードできません。

JDK1.2 を使用している場合、WebLogic jCOM ランタイムを「ext」ディレクトリに置かないでください。このランタイムがそのディレクトリに存在する場合、CLASSPATH に指定されているクラス(ラッパー クラスなど)をロードできません。 代わりに、このランタイムを CLASSPATH に置きます。

WebLogic jCOM ロギングを 3(完全)に設定すると、これを確認できます。
java -DJCOM_LOG_LEVEL=3 Main

 


Visual C++ エラー

発生したエラー

VB エラー 429 の場合と同じ手順に従います。

発生したエラー

VB エラー 8000004 の場合と同じ手順に従います。

 


特定の環境で動作しているときの DCOM のセキュリティ問題

Java アプリケーションを特定の環境(サーブレット/IDE)で実行する場合、コマンド ラインから正常に実行できるにもかかわらず、DCOM セキュリティ エラーが発生する場合があります。

その原因は以下のいずれかです。

  1. Java コードが異なるユーザとして実行されています。 ネイティブ認証は Java コードを実行するユーザを選択しましたが、そのユーザは十分な DCOM アクセス権を持っていません。

  2. jcom\bin ディレクトリがシステム レベルで PATH に存在しないか、PATH の変更を有効にするためにサーブレット/IDE 環境を再起動していません。

  3. WebLogic jCOM ランタイムがシステム クラス ローダによってロードされていません。 ネイティブ認証は JNI を使用し、JNI 呼び出しはシステム クラス ローダによってロードされたクラスから行われなければなりません。 一部の環境では、異なるクラス ローダによってロードされるクラスパスを指定できます。 こうしたクラスパスにある Java ファイルは JNI を使用できません。 システム クラス ローダが使用されるようにする安全な方法は、jcom.jar をクラスパス環境変数に指定するか、java.exe の実行時に -cp/-classpath/-Djava.class.path オプションを使用することです。また、WebLogic jCOM プロキシ ファイルと jcom.jar ランタイムを同じクラス ローダによってロードする必要があることも考慮する必要があります。

前述のとおり WebLogic jCOM ロギングを有効にした場合、問題 2 および 3 ではネイティブ認証 DLL が適切にロードまたは実行できないことが分かります。 また、WebLogic jCOM ロギングは、jcom.jar が実行されているクラス ローダを示します。ブートストラップがシステム クラス ローダです。

もう 1 つの解決策は、com.bea.jcom.AuthInfo.setDefault(...) を使用することです。これは pure java 認証を使用し(JNI は不要)、Windows 以外のプラットフォーム上でも動作します。

セキュリティ問題の詳細については、この章の他の項目、およびこのマニュアルのセキュリティの章を参照してください。

 


java2com によって生成される IID*.java ラッパーがコンパイルされない場合

次のようなエラーが発生する場合があります。

tlb\remote\IID6cce3097_00e5_1000_500a_bf09cf1e0000Wrapper.java:2: IID6cce3097_00e5_1000_500a_bf09cf1e0000Wrapper should

be declared abstract; it does not define getHomeInterfaceClass() in IID6cce3097_00e5_1000_500a_bf09cf1e0000Wrapper

public class IID6cce3097_00e5_1000_500a_bf09cf1e0000Wrapper extends com.bea.jcom.Dispatch implements javax.ejb.EJB

MetaData {

または

D:\pure\JCOM\TLB\Bean>javac IID828d8ad4_00e5_1000_502a_bf09cf1e0000Wrapper.java

IID828d8ad4_00e5_1000_502a_bf09cf1e0000Wrapper.java:2: IID828d8ad4_00e5_1000_502a_bf09cf1e0000Wrapper should be declared

abstract; it does not define toString(boolean) in IID828d8ad4_00e5_1000_502a_bf09cf1e0000Wrapper

public class IID828d8ad4_00e5_1000_502a_bf09cf1e0000Wrapper extends com.bea.jcom.Dispatch implements java.security

.Certificate {

デフォルトでは、java2com ツールは特定のクラスとメソッドを無視して、生成されるラッパーの数を減らそうとします。 具体的には、java.lang.Class などのクラス(前者のケース)、または toString() のようなメソッド(後者のケース)が無視されることがあります。 実際に必要なときにどのクラスまたはメソッドが無視されるのかを特定するには、発生したエラーを調べる必要があります。

型ライブラリの登録を解除し(登録済みの場合)、生成されたラッパーを削除し、java2com を再実行し、[Names...] ボタンをクリックして、必要なクラスまたはメソッドの "" へのマッピングを削除します。

 


掲載されていないエラーが発生した場合

support@bea.com まで電子メールでお問い合わせください。その際、以下の情報を明記してください。

特定のコンフィグレーション問題は、jcom\bin ディレクトリにある checkconfig ツールを実行することによって識別できます。 詳しい使い方については、checkconfig /? を実行してください。

取得したエラーの性質によっては、WebLogic jCOM で生成できる詳細なエラー情報が役立ちます。

WebLogic jCOM Java ランタイムでロギング情報を jcom.log ファイルに生成するには、com.bea.jcom.Log.logImmediately 呼び出しを追加します。これは、Java コードの中で一度だけ呼び出す必要があります。これを追加する最も簡単な方法は、(Java から COM へ、または COM から Java への呼び出し時に)使用する最初の Java クラスの静的ブロックにその呼び出しを追加します。

public class YourClass {

static {

com.bea.jcom.Log.logImmediately(3, "c:\\jcom.log");

}

...

}

アプレットを使用する場合、次のようなロギングを Java コンソールに生成できます。

static {

com.bea.jcom.Log.logImmediately(3, System.err);

}

3 はログ レベルで、冗長を意味します。2 番目のパラメータとして任意のファイル名を指定できます。

WebLogic jCOM Moniker(jintmk.dll --「接着剤」)の内部でロギングを有効にするには、レジストリ エディタを使用して、HKEY_LOCAL_MACHINE\SOFTWARE\Linar\JintMkr の下に値を作成します。この値は <:fc 11>logFile<:/fc> という名前にし、c:\temp\jcommk.log などのファイル名に設定します。

問題が発生した場合は、上記の両方のログをお送りください。

 

back to top previous page