2009-02-25 4 views
0

Je voudrais stocker le nom d'utilisateur qui a la dernière ligne de la table modifiée comme un champ dans chaque table.nom d'utilisateur Stockage cette dernière ligne de base de données modifiée par EJB3.0 et JPA

Je suit la configuration: un utilisateur se connecte, la couche Web appelle des EJB 3.0 haricots. Ces beans EJB créent et modifient certaines entités JPA. Maintenant, je voudrais que le nom d'utilisateur (de weblayer) seront automatiquement stockées à chaque entité JPA (et la ligne de base de données) qui est créé ou modifié lors de l'appel de méthode EJB.

J'ai ce genre de table, (qui est la suivante: chaque table a modificateur de champ):

CREATE TABLE my_table (
    some_data INTEGER, 
    modifier VARCHAR(20) 
); 

Par automatiquement je veux dire, que je ne aurais pas besoin de mettre username manuellement à chaque entité à l'intérieur des méthodes EJB .

Vous pouvez achive en stockant le nom d'utilisateur à la variable ThreadLocal et aller chercher le nom d'utilisateur de ThreadLocal dans EntityListener de l'entité JPA. Toutefois, cela ne fonctionne que si vous utilisez un appel EJB local. Il ne fonctionnera pas avec les appels EJB qui traversent les limites de la machine virtuelle Java. Je voudrais faire ce travail sur les appels de méthode EJB à distance.

Il ce possible?

J'utilise Weblogic serveur 10.3, EJB3.0 et EclipseLink JPA. Je suis également intéressé à savoir si cela fonctionne avec d'autres implémentations JPA.

Répondre

3

Vous pouvez utiliser un intercepteur EJB (@Around) sur la classe EJB pour obtenir l'utilisateur actuel (à l'aide de l'API standard EJB) et stocker le nom dans la variable threadlocal. Cela fonctionnerait de manière transparente pour les appels distants et locaux.

Questions connexes