JSP アクションで使用できる機能はすべて、JSP ページでも使用することができます。
使用できるようにするには、jsp:useBean アクションを使用して
DBSelect、DBProcedureCall、または DBModify を作成してから、スクリプトレットを使用して
Bean 上でメソッドを実行します。
JSP SQL アクションは、DB Bean の完全な柔軟性が必要とされないときの便宜として提供されるものです。
以下では、JSP SQL アクションを使用したときと Bean を直接使用したときの制限条件を比較して示すことにします。
- データベースへの接続を必要とする JSP SQL アクションの場合は、接続が開かれるのはタグに遭遇したときであり、
閉じるのはタグが処理された後です。
2 つのアクションは同じトランザクション・スコープ内で行うことはできず、
同じ JDBC 接続を使用したとしてもこれを行うことはできません。
これに対する唯一の例外は、x:batch アクションを介した場合です。
x:batch の本体の内側のアクションでは、同じ接続が共用され、任意指定によっては同じトランザクションが共用されます。
DB Bean を直接、使用している場合は、データベース接続が開いて閉じる時点を完全に制御することができます。
AutoCommit を切り替え、明示コミットまたはロールバックが行える状態で、
トランザクション・スコープの完全な制御を行うこともできます。
JSP SQL アクションの使用時に接続の制御を制限する理由は、
トランザクションと接続を意図的に開かれたままにしておかないようにして、データベース・リソースを閉じておくことにあります。
- 大きい結果セットを処理する、DBSelect と DBProcedureCall Bean
のメソッドとプロパティーの一部には、JSP SQL アクションを介して提供されないものがあります。
このようなメソッドとプロパティーを使用して、メモリー内に維持される行の数を常時、制限して、
追加行が取得された時点でただちに取り出される行の数を指定することができます。
こうした制限が必要となるのは、それぞれの
JSP SQL アクションの処理後にデータベース接続を閉じるという上記の制限があるためです。
行のサブセットのみが最初に取り出されてメモリーに入れられてから、接続が閉じるとした場合は、
後にその他の行を取り出す手段がないことになります。
JSP SQL アクションでは、大きい結果セットには、x:select と x:procedureCall アクションの
maxRows 属性を介した何らかのサポートが提供されます。
この属性により、どの結果セットの中でも取り出される行の数が制限されます。
- DBSelect と DBProcedureCall Bean の
lockRows プロパティーが、JSP SQL アクションを介して提供されることはありません。
このプロパティーにより、データベースのロックは現在行でもある、結果セットの中の行に保持されます。
Web アプリケーションの場合は、任意時間にわたるユーザー対話の間、このようなロックが維持されることはないと考えられます。
それぞれの JSP SQL アクションが処理された後でデータベース接続を閉じるという第 1
の制限があるため、JSP SQL タグの使用時にそのようなロックを維持することはできません。
JSP SQL タグが使用されているか、DB Bean が直接、使用されていて、行のロックが使用されていない時に、
オプティミスティック・ロックがなお使用されています。行を読み取ってから、
これを更新しようとする間に他の誰かがその行を更新した場合は、このロックによりその行の更新はできなくなります。
- 行相互間と結果セット相互間の移動には各種メソッドが使用可能です。
メソッドを使用した移動は、JSP SQL アクションを使用するよりも、DB Bean を直接に使用して行われます。
アクションが提供されない主な理由は、予想される使用頻度によるに過ぎません。
JSP SQL アクションを簡単なままに保ちたいとの意向から、
めったに使用されないメソッドでインターフェースを複雑にしないことにしています。
標準 JSP アクション <jsp:getProperty> および <jsp:setProperty>
を使用して、DBSelect、DBModify、および DBProcedureCall Bean のプロパティーを取得して設定することができますが、
その一部は有用であることが証明されていません。
(たとえば、DBSelect Bean の lockRows プロパティーを設定することはできますが、上記の理由により、
これで何かが実現することはありません。)
JSP SQL タグ・ライブラリー内のアクションの使用と DB Bean の直接使用を交えることもできます。
x:select アクションを使用して DBSelect Bean
を作成する場合は、スクリプトレット内のそのメソッドを実行することができます。