Hi,

I've made a ServerResource which is supposed to return a long-running 
response that serves log messages from log4j. It looks something like this:
public class LoggingServerResource
    extends ServerResource
{
    @Override
    protected Representation get() throws ResourceException
    {
       return new WriterRepresentation( MediaType.TEXT_PLAIN)
       {
          @Override
          public void write( final Writer writer ) throws IOException
          {
             writer.flush();

             final Form params = 
getRequest().getResourceRef().getQueryAsForm();
             final Logger logger = Logger.getRootLogger();

             AppenderSkeleton appender = new LoggingAppender( params, 
writer, logger );
             appender.setLayout( new PatternLayout("[%X{url}] %-5p %c{1} 
: %m%n") );
             logger.addAppender( appender );

             synchronized (appender)
             {
                try
                {
                   appender.wait();
                } catch (InterruptedException e)
                {
                }
             }
          }
       };
    }

    private class LoggingAppender extends AppenderSkeleton
    {
      ... impl omitted for brevity ...
    }
}
---
Basically it adds an appender to log4j which then writes to the Writer 
as long as there's no IOException(=browser stopped connection). This 
seemed to work well, but when we went into production it broke 
spectacularly as it seems like the Response (or underlying 
request/response) was reused for other requests. So in other calls there 
would be sporadically included log messages.

The only way I can get this to make sense is that even though the 
WriterRepresentation has technically not finished (i.e. write() has not 
returned) the underlying streams were reused by other requests. We're 
using Glassfish (which uses Tomcat), if that makes any difference.

Has anyone else seen this problem? How is it possible that a Response 
being written to can be reused!? Any ideas?

/Rickard

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2694742

Reply via email to