ok, I've had a chance to think about it, and let me try to summarize our ideas, my goal here is to simplify the implementation

1. CometEvent would be an interface, in such a way that we could reuse the objects in the backend, and also provide a facade to hide server details from the servlet

2. As suggested, if servlet instanceof CometProcessor && comet.support invoke servlet.event(CometEvent) instead of servlet.service(), otherwise invoke service() This is excellent, cause it will give the implementor a fall back option if comet support is not available, he can do the logic blocking, ala Future.waitForCompletion style
  This will guarantee that a comet servlet remains portable, nice thinking!

3. Servlet filters should be respected and used exact same way as a servlet, at the end CometEvent.getRequest/CometEvent.getResponse should return the same objects as the servlet would have received in its service method. Hence in the ApplicationFilterChain object will do the check for (isCometProcess && hasCometSupport). In a similar manner, this object would also make sure that CometEvent.getRequest delivers the wrapper to the servlet implementation if a wrapper has been added. I don't see a need to break away from the standard filters, or not use them.
  For example, a StandardCometEvent implementation would have
getHttpRequest - returns the request for the servlet, could be a request wrapper, exposed through CometEvent getInternalRequest - returns the request object from the connector, not exposed through the interface

4. For interception, I think the existing valves and filters could/should remain untouched. Interception will/should only be done at the activation of the request Sequential event method (such as READ) would not go through the interceptors, just like it is today. This is essential as we can have filters/valves that modify both incoming and outgoing content.

5. StandardCometEvent could be a zero GC object if need be, if the SecurityManager is enabled, a non reusable facade should be used

6. CometServlet removal - good idea.

7. The servlet should have a way of gracefully ending the session, such as CometEvent.close() instead of just letting it timeout

8. Session timeouts/invalidations. An active comet session should not invalidate the HttpSession based on inactive time.
  getAccessCount() would return >0 if there is a comet session
I am not fully kosher with this yet, still need to think about this some more. a possibility is to have CometEvent.releaseHttpSession(), will `--accessCount`

9. The similar problem will have to be worked out for last accessed time

10. Session replication, currently session replication is triggered through a valve at the end of each request, I will have to adjust clustering to support periodic replication or add some other mechanism to make this work.
   Still need to think this through.

The interface can be viewed at
http://people.apache.org/~fhanik/CometEvent.java



Remy Maucherat wrote:
Filip Hanik - Dev Lists wrote:
my proposal is a little delayed, had a slight Fedora Core meltdown, still recovering

I thought about it a bit, and I think we could do the following (with an event method): - If the "servlet" implements CometProcessor and the connector supports Comet, then don't call the service method, instead call a begin event - Otherwise, do the normal processing (and a regular service method remains in the servlet)
- Remove CometServlet
- An interception mechanism (similar to valves) could be a good idea (not sure, though); I think the valves could maybe be extended a little bit to do that

So I'll be away next week. I think the biggest priority is that you should come up and submit a real plan for adding clustering.

Rémy

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to