ページの先頭行へ戻る
Interstage Application Server V12.1.0 J2EE ユーザーズガイド(旧版互換)
FUJITSU Software

30.2.2 Interstage Application Server V3.xからの移行

Interstage V3.xと本バージョン・レベルでの動作の違い

EJBアプリケーション内で以下の機能を使用した場合、Interstage V3.xで動作させた場合と本バージョン・レベルで動作させた場合と処理結果が異なります。

機能

本バージョン・レベルでの動作

Interstage V3.xの動作

リエントラント制御

[Session Beanの場合]
常に1つのスレッドだけがSessionオブジェクトに対して処理を実行できる。1つのSessionオブジェクトに対して複数のクライアントから同時にアクセスしたり、ループバック呼出しを行うと、後から受信した要求に対してjava.rmi.RemoteExceptionがthrowされる。

[Session Beanの場合]
1つのSessionオブジェクトに対して複数のクライアントから同時にアクセスしたり、ループバック呼出しを行ってもエラーとならない。

[Entity Beanの場合]
deployment descriptorのリエントラント種別に非リエントラントが指定されている場合、1つのEntityオブジェクトに対して複数のクライアントから同時にアクセスしたり、ループバック呼出しを行うと、後から受信した要求に対してjava.rmi.RemoteExceptionがthrowされる。
deployment descriptorのリエントラント種別にリエントラントが指定されている場合、例外は発生しない。

[Entity Beanの場合]
deployment descriptorのリエントラント種別にかかわらず例外は発生しない。

Session BeanのPrimaryKey関連メソッド

Session BeanのEJBObject.getPrimaryKey()、EJBHome.remove(Object primaryKey)を実行すると以下の例外がthrowされる。

  • EJBObject.getPrimaryKey()の場合
    java.rmi.RemoteException

  • EJBHome.remove(Object primaryKey)の場合
    javax.ejb.RemoveException

Session BeanのEJBObject.getPrimaryKey()、EJBHome.remove(Object primaryKey)を実行しても正常に動作する。

Session Bean内で発生したシステム例外処理

Sessionオブジェクトは破棄される。

Sessionオブジェクトは破棄されない。

Entity Bean内で発生したシステム例外処理

Entity Beanのインスタンスは破棄される。

Entity Beanのインスタンスは破棄されない。

setRollbackOnly()、getRollbackOnly()メソッド

トランザクション管理種別が「Bean」の場合でインスタンスがトランザクションに関連付けられていないときにEntityContextインタフェース、またはSessionContextインタフェースのsetRollbackOnly()やgetRollbackOnlyを実行すると IIllegalStateExceptionが発生する。
トランザクション管理種別が「Container」でトランザクション属性が「NotSupported」の場合も同様にIllegalStateExceptionがthrowされる。

EntityContextインタフェースまたはSessionContextインタフェースのsetRollbackOnly()やgetRollbackOnlyは、どのトランザクション属性でも正常に動作する。

コンテナのリソース接続者管理

リソース接続者に「Container」が指定された場合、Interstage管理コンソールまたはisj2eeadminコマンドで定義したデータソースのユーザIDとパスワードがリソース接続時に使用される。
リソース接続者に「Application」が指定された場合、アプリケーションにユーザID、パスワードが指定された場合はそのユーザID、パスワードがリソース接続時に使用される。アプリケーションに指定されなかった場合はクライアントの認証情報が使用される。

リソース接続者に指定された値にかかわらず、アプリケーションにユーザID、パスワードが指定された場合はそのユーザID、パスワードがリソース接続時に使用される。アプリケーションにユーザID、パスワードが指定されていない場合はDBアクセス環境定義に設定されているユーザIDとパスワードがリソース接続時に使用される。

STATEFUL Session Beanのcreate()、remove()メソッド

[create()の場合]
トランザクション内で実行されない。トランザクション内で呼び出した場合は、トランザクションが中断されてから実行される。

[create()の場合]
呼出し元で開始されたトランザクション上で動作する。
システム例外が発生した場合はトランザクションにロールバックをマークしてTransactionRolledBackExceptionがthrowされる。

[remove()の場合]
トランザクション内で実行された場合、javax.ejb.RemoveExceptionがthrowされる。

[remove()の場合]
呼出し元で開始されたトランザクション上で動作する。
システム例外が発生した場合はトランザクションにロールバックをマークしTransactionRolledBackExceptionがthrowされる。

Session BeanのMandatoryトランザクション属性

トランザクション属性にMandatoryが指定された場合、トランザクションが開始されていない状態でSession Beanが呼び出されると、TransactionRequiredExceptionがthrowされる。

トランザクション属性にMandatoryが指定された場合、トランザクションが開始されていない状態でSession Beanが呼び出されても例外は発生せず、正常に動作する。

UserTransactionのlookup

12.6.3 Enterprise Beanクラスのメソッドが実行可能な操作」に記述されているUserTransactionをlookupできないメソッドでUserTransactionをlookupした場合、java.lang.IllegalStateExceptionが発生する。

すべてのメソッドでUserTransactionをlookupすることが可能。

remove(PrimaryKey)

[Entity Beanの場合]
Home.remove(primarykey)メソッドで、primarykeyに該当するレコード(インスタンス)が存在 しない場合、java.rmi.NoSuchObjectExcetionをthrowする。

[Entity Beanの場合]
Home.remove(primarykey)メソッドで、primarykeyに該当するレコード(インスタンス)が存在 しない場合、javax.ejb.RemoveExceptionをthrowする。

Entity Bean Homeインタフェースのremove(primarykey)メソッド

remove(primarykey)メソッドで、primarykeyに該当するレコード(インスタンス)が存在しない場合、RemoteException(NoSuchObjectExcetion)がthrowされる。

remove(primarykey)メソッドで、primarykeyに該当するレコード(インスタンス)が存在しない場合、RemoveException がthrowされる。


対処方法

Interstage V3.xと本バージョン・レベルでの動作の違い」に記載されている機能を使用している場合、以下のどちらかの対処が必要です。なお、該当する機能を使用していない場合は、対処は不要です。


EJBアプリケーションを修正する

Interstage V3.xと本バージョン・レベルでの動作の違い」に注意して、EJBアプリケーションを修正してください。

EJBアプリケーションの処理モードを変更する

EJBアプリケーションの修正ができない場合は、EJBアプリケーションの処理モードを変更します。


処理モードの変更方法

Interstage管理コンソールのワークユニット設定に以下の定義をしてください。

設定項目

Java VM オプション(Java Command Option)

設定値

-DFJV3MODE=処理モード

処理モード

yes:Interstage V3の動作
no :本バージョンの動作

注意

以下の場合には本バージョンの動作をします。

  • 処理モードを設定しない場合

  • 処理モードに上記に示す設定値以外を設定した場合