2016-05-01 6 views
0

DBに挿入/更新されたデータを処理するWebサービスがあります。クライアントがこのWebサービスを呼び出すと、ユーザID(現在、ポータルにログインしているユーザ)がRequestで送信されます。このユーザーIDをDb接続に渡すか、またはsysコンテキストのために、監査目的に設定する必要があります。実際のテーブルに挿入/更新した後、Auditテーブルに挿入/更新するための既存の監査テーブルとトリガがあります。これらの変更を追跡するには、このUserIdを何とか接続に渡す必要があります.Sys Contextまたは$ sessionからDBから取得してAuditテーブルに挿入することができます。私は現在、DBでデータを処理するためにSpringとHibernateトランザクションを使用しています。監査目的のためにsyscontext/ClientIdentifierをHibernateに渡すこと

Connectionでクライアント情報を設定しようとしましたが、機能しません。

Session session=sessionFactory.getCurrentSession(); 
SessionImpl sImpl=(SessionImpl) session; 
Connection connection=sImpl.connection(); 
connection.setClientInfo("ClientUser", "ABC"); 

をし、また、私はそれが正しい方法だ場合、私は訴えるわけではないcode.butアプリケーションからDB上のたびに操作を実行する前に、ストアドプロシージャのにDBMS_APPLICATION_INFO.SET_CLIENT_INFOを呼び出すことにより、クライアント情報を設定しようとしています:私は、以下試してみましたそれを処理する。

私はOCIとシンJDBCドライバの両方で試していますが、このユーザーIDを設定する方法を見つけることができません。

sysコンテキストまたはConnectionでユーザIDを渡す効率的な方法があるかどうか知らせることができます。私は現在、hibernate4、Spring、Websphere Server、Oracle DBを使用しています。私はDB.Connectionsで操作を実行する接続とトランザクションを処理するために休止状態春@Transactionalを使用しています

は、接続プールからのものであり、私はのdataSourceためorg.springframework.jndi.JndiObjectFactoryBeanを使用しています。

私たちが接続プールから接続を取得するときに設定するために、接続の周りにインターセプタまたはラッパーを持つ方法はありますか。

誰もこれまでに行ったことはありますか?

答えて

1

これは、カスタムデータソース接続の作成者

8.2コンフィギュspring data JDBC Extensions for the Oracle Database

章で説明されています...しかし、あなたは、現在のユーザーがログインID使用するConnectionPreparerを実装することができます。こうすることで、データソースが共有ユーザー名で構成されていても、ユーザーのログイン情報を取得できます。

これはoracleの解決策です。使用していると思います。それを別のデータベースに適用することも可能です。

関連する問題