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