Grzegorz Kossakowski wrote:
Reinhard Poetz pisze:
Grzegorz Kossakowski wrote:

<snip/>
What do you think?

IIUC there are two use cases for servlet services: They can be used from within Cocoon using special sitemap components or from outside using the http protocol. Whatever the best solution for passing environment data is, is it possible to support both scenarios?

Actually, HTTP protocol is always used in service calls but components just hide low-level details of HTTP and integrate calls with pipelining model. In current (and basic) state of implementation one could call services remotely because all data is carried using standard HTTP methods like headers and POST request method with data encoded in request body.

I hardly see how this could be achieved with whole environment, the only option would be to serialize it to the byte stream and send it as POST too. However, I guess that even if it was technically possible it would be very impractical. It's important to realize that you still can pass portion of environment data that service really needs using for example posted XML or http headers/parameters. For small, focused services implemented by simple servlets usually it will be enough.

This fallback mechanism is what I was asking for and good enough.

Problem arises only when you make a call from Cocoon's sitemap servlet to another Cocoon's sitemap servlet that can make use of all goodies we have, especially, flowscript.

I feel that passing whole env. via request object not using HTTP methods is kind of hack but I have no other idea and I guess only Cocoon servlets are those who are going to make a use of whole env, anyway.

As long as the fallback mechanism as described by you above works, I don't see a problem with your solution.

The same probably applies to using a SAX buffer instead of using byte streams that require time-consuming serialization and deserialization but using byte streams as the lowest common denominator should be supported for non-Cocoon requests.

Yes, you are right, here. I was thinking about passing SAX buffer and implementing fall-back mechanism in CallBlockHttpRequest so if some dumb servlet calls getInputStream() method instead of obtaining SAX buffer from the CallBlockHttpRequest object it's feeded with serialized XML. The same applies for output stream and CallBlockHttpResponse. This way, you can still integrate SAX-not-aware servlets very easily and
serialization is done in lazy way.

great

--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}

                                       web(log): http://www.poetz.cc
--------------------------------------------------------------------

Reply via email to