No currently using aspectj, but that's bad news about the deadlock risk. I was 
considering using it later on for various things...  :-(
  "Kevin Conaway" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
  Are you using aspectj at all?  I've seen aspectj and log4j deadlock in 
certain cases.


  On Fri, Aug 8, 2008 at 1:11 PM, Aaron Crow <[EMAIL PROTECTED]> wrote:

    It turns out that the connection problem was a symptom and not a root 
cause. The root cause seems to have something to do with our use of log4j... it 
seems to
    cause hanging, perhaps due to deadlocks. For now we've turned off file 
logging via log4j. We're going to experiment with log4j's asyncappender to see 
if that's a better workaround.


    "Aaron Crow" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]


      We're having a serious issue with entity.getText(), where it often hangs 
for a second or so, then completes but with missing content.

      We have written a proxy service which takes POST requests and hands them 
off to Resources attached to our REST Application.
      The resources generate new Request objects and uses the client.handle() 
method to send essentially the same Request to one or more feeder servers. The 
feeder servers are reading data off of disk, and then returning it in a string 
format as the content of the response.

      The resources generate the clients as Runnable objects, which are handed 
to new Threads to execute.

      As part of the run() method in the threads, we start up new Threads which 
call entity.getText() for every Response object coming back from client.handle. 
 We are under the impression this should satisfy the requirement to "read 
entirely each response".  ( 
http://www.restlet.org/documentation/1.0/connectors#httpclient )  It's not our 
preference to start a new thread for every getText() request, but requests 
against response objects without Entity text take about 1 second to process, 
which seems tied to a global timeout for an empty input stream defined 
somewhere.  That 1 second is too long for our performance needs.

      When using curl or other applications, the first request of this nature 
goes in and comes back out correctly, returning the expected content.

      The second request blocks.[1] In particular, it blocks in the middle of 
client.handle():
      httpClientCall:437

                    // Now we can access the status code, this MUST happen 
after closing
                    // any open request stream.
                    result = new Status(getStatusCode(), null, 
getReasonPhrase(), null);


      If the application blocks on a request in this way, it will try to sit 
until the readTimeout expires.  At that point, it gives up and sends a request 
to the waiting application on the other side.  However, that request does not 
have the POST content-- only the resourceUrl, etc.  It is entirely driven by 
this readTimeout-- adjusting readTimeout directly impacts the wait time.

      We've tried increasing maxConnectionsPerHost and maxTotalConnections for 
the context, but it does not seem to impact performance or behavior.

      Significant (or not), the proxy service handles GET requests without 
experiencing this blocking problem.  Only POSTS seem to cause the problem.

      Also, JUnit tests do not reproduce this problem.  However, we are using 
the Restlet Client library to make these connections, so maybe there is a 
connection pooling benefit derived here?

      We are currently using restlet and noelios 1.0.7.  Upgrades to 1.0.10 and 
1.1.M4 have not resolved the problem. (we even added entity.release() after 
entity.getText() in the 1.1M4 version of our code)

      The feeder servers are also running a Restlet application, and can be 
polled at very high levels of activity without noticeable problems.  We don't 
think it's related to the feeder server behavior.

      [1] If there is a delay greater than the readTimeout parameter ( 
http://osdir.com/ml/java.restlet/2007-04/msg00026.html ) before the 2nd 
request, the request runs fine.

      Anyone have any experience with this or any idea how to resolve the issue?

      Many many thanks in advance for any advice... this is really holding us 
back...


      Best wishes,
      Aaron







Reply via email to