ページの先頭行へ戻る
Symfoware Server V10.0.0 トラブルシューティング集

2.2.2 Javaでのアプリケーション開発時の異常

Javaでのアプリケーション開発時に発生したトラブルの事例、およびその対処方法について説明します。

2.2.2.1 JDBCアプリケーション実行時の異常

JDBCアプリケーション実行時に発生したトラブルの事例、およびその対処方法について説明します。

JDBCアプリケーションコンパイル時にメッセージ“シンボルを見つけられません”が出力された

エラーメッセージ
シンボルを見つけられません。
シンボル: メソッド isPoolable()
場所    : java.sql.PreparedStatementのインタフェース

使用しているコンパイラがサポートしていないクラスまたはメソッドを利用している可能性があります。

使用しているコンパイラのバージョンが正しいか確認してください。

JDBCアプリケーション実行中にメッセージ java.lang.ClassNotFoundExceptionが出力された

エラーメッセージ
java.lang.ClassNotFoundException: com.fujitsu.symfoware.jdbc.SYMDriver

環境変数“CLASSPATH”の設定が正しいか確認してください。

参照

環境変数の設定については、“アプリケーション開発ガイド(JDBCドライバ編)”の“Javaアプリケーションの環境設定”を参照してください。

JDBCアプリケーション実行中にメッセージ java.lang.OutOfMemoryErrorが出力された

エラーメッセージ
java.lang.OutOfMemoryError

メモリ不足が発生しました。

Javaでは、不要になったメモリの解放はガーベジコレクションで行われます。しかし、ガーベジコレクションは、使われなくなったオブジェクトが使用しているメモリを解放するだけです。アプリケーションが必要なメモリの解放としては、十分ではありません。 そのため、アプリケーションがメモリ不足になる場合があります。

メモリ不足が発生した場合は、以下の対処を行ってください。

ただし、System.gcメソッドは実行性能に影響します。

呼び出しのタイミングなどを十分に検討した上で使用してください。

以下に、Java実行環境のヒープサイズを拡張する場合の例を示します。

初期サイズを64MByte、最大サイズを128MByteに設定します。

java -Xms64m -Xmx128m <class Name>

2.2.2.2 ローカルアクセスまたはリモートアクセス(RDB2_TCP連携)時の異常

ローカルアクセスまたはリモートアクセス(RDB2_TCP連携)時に発生したトラブルの事例、およびその対処方法について説明します。

SolarisLinuxLDWrapperクラスがローカルデータベースアクセスをロードしていない(Solaris/Linuxの場合)

ローカルアクセスまたはリモートアクセス(RDB2_TCP連携)時に、以下のエラーが発生することがあります。

エラーメッセージ
LDWrapperクラスがローカルデータベースアクセスをロードしていません

または

LDWrapper class has not been loaded for local database access
エラーコード
SQLState = <S1000>
Code = <7002>
【対処方法】

以下の項目について、確認してください。

  • 以下の設定内容に誤りがある可能性があります。
    環境変数“LD_LIBRARY_PATH

    参照

    “アプリケーション開発ガイド(JDBCドライバ編)”の“Javaアプリケーションの環境設定”または“Interstage Application Serverを使用する場合の環境設定”を参照して、設定内容を見直してください。

  • JDBCデータソースを使用して、データベースに接続している場合、データソースの定義方法に誤りがある可能性があります。
    以下のファイルについて、ファイル名を変更してバックアップし、再度データソースを設定してください。

    ./JDBCドライバインストール先ディレクトリ/fjjdbc/etc/namespace.ser
  • JDBCドライバが正しくインストールされているかを確認してください。

WindowsLDWrapperクラスがローカルデータベースアクセスをロードしていない(Windowsの場合)

ローカルアクセスまたはリモートアクセス(RDB2_TCP連携)時に、以下のエラーが発生することがあります。

エラーメッセージ
LDWrapperクラスがローカルデータベースアクセスをロードしていません

または

LDWrapper class has not been loaded for local database access
エラーコード
SQLState = <S1000>
Code = <7002>
【対処方法】

以下の項目について、確認してください。

  • 以下の設定内容に誤りがある可能性があります。
    環境変数“PATH

    参照

    “アプリケーション開発ガイド(JDBCドライバ編)”の“Javaアプリケーションの環境設定”または“Interstage Application Serverを使用する場合の環境設定”を参照して、設定内容を見直してください。

  • JDBCデータソースを使用して、データベースに接続している場合、データソースの定義方法に誤りがある可能性があります。
    以下のファイルについて、ファイル名を変更してバックアップし、再度データソースを設定してください。

    Symfoware Serverクライアント機能インストール先ディレクトリ\JDBC\fjjdbc\etc
  • JDBCドライバが正しくインストールされているかを確認してください。

