ヘッダーをスキップ
Oracle® Fusion Middlewareリリース・ノート
11gリリース1 (11.1.1) for Microsoft Windows (64-Bit)
B55938-09
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

9 Oracle TopLink

この章では、Oracle TopLinkに関連する問題について説明します。内容は次のとおりです。

9.1 一般的な問題および回避策

この項では、一般的な問題および回避策について説明します。次のトピックが含まれます:

9.1.1 TopLinkオブジェクト・リレーショナルの問題

この項には、次の問題に関する情報が含まれます。

9.1.1.1 WLSシステムMBeanブラウザでEclipseLinkログ・レベルを設定できない問題

Oracle Enterprise Managerを使用してEclipseLinkログ・レベルを設定します。WLSシステムMBeanブラウザを使用して、この操作を実行しないでください。

9.1.1.2 SQLServer2005での間違った外部結合SQL

TopLinkでは、SQL Server v2005に対して間違った外部結合が生成されます。生成される外部結合の構文は、このデータベースの以前のバージョンでは有効です。この制限を回避するには、データベースの互換性を再構成します(詳細は、SQLServerのドキュメントを参照してください)。別の方法として、カスタムTopLinkデータベース・プラットフォームを使用できます。

9.1.1.3 外部トランザクション制御でサポートされないUnitOfWork.release()

Java Transaction API (JTA)と同期している作業ユニットは、解放されると例外をスローします。現行のトランザクションでその変更を永続化しない場合、JTAトランザクションはロールバックする必要があります。

コンテナ境界型のトランザクションでは、EJB/セッション・コンテキストで次のようにsetRollbackOnly()をコールします。

@Stateless
public class MySessionBean
{    @Resource 
    SessionContext sc;
    
    public void someMethod()
    {
        ...
        sc.setRollbackOnly();
    }
}

Bean境界型のトランザクションでは、EJB/セッション・コンテキストから取得したUserTransactionで次のようにrollback()をコールします。

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MySessionBean implements SomeInterface 
{
    @Resource
    SessionContext sc;
    
    public void someMethod() 
    {
        sc.getUserTransaction().begin();
        ...
        sc.getUserTransaction().rollback();
    }
} 

9.1.1.4 UPDATEのリターン・ポリシーとオプティミスティック・ロック

リターン・ポリシーを使用すると、INSERTおよびUPDATEの実行時に変更された値を返してキャッシュ済オブジェクトに移入できますが、このポリシーは、UPDATEで数値バージョンのオプティミスティック・ロックと組み合せると機能しません。すべてのUPDATE操作に対して返される値が1となり、意味のあるロック保護は提供されません。

UPDATEのリターン・ポリシーは、数値のオプティミスティック・ロックと組み合せて使用しないでください。

INSERTのリターン・ポリシーは、オプティミスティック・ロックの使用時に正常に機能します。

9.1.1.5 TimestampをStringとして返すJDBCドライバ

TopLinkでは、サーバーから返される日時の情報は、Timestampを使用しているものと仮定されます。JDBCドライバが現在の日付に対してStringを返すと、TopLinkは例外をスローします。これは、DB2 JDBCドライバの使用時に発生します。

この問題を回避するには、Timestampを返すドライバ(COM.ibm.db2.jdbc.app.DB2Driverなど)を使用するか、サーバー時間のかわりにローカル時間を使用するようにポリシーを変更してください。

別の回避方法は、次のようにプラットフォームで使用されるValueReadQueryで問合せリダイレクタを使用することです。

ValueReadQuery vrq = new ValueReadQuery(
    "SELECT to_char(sysdate, 'YYYY-MM-DD HH:MM:SS.SSSSS') FROM DUAL"
);
vrq.setRedirector(new TSQueryRedirector());
...
class TSQueryRedirector implements QueryRedirector 
{
    public Object invokeQuery(DatabaseQuery query, Record arguments, Session session)
    {
        String value = (String)session.executeQuery(query);
        return ConversionManager.getDefaultManager().convertObject(
            value, java.sql.Timestamp.class
        );
    }
}

