3

まず、Web アプリで単一のデータベース ユーザー アカウントを使用して接続プールを利用し、アプリの応答性を良好に保つことがベスト プラクティスであることはわかっています。ただし、要件により (いかなる状況でもこれを変更しないように)、各ユーザーをデータベース アカウントで認証する必要があります。

コンテキストは、Android で実行される倉庫管理アプリケーションですが、Web サービスからデータを取得します。このアプリケーションは、ここでの提案によって私の要件により適した技術が示されない限り、おそらくGrails で作成する予定です。アプリケーションの性質上、ユーザーは 1 日に 1 度か 2 度しか認証を必要としない可能性が高いため、パスワードと連結されたユーザー名のハッシュ コードをキーとする HashMap に Connections を保持するだけでよいと考えていました。これにより、アプリケーションはベスト プラクティスと同じまたは類似のパフォーマンス レベルを維持できるはずです。

今、私の問題は、永続化された接続オブジェクトを使用することです。大幅にカスタマイズしないと GORM で使用できないことがわかっているので、groovy.sql.Sql で使用することを計画していました。ほとんどのビジネス ロジックは PL/SQL パッケージに含まれているため、うまく機能します。とりあえず。

私の質問は、groovy.sql.Sql クラスがその Connection オブジェクトをどのように処理するのかということです。それによって接続が閉じられるという問題が発生しますか、それとも HashMap を安全に使用して接続を永続化できますか?

4

2 に答える 2

2

groovy.sql.Sql は接続を閉じません。クラス仕様には次のものがあります。

この SQL オブジェクトが Connection で作成された場合、このメソッドは接続を閉じます。

したがって、Hibernate を完全に信頼するのではなく、自分で物事を行いたい場合は、SQL クラスが実際に使用されます。ただし、Spring の UserCredentialsDataSourceAdapter をソリューションに使用できると思います。ThreadLocal を使用して各スレッドの資格情報を設定するため、呼び出しは次のようになります。UserCredentialsDataSourceAdapter.setCredentialsForCurrentThread(String username, String password)

解決します。ここで試すことができる他のアプローチがあります。

于 2012-08-17T16:18:34.263 に答える
1

実際、この質問への将来の訪問者が役立つと思われるものを見つけました。Spring Framework のドキュメントを掘り下げているときに、JDBC 拡張機能が実際にプロキシ認証を実装していることを発見しました (接続を確立するためにプロキシ アカウントが使用されますが、SQL 実行のコンテキストには実際のアカウントが提供されます)。残念ながら、2012 年 8 月 17 日現在の実装では、プロキシ接続を介したユーザーのパスワードの使用がサポートされていないため、現在は使用できませんが、この質問を見つけた人は、まだそうであるかどうかを確認する必要があります。リンクは次のとおりです。

JDBC 拡張ドキュメント v1.0.0.RC1

JDBC 拡張機能のドキュメント ベース

于 2012-08-17T17:46:13.450 に答える