> On
> desktop computers everything works fine, but the slow ipaqs showed up
> some strange deadlock problem, which hasn't been detected before.
        This tells me you need to check your JVM on the iPaq and see how it handles
things like threads.

> When a server thread receives a soap request from a client, it first has
> to call private methods in its own interface via soap for calculating
> the results.
        This doesn't make much sense to me.  If a server has received a request why
does it have to invoke methods on itself via SOAP unless it was to a
different SOAP service?  If you are in one "service" or Java object just
invoke the method because you're already in the object, right?


 This does not work, because the first soap request (from
> the client) has not been finished and no soap response has been sent
> back, so the interface class blocks method invokation (second internal
> soap request) until the first (client) soap request has really finished.
> That's why the client soap request result blocks forever -> deadlock.
        This works in my desktop environment (JDK 1.3.1, Win 2000, Apache SOAP
v2.2).  I can call out to other soap services and I can invoke the same
service from within a service via SOAP (not that I would ever want to).
Again, this tells me you need to look at the JVM you are using and see if
there are known threading issues.  Why would the interface class block
additional invocations unless you were trying to synchronize?

> So the problem seems to be, that apache soap can't handle soap requests
> in parallel. My question is now: is this assumption correct or did we
> make any errors ?
        You said it worked on your desktop, and it worked on my desktop.  Bytecode
is the same right, so it does work...just apparently not on the iPaq.  I
would check for issues with your JVM and make sure you really want to
self-invoke via SOAP.

> Is it in general impossible in java, to call two
> (different) methods on the same object from two threads ? I don't think
> so, but u never know :S
        Sure you can, just watch out for synchronization issues (same as in any
threaded environment).  If your service is using collections of some sort
for data storage make sure you aren't doing anything funny by going through
"hidden" synchronized accessors to your containers.

> Note:
> - It's not possible to slice the service interface into several classes
> for multithreading, because data between more than one interface can't
> be shared (at least i do not know, how this should be done, because
> several deployed interfaces have no references to each other).
        I think this depends on your web container.  SOAP acts like a web
application, right?  So depending on how your deployment environment handles
things like scalability/failover and how many JVMs actually run it you might
be able to use some sort of Singleton/Factory patterns.  Have you considered
using session techniques for storing shared information?  This is probably
the preferred way.

Forgive me if I misinterpreted what you were trying to say, these are just
the first things that popped in my head.

-jason


Reply via email to