9.1.1.6 作業ユニットで変更セットに削除オブジェクトが追加されない問題

作業ユニットの変更セットにアクセスして変更内容を確認する場合、削除保留中のオブジェクト(uow.deleteObject( )uow.deleteAllObjects( )など)は、結果セットから返されません。

削除保留中のオブジェクトは、作業ユニットのgetDeletedObjectsコールを通じてのみ取得できます。

9.1.2 TopLink Workbenchの問題

この項には、次の問題に関する情報が含まれます。

9.1.2.1 ユーザー・インタフェースの問題

JDK 1.7を使用してTopLink Mapping Workbenchを実行すると、チェックボックスまたはラジオ・ボタンを含むグループ・ボックスのあるダイアログに、重複または切り捨てられたグループ・ボックスのタイトルが表示されることがあります。機能上の損失はないので、通常と同様に続行します。

9.1.2.2 アクセシビリティ

Sun JDK 1.6の問題により、ファイルの保存時にNullPointExecptionエラー・ダイアログが生成された場合、そのエラー・ダイアログ・ウィンドウにフォーカスは置かれません。

9.1.2.3 Windows OSでのTopLink Workbenchの実行

Windowsオペレーティング・システムの特定の構成およびバージョンの問題が原因で、workbench.cmdファイルでTopLink Workbenchを起動すると、「Could not find the main class」と記載されたダイアログが表示されることがあります。この問題は、指定されたクラスパスにピリオドを含むディレクトリ・パスが存在するために発生します。この問題を回避するには、原因となっているディレクトリの名前を変更するか、ピリオドを含まないディレクトリ・パスを使用するようにクラスパスを変更します。

9.1.3 TopLinkによるOracle Database拡張

この項には、次の問題に関する情報が含まれます。

9.1.3.1 Oracle WebLogic ServerでのSpatialおよびXDBサポート用のテンプレートJAR

Oracle SpatialおよびOracle XDBマッピングの機能を(スタンドアロンのOracle WebLogic ServerとOracle JDeveloperに統合されたWebLogic Serverの両方で)完全にサポートするには、それぞれtoplink-spatial-template.jarおよびtoplink-xdb-template.jarを使用してWebLogic Serverドメインを拡張し、Oracle SpatialとXDBをサポートする必要があります。

