Oracle JDeveloper for Windows NT and Windows 2000

リリース・ノート

リリース3.2.3

2001年4月

部品番号: J03328-01

原典情報: JDeveloper 3.2.3 Release Notes (A82929-03)


目次

        はじめに
        使用可能なドキュメントおよび他のリソース
                JDeveloper 3.2オンライン・ヘルプ・システム
                Oracle Technology Network
        ライセンス情報
                VisiBroker for JavaおよびVisiBroker for C++
        インストレーション・ガイドに記載されている重要情報
        Oracle JDeveloperとOracle8i の互換性リスト
        Business Components for Java
                リリース3.2の新機能
                高可用性アプリケーション・モジュール・プール機能のその他のハイライト
                ドキュメントに記載されていない最新の変更
                カスタム・ディテール行セットのフィルタ処理の使用例
        リモートのビジネス・コンポーネント・プロジェクトのアップグレード
        DACナビゲーション・バーのデフォルトのリフレッシュ・インプリメンテーションのオーバーライド
        JSPアプリケーションの処理
        JDeveloperにビルトインされたサーブレット/JSPエンジンに対するサーブレット初期化パラメータの設定
        JDeveloper 3.2とJDK 1.3
                JDK1.3のインストール
                JDK1.3を使用するためのJDeveloper 3.2の設定
                JDeveloper 3.2用JavaプラットフォームとしてのJDK 1.3の使用方法
                デバッグとJDK 1.3
        Oracle9i Application Server上のBusiness Components for Javaライブラリの更新
        EJB 1.1のサポート
        既存のEJB 1.0または1.1のJDeveloper 3.2への移行
        コード・インサイト・バックグラウンド調査のデフォルト値の変更
        チュートリアルに関する変更
                「バッチ・クライアント・プロジェクトの作成」
                「ローカル・モードでのバッチ・クライアントの配布」
                「3層モードでのバッチ・クライアントの配布」
        SQL92ベースのBC4Jにおける制限
        日本語環境での未サポート事項
        国際化(I18N)の問題
                サンプル: 日本語環境上のOracle8i 8.1.7に対するOnline Ordersサンプル/チュートリアルの実行(1427143、1428704)
                HTMLおよびJSPファイルをビューアで表示した場合、'□'文字が表示される(1325251)
                JSPアプリケーションのランタイムで、ボタンおよびいくつかの文字列が翻訳されていない(1326494)
                Business Components for Javaアプリケーションにおけるデータのフェッチ・サイズに関する初期設定値について(1325995)
                デフォルトのプロジェクト・プロパティのエンコーディング設定の変更について
                JDeveloperにビルトインされたサーブレット・エンジンでの日本語名ファイルの呼出しについて
                クラス名、JSPファイル名およびサーブレット名に対するマルチバイト文字の使用について
                JSPアプリケーション作成に影響するビュー・オブジェクト名および属性名について(1660019)
                サンプル: JSPアプリケーション(<JDeveloper_Home>\sample以下のJSPファイル)での日本語の処理について
                日本語で登録されたカスタムJSPテーマ名が文字化けする(1710311)
                接続エラーメッセージが文字化けする(1711596)
                Javaストアド・プロシージャのリモート・デバッグが文字化けする(1693829)
                サンプル: OnlineOrders.sqlの実行時にORA-01858が発生する(1721086)
                サンプル: インストラクション用のHTMLについて
                ヘルプ・メニューから起動されるWebサイトについて
        リリース3.2での既知の問題
                Solaris上のOracle8i 8.1.7へのEJBが配布不可(1482140)
                Javaメソッドの宣言を含むJSPのデバッグにおける注意事項(1761923)
                BC4JランタイムをOracle8i 8.1.7に配布する際、ORA-29552が発生する
                Solaris上のJavaのリモート・デバッグ
                デュアル・プロセッサ・ワークステーションに関する注意事項
                ソース・コントロールで、Version History Viewer/Version Event Viewerが起動不可(1719021)
                XSQLチュートリアルの更新結果の表示
                EJB CMP: 複数の表が使用されている場合にFindByPrimaryKeyに失敗する(1504795)
                CORBAサーバーとして配布されたビジネス・コンポーネントへのアプレットからのアクセス
                JDeveloperを初めて起動した際にCodeCoachメッセージ・ウィンドウが表示されない(1498371)
                ビューアでEJBフォルダ内のファイルを開いたままのプロジェクト・ファイルをエクスプローラから開くと、JDeveloperがハングする(1498383)
                XSQL JavadocがJavadocビューアに表示されない
                JDeveloper 3.1からのJSPアプリケーションのアップグレードに関する注意事項
                ordPlayMedia.jsp(interMediaの描画機能を持つJSPページ)がOracleサーブレット・エンジンで動作しない(1450639、1467454)
                EJB CMP: ファインダ・メソッドの実行時にInvalidOwnerExceptionが発生する(1425656)
                EJB CMP: ファインダ・メソッドにプリミティブ型の引数を設定すると配布時にエラーが発生する(1428453)
                EJB CMP: booleanまたはjava.lang.Booleanのフィールドに関する注意事項(1458411)
                webtogo.oraファイルのPORT変数とHOST変数
                BC4Jランタイム・ライブラリとビジネス・コンポーネントのEJBを異なるスキーマに配布するとエラーが発生する(1095107)
                ネットワーク・クライアントのインストール:  ネットワーク・サーバー側のパスに空白が含まれている場合にスタート・メニューのショートカットが動作しない(1450021)
                jbo:SetAttribute dataitem="*"タグがオブジェクト型に対して動作しない(1426349)
                EJB CMP: Collection型を返すファインダ・メソッドを持つEJBの配布時にエラーが発生する(1425331)
                EJB: 非活性化(passivation)の場合にロールバックがEJBモードで動作しない(1455013)
                リクエストあたり複数のSetReleasePageResourcesを実行すると予期しない問題が発生する(1455651)
                BC4Jのフェイルオーバー・サポートに関する注意事項(1449928)
                EJB: Oracle8i JVMに配布されたアプリケーション・モジュールでOracleSQLExceptionが発生する(1418480)
                DBサーブレットの未サポートについて
                JDBCドライバのライブラリが未設定のプロジェクトでJavaストアド・プロシージャの配布時にNoClassDefFoundExceptionが発生する
                リモート・デバッグにおける注意事項
                アプリケーションのmainメソッドに対する仕様変更
                Webアプリケーション(JSP、XML、サーブレット)に追加されるキャラクタ・セットの設定
                XSQL、JSPファイルに対するヒント・メッセージが適切ではない(1671024)
                9iASおよびApache JServ上でWeb Monitorのセッション情報が表示されない(1727311)
                JSPのリモート・デバッグにおける注意事項
                JSPのデバッグにおける制限事項(1229083)
                アプリケーション配布先のOracle8i JVMユーザーに付与すべきJava2スタイルの権限
                Oracleスタイルのバインド変数の使用に対する注意事項
                JDBCドライバ8.0を使用する場合、Business Components for JavaでのBLOB列の未サポート(804754)
                ネット名/値ペアによるJDBC Thinドライバ接続を使用する場合、Oracle8i へ配布できない(1250825)
                JSPアプリケーションの実行時にNetscape Navigatorでエラーが発生する(1037092)
                ビジネス・コンポーネントJavaフォームの問題
                配布済のJavaストアド・プロシージャに対する「Javaの生成」の実行でエラーが発生する(1100083)
                バインド・モード/ネーミング・モードのVisiBrokerで、DACアプレットには稼働中のGateKeeperサービスが必要(1492845)


はじめに

Oracle JDeveloperは、インターネット・アプリケーションを作成、デバッグおよび配布するためのオラクル社のJava開発ツールです。このリリースには、Oracle Business Components for Javaも含まれています。これは、XMLで強化された100% Javaのアプリケーション・コンポーネント・フレームワークで、インターネット用の複数層Javaアプリケーションの開発、配布およびカスタマイズが大幅に簡略化されます。


使用可能なドキュメントおよび他のリソース


JDeveloper 3.2 オンライン・ヘルプ・システム


ドキュメントの2つのオプション

JDeveloper 3.2のオンライン・ヘルプ・システムには、次の2つの形式があります。

Javadoc形式のリファレンスは、JDeveloper内部から直接使用できます。Javadocを表示するには、まずソース・ファイルを開きます(ナビゲータでファイルを指定して開く、または、ソース・エディタ内に記述されているクラス名の上で右クリックして「このシンボルを参照」を選択する)。次に、「Javadocビューア」タブをクリックします。クラスにJavadocがない場合は、エラー・メッセージが表示されます。


オンライン・ヘルプのインストールと設定

標準インストールを選択した場合は、Oracle JDeveloperのインストーラにより、コンピュータにどのブラウザがインストールされているかが検出され、適切な形式のヘルプがインストールされます。

適切なブラウザをインストールしていない状態で任意のヘルプ・システムを強制インストールするには、Oracle JDeveloperインストーラの「カスタム」インストール・オプションを使用します。希望のオンライン・ヘルプ・オプションを選択してください。

HTML Helpをインストールしても、マシン上で適切なバージョンのMicrosoft Internet Explorerが使用できない場合、ヘルプ・システムの起動時に次のようなエラーが発生します。


Oracle Technology Network

Oracle Technology Network(OTN)は、インターネット・プラットフォームでの開発に関するOracle技術情報について、最も信頼のおける無償のソースです。ユーザーはオンライン・コミュニティの一員となり、無償提供のソフトウェアや、OTNが開催しているインターネット開発者会議および最新のOracleテクノロジについて議論するグループにアクセスできます。

OTNの登録ページ
日本語サイト:  http://otn.oracle.co.jp/membership/index.html
USサイト:  http://otn.oracle.com/free/

ホワイトペーパー、FAQ、リリース・ノートの更新など、JDeveloperに関する最新情報は、Oracle Technology Networkの次のサイトを参照してください。
日本語サイト:  http://otn.oracle.co.jp/products/itools/jdev/jdev.html
USサイト:  http://otn.oracle.com/products/jdev/


ライセンス情報


VisiBroker for JavaおよびVisiBroker for C++

VisiBroker for JavaおよびVisiBroker for C++のバージョンは、Oracle JDeveloper 3.2に統合されました。CORBAサーバー・オブジェクトの構築など、このVisiBroker for JavaおよびVisiBroker for C++を使用するすべての開発は、Oracleツールの使用を介した場合に限定されます。スタンドアロン開発でVisiBroker for JavaおよびVisiBroker for C++を使用することは許可されていません。またオラクル社は、VisiBroker for JavaおよびVisiBroker for C++の開発バージョンとランタイム・バージョンのいずれについても、スタンドアロンCORBAサーバー・オブジェクトのサポートを含め、Oracleのツールおよび製品の外部での使用をサポートしていません。

VisiBroker for JavaおよびVisiBroker for C++をスタンドアロン・ベースで使用するライセンスは、Borland Software Corporationから入手できます。


インストレーション・ガイドに記載されている重要情報

インストール、システム要件およびサポートされる配布環境の詳細は、「Oracle JDeveloper for Windows NT and Windows 2000 インストレーション・ガイド リリース3.2.3」を参照してください。インストレーション・ガイドには、JDeveloperソース・コントロールで使用するOracle Repositoryのインストールについての情報も記載されています。インストレーション・ガイド(install.htm)は、次の両方の場所にあります。


