# Java > Gnral Java > Persistance des donnes >  A quoi servent les Callbacks et les Entity Listeners ?

## naf87

Bonjour  tous,
Aprs avoir brivement lu sur les Callbacks et les Entity Listeners, je pensais pouvoir auditer les oprations de manipulation de donnes (CRUD) de mon systme. Mais au moment de me jeter  leau, je me rends compte quil nest pas conseill dexcuter les mthodes  du gestionnaire dentit ou de lobjet Query  dans ces mthodes (Bref, la spcification ne supporte pas cela) .  Fort de ce constat, je me demande  quoi servent vraiment les callback et les entity listener ? Y-a-t il quelquun pour maider  voir clair ? Merci et bonne continuation  tous.

----------


## Philippe Bastiani

Effectivement... l'utilisation (et, l'utilit) des listeners dans JPA est assez limit puisque tu ne peux pas travailler avec l'entity manager  ::(: 

En se creusant la tte:
- auditing de tes entits
ou encore, le dclenchement d'vnements
- gestion des vnements CDI (mais, avec l'impossibilit d'injecter directement un bean CDI),
- gestion des messages via JMS,
- ...

a+
Philippe

----------


## ruscov

Personnellement j'utilise les listeners pour mettre automatiquement  jour certains champs de mes entity (lastmodified par exemple). Tu peux voir a comme un trigger.

----------


## naf87

L encore il y a une limitation. Il n'est pas possible de modifier les attributs relationnels de l'entit.

----------


## DevServlet

> L encore il y a une limitation. Il n'est pas possible de modifier les attributs relationnels de l'entit.


Bonjour, peux tu dvelopper a? Les CallBack comme dit dans le prcdent post doivent tre considrs comme des triggers agissant sur tous les champs d'une entit (changement de valeur) avant sa persistence.Ils ont toute leur utilit pour garantir une certaine cohrence de la base de donne avant toute transaction.Personnellement je n'ai pas encore eu besoin d'invoquer un em dans un Listener.Toutefois l'inconvenient que je peux trouver  ce mcanisme c'est un risque d'oubli lors d'une maintenance applicative (volution, non report de correction de bug), le mme inconvenient que je trouve aux mcanismes trigger.

----------


## naf87

> L encore il y a une limitation. Il n'est pas possible de modifier les attributs relationnels de l'entit.


les attributs relationnels sont les attributs qui reprsente un ou plusieurs objet(s) d'une autre entit. Bref, le type de l'attribut est une Collection d'entit ou une entit. Et d'aprs la spcification (Si mon anglais est encore bon  ::mrgreen:: ), ce type d'attribut ne devrait pas tre modifi dans les callbacks.

   Et comme je l'ai dit dans mon tout premier post, je m'imaginais pouvoir renseigner ma table d'audit grce aux callbacks. tant donn qu'il y a des mthodes qui peuvent tre excutes avant et aprs la mise  jour, l'enregistrement et la suppression des donnes.




> Ils ont toute leur utilit pour garantir une certaine cohrence de la base de donne avant toute transaction


Si le mot cohrence ici fait uniquement allusion  la validation des donnes, je dirais qu'il y a un mcanisme de validation dfinit par la jsr 303, que je trouve assez intressant.

----------


## DevServlet

> les attributs relationnels sont les attributs qui reprsente un ou plusieurs objet(s) d'une autre entit. Bref, le type de l'attribut est une Collection d'entit ou une entit. Et d'aprs la spcification (Si mon anglais est encore bon ), ce type d'attribut ne devrait pas tre modifi dans les callbacks.


C'est mal connaitre les listeners,pourquoi as tu besoin  partir d'un listener d'une entit en modifier une autre, si sur chaque entit tu peux dfinir un listener spcifique, qui va tre automatiquement appel derrire une propagation de modification par exemple.Encore une fois je ne vois pas trop l'interet d'un em dans les listener.

----------


## ruscov

Tu peux dvelopper un peu plus ce que tu veux faire, peut-tre qu'on pourra t'apporter une solution.
En fait je pense  Hibernate Envers qui permet de faire des audits.

----------


## naf87

Voici en substance ce que je voulais faire :

Exemple d'entit  auditer :


```

```


Le listener :


```

```

l'entit Audit :


```

```

La classe Auditable : 


```

```

la classe AuditValue


```

```

et l'entit Detailsaudit : 


```

```

----------


## Philippe Bastiani

Il y a surement une raison pour laquelle tu souhaites sparer ton audit... Moi perso, je mets tout cel dans une @MappedSuperclass avec toutes les mthodes qui vont bien pour l'audit...
Nanmoins, si tu veux continuer dans ce sens, IMHO, il faudrait auditer les mthodes de ta DAO via AOP et non pas tes entits directement... Aprs, tout dpend du framework que tu utilises par ailleurs !

Si tu utilises Hibernate... comme te l'a indiqu _Ruscov_ Hibernate Envers est une autre soluce pour l'audit... 

a+
Philippe

----------


## ruscov

Tu as regard Hibernate Envers? C'est typiquement ce que tu as besoin.

----------


## naf87

Merci pour les rponse. Ds que je finis de regarder Hibernate Envers, je vous fait parvenir un mini compte rendu.

----------

