I wouldn't rely on load balancing your service object to 'fix'
the problem that you're seeing. I had much the same problem
on a program that I'm working on and have fixed it by instantiating
a unique object for each service request, invoking the asynchronous
method call on that object and waiting for the completion event for that
unique instance. This will prevent the problem of one session
'interfering' with another. Another solution would be to add
information
to the result of the asynchronous method call that would distinguish
it from other method calls. You could then check this value upon
receipt
of the completion event and determine whether or not it is truly the
correct completion event... but I think that's much less elegant than
the aforementioned solution.
-
From: kkroeger@csc.com
To: kamranamin@yahoo.com
Sent: 1/19/98 4:01:46 AM
Subject: Completion and Exception Events
Our application contains an environment visible service object which
instantiates several member attribute objects (call them POMs) used to
retrieve information from a persistent data store. Many client
partitions
will access this service object to retrieve information. It is likely
that
two clients will use the same POM to retrieve data at the same time.
For
each client request, the application performs a start task where
completion=event is specified to execute a method on the POM.
If the service object IS NOT load balanced and we use completion events
to
determine when the method that is 'started' completes by 'listening' for
a
POM.completionevent or a POM.exceptionevent, the following occurs:
Client 1 performs request.
Service object starts task for client 1.
Client 2 performs request.
Service object starts task for client 2.
task completes for client 1.
Service object receives event for completion for client 1.
Service object responds to completion event and reacts for client
2.
task completes for client 2.
Can this still happen if the Service object IS load balanced? From the
statistics we're seeing, our architect believes that messages are not
sent
to a service object until that service object is done with a previous
request. I believe that the requests are simply forwarded in a
round-robin
fashion.
Specifics:
Forte vsn:3.0.F.2
Server:AIX or NT 4.0
Client:NT 4.0
Thank you for your help