WebOTX Manual V10.2 (第4版) 目次を表示 |
EJBコンテナの注意・制限事項について説明します。
クライアントアプリケーションのコンパイルおよび、実行時には、WebOTXサーバ製品または「WebOTX Client」をインストールする必要があります。 必要なクラスパスやJava起動時のシステムプロパティの設定に関しての詳細は、[ アプリケーション開発 > その他のアプリケーション > プログラミング・開発ガイド > EJBクライアント ]を参照してください。
EJBを配備するサーバとEJBクライアントで使用するJava VMのバージョンは、マイナーバージョンレベルまで一致させる必要があります。
EJB 2.1仕様で追加されたタイマーBeanの機能はデータベースを使用するため、デフォルトでは使用できません。
[ リファレンス > 設定 > EJBコンテナ > タイマBeanの使用方法について ] を参照してデータソースとデータベースのテーブル追加を行なってください。
CMPフィールドがJavaのDate型かTime型(java.util.Date, java.sql.Date,java.sql.Time, java.sql.Timestamp)である場合、フィールドの値がデータベースの値と完全には一致しなくなることがあります。
例えば、以下のコードは主キーフィールドとしてjava.sql.Date型を使います。
java.sql.Date myDate = new java.sql.Date(System.currentTimeMillis())beanHome.create(myDate, ...);
データベースによっては、このコードはデータベースにフィールドの値の年、月、および日付の部分だけを保存します。以下のようにクライアントがこのBeanを主キーによって見つけようとすると
myBean = beanHome.findByPrimaryKey(myDate);
そのBeanはデータベース中から見つけることはできません。値がデータベースに保存された値と一致しないからです。
保存している間に、データベースがタイムスタンプ値を切り捨てるか、またはカスタムクエリにwhere節において日付か時間値の比較がある場合、同様の問題が起こる可能性があります。
自動マッピングとオラクルデータベースを使用すると、タイプjava.util.Date、java.sql.Date、java.sql.Time、およびjava.sql.TimestampのすべてのフィールドがオラクルのDATEデータ型にマッピングされます。
ドメインディレクトリの config/server.policy に定義を追加し、権限を追加する必要があります。ドメインが停止した状態で、server.policy ファイルを開き、以下のコメンアウトを外してください。
// grant codeBase "jrt:/jdk.compiler" { // permission java.lang.RuntimePermission "closeClassLoader"; // permission java.lang.RuntimePermission "createClassLoader"; // permission java.lang.RuntimePermission "getenv.JDK_JAVAC_OPTIONS"; // };
Standardエディションにおいて、WebOTX DeveloperでWebサービスエンドポイント複数含むEJBをひとつのアーカイブで作成し、配備した場合、そのうちのひとつしか呼び出すことができません。別アーカイブに分けてアプリケーションを作成するようにしてください。
EJB仕様では、Enterprise Beanのコンストラクタで"java:comp/env"コンテキストへのJNDIアクセスを許可していませんが、WebOTXのEJBコンテナではJNDIアクセスが可能になっています。
EJB仕様では、コンテナ管理によるトランザクション設定を持つEnterprise Beanが、名前サーバに登録されたUserTransactionオブジェクト参照をlookup()メソッド使用して取得することを許可していませんが、WebOTXではlookup()メソッドによるアクセスが可能になっています。
ステートレスSession Beanがremove()メソッドを呼び出した後に、Beanのメソッドを呼び出しても例外が発生しません。
ステートフルSession Beanで、ejbActivate()とejbPassivate()メソッド内から、EJBContextクラスのisCallerInRole()とgetCallerPrincipal()メソッドを呼び出すことはできません。
EJB仕様では、Enterprise Bean内部でjavax.naming.InitialContextオブジェクトを取得したとき、そのオブジェクトのlookup()メソッドのみを呼び出し可能としていますが、WebOTXのEJBコンテナではそのオブジェクトのlookup()メソッド以外も呼び出し可能になっています。
ステートフルSession Beanで、ejbActivate()とejbPassivate()メソッド内から、EJBContextクラスのisCallerInRole()とgetCallerPrincipal()メソッドを呼び出すことはできません。
EJB QLのwhere 節に OR 演算子と単一値の CMPナビゲーションが含まれる場合、クエリの検索結果が実際の検索結果よりも不足する場合があります。
この場合は、OR演算子で結合されている演算を別々のEJB QLとして定義し、別々に検索を行って結果をマージするようにEJBの処理を修正してください。
Ver6.3よりEJBの通信プロトコルであるRMI-IIOP通信モードに関して、ダイナミック・プロキシを使用するモードが追加されました。配備オプションでダイナミック・プロキシを使用するかどうかを指定できますが、既定値ではダイナミック・プロキシで動作します。ダイナミック・プロキシを使用してEJB間の呼び出しを行う場合、いくつか制限事項があります。詳しくは [ CORBA通信基盤(Object Broker) > 制限事項(Java) > RMI-IIOP のダイナミック・プロキシによる通信モード使用時の制限事項 ] を参照してください。
EJB 3.x でビジネスインタフェースを含むライブラリを共通で参照可能な場所 ([DOMAIN]/lib など) に配置した場合、ローカル呼び出しの条件に合致しますが、リモート呼び出しになります。
配備解除したEJBアプリケーションのクラスローダのインスタンスが一時的に残存します。ただし、他のEJBアプリケーションのビジネスメソッドが実行される際に、該当スレッドが再利用されれば、事象は解消します。
アプリケーションクライアントでDataSourceDefinitionアノテーションを使用したクライアントアプリケーションを実行することはできません。ただし、他のEJBアプリケーションやServletアプリケーションからDataSourceDefinitionアノテーションを使用したEJBを呼び出すことはできます。