データベースに接続すると、JavaVMのエラーが発生しアプリケーションが異常終了する

エラーメッセージ1
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6d3ad362
Function name=JVM_ReleaseUTF
Library=f:\apw\JBK3\jdk\jre\bin\hotspot\jvm.dll

JDBCドライバのモジュールが、複数混在している可能性があります。
以下の設定内容を見直してください。


SolarisLinuxSolaris/Linuxの場合

環境変数“LD_LIBRARY_PATH”、“CLASSPATH


WindowsWindowsの場合

環境変数“PATH”、“CLASSPATH

参照

“アプリケーション開発ガイド(JDBCドライバ編)”の“Javaアプリケーションの環境設定”または“Interstage Application Serverを使用する場合の環境設定”を参照して、設定内容を見直してください。

エラーメッセージ2
java.lang.NoSuchFieldError
java.lang.StackOverflowError

JavaVMのスタック領域が不足している可能性があります。
javaコマンドのXssオプションを使用して、スタック領域を拡張して、再度確認してください。

CREATE TABLE文を実行すると、メッセージ JYP4204E が出力される

エラーメッセージ
[SymfoWARE ODBC Driver][SymfoWARE Server] JYP4204E 指定されたデータベーススペース“*****”が,定義されていません.

Symfoware/RDBの仕様です。以下のどちらかの対処をしてください。

2.2.2.3 データベースアクセス時の異常


データベースアクセス時に発生したトラブルの事例、およびその対処方法について説明します。

コネクションに失敗した

エラーメッセージ
コネクションの失敗: I/Oエラーが発生しました

または

Connection failure: IOException
エラーコード
SQLState = <S1000>
Code = <4001>

URLに指定するサーバのホスト名、ポート番号およびデータ資源名が正しいか確認してください。
JDBCデータソースを使用している場合は、情報設定画面での設定内容が正しいか確認してください。
設定内容が正しい場合には、以下の状態を確認してください。

コネクション数の最大値を超えた

エラーメッセージ
同時に使用できるコネクション数の最大値を超えました

または

Maximum driver connections are active
エラーコード
SQLState = <S1000>
Code = <1024>

JDBCドライバが同時に使用できるコネクション数の最大値を超えました。
コネクションをクローズしてください。

また、JDBCデータソースを使用している場合は、オプション情報設定画面で最大コネクション数の値を増やしてください。

参照

JDBCデータソースのオプション情報設定についての詳細は、“アプリケーション開発ガイド(JDBCドライバ編)”の“データソースのオプション情報設定画面”を参照してください。

注意

オプション情報設定画面で最大コネクション数の値を増やした場合は、動作環境ファイルのMAX_CONNECT_TCPまたはMAX_CONNECT_SYSの値も変更してください。

JDBCアプリケーションを長時間操作せず、再度データベースにアクセスしたらエラーが発生した

エラーメッセージ
Connection infringement - The SQL client cannot establish SQL connection
エラーコード
SQLState=<8001>
Code=<0>

以下の項目について、確認してください。

メッセージ Connection infringement - Connection fails が出力された

エラーメッセージ
Connection infringement - Connection fails
エラーコード
SQLState = <08006>

URLに指定するサーバのホスト名、ポート番号およびデータ資源名が正しいか確認してください。
JDBCデータソースを使用している場合は、情報設定画面での設定内容が正しいか確認してください。

設定内容が正しい場合には、以下の状態を確認してください。

参照

設定方法については、“アプリケーション開発ガイド(JDBCドライバ編)”の“Javaアプリケーションの環境設定”または“Interstage Application Serverを使用する場合の環境設定”を参照してください。

また、リモートアクセス(RDA-SV連携)の場合には、以下を確認してください。

メッセージ JYP1059E が出力された

エラーメッセージ
JYP1059E 不当なプロトコルが転送されました.

指定されたポート番号に誤りがある可能性があります。ポート番号に誤りがないか確認してください。

注意

RDB2_TCP連携とRDA-SV連携とで、指定するポート番号は異なります。
RDB2_TCP連携時は、RDB2_TCP通信で使用するポート番号を指定してください。

