Hi,

we use JBoss AS 4.0.4 in clustered mode with the EJB3 container configured.

For JAAS, we store users, roles etc in a MySQL database and configure this in 
the login-config.xml file as normal.

We also allow a client application to modify users, user groups and the roles 
to which they are assigned. To facilitate this, we use the EJB3 JPA layer to 
map the database tables to "entities", these being 'User', 'UserGroup' and 
'Role'.

Each of these entities has their own independent lifecycle. There is a 
bidirectional many-to-many relationship between 'User' and 'UserGroup' with 
'User' being the owning side (see the snippet below):

    @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = 
FetchType.EAGER)
  |     @JoinTable(name = "UserToUserGroupMap",
  |                joinColumns = [EMAIL PROTECTED](name = "principalFK")},
  |                inverseJoinColumns = [EMAIL PROTECTED](name = "groupFK")}) 
  |     @Cache (usage=CacheConcurrencyStrategy.TRANSACTIONAL)
  |     public  Set<UserGroup> getUserGroups()
  |     {
  |         return this.userGroups;
  |     }

There is a unidirectional many-to-many relationship between 'UserGroup' and 
'Role'(see the snippet below):

    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = 
FetchType.EAGER)
  |     @JoinTable(name = "UserGroupToRoleMap",
  |                         joinColumns = [EMAIL PROTECTED](name = "groupFK")},
  |                         inverseJoinColumns = [EMAIL PROTECTED](name = 
"roleFK")}) 
  |     @Cache (usage=CacheConcurrencyStrategy.TRANSACTIONAL)                   
     
  |     public Set<Role> getRoles()
  |     {
  |         return this.roles;
  |     }

When a client/transaction updates on of these entity instances, we want to 
capture that event so that the other clients can be notified of the update. To 
achieve this we wanted to use the JPA entity callback mechanism. For each of 
the above entities, we added a callback such as:

  | @PostUpdate
  | void notifyObserversOfEntityUpdate()
  | {
  |     // notify observers (performed asychronously using JMS)
  | }

It seems as though this callback is executed whenever a normal entity attribute 
is modified. It does not seem to be called if one of the many-to-many 
associations detailed above is modified however.

At this point, I turned on hibernate TRACE level logging and noticed that 
collection attribute changes seem to be treated differently to non-collection 
attrubte changes. If one of the many-to-many collection attributes is modified, 
I see the following logs (please ignore the insertion as that is for another 
unrelated entity but still part of the same transaction):

2007-02-22 10:39:55,274 TRACE 
[org.hibernate.event.def.AbstractFlushingEventListener] Scheduling collection 
removes/(re)creates/updates
2007-02-22 10:39:55,276 DEBUG 
[org.hibernate.event.def.AbstractFlushingEventListener] Flushed: 1 insertions, 
0 updates, 0 deletions to 4 objects
2007-02-22 10:39:55,276 DEBUG 
[org.hibernate.event.def.AbstractFlushingEventListener] Flushed: 1 
(re)creations, 0 updates, 1 removals to 4 collections

However, if a non-collection attribute is modified, I see logs such as the 
following (please ignore the insertion as that is for another unrelated entity 
but still part of the same transaction):

2007-02-22 13:23:23,051 TRACE 
[org.hibernate.event.def.AbstractFlushingEventListener] Scheduling collection 
removes/(re)creates/updates
2007-02-22 13:23:23,051 DEBUG 
[org.hibernate.event.def.AbstractFlushingEventListener] Flushed: 1 insertions, 
1 updates, 0 deletions to 4 objects
2007-02-22 13:23:23,051 DEBUG 
[org.hibernate.event.def.AbstractFlushingEventListener] Flushed: 0 
(re)creations, 0 updates, 0 removals to 4 collections


What I would like to know is whether this is by design or whether it is a bug. 
If it is by design, then is there a way using JPA that I can get callbacks when 
collections change. Or, do I have to use a Hibernate specific interceptor or 
something?

Thanks a lot...
Josh

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4022859#4022859

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4022859
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to