Hello,

     First off, let me start with the standard 'not sure if this is in the 
correct forum' statement.

Working with MDBs and have JBoss configured to allow five instances of a MDB.  
For this discussion, let's say that there are three MDBs, all tied to their 
respective JMS queues (JMS is storing messages in MySQL DB):

A
B
C

MDB A will forward five work requests to MDB B, MDB B will process them and 
then forward to MDB C.  MDB C is essentially a filter to ensure that all five 
requests are complete, and the perhaps forwarding to another mdb, sending an 
email, whatever (i.e. completion task).

Now, here's my problem... it's possible for MDB B to receive it's five work 
requests (from MDB A) at the same time, complete them at the same time and 
forward to MDB C at the same time, so is it possible for MDB C to effectively 
check if all requests are complete? (i.e. if req1 && req2... && req5)

Somehow now it seems to work if MDB C queries the objects via persistence, that 
MDB B worked on... i.e. check req[n] status from DB.  It appears that the first 
four requests drop off and then the fifth one processes, but I want to 
understand why.

If the five instances are running at the same, how can any of the MDB C 
'checks' pass?  For my thinking, they should all pass, as all MDB B work 
requests are complete, or they would all fail. Unless somehow one lags behind 
just enough to be 'last' which causes the first four checks to fail but allows 
the 'last' check to pass, I'm a little confused as to how only one check can 
pass.

Also, there is a requests group object which all work requests pertain to, i.e. 
requestManager is the parent to work request[n].  Currently, MBD C will check 
if all work requests, five in this example, are complete and update the status 
of the requestManager to complete.  I have transaction management wrapped 
around each MDB so the update of the requestManager shouldn't be commited to 
the DB until MDB C has completed.  Now, in MDB C its' first validation check is 
to see if the requestManger status is NOT complete, if already complete there's 
nothing to 'check' - so it returns.  Now for this to work the only explanation 
I can think of is that the persistence is caching the requestManager so if five 
instances of MDB C are checking the status of the requestManager, remember that 
each MDB C is inside it's own transaction, they must be refencing the same 
instance of the requestManager.

I'm using Hibernate and from my understanding, it shouldn't share instances 
across transactions, i.e. if each MDB C instance is wrapped in it's own 
transaction, how can they share requestManager which is taken from the 
persistence layer (MDB C asks hibernate for the requestManger)?

Again, unsure if this is the right place for such a post.

Thanks,

Randall

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

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

Reply via email to