Oracle JDeveloperとOracle8i の互換性リスト

Oracle JDeveloper 3.2は、Oracle8i 8.1.7を完全にサポートしています。次の表は、Oracle JDeveloper 3.1および3.2と、Oracle8i 8.1.6および8.1.7の互換性を示したものです。

JDeveloperと、Oracle8i 8.1.6およびOracle8i 8.1.7の互換性

JDeveloper 3.1

8.1.6

8.1.7


JDBC

  ○

  ○

SQLJ

  ○

  ○

Oracle8i JVMへのJavaストアド・プロシージャの配布

  ○

  ○

Oracle8i JVMへのEJBの配布

  ○

  ×

Oracle8i JVMへのCORBAの配布

  ○

  ×

データベース・ブラウザ

  ○

  ○

リモート・デバッグ(Oracle8i JVM)

  ○

  ○1


JDeveloper 3.2

8.1.6

8.1.7


JDBC

  ○

  ○

SQLJ

  ○

  ○

Oracle8i JVMへのJavaストアド・プロシージャの配布

  ○

  ○

Oracle8i JVMへのEJBの配布

  ×

  ○2

Oracle8i JVMへのCORBAの配布

  ×

  ○

データベース・ブラウザ

  ○

  ○

リモート・デバッグ(Oracle8i JVM)

  ○1

  ○


1 Javaストアド・プロシージャのみ。

2 Solaris上のOracle8i 8.1.7にJDeveloper 3.2からEJBを配布することはできません。この問題は、Windows NT上のOracle8i 8.1.7では発生しません。この問題に関する詳細は、OTN-Jを参照してください。


注意: 

この表は、Oracle JDeveloperの全機能ではなく、Oracle8i 関連の機能のみを対象としたものです。



Business Components for Java

この項には、ドキュメントには記載されていないBusiness Components for Javaの機能に関する最新情報が記載されています。


リリース3.2の新機能

次の機能は、リリース3.2でのBusiness Components for Java(BC4J)の新機能です。詳細は、オンライン・ドキュメントを参照してください。


高可用性アプリケーション・モジュール・プール機能のその他のハイライト

次に、アプリケーション・モジュール・プールでサポートされる3種類のモードを説明します。


「ステートレス」ポリシー

ステートレス・モードを使用してアプリケーション・モジュールをプールに解放した場合は、保留中のアプリケーション・モジュールの状態がすべて解放されます。リクエストの継続中にコードでトランザクションを明示的にコミットしなかった場合、リクエスト中にアプリケーション・モジュールで行われた保留中の挿入、更新、削除はすべて取り消されます。このモードは、サーブレットまたはJSPページが実行しているタスクが現在のリクエストで完了する場合に使用します。


ステートレスのパフォーマンスでの単純な「ステートフル」プログラミング

ジョブ完了のためにユーザーによる別のページへのアクセスが必要なタスクをインプリメントするWebアプリケーションを構築する必要がある場合は、ステートフル・モードを使用します。このモードでは、アプリケーション・モジュール・インスタンスをプールに解放しますが、プールに対して、保留中のアプリケーション・モジュールの状態を効果的に管理するよう要求します。現在のセッション中にアプリケーション・モジュールに対して行われた保留中の(コミットされていない)挿入、更新または削除は、リクエストの終了後も、アクティブなビュー・オブジェクトの現在位置として記憶されます。これにより、多くのWebページ・リクエストにまたがることの多い新規オーダーの作成や新規項目の追加が、簡単にプログラムできるようになります。前述のように、プロセスの最終ページでアプリケーション・モジュールをステートレス・モードで解放し、終了を示すことができます。

これは、現在のアプリケーション・モジュールが、現在のブラウザ・ユーザー専用であることを意味するのではなく、現在のブラウザ・ユーザーが戻った際に次のリクエストで前のリクエストと同じ保留状態のアプリケーション・モジュールを自動的に処理するだけであると理解することが非常に重要です。プールのアプリケーション・モジュール・インスタンスがまったく同じであるという保証はありませんが、スマート状態管理により、プールからどのインスタンスを取得した場合でも、現在のユーザーの前のセッションの状態と自動的に同期することが保証されます。このモードでは、Webサイトにアクセスする各ユーザーがリソースを専有するという欠点を伴うことなく、単純なステートフル・プログラミング・モデルを利用できます。この機能は、XMLに対する必要最低限のアプリケーション・モジュール状態をデータベースに透過的に保持し、必要に応じてアプリケーション・モジュール状態のスナップショットを透過的に再利用することにより実現されます。このモードでは、保留中のデータベース状態を複数のリクエストにまたがって保持すべきではありませんが、(コミット時ロックを使用した)アプリケーション・モジュールの保留中の変更は適切に処理されます。


「リザーブド」ポリシー

JDeveloper 3.1との下位互換性を保つために、アプリケーション・モジュールをリザーブド・モードで解放できます。このモードは、ユーザー定義のタイムアウトが経過するまで、または後続のページがアプリケーション・モジュールをステートレス・モードで再び解放するまで、特定のアプリケーション・モジュール・インスタンスを現在のブラウザ・セッションに事実上固定します。このモードは、複数のリクエストにまたがって保留中のデータベース状態をサポートする唯一のモードです。


ドキュメントに記載されていない最新の変更

機能に対する次の最新の変更は、ドキュメントに記載されていない可能性があります。


カスタム・ディテール行セットのフィルタ処理の使用例

カスタムSQLのWHERE句を使用してビュー・リンクでリンクされたBC4Jビュー・オブジェクトをプログラムで処理する場合は、等式ベースのビュー・リンクにデフォルトで提供されているものと同じ種類のマスター/ディテール行セットの一貫性を実現できます。これを実現するには、次のことが必要です。

次は、カスタム行フィルタの使用方法を示すサンプルです。この例では、部門番号別にグループ化するデフォルトの方法は使用せずに、2つのビュー・オブジェクトを使用し、データ駆動の給与帯にグループ化された従業員情報を提示します。このアプリケーションが接続するデータベース内のEMP表について理解していることと、このEMP表にEmpという名前のエンティティ・オブジェクトがマップされていることを前提とします。サンプル・コードで示すオブジェクトのパッケージ名はneqです。

最初に、ビュー・オブジェクト・ウィザードを使用してSalaryBandsビュー・オブジェクトを作成します。問合せのみ指定する必要があり、エンティティ・オブジェクトにこのエキスパート・モード問合せを関連付ける必要はありません。問合せは次のようになります。

select 'Band1' as band,
       0       as band_low,
       999    as band_high
  from dual
union all
select 'Band2' as band,
       1000   as band_low,
       1999   as band_high
  from dual
union all
select 'Band3' as band,
       2000   as band_low,
       5999   as band_high
  from dual 

これはSALARY_BANDS表に対する問合せにすることができますが、例示が目的であるため、より単純なこの問合せを使用しています。これにより、次のような3行の問合せ結果が生成されます。

BAND  BAND_LOW BAND_HIGH
----  -------- ---------
Band1 0        999
Band2 1000     1999
Band3 2000     5999 

Employeesビュー・オブジェクトを作成した後で、ビュー・リンクを作成します。このビュー・リンクは、各給与帯マスター行について、給与が現在の給与帯の高値と低値の間に該当する従業員のリストを表示します。ウィザードを使用してデフォルトのEmployeesビュー・オブジェクトを作成し、それをEmpエンティティ・オブジェクトに関連付けます。行セットの整合性機能を動作させるには、ディテール・ビュー・オブジェクトがエンティティ・オブジェクトにマップされる必要があります。

EmployeesWithinBandという名前のビュー・リンクをSalaryBandsビュー・オブジェクトとEmployeesビュー・オブジェクトの間に作成し、次のリンク元属性を選択します。

  1. BandLow

  2. BandHigh

また、一致する次のリンク先属性を選択します。

  1. Sal

  2. Sal

リンク先で参照する必要のある属性は1つのみであるため、Sal属性を2回選択したことに注意してください。デフォルトのAssociationアクセッサ名をオーバーライドし、よりわかりやすいEmployeesInBandという名前に変更します。これにより、SalaryBandsビューの各行でこの名前を使用して属性をプログラムで取得し、調整済のディテール・レコード・セットを取得できます。

ビュー・リンク・ウィザードの「関連付けSQL文」ページで、デフォルトのWHERE句をオーバーライドして次のようなカスタムWHERE句を作成します。

SAL BETWEEN :1 AND :2 

アプリケーション・モジュールを作成し、SalaryBandsビュー・オブジェクトをビュー・リンクでリンクされたディテールEmployeesビュー・オブジェクトとともにそのアプリケーション・モジュールに追加すれば、Business Component Testerを実行して、給与帯と、その給与帯に該当する従業員の問合せが機能することが確認できます。

ここで、RowFilterをインプリメントし、従業員の給与が該当する給与帯に基づいて、従業員行の挿入および更新が適切なディテール従業員コレクションに自動的にグループ化されるようにします。

package neq;
import oracle.jbo.domain.Number;
import oracle.jbo.server.RowFilter;
import oracle.jbo.server.ViewObjectImpl;
public class SalaryBandRowFilter implements RowFilter{
  private ViewObjectImpl _vo;
  private Object[]       _values;
  private float          _rangeLow, _rangeHi;
  // Filter to group rows into salary bands
  public SalaryBandRowFilter(ViewObjectImpl vo, Object[] values) {
    _vo       = vo;
    _values   = values;
    if (values != null && values.length <= 2) {
        _rangeLow = ((Number)values[0]).floatValue();
        _rangeHi  = ((Number)values[1]).floatValue();
    }
  }
  // Return the VOImpl we are associated with
  public ViewObjectImpl getViewObjectImpl() { return _vo; }
  // Return the number of parameters we were constructed with
  public int getParamLength() { return _values != null ? _values.length : 0; }
  // Return the source parameter values we were constructed with
  public Object[] getParamValues() { return _values; }
  // Test whether a candidate row's link attributes qualify for this filter
  public boolean paramQualifies(Object[] values) {
      if (values == null || _values == null) return false;
      if (values[0] == null) return false;
      float currentSal = ((Number)values[0]).floatValue();
      // Return true if current salary falls between _Low and _High
      return _rangeLow <= currentSal &&
                          currentSal <= _rangeHi;
  }
  public int getRowInitLength() {
    return 0;    // No Foreign Key values to initialize for new rows
  }
  public Object[] getRowInitValues() {
    return null; // No Foreign Key values to initialize for new rows
  }
  // This is not a null row filter
  public boolean isNull() { return false; }
} 