WebLogic Serverドメインを拡張するには、次の手順を実行します。

  1. toplink-spatial-template.jarファイル(Oracle Spatialのサポート用)とtoplink-xdb-template.jarファイル(Oracle XDBのサポート用)を次の場所からダウンロードします。

  2. 表9-1「Oracle Spatialのサポート」または表9-2「Oracle XDBのサポート」を使用して、コピーするファイルを決定します。

    表9-1 Oracle Spatialのサポート

    コピーするファイル コピー元脚注1  コピー先脚注2 

      sdoapi.jar

    <ORACLE_DATABASE_HOME>/md/jlib

    <WEBLOGIC_HOME>/server/lib


    脚注1 これらはデフォルトの場所です。実際の場所は、特定の環境、インストール済オプションおよびリリースに応じて変化する可能性があります。

    脚注2 Oracle JDeveloperに統合されたWebLogic Serverを使用する場合、<WEBLOGIC_HOME>は、<JDEVELOPER_HOME>ディレクトリ内に存在します。

    表9-2 Oracle XDBのサポート

    コピーするファイル コピー元脚注1  コピー先脚注2 

      xdb.jar

    <ORACLE_DATABASE_HOME>/rdbms/jlib

    <WEBLOGIC_HOME>/server/lib

      xml.jar

    <ORACLE_DATABASE_HOME>/lib

    <WEBLOGIC_HOME>/server/lib

      xmlparserv2.jar

    <ORACLE_DATABASE_HOME>/lib

    <WEBLOGIC_HOME>/server/lib

      ori18n-mapping.jarFoot 3 

    <ORACLE_DATABASE_HOME>/jlib

    <WEBLOGIC_HOME>/server/lib


    脚注1 これらはデフォルトの場所です。実際の場所は、特定の環境、インストール済オプションおよびリリースに応じて変化する可能性があります。

    脚注2 Oracle JDeveloperに統合されたWebLogic Serverを使用する場合、<WEBLOGIC_HOME>は、<JDEVELOPER_HOME>ディレクトリ内に存在します。

    脚注3 Oracle Database 11.2以上にはorai18n-mapping.jarを使用してください。


    注意:

    実際のJARファイルの名前は、コピー元のディレクトリでは異なる可能性がありますが、コピー先のディレクトリにコピーする際には、前述のとおりの名前にする必要があります。


  3. 構成ウィザード(<WEBLOGIC_HOME>/common/bin/config.shまたは.bat)を起動します。

  4. 「既存のWebLogicドメインの拡張」を選択します。

  5. WebLogic Serverドメインを参照して選択します。

    WebLogic Serverが統合されたJDeveloperを使用する場合、一般的なWebLogic Serverドメインの場所は、次のようになります。

    • Windows環境の場合: %APPDATA%\JDeveloper\systemXX.XX.XX.XX\DefaultDomain

      XX.XX.XX.XXは、一意の製品ビルド番号です。

      Windowsプラットフォームでは、フォルダ・オプションの「すべてのファイルとフォルダを表示する」を選択する必要があります。

    • Windows以外の環境では、デフォルトの場所は、現在のユーザーのデフォルト・ホーム・ディレクトリ(<$Home>/DefaultDomain)内です。

    詳細は、Oracle JDeveloperのドキュメントを参照してください。

  6. 「既存の拡張テンプレートを使用してドメインを拡張する」を選択します。

  7. 必要なテンプレートJARを参照して選択します(Oracle Spatialの場合はtoplink-spatial-template.jar、Oracle XDBの場合はtoplink-xdb-template.jar)。

  8. ウィザードの残りのページを完了します。

9.1.4 0(ゼロ)の値の主キーの許可

デフォルトで、EclipseLinkは、nullを使用できないプリミティブ型(intlongなど)で0(ゼロ)をnullとして解釈するため、0が主キーにとって無効な値となります。この設定は、persistence.xmlファイルのallow-zero-idプロパティを使用して変更できます。有効な値は次のとおりです。

  • true - EclipseLinkは、0(ゼロ)の値を0として解釈します。この設定により、主キーで0の値を使用できます。

  • false - (デフォルト)EclipseLinkは、0(ゼロ)をnullとして解釈します。

詳細は、http://wiki.eclipse.org/EclipseLink/UserGuideにあるEclipseLinkのユーザーズ・ガイドを参照してください。

9.1.5 JCA Oracle Databaseサービスと組み合されたSybaseの管理対象サーバー

クラスタ内でOracle Database Adapterと組み合せてJCAサービスを使用し、Sybaseデータベースに対してデータベース操作を実行する場合、クラスタ内の管理対象ノードは、メッセージを処理して、重複する操作を試行することがあります。

Sybaseのサポートされるバージョンでは、Oracle TopLinkのレコード・ロックに対応していないため、重複する操作の試行がSybaseで許可されます。

9.1.6 コンテナ管理のJPAを使用するEclipseLinkでのロギング構成

デフォルトで、コンテナ管理のJPAのEclipseLinkユーザーは、Oracle WebLogic Serverのロギング・オプションを使用して、EclipseLinkで生成されたすべてのログ・メッセージをレポートします。Oracle Fusion Middleware Oracle WebLogic Serverのログ・ファイルの構成およびログ・メッセージのフィルタに含まれる、WebLogicロギング・サービスの構成に関する項を参照してください。

EclipseLinkのネイティブ・ロギング構成を使用するには、次のプロパティをpersistence.xmlファイルに追加します。

<property name="eclipselink.logging.logger" value="DefaultLogger"/> 

9.1.7 グリッド・キャッシュにはCacheLoaderが必要である

必要なTopLink Gridラッパーが生成されるようにするには、グリッド・キャッシュとして構成されているエンティティに対してoracle.eclipselink.coherence.integrated.EclipseLinkJPACacheLoaderを構成する必要があります。