![]() |
![]() |
|
|
| |
FAQ: J2EE コネクタ アーキテクチャ
JNDI ツリーを参照しているときに次の例外を受け取るのはなぜですか。
isSerializable(class.javax.naming.Binding)
java.io.NotSerializableException:
java.io.PrintWriter at
java.io.ObjectOutputStream.OutputObject
Weblogic Server JNDI の実装では、オブジェクトは参照可能ではなくシリアライズ可能である必要があります。PrintWriter はシリアライズ可能ではないので、transient として宣言する必要があります。
WebLogic J2EE コネクタ アーキテクチャの現在の実装で Cloudscape ではなく Oracle データベースを使用することはできますか。
付属のサンプルには、任意のデータベース システムを表すリソース アダプタが含まれています。デフォルトでは、コンフィグレーションは Cloudscape を使用するよう設定されています。特に、
weblogic-ra.xml
ファイルのコンフィグレーション プロパティには Cloudscape データソースが設定されています。この設定は、Oracle の設定に置き換えることができます。
また、リソース アダプタ(特に ManagedConnectionFactory
)は Oracle をサポートするよう実装されなければなりません。このサンプルに含まれているリソース アダプタは JDBC を利用するので、表すことができるようコンフィグレーションされている任意のデータベース システムをサポートできます。
リソース アダプタ(
.rar
)を WebLogic Server にデプロイする場合、そのクラスは WebLogic クラスパスに配置されますか。
たとえば、EJB とリソース アダプタ(.rar)をデプロイしようとしていますが、EJB は CCI(Common Client Interface)に書き込むため、.rar
に対する依存関係が存在しません。EJB クライアント アプリケーションは、.rar
で定義されるパラメータ クラスとして送信/マーシャリングを持っています。何らかの理由により、.rar
が正常にデプロイされたにもかかわらず、EJB のクラス ローダ階層がこの .rar
固有クラスの定義を発見できません。EJB クライアントで次のエラーを受け取りました。
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception
is:
java.lang.ClassNotFoundException:
com.mycompany.InteractionSpecImpl
com.myclientcompany.server.eai.InteractionSpecImpl
のインスタンスを引数として EJB に渡す場合、appServer
は EJB のコンテキストでオブジェクトをデシリアライズ(アンマーシャリング)する必要があります。また、ejb-jar
(raTester.jar
)の内部にあるアンマーシャリング用の必須クラスを必要とします。このため、interactionspecimpl
クラスを ejb-jar
ファイルに含める場合、これらのクラスをサーバのクラスパスに含める必要はありません。
サンプル EJB が
ConnectionFactory.getConnection()
を呼び出して EIS に接続するときに、WebLogic Server が ManagedConnection.addConnectionEventListener()
関数を呼び出すのはなぜですか。
これは必須であり、リソース アダプタとアプリケーション サーバ間の取り決めの一部です。
EJB をコンパイルして CCI をサポートするリソース アダプタを使用するときに例外が送出されるのはなぜですか。
resource-ref
で javax.resource.cci.ConnectionFactory
を指定しましたが、EJB をコンパイルしようとすると次の例外を受け取ります。
weblogic.xml.process.SAXValidationException:
ejb-jar.enterprise-beans.session.resource-ref.res-type.
must be one of the values:
javax.sql.DataSource,javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
java.net.URL,
javax.mail.Session
at
weblogic.ejb20.dd.xml.EjbJarLoader_EJB11.__post_84
ejb-jar.xml
が EJB1.1 DTD ではなく EJB2.0 DTD を参照しているかどうかを確認してください。ConnectionFactory resource ref
は、EJB 2.0 DTD だけでサポートされています。
WebLogic J2EE コネクタ アーキテクチャではセキュリティはどのように扱われていますか。
WebLogic Server のリソース アダプタの現在のコンフィグレーションとパッケージ要件により、
weblogic-ra.xml
ファイルを手動で編集する必要があります。このため、security-principal-map エントリに指定する新しいパスワードはクリアテキスト形式で指定します。
BEA は、セキュリティ パスワードの保護がどのくらい重要であるかを認識しています。このため、weblogic-ra.xml
ファイルに存在するすべてのパスワードを暗号化するための変換ツールを提供しています。変換ツールは、標準の weblogic.jar
ファイルで提供されます。パスワード変換ツールの詳細については、『WebLogic J2EE コネクタ アーキテクチャ』(http://edocs.beasys.co.jp/e-docs/wls61/jconnector/index.html)の「コンフィグレーション」セクションの「パスワード変換ツール」を参照してください。
BEA の
com.bea.adapter.dbms.cci.ConnectionImpl
は直接 javax.resource.cci.Connection
を実装しません。この解決策はありますか。
はい。BEA
com.bea.adapter.dbms.cci.ConnectionImpl
は、com.bea.adapter.cci.AbstractConnection
の拡張であり、これは Connection インタフェースを実装します。プロキシは最終派生クラス(ConnectionImpl
)からのインタフェースを使用して構築されます。dumpFamilyTree
出力は、 ConnectionImpl
クラスの getInterfaces
呼び出しに Connection インタフェースが含まれていないことを示します。しかし、AbstractConnection
の getInterfaces
呼び出しには、Connection インタフェースが含まれます。
この問題を解決するには、ConnectionImpl
クラスが ra.xml
ファイルに指定されているインタフェース クラスを直接実装する必要があります(特にこれが実装済みのクラスを拡張する場合、この文は冗長になる場合があります)。次に、アダプタを再構築し、もう一度テストを行ってみてください。
![]() |
![]() |
![]() |