次に、Employeesビュー・オブジェクト(ディテール・ビュー・オブジェクト)のEmployeesImpl.javaファイルで、次のメソッドをオーバーライドします。(java.util.*をインポートするコードの追加が必要です。)

  // Return our custom row filter
  protected RowFilter buildRowFilter(Object[] paramValues) {
    return new SalaryBandRowFilter(this,paramValues);
  }
  // This method is called to retrieve row filters for a candiate row
  protected RowFilter[] getQualifyingRowFilters(Object[] rowParamValues) {
    Enumeration rowFilters = getRowFilters();
    Vector qualFilterVec = new java.util.Vector();
    while (rowFilters.hasMoreElements()) {
      RowFilter rowFilter = (RowFilter) rowFilters.nextElement();
      if (rowFilter.paramQualifies(rowParamValues)) {
         qualFilterVec.addElement(rowFilter);
      }
    }
    RowFilter[] retVal = new oracle.jbo.server.RowFilter[qualFilterVec.size()];
    qualFilterVec.copyInto(retVal);
    return retVal;
  }
  // This method is called when a candidate row does not
  // qualify any of the existing row filters
  protected RowFilter[] buildQualifyingRowFilters(Object[] rowParamValues) {
    // Do not create a row filter for missing bands
    return null;
  }
 

これらのオーバーライドは、カスタムRowFilterインプリメンテーションを使用することをフレームワークに通知し、候補行に一致する適切なフィルタの識別というフレームワークのニーズに応えます。最後に、次の処理を行うサンプルBC4Jクライアントを作成して、機能の動作を確認します。

  1. neq.NeqModuleアプリケーション・モジュールに接続します。

  2. 処理するSalaryBandsビュー・オブジェクトを検索します。

  3. SalaryBandsビューの最初の行(Band1、0〜999)を取得します。

  4. EmployeesInBandという名前のビュー・リンク・アクセッサ属性を要求することにより、現在の給与帯にあるディテール従業員の調整済セットを取得します。

  5. 現在の給与帯である0〜999の範囲外の給与を持つ新規従業員行を、このコレクションに作成します。

  6. 2番目の給与帯である1000〜2999にナビゲートします。

  7. その行のEmployeesInBandという名前のビュー・リンク・アクセッサ属性を再度要求することにより、その給与帯にあるディテール従業員の調整済セットを取得します。

  8. 取得するディテール行セットでsetAssociationConsistent(true)をコールし、キャッシュに整合性のある方法で内容が取得されるようにします(問い合わされた行に加えて保留中の新規/変更済の行を含む)。

  9. 現在の給与帯で見つかったディテール従業員を反復し、新規に追加された従業員が、給与帯に基づいて適切なディテール行セットに自動的に移し替えられたことを確認します。

クライアント・コードは次のようになります。

import oracle.jbo.*;
import java.util.*;
import javax.naming.*;
import oracle.jbo.domain.Number;
public class TestClient {
  public static void main(String arg[]) throws Exception {
    // Modify this JDBC connection string to suit your database
    String jdbcURL        = "jdbc:oracle:thin:scott/tiger@localhost:1521:ORCL";
    String appModuleName  = "neq.NeqModule";
    // Setup the hashtable of JNDI initialization parameters
    Hashtable env = new Hashtable(2);
    env.put(Context.INITIAL_CONTEXT_FACTORY, JboContext.JBO_CONTEXT_FACTORY);
    env.put(JboContext.DEPLOY_PLATFORM, JboContext.PLATFORM_LOCAL);
    // Create an JNDI initial context
    Context ic = new InitialContext(env);
    // Lookup a home interface (factory) for the AppModule by name
    ApplicationModuleHome home =(ApplicationModuleHome)ic.lookup(appModuleName);
    // Create an instance of the AppModule using the home/factory
    ApplicationModule am = home.create();
    // Connect the application module to the database
    am.getTransaction().connect(jdbcURL);

    // Find the "SalaryBands" view object by name in the app module
    ViewObject vo_Bands = am.findViewObject("SalaryBands");

    // Get the first row of its result set, executing query if needed
    Row row_Bands = vo_Bands.first();

    RowSet details = (RowSet)row_Bands.getAttribute("EmployeesInBand");

    // Create a new employee row in this rowset
    // Since its salary falls outside of the 0-999 band,
    // it should get automatically moved to the rowset
    // for the second band 1000-1999
    Row new_Emp = details.createRow();
    new_Emp.setAttribute("Empno",new Number(1111));
    new_Emp.setAttribute("Ename","Steve");
    new_Emp.setAttribute("Sal", new Number(1475));
    details.insertRow(new_Emp);

    row_Bands = vo_Bands.next(); // Get Band 2
    details = (RowSet)row_Bands.getAttribute("EmployeesInBand");
    details.setAssociationConsistent(true);
    while (details.hasNext()) {
      Row row_Emp = details.next();
      System.out.println(row_Emp.getAttribute("Ename"));
      System.out.println(row_Emp.getAttribute("Sal"));
    }
    // Disconnect the application module
    am.getTransaction().disconnect();

  }
} 


リモートのビジネス・コンポーネント・プロジェクトのアップグレード

リモートに配布されたビジネス・コンポーネント・プロジェクトのアップグレードは、次の手順で行います。

  1. アプリケーション・モジュール・エディタの「リモート」タブをクリックし、すでに選択されている配布プラットフォームをハイライトしてから「完了」をクリックすることにより、トップレベルのアプリケーション・モジュールを再びリモートにします。

  2. ビジネス・コンポーネント・プロジェクトを対象プラットフォームに再び配布します。

  3. 必要に応じて、再生成されたクライアントJARファイルでクライアント・プロジェクトを更新します。

  4. クライアント・プロジェクトを再配布します。

クライアントが、TreeControlを使用するDACアプレットまたはアプリケーションの場合は、TreeControlを正しく動作させるために、複数層起動用の-DnullString=trueスイッチも組み込む必要があります。


DACナビゲーション・バーのデフォルトのリフレッシュ・インプリメンテーションのオーバーライド

デフォルトでは、DACナビゲーション・バーのリフレッシュ・インプリメンテーションは、次の手順で処理されます。

  1. BC4JおよびDACのトランザクション・コンテキストをロールバック

  2. すべてのセッションRowSetInfoオブジェクトの問合せを再実行

  3. すべてのセッションRowSetInfoオブジェクトの行の流用をリセット

ただし、大規模なDACアプリケーションでは、すべてのセッションRowSetInfoオブジェクトの問合せをロールバック・インプリメンテーションによって積極的に実行する必要はありません。かわりに、そのようなアプリケーションでは、現在表示されているコントロールをサポートするRowSetInfoオブジェクトのみを再問合せする必要があります。

大規模なアプリケーションの要件を満たすために、DACナビゲーション・バーは、トランスポータブルなリフレッシュ・インプリメンテーションをサポートしています。拒否可能なボタン・クリック・リスナーをナビゲーション・バーに追加することにより、アプリケーション開発者は、ユーザーがDACナビゲーション・バー上のリフレッシュ・ボタンをクリックしたときに実行されるカスタム・リフレッシュ・インプリメンテーションを追加できます。拒否可能なリスナーは、あらゆるロールバック・イベントをリスニングする必要があります。ロールバック・イベントが検出されると、このリスナーがカスタム・リフレッシュ・インプリメンテーションを実行します。カスタム・リフレッシュ・インプリメンテーションが実行された後、リスナーはイベントを拒否することによってデフォルトのインプリメンテーションを短絡し、それが実行されないようにします。

カスタム・リフレッシュ・インプリメンテーションでは、アプリケーションで要求される任意のリフレッシュ処理を実行できます。ただし、BC4JおよびDACのトランザクション・コンテキストをロールバックするには、ほとんどのインプリメンテーションでリフレッシュが要求される可能性があります。この要求をサポートするために、カスタム・リフレッシュ・インプリメンテーションでは次の処理を実行する必要があります。

  1. DACトランザクション・コンテキストが使用済かどうかをチェック

  2. DACトランザクション・コンテキストが使用済の場合には、次の処理を実行

    1. BC4Jトランザクション・コンテキストをロールバック

    2. DACトランザクション・コンテキストが未使用であることをマーク

    3. DACトランザクション・コンテキストが有効であることをマーク

  3. アプリケーション固有のリフレッシュ・ロジックを実行して表示可能な行セットをリフレッシュし、行の流用をリセット、等

手順1から2のcは、トランザクション・コンテキストをロールバックする際にデフォルトのリフレッシュ・インプリメンテーションが実行する手順と同じです。

次のサンプル・クラスでは、カスタム・リフレッシュ・インプリメンテーションを追加するために使用されるナビゲーション・バー・ボタンのリスナーのインプリメンテーションを示しています。サンプル・コードとしての目的上、アプリケーション要件については多くの前提条件があります。たとえば、次のような点です。

  1. NavigationBarは、グリッド・コントロールによっても表示されるEmpViewデータ項目に静的にバインドされます。

  2. リフレッシュ・インプリメンテーションは、ディテールEmpViewのRowSetInfoの問合せを再実行するためにのみ必要とされます。行の流用をリセットするためのリフレッシュ、マスターDeptViewのRowSetInfoの問合せを再実行するためのリフレッシュ、あるいは現在表示されている他のコントロール(すなわちDACのTreeControl)をリフレッシュするためのリフレッシュは不要です。

      public class MyNavigationBarListener implements NavigationBarButtonClickListener 
      { 
        public void navigationBarButtonClicked(NavigationBarButtonClickEvent event) 
        throws NavigationBarButtonClickVetoException
        { 
          if (NavigationBar.BUTTON_ROLLBACK == event.getButtonClicked())
          { 
            doRollback();
            throw new NavigationBarButtonClickVetoException("X");
          } 
        }
        private void doRollback()
        { 
          try
          {
            Frame1.getInstance().masterNavBar.showBusyCursor();
            SessionInfo sessionInfo = Frame1.getInstance().sessionInfo;
            // Only if the sessionInfo has been instantiated and has been opened
            if (sessionInfo != null && sessionInfo.isOpen())
            { 
              // If pending changes exist 
              if (sessionInfo.isDirty())
              {
                // Rollback the BC4J transaction
                sessionInfo.getApplicationModule().getTransaction().rollback();
                // Reset the state of the DAC session. 
                sessionInfo.clearDirty();
                sessionInfo.forceValid();
                } 
                // Execute the application specific refresh logic 
              doRefresh();
            } 
          }
          finally
          { 
            Frame1.getInstance().masterNavBar.restoreDefaultCursor();
          }
        }
        private void doRefresh()
        {
          // Perform application specific refresh logic 
          // For instance, re-execute the queries for the RowSetInfos that are 
          // bound to the currently visible controls 
          Frame1.getInstance().EmpViewDetailIter.executeQuery(); 
        }
      } 

ここでFrame1.getInstance()は、アプリケーションのエントリ・ポイントでインスタンス化される単一フレームのインスタンスを返すstaticメソッドです。

MyNavigationBarListenerをインスタンス化および登録するためには、ナビゲーション・バーを使用する前に次のようなインプリメンテーションが必要です。

    masterNavBar.addVetoableNavigationBarButtonClickListener(new MyNavigationBarListener());

ここでmasterNavBarは、EmpViewDetailIterにより生成されるデータ項目に静的にバインドされるNavigationBarのインスタンスです。


注意:

上のソリューションは、ユーザーがDACナビゲーション・バー上のリフレッシュ・ボタンをクリックする場合にのみ適用されるものです。アプリケーション開発者が、SessionInfo.getDbAccess().rollbackTransaction()を使用してコード中でロールバックを強制した場合には、そのコードを移植してカスタム・インプリメンテーションを使用するか、または問合せを再実行せずにBC4JおよびDACのトランザクション・コンテキストをロールバックする別のカスタム・インプリメンテーションを使用する必要があります。


