2

Oracle データベースに基づく大規模システム用の新しい Web インターフェイスを作成します。すべてのビジネス ルールは既にPL/SQLストアド プロシージャでコーディングされており、できるだけ多くのコードを再利用したいと考えています。既存のビジネス ルールを組み合わせて最終的な結果データセットを返す新しいストアド プロシージャをいくつか作成します。

これをデータベース レベルで実行して、java-db ラウンド トリップを回避します。インターフェイス レイヤーは Java で記述されるため (GWT を使用したい)、Oracle ストアド プロシージャから Java サービス側にデータを渡す方法が必要です。データは、例えば、特定のアイテムのプロパティのセット、または特定の基準を満たすアイテムのリストである可能性があります。誰かがこれを行うための好ましい方法をお勧めしますか?

次の 2 つのシナリオのいずれかを検討しています。

  • オブジェクトとオブジェクトのリストを渡す (スキーマ レベルで定義された DB オブジェクト タイプ)

  • を渡すsys_refcursor

両方のアプローチが「実行可能」であることを確認しました。問題は、設計上の決定、ベスト プラクティス、起こりうるメンテナンスの問題、柔軟性などです。

ヒントをいただければ幸いです。

4

3 に答える 3

2

明確に定義されたキーを持つ refcursor を使用することをお勧めします (Java 開発者と pl/sql 開発者によって両側で合意されています)。これは、将来拡張するのがはるかに簡単です。必要に応じて、Apache Bean ユーティリティを使用して、refcursor を hashmap に変換し、次に hashmap を POJO に簡単に変換できます。私は、この問題への多くのアプローチを伴う大きな通信プロジェクトに取り組んでおり、結局のところ、refcursor が最良のようです。

于 2011-09-14T10:25:04.380 に答える
1

過去にJDBC CallableStatement、パフォーマンスやメンテナンスの問題なしに、クラシックでまったく同じことを達成しました。永続化をより柔軟にするなどのORMソリューションを使用すると、この投稿で達成したように、ソリューションをラップすることができます。ストア プロシージャと CallableStatement の動作にまだ慣れていない場合は、このも参照してください。HibernateHibernate

于 2011-09-14T10:20:28.400 に答える
0

私がそのようなことをしてからしばらく経ちましたが、私が覚えている方法は、ストアド プロシージャを呼び出すビューを定義する必要があるということです。その後、OR マッパーを使用して、Java 内から結果セットを簡単に読み取ることができます。お好みの。

したがって、これは私の経験では問題を引き起こさなかったシナリオ 1 に近いようです。

注意が必要なのは、トランザクション処理です。ストアド プロシージャがデータを書き込み、それらのいくつかを Java EE トランザクション内で呼び出すと、データの不整合が発生する可能性があります。

于 2011-09-14T10:24:05.110 に答える