2010-09-21 3 views
1

Nous migrons une application JDBC vers JPA et EJB3. Notre ancienne application utilisait l'API Connect # setClientInfo pour enregistrer le nom d'utilisateur actuel dans les informations client: http://download.oracle.com/javase/6/docs/api/java/sql/Connection.html#setClientInfo%28java.lang.String,%20java.lang.String%29Comment utiliser JDBC ClientInfo avec JPA et EJB3

Nous devons faire quelque chose de similaire dans le projet EJB3. Comment?

Nous pouvons utiliser des intercepteurs EJB3 autour des appels de service EJB afin de capturer l'utilisateur actuel et le définir comme information sur la source de données. Cependant, je vois des problèmes avec cela. Je pense qu'il n'y a aucune garantie lorsque le vidage JPA() se produit. Si vous définissez les informations sur le client dans un intercepteur, faites quelques mises à jour, puis revenez, l'écriture de la base de données flush() et réelle peut ne pas se produire bien après que votre bean (et intercepteur) sont hors de portée. Est-ce correct? Je crois que JPA et EntityManagers sont des abstractions sur la connexion, et vous ne pouvez pas définir de manière fiable les informations sur le client sur la connexion. Vrai ou faux?

+0

La solution (si possible) pourrait dépendre de votre serveur d'applications et fournisseur JPA. Qu'est-ce que vous utilisez? –

+0

Weblogic 10.3.3. Je crois que vous avez raison, cela dépend de cela. Notre meilleure solution repose sur ThreadLocals et semble fonctionner, mais le threading est entièrement hors de la portée de la spécification EJB. –

Répondre

3

Quel fournisseur JPA utilisez-vous? EclipseLink prend en charge la connexion basée sur l'utilisateur, les connexions de proxy Oracle et le VPD. EclipseLink définit également les événements de niveau session et de connexion qui vous permettent de définir la configuration sur la connexion JDBC.

Voir, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Auditing

+0

Nous utilisons Kodo JPA d'Oracle avec WebLogic 10.3.3. –

Questions connexes