JSPアプリケーションの処理

JDeveloper 3.2では、Data Web Beanは、デフォルトのリクエスト・スコープ設定で使用した場合に最適に機能します。JSPエレメント・ウィザードでは、アプリケーション、セッション、ページおよびリクエストのスコープ設定を使用できますが、デフォルトのスコープ・オプションであるリクエストを常に使用することをお薦めします。スコープを変更すると、複数のユーザーがページにアクセスする際に信頼性のない結果が生成されることがあります。

JDeveloper 3.2では、JSPアプリケーション・モジュール・リソースを管理するためのモードとしてステートフル・モードが新規に追加されます。これに伴い、JDeveloper 3.1でステートフル・モードと呼ばれていたモードはリザーブド・モードに置き換わります。JDeveloper 3.2のリザーブド・モードは、HTTPセッションの継続時間全体にわたってアプリケーション・モジュールの制御を維持しますが、新しいステートフル・モードは、JSPページがアプリケーション・モジュールを解放するとき(ReleasePageResourceデータ・タグまたはreleasePageResource()メソッドをData Web Beanについて検出したとき)に、アプリケーション・モジュールの状態をデータベースにキャッシュします。リザーブド・モードでのみ、セッション中にユーザーが変更したデータが、別のユーザーにより変更されないことが保証されます。ステートフル・モードはデータを保持し、後続のセッションでそのデータを復元できますが、格納されたデータに対して行われた変更は、新規アプリケーション・モジュール・インスタンスがデータベースから状態を復元する際に反映されます。

「プロジェクト・プロパティ」ダイアログの「コンパイラ」タブでプロジェクトのエンコーディングを設定することにより特殊なキャラクタ・セット・エンコーディングをJSPアプリケーションで使用する場合は、Oracle JSPサーバーのzone.propertiesファイルでtranslate_paramsオプションをtrueに設定する必要もあります。

JDeveloperのビジネス・コンポーネント・プロジェクト用にJSPクライアント・プロジェクトを作成する場合は、JSPプロジェクトがビジネス・コンポーネントの出力ルート・ディレクトリにアクセスできることを確認する必要があります。アクセスできない場合は、クライアントがビジネス・コンポーネントのクラス・ファイルの位置を特定できないため、ランタイム・エラーが発生します。出力ルート・ディレクトリが両方のプロジェクトで同じでない場合は、「プロジェクト・プロパティ」ダイアログを使用し、ビジネス・コンポーネントのクラスパスを定義するJSPプロジェクト用の新規ライブラリを作成します。「ライブラリ」タブを選択して「ライブラリ」、「追加」、「新規」の順にクリックし、JSPクライアント・ライブラリの名前を指定し、ビジネス・コンポーネント・クラスを含むディレクトリ(たとえば、C:\JDeveloper3.2.3\myclasses\OnlineOrdersなど)を入力します。または、「プロジェクト・プロパティ」ダイアログの「パス」タブで、両方のプロジェクトに対して同じ出力ルート・ディレクトリを設定します。


JDeveloperにビルトインされたサーブレット/JSPエンジンに対するサーブレット初期化パラメータの設定

サーブレットの初期化パラメータは、構成ファイルで設定可能です。これはwebtogo.oraという名前のファイルで、<JDeveloper_Home>\libにあります。

このファイルの[SERVLET_PARAMETERS]という領域に、サーブレット・パラメータを追加できます。たとえば、 (webtogo.oraファイルで)次のようにします。

[SERVLET_PARAMETERS]
My_Init_Parameter=My_Value
 .
 .
 .
 

この値を取得するには、サーブレットで次のようなコードを使用します。

// Global String to retrieve value
String my_init_val;

// Overidden Init method with getInitParameter call.
 public void init(ServletConfig config) throws ServletException {
    super.init(config);
     my_init_val = getInitParameter("My_Init_Parameter");
  }

 


注意: 

これらのパラメータは、システム共通です。また、この機能はJDeveloperの3.2以降のリリースで変更される場合があります。



JDeveloper 3.2とJDK 1.3

JDeveloper 3.2には、JDKの切換え機能があります。この機能により、Java Development Kitの新しいバージョンをIDEに追加することが可能です。JDeveloperリリース3.2には、JDK 1.2.2(デフォルト)およびJDK 1.1.8が含まれています。現在JavaSoftではJDK 1.3がリリースされています。JDK 1.3は、JDeveloper 3.2には含まれませんが、http://java.sun.com/products/jdk/1.3/ja/から無償でダウンロード可能です。


注意: 

JDK 1.3は、Javadocに含まれていません。これらのドキュメントは、http://java.sun.com/j2se/1.3/ja/docs.htmlから無償でダウンロードできます。Javadocは、JDK 1.3ホーム・ディレクトリに解凍することをお薦めします。Java2 SDKドキュメントの詳細は、JDK 1.3のリリース・ノートを参照してください。



JDK1.3のインストール

  1. JDeveloperをC:\Program Files\Oracle\JDeveloper 3.2.3\にインストールしてある場合は、JDK 1.3をディレクトリC:\Program Files\Oracle\JDeveloper 3.2.3\jdk1.3にインストールします。

  2. C:\Program Files\Oracle\JDeveloper 3.2.3\java1.2\jre\binディレクトリから、ovjmディレクトリと、fdebug.exeおよびfdebug_g.exeの2ファイルを、C:\Program Files\Oracle\JDeveloper 3.2.3\jdk1.3\jre\binにコピーします。

  3. C:\Program Files\Oracle\JDeveloper 3.2.3\jdk1.3\jre\lib\jvm.cfgのファイルを編集します。このファイルには、このリリースでサポートされるJava仮想マシン(JVM)がリストされています。JDK 1.3でOracle JVM(Oracleによる拡張されたJVM、OJVM)を実行させるには、次の行を追加します。

    -ojvm 


注意: 

jvm.cfgファイルでの各JVMの順序は重要です。リストの1番目のJVMがデフォルトのJVMになります。


手順2および3を自動的に実行するために、InstallOJVM.batというバッチ・ファイルが用意されています。これは、<JDeveloper_Home>\binディレクトリ内にあります。


JDK1.3を使用するためのJDeveloper 3.2の設定

  1. JDeveloperを起動し、「ツール」メニューから「デフォルトのプロジェクト・プロパティ」を選択します。「ターゲットのJDKバージョン」プルダウン・メニュー・ボックスの隣にある「定義」ボタンをクリックします。

  2. 「使用可能なJDKのバージョン」ダイアログが表示されます。「新規」ボタンをクリックし、次に「...」ボタンをクリックして、JDK 1.3のjava.exeを検索するか、またはJDK 1.3のディレクトリ内のjava.exeまでのパスを入力します。

  3. java.exeへのパスを選択すると、「クラスパス」および「ソースパス」テキストボックスのパスは自動的に決定されます。Javadocもダウンロードしインストールした場合は、ドキュメント・パスも挿入されます。「使用可能なJDKのバージョン」リストにJDK 1.3が追加されます。

  4. 「OK」をクリックし、ダイアログを閉じます。

  5. 「ターゲットのJDKバージョン」プルダウン・メニュー・ボックスからJDK 1.3を選択して「OK」をクリックし、変更した「デフォルトのプロジェクト・プロパティ」を確定します。

これで、JDeveloper 3.2を使用してJavaアプリケーションを開発する際にJDK 1.3を使用できるようになります。新規プロジェクトにデフォルトとしてJDK 1.3を使用する場合は、「デフォルトのプロジェクト・プロパティ」ダイアログの「ターゲットのJDKバージョン」プルダウン・メニュー・ボックスで、JDK 1.3が選択されていることを確認してください。既存プロジェクトに対しては、JDK 1.3を使用する際に「ターゲットのJDKバージョン」を変更する必要があります。


JDeveloper 3.2用JavaプラットフォームとしてのJDK 1.3の使用方法

JDeveloper 3.2の一部はJavaでプログラムされているため、それ自体に新しいJDK 1.3を利用することも可能です。これには次の3つの方法があります。

変更が有効かどうかを確認するには、JDeveloper 3.2を起動して「ヘルプ」 -> 「バージョン情報」を選択します。アイコンの下に、次のように表示されます。


デバッグとJDK 1.3

OJVMがインストールされていないJDKでローカル・デバッグをする場合、特に指定がない限り、JDeveloperはデフォルトのJVM設定を使用します。SunのJDK 1.3を使用する場合、ホットスポットがデフォルトですが、ホットスポットのデバッグのインプリメンテーションには問題があります。したがって、OJVMがインストールされていないJDK 1.3でローカルにデバッグする場合は、デバッグの実行時に-classicパラメータを使用してください。


Oracle9i Application Server上のBusiness Components for Javaライブラリの更新

JDeveloper 3.2を入手する前にOracle9i Application Serverを入手した場合は、最新のビジネス・コンポーネント・ライブラリがない可能性があります。これらのライブラリを追加し、クラスパスにその一部を含めることにより、Oracle9i Application Serverを更新する必要があります。

Oracle9i Application Serverを更新するには

  1. <JDeveloper_Home>\libから<Oracle_Home>/Apache/BC4J/libに次のファイルをコピーします。

         connectionmanager.zip
         jbo8iclient.zip
         jbocmp.zip
         jbodatum111.zip
         jbodatum12.zip
         jbodomgnrc.zip
         jbodomorcl.zip
         jbodt.zip
         jboejb.jar
         jbohtml.zip
         jboimdomains.zip
         jbojdbcpatch.zip
         jbomt.zip
         jboo8i.zip
         jboremote.zip
         jboremoteejb.zip
         jbotester.zip
         jbovb.zip
         jbovbclient.zip
         ordhttp.zip
         ordim817.zip
         ordvir817.zip  

    これらのファイルには、ターゲット・ディレクトリ内に既存のバージョンを持つものもあります。これらのファイルは新規バージョンで置換してください。

  2. テキスト・エディタでjserv.propertiesファイルを編集します。このファイルは、UNIXでは<Oracle_Home>/Apache/Jserv/etc、Windows NTでは<Oracle_Home>\Apache\Jserv\confディレクトリにあります。

  3. コメントで始まるブロックを検索します。

         # OJSP environment settings 

  4. 次の行が存在することを確認します。

    
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/connectionmanager.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbocmp.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbodatum111.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbodatum12.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbodomgnrc.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbodomorcl.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbodt.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbohtml.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jboimdomains.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbojdbcpatch.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbomt.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jboremote.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/jbotester.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/ordhttp.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/ordim817.zip
         wrapper.classpath=<Oracle_Home>/Apache/BC4J/lib/ordvir817.zip  

この手順を完了した後で、WebアプリケーションをOracle9i Application Serverに配布する通常の手順に従うことができます。


EJB 1.1のサポート

Oracle JDeveloper 3.2は、EJB 1.1のみサポートしています。EJB 1.0アプリケーションを扱う開発者は、EJB 1.0をサポートしているOracle JDeveloper 3.1を使用する必要があります。(JDeveloper 3.1は、EJB 1.1をサポートしていません。)


既存のEJB 1.0または1.1のJDeveloper 3.2への移行