WindowsSolarisメッセージ java.sql.SQLException: Connection infringement が出力された(Solaris/Windowsの場合)

エラーメッセージ
java.sql.SQLException: Connection infringement -
Transaction was lost (transaction is interminable)

RDA-SVの入力待ち時間監視機能により、コネクションが切断されている可能性があります。
システム内容を見直し、最適な値を設定してください。

2.2.2.4 データベース接続時の異常

データベース接続時に発生したトラブルの事例、およびその対処方法について説明します。

メッセージ java.sql.SQLException: No suitable driver が出力された

エラーメッセージ
java.sql.SQLException: No suitable driver

以下の設定内容に誤りがないか確認してください。

メッセージ java.lang.ClassCastException: java.lang.NoClassDefFoundError が出力された

エラーメッセージ
java.lang.ClassCastException: java.lang.NoClassDefFoundError

以下の設定内容に誤りがないか確認してください。


SolarisLinuxSolaris/Linuxの場合

環境変数“LD_LIBRARY_PATH”


WindowsWindowsの場合

環境変数“PATH”

参照

  • 設定方法については、“アプリケーション開発ガイド(JDBCドライバ編)”の“Javaアプリケーションの環境設定”を参照してください。

  • サーブレットから使用している場合は、“アプリケーション開発ガイド(JDBCドライバ編)”の“Interstage Application Serverを使用する場合の環境設定”を参照してください。

メッセージ javax.naming.CommunicationException:SYMNameServer isn't being started. が出力された

エラーメッセージ
javax.naming.CommunicationException:SYMNameServer isn't being started.

ネーミングサービスが停止した状態でネーミングサービスを使用すると、上記のエラーメッセージが出力されます。アプリケーション実行時に上記のエラーメッセージが出力された場合、ネーミングサービスの状態を確認してください。

LinuxLinuxの場合

起動中のJDBCネーミングサービスが使用しているポート番号を、以下の手順で確認してください。

各コマンドは、システム管理者権限(root権限)を持つユーザが実行してください。

  1. 以下のコマンドを実行し、ネーミングサービスのプロセスIDを取得します。

    ps -ef | grep fujitsu.symfoware.
  2. 以下のコマンドを実行し、ネーミングサービスの状態を表示します。

    netstat -a -p | grep (ネーミングサービスのプロセスID)
  3. 表示される“Local Address”の数字がポート番号ですので確認してください。

2.2.2.5 コネクションの異常

コネクションの異常が発生した場合のトラブルの事例、およびその対処方法について説明します。

最大コネクション数を超える接続要求を行ったら、エラーが発生した

最大コネクション数を超える接続要求を行った時点で、コネクションの空きを待つのではなく、以下のエラーメッセージが返却されます。

同時に使用できるコネクション数の最大値を超えました

JDBCドライバでは、以下の2つの設定を行います。

ある業務システムでは、平常時の運用で、30本前後のコネクション要求が発生しています。
夕方のピーク時になると、最大で45本のコネクション要求が発生すると想定されています。
このシステムでは、システム上予想される最大のコネクション数は45であるため、最大コネクション数には45を設定します。
平常時の運用では、30本前後のコネクション要求で運用されているため、最大プール数には、30を設定します。
最大プール数に30を設定することで、コネクション処理にかかる時間を短縮できるため、平常時の運用に効果的です。
31本目のコネクション要求が発生すると、プールされたコネクションの空きを待つ訳ではなく、31本目のコネクション処理を行います。
しかし、平常時の運用では31本目以上のコネクション要求は発生しないため、31本以上のコネクション資源を常にプールさせておくと、APサーバ上に不要な資源が確保されている状態になります。
そのため、JDBCドライバは、最大プールコネクション数を超えたコネクションについては、アプリケーションでクローズ要求が発生すると、プールには戻さず、コネクションを解放します。

ポイント

JDBCドライバの設定と、Symfoware/RDBの設定との優先順序について

Symfoware/RDBにも、最大コネクション数を管理する機能があります。
JDBCドライバとSymfoware/RDBの両方で最大コネクション数を設定した場合、Symfoware/RDBの設定が優先されます。
最大コネクション数の設定をする場合、Symfoware/RDBの設定に注意してください。

Interstage Application ServerのEJBサービスを使用時に、データベース上でコネクションを確認すると、コネクションが残存している

EJBサービスで、自動的にコネクションがプールされている可能性があります。

参照

EJBサービスでのコネクションプーリングの詳細は、“Interstage Application Server J2EE ユーザーズガイド”を参照してください。