JDeveloper 3.1を使用して作成したEJBの自動的な移行はサポートされていませんが、EJB 1.0クラスを参照する1.1仕様と互換性のある新規EJBを作成することは可能です。新規EJBデザイナおよび配布ツールを使用し、EJBの開発を継続できます。

JDeveloperの外部で開発したEJB 1.1準拠のクラスをすべてインポートし、EJBデザイナで開発を継続することもできます。

EJB 1.0クラスをJDeveloperに移行するには、次の手順を実行します。

  1. 新規JDeveloperプロジェクトを作成するか、既存のプロジェクトを選択します。

  2. EJBウィザードを起動します(「ファイル」 -> 「新規」 -> 「Enterprise JavaBean」)。

  3. 既存のEJBのEJBタイプを選択します。必要に応じて、名前を変更します。

  4. 3つのデフォルトEJBクラス名(Beanクラス、ホーム・インタフェースおよびリモート・インタフェース)を置換します。

  5. エンティティEJBを移行する場合は、「次へ>」をクリックした後のページで、主キー情報を入力してください。

  6. 「次へ>」をクリックし、EJBクラスのパッケージとEJBソース・ファイルへのソースパスを指定します。

  7. 「次へ>」をクリックしてEJBの情報を確認します。パス、パッケージ、名前などの選択内容を修正する必要がある場合は、「<戻る」をクリックして変更します。

  8. 「完了」をクリックします。既存のソース・ファイルのパスを指定した場合、EJBウィザードにより、既存のファイルを変更せずに受け入れるか、EJBウィザードで上書きするかの確認が求められます。一般には、変更せずに受け入れます。

    EJBウィザードは、終了時に、新規EJBの配布記述子をXML形式で作成します。自動的に開くEJBデザイナでEJBの開発を継続できます。EJBデザイナはJDeveloper 3.2の新機能であり、EJBとその配布記述子プロパティを編集する場合に使用できます。「XML」タブを選択し、XML配布記述子の現在の状態を表示できます。

  9. EJB 1.1仕様に準拠するよう、EJBを変更します。EJBをOracle8i に配布する配布プロファイルを作成するには、プロジェクトに追加されたEJBフォルダを右クリックし、「EJB/8i 配布プロファイルの作成...」を選択します。

既存のEJB 1.1クラスをJDeveloper 3.2に移行するには、次の手順を実行します。

  1. 前述の手順1〜8を実行します。

  2. プロジェクトに追加されたEJBフォルダを右クリックし、「EJB/8i 配布プロファイルの作成...」を選択します。

  3. CMPエンティティEJBを移行した場合は、最初に複数のウィザードを実行してCMPマッピング情報を指定します。その他のタイプのEJBでは、EJB/8i 配布プロファイル・ウィザードが開始されます。

  4. 「出力」タブを選択し、「EJB記述子」フィールドを編集して、EJB 1.1配布記述子を編集します。Oracle固有のEJB 1.1配布記述子ファイルがある場合は、そのファイル名を「Oracle記述子」フィールドに入力します。

  5. 「完了」をクリックしてプロファイルを閉じ、変更を保存します。.prfファイルは、配布記述子ファイルとともにプロジェクトの「配布」フォルダに追加されます。

  6. プロファイルを開き直し、各タブにアクセスして配布記述子の詳細を確認し、IIOP接続を指定して配布します。


注意: 

JDeveloper 3.2は、EJB自体の独立した配布記述子を保持します。この配布記述子は、EJBを配布するために作成された各配布プロファイルに関連付けられている配布記述子から分離されています。この動作は意図的なものであり、ソースEJB自体には影響を与えずに、場合によっては異なるプロパティを使用して複数のターゲット・サーバーにEJBを配布できます。ソースEJBの配布記述子は、ディスク上で .ejxファイルにキャプチャされます。各EJBプロファイルの配布記述子はユーザー指定ですが、デフォルトでは .xmlファイルとして生成されます。記述子内のすべてのプロパティはEJBデザイナまたはEJB配布プロファイル・ウィザードを介して編集できるため、.ejxファイルの直接ユーザー変更はサポートされていません。



コード・インサイト・バックグラウンド調査のデフォルト値の変更

JDeveloper 3.2以降、コード・インサイト・バックグラウンド調査は、デフォルトではオンになりません。コード・インサイトを有効にする場合は、メニュー・バーの「ツール」を選択し、「環境オプション」をクリックします。「コード・インサイト」タブを選択し、「バックグラウンド調査」をクリックします。「バックグラウンド調査」をデフォルトで無効にすることにより、コード・エディタは不明なタイプを赤で表示しなくなります。メンバーとクラスの完了は使用できます。


チュートリアルに関する変更


「バッチ・クライアント・プロジェクトの作成」

「必要なライブラリを追加する方法」の手順5では、「Oracle Intermedia」および「SQLJ Runtime」を追加するよう指示しています。ここではさらに、「Oracle 8.1.7 JDBC NLS Support」も追加してください。


「ローカル・モードでのバッチ・クライアントの配布」

このチュートリアル・トピックの最終手順では、次のコマンドでクライアントを実行するよう指示しています。

jre javagui.TestClient
jre javagui.TestClient2

jreはシステムの環境変数からクラスパスを使用しません。かわりに、次のコマンドを使用してください。

java BatchClient.TestClient
java BatchClient.TestClient2


「3層モードでのバッチ・クライアントの配布」

3層モードでの実行は、ヘルプに記載されている手順に加えて、いくつかの追加手順が必要であることが報告されています。これに関する詳細情報は、OTN-Jにて公開される予定です。


SQL92ベースのBC4Jにおける制限

SQL92ベースのBC4Jを作成した場合、エンティティ・オブジェクトの属性の「リフレッシュ」のプロパティは無視されます。つまり、表の列がデータベース・トリガーを介して更新された場合、BC4Jにはそれが通知されません。


日本語環境での未サポート事項

ヘルプなどのドキュメントに記述されている以下の機能は、日本語環境ではサポートされません。


国際化(I18N)の問題


サンプル: 日本語環境上のOracle8i 8.1.7に対するOnline Ordersサンプル/チュートリアルの実行(1427143、1428704)

OnlineOrdersForClients.jws内のプロジェクトを、日本語環境上のOracle8i 8.1.7に対して実行すると、次のエラーがスローされます。

Non supported character set:  oracle-character-set-832
Non supported character set:  oracle-character-set-830

回避方法として、Oracle 8.1.7 JDBC NLS Supportライブラリをプロジェクトに手動で追加し、再ビルドします。


HTMLおよびJSPファイルをビューアで表示した場合、'□'文字が表示される(1325251)

JSPまたはHTMLファイルに含まれる一部のHTMLタグに囲まれた日本語文字は、ビューア上には正しく表示されません。これは、通常のブラウザでは正しく表示されます。


JSPアプリケーションのランタイムで、ボタンおよびいくつかの文字列が翻訳されていない(1326494)

ビジネス・コンポーネントJSPアプリケーション・ウィザードを使用して作成したJSPアプリケーションを実行した際、表示されるボタン・ラベルや文字列が翻訳されていません。これは、サード・パーティのJSUIベース・コンポーネントを使用しているためです。今後のリリースではJSUIベース・コンポーネントは使用されず、この問題は修正される予定です。


Business Components for Javaアプリケーションにおけるデータのフェッチ・サイズに関する初期設定値について(1325995)

日本語版の JDeveloper 3.2 では、BC4Jアプリケーションに対するデータのフェッチ・サイズの初期設定が変更されています。これはマルチバイト・データの取り出し時に起こるJBO-27022を回避するためです。

この設定は oracle.jbo.server.jboserver.propertiesファイル(jbomt.zipにあります)のoracle.jbo.defineColumnLengthで指定されています。このフラグをfalseに設定すると、Business Components for Javaは、フェッチする列の型を定義する際にJDBCにmax-data-lengthを渡しません。これによってJDBCは、(JDeveloper 3.0および3.1と同じように)フェッチされるVARCHAR2列あたりほぼ2Kを事前に割り当てます。

シングルバイト環境で、より高いパフォーマンスを得るためにこの設定を変更することができます。jbomt.zip内のoracle.jbo.server.jboserver.propertiesファイルを編集する、または環境設定で定義するか、/Dオプションを使用してJavaVMにコマンドライン・パラメータとして渡すことで設定できます。


デフォルトのプロジェクト・プロパティのエンコーディング設定の変更について

日本語版の JDeveloper 3.2 では、デフォルトのプロジェクト・プロパティのエンコーディング設定としてMS932を採用しています。この環境下では、JSP、サーブレット、XMLなどのWebアプリケーション・ファイルを作成する際に、SHIFT_JISのエンコーディング情報が追加されます。詳しくは、リリース3.2における既知の問題の「Webアプリケーション(JSP、XML、サーブレット)に追加されるキャラクタ・セットの設定」の項も参照してください。


JDeveloperにビルトインされたサーブレット・エンジンでの日本語名ファイルの呼出しについて