2.2.2.6 データソース登録ツールの異常

JDBCドライバのネーミングサービスを起動している端末とは別の端末で、JDBCデータソース登録ツールを起動すると、メッセージが出力される

エラーメッセージ
javax.naming.CommunicationException: I/O Error ocuurs when receiving the command

ネーミングサービスを起動したJDBCドライバと、データソース登録ツールを起動したJDBCドライバのバージョンレベルが異なる可能性があります。
JDBCドライバを最新のバージョンレベルに統一してください。

Linuxデータソース登録ツールを起動すると日本語が化けて表示される(Linuxの場合)

RHEL-AS4(IPF)またはRHEL5(IPF)上でJDBCデータソース登録ツールを起動すると、日本語文字が化けて表示される場合があります。

出力される警告

  Warning: Cannot convert string
"-b&h-lucida-medium-r-normal-sans-*-140-*-*-p-*-iso8859-1" to type FontStruct
  Warning: Cannot convert string
"-watanabe-mincho-medium-r-normal--*-140-*-*-c-*-jisx0208.1983-0" to type FontStruct

本警告は X Window System で動作するアプリケーション一般で出力されるメッセージであり、これらのフォントが参照できない状況にあることを表しています。

【回避方法】

symjddefdsコマンドを使用してJDBCデータソースを登録してください。

参照

symjddefdsコマンドの詳細については、“コマンドリファレンス”を参照してください。

2.2.2.7 JDBCドライバの異常

JDBCドライバの異常が発生したトラブルの事例、およびその対処方法について説明します。

SolarisLinux JDBCデータソースを使用した接続で、メッセージ Invalid returned length value from server : connection infringement が出力される(Solaris/Linuxの場合)

エラーメッセージ
Invalid returned length value from server : connection infringement

以下の手順で、JDBCドライバの動作環境を見直してください。

  1. 同一環境内に、複数のJDBCドライバがインストールされていないか確認します。複数のJDBCドライバがインストールされている場合、不要なJDBCドライバをすべて削除します。

  2. EJBサービスやServletサービスなどを使用している場合、これらのサービスを停止します。

  3. JDBCドライバのネーミングサービスを停止します。

  4. 以下のファイルを削除します。

    /opt/FJSVsymjd/fjjdbc/etc/namespace.ser
  5. JDBCデータソースを再設定します。

  6. 2.でサービスを停止している場合、これらのサービスを再起動します。

  7. アプリケーションを再度実行します。

WindowsJDBCデータソースを使用した接続で、メッセージ Invalid returned length value from server : connection infringement が出力される(Windowsの場合)

エラーメッセージ
Invalid returned length value from server : connection infringement

以下の手順で、JDBCドライバの動作環境を見直してください。

  1. 同一環境内に、複数のJDBCドライバがインストールされていないか確認します。複数のJDBCドライバがインストールされている場合、不要なJDBCドライバをすべて削除します。

  2. EJBサービスやServletサービスなどを使用している場合、これらのサービスを停止します。

  3. JDBCドライバのネーミングサービスを停止します。

  4. 以下のファイルを削除します。  

    Symfoware Serverクライアント機能インストール先ディレクトリ\JDBC\fjjdbc\etc\namespace.ser
  5. JDBCデータソースを再設定します。

  6. 2.でサービスを停止している場合、これらのサービスを再起動します。

  7. アプリケーションを再度実行します。

JDBCドライバのデータソース登録ツールを起動すると、メッセージ Exception in thread "main" java.lang.NoClassDefFoundError: javax/sql/DataSource が出力される

エラーメッセージ
Exception in thread "main" java.lang.NoClassDefFoundError: javax/sql/DataSource

JDBC 2.0 Optional Package(javax.sqlパッケージ)が適用されていない可能性があります。ネーミングサービスの起動環境を見直してください。

ポイント

JDK1.4以降では、JDKにJNDIクラスライブラリやJDBC 2.0 Optional Packageが同梱されています。

2.2.2.8 ネーミングサービスの異常

SolarisLinuxシステム管理者権限を持たないユーザがネーミングサービスの起動コマンドを実行すると、データソースの登録時にメッセージが出力される(Solaris/Linuxの場合)

システム管理者権限を持たないユーザがネーミングサービスの起動コマンドを実行すると、データソースの登録時に以下のメッセージが出力される場合があります。

エラーメッセージ
failed to save a nameSpace file

システム管理者権限を持つユーザにより、コマンドを実行してください。