JDeveloperには、テスト目的のためにサーブレット・エンジンがビルトインされています。3.1にビルトインされていたサーブレット・エンジン上では、サーブレットは実行されているOS環境に応じたキャラクタ・セットでのエンコーディングが自動的に行われていました。これは、サーブレットのコード内でキャラクタ・セットに関する記述が特に指定されていない場合でも、日本語環境のOS上で正常に日本語の表示ができることを意味します。ただし、これは一般的なアプリケーション・サーバー(Oracle9i Application ServerおよびApache JServ、Tomcatなど)の実装とは異なります。3.2からは、これらの一般的なアプリケーション・サーバーに合わせる形での実行が可能なパラメータを使用可能です(インストレーション・ガイドのインストール手順の最後で行うパラメータ値の変更によって、一般的なアプリケーション・サーバーと同じ日本語処理の状態に設定されます)。ただし、この変更の結果として、JDeveloperにビルトインされたサーブレット・エンジン上での日本語名のファイルの呼出しに失敗します。これに問題があって、3.1と同様のテスト環境が必要な場合には、次の手順を行ってください。
  1. <JDeveloper_Home>\lib\webtogo.oraをテキスト・エディタで開きます。
  2. [WEBTOGO]セクションにある_DISABLE_NLS_DECODINGの記述をコメントアウトします(行頭に#を付けます)。
  3. [SERVLET_PARAMETERS]セクションにあるtranslate_paramsの記述をコメントアウトします(行の先頭に#を付けます)。

これらのパラメータをコメントアウトすることにより、JDeveloperにビルトインされたサーブレット・エンジン上での日本語名ファイルの呼出しが可能になりますが、逆に、サーブレットおよびXSQLアプリケーションでの日本語処理の動作が、一般的なアプリケーション・サーバー上での実行時と異なってしまうことに注意してください。したがって、これらのパラメータのコメントアウトは、日本語名のJSPファイルを使用したテストの時にのみ使用してください。なお、URL内にASCII以外の文字を使用することは推奨されていません。関連する情報として、「クラス名、JSPファイル名およびサーブレット名に対するマルチバイト文字の使用について」および「JSPアプリケーション作成に影響するビュー・オブジェクト名および属性名について」も参照してください。


クラス名、JSPファイル名およびサーブレット名に対するマルチバイト文字の使用について

JDK 1.1.Xを使用する場合、クラス名、JSPファイル名およびサーブレット名には英数文字を用いるようにしてください。マルチバイト文字はClassNotFound例外の原因となります。JDK 1.2.Xを使用する場合には、mainメソッドを含むクラス名、JSPファイル名およびサーブレット名に対してのみこの問題が発生します。

この問題は、特にビジネス・コンポーネントの作成の際には注意が必要です。ビジネス・コンポーネント・ウィザードは、デフォルトでは指定されたデータベース表および列の名前を利用した名前のエンティティ・オブジェクトおよびビュー・オブジェクトを作成します。いくつかのアプリケーション・ウィザードは、他の機能やオブジェクトを作成するために、これらの名前を利用しています。これについては「JSPアプリケーション作成に影響するビュー・オブジェクト名および属性名について」の項も参照してください。


JSPアプリケーション作成に影響するビュー・オブジェクト名および属性名について(1660019)

ビジネス・コンポーネント・ウィザードは、指定されたデータベース表および列の名前を利用して、ビュー・オブジェクトおよびその属性の初期の名前を作成します。これによって、以下のような問題が発生する可能性があります。

上記の問題を避けるため、ビュー・オブジェクトおよびその属性の名前は英数文字に変更することをお薦めします。


サンプル: JSPアプリケーション(<JDeveloper_Home>\sample以下のJSPファイル)での日本語の処理について

サンプルとして付属するJSPファイルはWINDOWS-1252のエンコーディング設定で作成されています。このため、日本語の処理に問題があります。回避方法として、JSPファイル内のキャラクタ・セットの指定をSHIFT_JISに変更してください。


日本語で登録されたカスタムJSPテーマ名が文字化けする(1710311)

カスタムJSPテーマの名前を日本語にして登録すると、ウィザードからの選択時に文字化けして表示されます。これはウィザード上の表示の問題で、機能的には問題ありません。


接続エラーメッセージが文字化けする(1711596)

Connection ManagerやBusiness Component Testerの接続エラーメッセージが文字化けします。これはJDBC Driver 8.1.7固有の問題です。


Javaストアド・プロシージャのリモート・デバッグが文字化けする(1693829)

Javaストアド・プロシージャのリモート・デバッグに対するメッセージ・ウィンドウでの表示結果が文字化けします。Javaストアド・プロシージャ以外のリモート・デバッグに対しては問題ありません。


サンプル: OnlineOrders.sqlの実行時にORA-01858が発生する(1721086)

日本語環境において、samples\Bc4j\OrderEntry\DatabaseSetup\OnlineOrders.sqlをSQL*Plusから実行するとORA-01858が発生します。これはDate型に対する書式指定が異なるためです。回避方法として、OnlineOrders.sql をテキスト・エディタで開いて、2行目に、次の1行を追加してください。

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY';


サンプル: インストラクション用のHTMLについて

サンプル・アプリケーション用プロジェクトの中には、その内容を解説するHTMLファイルが付属しているものがあります。これらのうち、次に示すものについては、日本語に翻訳された同等の内容をヘルプから参照できます。


ヘルプ・メニューから起動されるWebサイトについて

「ヘルプ」メニューに含まれる「Oracle Technology Network」および「Oracle Java Education」を選択した場合に表示されるWebページの内容は、米国オラクル社によるものです。対応する日本のサイトとして、以下をご利用ください。

Oracle Technology Network Japan(OTN-J)
http://otn.oracle.co.jp

日本オラクル
http://www.oracle.co.jp/seminar


リリース3.2での既知の問題


Solaris上のOracle8i 8.1.7へのEJBが配布不可(1482140)

Solaris上のOracle8i 8.1.7にJDeveloper 3.2からEJBを配布することはできません。この問題は、Windows NT上のOracle8i 8.1.7では発生しません。この問題に関する詳細は、OTN-Jを参照してください。


Javaメソッドの宣言を含むJSPのデバッグにおける注意事項(1761923)

Javaメソッドの宣言を含むJSPをデバッグする際、正常に動作しない場合があります。


BC4JランタイムをOracle8i 8.1.7に配布する際、ORA-29552が発生する

BC4JをEJBとしてOracle8i 8.1.7に配布している間に、JDeveloperのメッセージ・ビューに「ORA-29552: verification warning」が表示されます。この警告は配布されたアーカイブまたはEJBには影響ありません。


Solaris上のJavaのリモート・デバッグ

Solaris上のJavaサーブレットまたはJavaServer Pagesをリモート・デバッグするためには、Solaris上でJDK 1.2.2_007のリファレンス・インプリメンテーションおよびJPDA 1.0を使用する必要があります。どちらも、http://www.javasoft.comから入手可能です。JPDAは、JDKと同じディレクトリにインストールされる必要があります。また、<JDeveloper_Home>\libからojc.jarをSolarisマシン上にコピーし、JavaサーブレットまたはJavaServer Pagesを実行しているApplication Serverのクラスパスにそれを含める必要があります。他の設定は、すべてWindows NTの設定方法と同じです。


デュアル・プロセッサ・ワークステーションに関する注意事項

JDeveloper 3.2.3は、デフォルトではシングル・プロセッサのみサポートしています。JDeveloperでマルチ・プロセッサを使用する場合は、<JDeveloper_Home>\bin\jdeveloper.iniで次のように設定します。

    DualProcessorDisableAlways=0

一部のシステムでは、これにより動作に不具合が発生することが確認されています。上の変更を行い、JDeveloperの動作に不具合が生じた場合は、DualProcessorDisableAlwaysの設定を1に戻し、マルチ・プロセッサのサポートを使用不可にしてください。


ソース・コントロールで、Version History Viewer/Version Event Viewerが起動不可(1719021)

Oracleホームの構成によっては、「ソース・コントロール」メニューから起動した際に、Version History ViewerおよびVersion Event Viewerが表示されない場合があります。これは、Repository 6i クライアントを新規のOracleホームにインストールする前に、それ以外のOracleクライアント製品を含むOracleホームがインストールされている場合にのみ発生します。

この問題を回避するには、PCにあるOracleホームのうち最初のものが、必ずRepository 6i クライアントとなるようにしてください。もしくは、Repository 6i のOracleホームを除くすべてのOracleホームに対して、レジストリHKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOMEx\TNS_ADMIN(xはそれぞれのOracleホームを表す数値)を設定して、その変数で、Repository 6i のホームにあるnet80\adminディレクトリのフルパスを指すよう変更します。

たとえば、次のソフトウェアを次の順にインストールしたとします。

HEKY_LOCAL_MACHINE\SOFTWARE\Oracle\の下に、Developer、RepositoryおよびImport/Exportのそれぞれに対するHOME0、HOME1およびHOME2の3つのレジストリ・キーがあるはずです。c:\Repos\net80\adminを指すように、それぞれのホームのキー、すなわちHKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME0\TNS_ADMINおよびHKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME2\TNS_ADMINを設定する必要があります。


XSQLチュートリアルの更新結果の表示

更新ビュー操作の結果を表示するには、(生成されたコードの後、</page>タグの前に)次のコードをXSQLページに追加する必要があります。このコードは、(UpdateViewObjectアクション・ハンドラが起動した後で)SUPPLIER表を問い合せて新しい結果を表示します。

<xsql:action  handler="oracle.jbo.xsql.ViewObject"
               name="SupplierView"
               max-levels="0"
               max-rows="1"
               appmodule="OnlineOrders.OnlineOrdersModule"
               connname="MyJdbcConn">
   <where>
     <attribute name="Id" value="{@Id}"/>
    </where>
</xsql:action>  


EJB CMP: 複数の表が使用されている場合にFindByPrimaryKeyに失敗する(1504795)

エンティティBeanを複数の表にマップする際には、主キー属性がBusiness Components for Javaデータ型に適切にマップされていることを確認してください。たとえば、(後から追加された)2つ目以降の表における列とマップされているBeanの主キー属性がint型の場合、マップされるエンティティ・オブジェクトの属性は、デフォルトのNumberからIntegerに変更することが必要です。同様に、Beanの主キー属性がlong型の場合、エンティティ・オブジェクトの属性はLongに変更することが必要です。CMPに対して提案されるマッピングについては、オンライン・ヘルプの「CMPで推奨される型マッピングについて」のトピックを参照してください。


CORBAサーバーとして配布されたビジネス・コンポーネントへのアプレットからのアクセス

現在ビジネス・コンポーネントがOracle8i またはVisiBroker CORBAサーバーとして配布された場合に、Plug-in 1.2.2上で実行されるアプレットからアクセスすると問題が発生します。JRE 1.2.1またはJRE 1.3のPlug-inを使用してください。


JDeveloperを初めて起動した際にCodeCoachメッセージ・ウィンドウが表示されない(1498371)

最初の試行時にのみ、CodeCoachログ・ウィンドウが空白で表示されます。この状況が発生した場合は、JDeveloperを再起動してください。


ビューアでEJBフォルダ内のファイルを開いたままのプロジェクト・ファイルをエクスプローラから開くと、JDeveloperがハングする(1498383)

ビューアでEJBフォルダにあるファイルを開いている場合、JDeveloper 3.2は、ワークスペースを閉じたとき(または完全に終了したとき)にハングします(タスク・マネージャが必要になります)。この状況は、プロジェクト・ファイル(.jpr)をダブルクリックしてWindowsエクスプローラからJDeveloperを起動した場合にのみ発生します。ワークスペース・ファイル(.jws)から起動した場合、JDeveloperはワークスペースを閉じる際にntdll.dll例外をスローします。回避方法として、ワークスペースにEJBがある場合は、常にスタート・メニューを使用してJDeveloperを起動します。


XSQL JavadocがJavadocビューアに表示されない

XSQLソースを参照する際に、JavadocビューアはXSQL Javadocを表示しません。XSQL Javadocを有効にするには、JDeveloperを終了し、テキスト・エディタ(メモ帳など)を使用して、次の行を<JDeveloper_Home>\bin\library.iniの[Library_1.2_XSQL Runtime]セクションと[Library_1.1_XSQL Runtime]セクションに追加します。

Docpath=[..\doc\javadoc\Oracle\xsqlref.zip] 

JDeveloperを再起動する際に、「Javadocビューア」タブを使用してXSQL Javadocを表示できます。


JDeveloper 3.1からのJSPアプリケーションのアップグレードに関する注意事項

JDeveloper 3.1以前で作成されたJSPアプリケーションをJDeveloper 3.2環境にインポートする場合は、3.1のオリジナルの<JDeveloper_Home>\myhtml\webapp\環境の内容を3.2の<JDeveloper_Home>\myhtml\webappディレクトリに移入するか、3.2のJSPウィザードの1つを使用して\webapp\ディレクトリに新しい内容を生成する必要があります。

3.2では、\webapp\ディレクトリは最初は空で、ビジネス・コンポーネントJSPアプリケーション・ウィザードの完了時に動的にデータが移入されます。結果として、JDeveloperでのランタイム・テストにおいて、CSSファイルとイメージが見つかりません。

JDeveloper 3.2のWeb Beanは、新しいデータ型固有の描画機能を利用します。Web Beanの実装クラスは変更されたため、JDeveloper 3.2で3.1のWebアプリケーションを開いた場合は、Oracle interMediaライブラリをプロジェクトに追加し、新しい描画機能をサポートする必要があります。JDeveloper 3.2にライブラリを追加するには、Webアプリケーションの「プロジェクト・プロパティ」ダイアログを開き、「ライブラリ」タブをクリックしてから「追加」をクリックし、リストから「Oracle Intermedia」を選択して「OK」をクリックし、interMediaライブラリをプロジェクトに追加します。

3.1で作成したJSPアプリケーションのJDeveloper 3.2でのアップグレードの詳細は、オンライン・ヘルプを参照してください。アップグレードに関するトピックは、「JSPページの作成」の下の「JSPアプリケーションについて」を参照してください。


ordPlayMedia.jsp(interMediaの描画機能を持つJSPページ)がOracleサーブレット・エンジンで動作しない(1450639、1467454)

Oracle JDeveloperには、データベース内のinterMediaタイプの描画を実現するJSPページが用意されています。このJSPページは、Oracleデータベースに付属するJSPランタイム環境であるOracleサーブレット・エンジンでは現在動作しません。ただし、このJSPページは、任意の標準JSP環境とOracle9i Application Serverでは動作します。


EJB CMP: ファインダ・メソッドの実行時にInvalidOwnerExceptionが発生する(1425656)

現在、Enumeration型を返すBeanのファインダ・メソッドは、実行時にInvalidOwnerExceptionをスローして失敗します。このエラーは、ファインダが動作しないというOracleJVMのバグ(1422231)が原因です。


EJB CMP: ファインダ・メソッドにプリミティブ型の引数を設定すると配布時にエラーが発生する(1428453)

たとえば、パラメータとしてdoubleを受け取り、Enumerationを返すファインダ・メソッドがEJBにある場合、CMP配布エラーが発生します。 このエラーは、永続性マネージャAPIがプリミティブ型をサポートしないというOracle JVMのバグ(1471204)が原因です。回避方法として、ファインダ引数をdoubleではなくDoubleとして定義します。


EJB CMP: booleanまたはjava.lang.Booleanのフィールドに関する注意事項(1458411)

booleanから、精度が定義された数値列へのマッピングには問題があります。たとえば、number(2)などの場合です。このような列に対して属性が作成された場合、スケール/精度のValidatorがその属性に対して作成されて精度が増し、boolean値の認識に失敗します。この検証をオフにするには、マップされたbc4jエンティティ属性を編集し、データベース列の型をNUMBER(xx)からNUMBERに変更します。


webtogo.oraファイルのPORT変数とHOST変数

webtogo.oraファイルのほとんどの部分は変更しないでください。ただし、このファイルの2つの変数は、変更が必要な場合があります。どちらの変数も、Webアプリケーションの実行時にJDeveloperのデフォルトの動作を上書きします。

  1. [WEBTOGO]セクションで、PORT=<port_number>という構文を使用して特定のポートを定義できます。このエントリが存在しない場合(デフォルト)、webtogoサーバーは使用可能なポートを検索します。次に例を示します。

    [WEBTOGO]
    USE_SYSTEM_CLASSPATH=YES
    DEBUG=YES
    PORT=7007 

  2. [JDEV]セクションで、HOST=<fully_qualified_hostname>という構文を使用して特定のホスト名を定義できます。このエントリが存在しない場合(デフォルト)、webtogoサーバーはユーザーのローカルIPアドレスを使用します。次に例を示します。

    [JDEV]
    HOST=jdev-lap.us.oracle.com 


注意: 

このファイルの他の部分を変更すると、Webアプリケーションが正しく実行されない可能性があります。



BC4Jランタイム・ライブラリとビジネス・コンポーネントのEJBを異なるスキーマに配布するとエラーが発生する(1095107)

Business Components for Javaのランタイム・ライブラリとビジネス・コンポーネントのEJBが異なるスキーマに配布された場合は、次のエラーが生成されます。

Generating Jar File...done
Loading EJB Jar file and Comm Stubs Jar file...
error: loadJava has failed to load some classes; Please check trace file!
*** Errors occurred while deploying the EJB to 8i JVM *** 

サーバーのトレース・ファイルをチェックすると、複数のORA-04043エラーが見つかります。

Error while resolving class
oracle/jbo/common/remote/ejb/RemoteApplicationModulePackage/sequence_of_wstringHelper
ORA-04043: object
oracle/jbo/common/remote/ejb/RemoteApplicationModulePackage/sequence_of_wstringHelper does not exist 

この問題は、Oracle8i リリース8.1.7に対するデータベース・パッチセットで修正される予定です。


ネットワーク・クライアントのインストール: ネットワーク・サーバー側のパスに空白が含まれている場合にスタート・メニューのショートカットが動作しない(1450021)

ネットワーク・サーバー上のJDeveloperへのパスに空白が含まれる場合、スタート・メニューのショートカットが動作しません。回避方法として、追加されているJDeveloperのショートカットのプロパティを開き、そのリンク先のパスの先頭と末尾に二重引用符(")を追加します。


jbo:SetAttribute dataitem="*"タグがオブジェクト型に対して動作しない(1426349)

オブジェクト型が含まれる表に対して、jbo:SetAttribute dataitem="*"タグが正しく動作しません。回避方法として、次のように、"*"を使用せずにそれぞれの属性を記述します。

<jbo:Row id="newRow"  datasource="ds1"  action="Create" >
<jbo:SetAttribute dataitem="Id" value="101" />
<jbo:SetAttribute dataitem="Address.Street"  value="101 Main st" />
<jbo:SetAttribute dataitem="Address.City"  value="Redwood city" />
</jbo:Row> 


注意: 

この例におけるAddressはオブジェクト属性です。オブジェクト型に含まれる属性を直接指定します。



EJB CMP: Collection型を返すファインダ・メソッドを持つEJBの配布時にエラーが発生する(1425331)

Collectionは、Oracle8i 8.1.7ではサポートされていません。ファインダ・メソッドの戻り型がCollectionの場合は、配布時に次のエラーが発生します。

Reading Deployment Descriptor...done
Verifying Deployment Descriptor...done
Gathering users...done
Processing container managed persistence bean...done
Generating Comm Stubs.........................................done
Compiling Stubs...done
Generating Jar File...done
Loading EJB Jar file and Comm Stubs Jar file...done
Generating EJBHome and EJBObject on the server...
Compilation errors in
oracle/aurora/ejb/gen/_test_mingye_StringFind/EjbHome_StringFindHome:ORA-29535:
 source requires recompilation
oracle/aurora/ejb/gen/_test_mingye_StringFind/EjbHome_StringFindHome:148:
Incompatible type for declaration. Explicit cast needed to convert
java.util.Collection to java.util.Enumeration.
oracle/aurora/ejb/gen/_test_mingye_StringFind/EjbHome_StringFindHome:156:
Incompatible type for return. Explicit cast needed to convert
oracle.aurora.ejb.AuroraEnumeration to java.util.Collection.
Info: 2 errors  


EJB: 非活性化(passivation)の場合にロールバックがEJBモードで動作しない(1455013)

Oracle8i JVMに配布された中間層に対してアプリケーション・プールを使用している際に、フェイルオーバー・フレームワークがアプリケーション・データの変更をコミットしないようにするには、Business Components for Javaランタイムを配布した後に次の手順を実行する必要があります。

  1. jbo.serverpropertiesをjbomt.zipから抽出します。

  2. jbo.serverpropertiesを編集して次の行を追加します。

    jbo.server.internal_connection=jdbc:oracle:thin:<user>/<password>@<host>:<port>:<sid>

  3. jboserver.propertiesをJARファイルに追加します。JARファイルを作成している間、oracle/jbo/serverパスが保持されることを確認します。

  4. JDeveloper配布ユーティリティを使用してプロパティ・ファイルを含むJARファイルをデータベースに配布します。

  5. JAVASYSPRIVロールまたはconnect,resolve java.net.SocketPermissionsをJavaオブジェクトの所有者に付与します。

    EXEC DBMS_JAVA.GRANT_PERMISSION('<user>', 'SYS:java.net.SocketPermission', '*', 'connect,resolve');
     


リクエストあたり複数のSetReleasePageResourcesを実行すると予期しない問題が発生する(1455651)

単一のHTTPリクエストでアプリケーション・モジュールに対して複数のステートフル・チェックアウト/チェックイン操作を行うと、データベースの状態が競合する場合があります。

Webアプリケーションの開発者は、各HTTPリクエストが実行するステートフル・アプリケーション・モジュール・プールのチェックアウト/チェックインが、アプリケーション・モジュールあたり1つのみであることを確認する必要があります。追加のプール・チェックイン/チェックアウト操作を実行する可能性のあるjsp:forwardタグには特別な注意を払う必要があります。


BC4Jのフェイルオーバー・サポートに関する注意事項(1449928)

アプリケーション・モジュール・プールのフェイルオーバー・サポート機能またはディスクへの分割機能を使用し、かつ、jbo.maxpoolsizeプロパティでJDBC接続プール・サイズを制限しようとしている場合、最大プール・サイズを見積もる際に、各ルート・アプリケーション・モジュールのためのJDBC接続の容量を(それぞれ1つずつ余計に)確保しておいてください。


EJB: Oracle8i JVMに配布されたアプリケーション・モジュールでOracleSQLExceptionが発生する(1418480)

この例外は、Oracle8i JVMにEJBとして配布されたアプリケーション・モジュールの非活性化(passivation)が起動した際にスローされるOracleSQLException 2089の結果です。この状況は、グローバル・トランザクション・マネージャが、DDLを起動して永続コレクション表を作成する際に、活性化/非活性化の状態管理フレームワークにより起動された暗黙的コミットを処理できないことが原因です。JDeveloper 3.2では、回避方法として、EJBトランザクション・タイプをデフォルトのグローバル・タイプではなくローカルとして宣言します。これは、次の手順で行います。

  1. jboserver.propertiesをjbomt.zipから抽出します。

  2. 次の行をjboserver.propertiesに追加します。jbo.ejb.txntype=local

  3. jboserver.propertiesファイルをOracle8i JVMに配布します。


DBサーブレットの未サポートについて

DBサーブレットはJDeveloper 3.2から削除されました。かわりにDataPageウイザードを使用できます。DataPageウイザードの詳細は、オンライン・ヘルプを参照してください。


JDBCドライバのライブラリが未設定のプロジェクトでJavaストアド・プロシージャの配布時にNoClassDefFoundExceptionが発生する

Javaストアド・プロシージャを配布する場合は、Oracle JDBCライブラリがloadjavaユーティリティにより要求されるため、このライブラリをプロジェクトの一部として持つ必要があります。コードでOracle JDBCドライバを使用していない場合でも、Javaストアド・プロシージャを配布する場合はこのライブラリが含まれている必要があります。


リモート・デバッグにおける注意事項

リモート・デバッグするには、ソース・ファイルがクラス・ファイルと同じディレクトリ構造である必要があります。たとえば、パッケージCORBA.foo1.innerfooがリモートでデバッグされる場合は、ソース・ファイルがJDeveloperのソース・ディレクトリのCORBA\foo1\innerfooディレクトリに入っている必要があります。このディレクトリにない場合は、ブレークポイントが認識されません。


アプリケーションのmainメソッドに対する仕様変更

JDeveloper 3.1から、アプリケーションのmainメソッドをpublicかつstatic voidにする必要があるという規則が新たに設けられました。これはJavaの公式仕様です。JDeveloper 2.0ではアクセス・フラグが無視されるため、アクセス修飾子とは無関係にstatic void main(String[])メソッドを含むクラスの実行が可能でしたが、JDeveloper 3.1以降では不可能です。「実行/デバッグ」メニューは、コードが実行可能ノードであると見なされない場合は無効になります。


Webアプリケーション(JSP、XML、サーブレット)に追加されるキャラクタ・セットの設定

Webアプリケーションに関連するウィザードは、各プロジェクトのプロパティ設定にしたがって、ファイル内にキャラクタ・セットのエンコーディング情報を追加します。

プロジェクトのエンコーディング設定が「デフォルト」の場合

上記のすべてにおいて、プロジェクトのエンコーディング設定が「デフォルト」でない場合(日本語版のJDeveloper 3.2のデフォルトはMS932です)には、その設定に対応した適切なエンコーディング情報が追加されます。ウィザードによるキャラクタ・セットの選択の違いを避けるためにも、プロジェクトのエンコーディング設定は「デフォルト」以外にすることをお勧めします。

Webアプリケーション以外の場合、プロジェクトのエンコーディング設定は、単にコンパイル時のエンコーディング指定にのみ使用されます。


XSQL、JSPファイルに対するヒント・メッセージが適切ではない(1671024)

ナビゲータ内のXSQL、JSPファイルのアイコン上にマウスを置いたときに出るヒント・メッセージが正しくありません。


9iASおよびApache JServ上でWeb Monitorのセッション情報が表示されない(1727311)

Oracle9i Appliacation ServerまたはApache JSev上でビジネス・コンポーネントJSPアプリケーションを実行する際にWeb Admin Utilityの「セッション情報」でエラーが発生します。これはJDeveloper開発環境上、およびTomcatでは正常に機能します。


JSPのリモート・デバッグにおける注意事項

ローカル・デバッグに使用したプロジェクトでJSPに対するリモート・デバッグを実行する場合、リモート配布用のパッケージはローカルで使用したパッケージと一致する必要があります。つまりユーザーは、JDeveloperのmyhtmlディレクトリ(デフォルトでは、MyProject4_htmlなどのディレクトリ名)にあるサブディレクトリと同名のサブディレクトリを、Webサーバーのhtmlディレクトリに作成し、JSPファイルはこのサブディレクトリにコピーする必要があります。この場合JSPのURLは、http://host/MyProject4_html/test.jspなどとなります。

ローカル・パッケージと一致しないディレクトリにJSPファイルを配布する場合は、リモート・デバッグ用に、同じディレクトリ構造で、新規プロジェクトを作成する必要があります。


JSPのデバッグにおける制限事項(1229083)

JSPを(ローカルまたはリモートで)デバッグする場合、式の評価を使用するデバッグ機能はすべて使用できません。これには条件ブレークポイント、ブレークポイント発生の式のロギングおよび「実行」メニューからの「評価/変更」ダイアログも含まれます。


アプリケーション配布先のOracle8i JVMユーザーに付与すべきJava2スタイルの権限

Business Components for Javaを実行するユーザーには、特定のJava2スタイルの権限を付与する必要があります。SCOTTなどのユーザーにこれらの権限を付与するために、SYSユーザーとして次のSQLスクリプトを実行できます。

SET VERIFY OFF
EXEC DBMS_JAVA.GRANT_PERMISSION('SCOTT', 'SYS:java.util.PropertyPermission','*', 'write');
EXEC DBMS_JAVA.GRANT_PERMISSION('SCOTT', 'SYS:java.util.PropertyPermission','*', 'read');
EXEC DBMS_JAVA.GRANT_PERMISSION('SCOTT', 'SYS:java.lang.RuntimePermission','createClassLoader', null);
EXEC DBMS_JAVA.GRANT_PERMISSION('SCOTT', 'SYS:java.lang.RuntimePermission','setContextClassLoader', null);
EXEC DBMS_JAVA.GRANT_PERMISSION('SCOTT', 'SYS:java.lang.RuntimePermission','getClassLoader', null);
COMMIT; 


注意: 

DBMS_JAVA.GRANT_PERMISSIONプロシージャの第1パラメータでユーザー名を指定する場合、必ずすべて大文字を使用してください。上記のコードは、スクリプトjava2perm.sqlとしても提供されています。このスクリプトは、<JDeveloper_Home>\binディレクトリに入っています。このスクリプトは、SQL*Plusから次のように実行します。

@<JDeveloper_Home>\bin\java2perm SCOTT 
USERIDはすべて大文字にする必要があります(たとえば、SCOTT)。



Oracleスタイルのバインド変数の使用に対する注意事項

Business Components for Javaに影響のあるJDBCの問題点は、次のとおりです。WHERE句パラメータは、JDBCのPreparedStatementに対し(インデックスを1ずつ増分して)setObjectまたはsetNullをコールします。次のプログラム例は、Oracle JDBCドライバがバインド変数の番号の一致ではなく位置の一致によってこれらのsetObjectコールを受け取ることを示すものです。

Example program
=======================================

     import java.sql.*;
     import java.io.*;
     import oracle.sql.*;


     public class bind
     {
        Connection conn;

        public static void main(String argv[])
        {
           bind ex = new bind();

           try
           {
              DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

              ex.conn = DriverManager.getConnection("jdbc:oracle:thin:scott/tiger@localhost:1521:ORA815");

              ex.work();
              ex.work2();

              ex.conn.close ();
           }
           catch(Exception e)
           {
              e.printStackTrace();
           }
        }

        public void work() throws Exception
        {
           PreparedStatement stat;


           stat = conn.prepareStatement("select * from emp e where ENAME = :2 or JOB = :1");

           stat.setObject(1, "KING");
           stat.setObject(2, "PRESIDENT");

           ResultSet rslt = stat.executeQuery();

           if (rslt.next())
           {
              System.out.println("name: " + rslt.getString("ENAME"));
           }
           else
           {
              System.out.println("no row found");
           }

           rslt.close();
           stat.close();
        }

        public void work2() throws Exception
        {
           PreparedStatement stat;


           stat = conn.prepareStatement("select * from emp e where ENAME = :2 or JOB = :1");

           stat.setObject(1, "PRESIDENT");
           stat.setObject(2, "KING");

           ResultSet rslt = stat.executeQuery();

           if (rslt.next())
           {
              System.out.println("name: " + rslt.getString("ENAME"));
           }
           else
           {
              System.out.println("no row found");
           }

           rslt.close();
           stat.close();
        }
     }
 

このプログラムを実行すると、まずworkが実行され、次にwork2が実行されます。work()では、setObject によってインデックス 1 で指定された値が:2にバインドされ、setObjectによってインデックス 2 で指定された値が:1にバインドされます。work2()では、このバインド順序が逆転します。

実行の結果は次のようになります。

name: KING
no row found 

work2()で行が検出されなかったことから、このバインドは位置により実行されたことがわかります。


JDBCドライバ8.0を使用する場合、Business Components for JavaでのBLOB列の未サポート(804754)

Business Components for JavaでBLOB列をサポートさせる場合、JDBCドライバ8.1.XおよびNet8 8.1.Xが必要です。


ネット名/値ペアによるJDBC Thinドライバ接続を使用する場合、Oracle8i へ配布できない(1250825)

Connection Managerでは、ネット名/値ペアの接続方法でOracle JDBC Thinドライバを使用したOracle8i への接続を作成することが可能です。この接続によってデータベース・ブラウザを表示できますが、Oracle JDBC Thinドライバを使用する場合にはloadjavaユーティリティで"@host:port:SID"という形式のデータベース文字列が必要であるため、配布が完了しません。

この問題を回避するには2つの方法があります。

  1. Connection Managerでこの接続タイプを作成する際、Net8の「ネット名/値」ペアではなく「名前付きホスト」接続を使用します。

  2. Oracle JDBC Thinドライバではなく、Oracle JDBC OCI-8ドライバを使用します。JDeveloperでOracle JDBC OCI-8ドライバを使用するには、オンライン・ヘルプの「OCIおよびタイプ2 JDBCドライバの接続要件」という項を参照してください。


JSPアプリケーションの実行時にNetscape Navigatorでエラーが発生する(1037092)

この問題はWindows NTで発生します。この問題を改善するには、Windows NTエクスプローラ「表示」 -> 「オプション」を選択します。「ファイル タイプ」タブをクリックします。「登録されているファイル タイプ」で「Netscape Hypertext Document」(またはhtm/htmlが関連付けられているアプリケーション)を選択し、「編集...」ボタンをクリックします。「ファイル タイプの編集」ダイアログで、「アクション:」フィールドの「open」を選択し、「編集」ボタンをクリックします。「アクションの編集」ダイアログで、「DDEを使う」チェック・ボックスのチェックを外します。

すべてのダイアログで「OK」をクリックし、ダイアログを閉じます。これで問題が解決されます。


ビジネス・コンポーネントJavaフォームの問題


複数の接続タイプ

Javaフォームについて定義する接続タイプは、アプリケーションで指定するすべてのSessionInfoコンポーネントの接続タイプと同じである必要があります。たとえばアプリケーションでは、2つのインスタンスでOracle8i とVisiBrokerに別々に接続することはできません。データベース対応アプリケーションは常に、パスに最初に出現するクライアント・ライブラリを検索し、すべてのSessionInfoコンポーネントが同じライブラリを使用すると仮定するためです。複数の接続タイプをサポートするために複数のクライアント・ライブラリを導入する方法は、このリリースではサポートされません。


配布済のJavaストアド・プロシージャに対する「Javaの生成」の実行でエラーが発生する(1100083)

JPublisherウィザードでは、配布済Javaストアド・プロシージャのJavaファイルが生成されません。

パッケージ化されたJavaストアド・プロシージャに対して、JDeveloperによる配布により、AS LANGUAGE JAVA構文のあるパッケージ仕様部が作成されます。次に例を示します。

PACKAGE MYPROJECT1 AS
FUNCTION ROWCOUNT (p0 VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME 'package1.RowCounter.rowCount(java.lang.String) return int';
END MYPROJECT1; 

これは、機能的には次と同等です。

PACKAGE MYPROJECT1 AS
FUNCTION ROWCOUNT (p0 VARCHAR2) RETURN NUMBER;
END MYPROJECT1;
PACKAGE BODY MYPROJECT1 AS
FUNCTION ROWCOUNT (p0 VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME 'package1.RowCounter.rowCount(java.lang.String) return int';
END MYPROJECT1; 

「Javaの生成」オプションは2番目の例で動作しますが、最初の例では動作しません。


バインド・モード/ネーミング・モードのVisiBrokerで、DACアプレットには稼働中のGateKeeperサービスが必要(1492845)

バインド・モード/ネーミング・モードのVisiBrokerで、DACアプレットには、稼働中のGateKeeperサービスが必要です。アプレット・ビューアを使用してJDeveloper内部から実行すると、これらのアプレットは失敗しますが、Webサーバーからの実行には問題ありません。