A bit more searching on the apache bugzilla led me to this:
https://issues.apache.org/bugzilla/show_bug.cgi?id=43866

This enhancement request describes (probably a bit clearer) the gap in
functionality going from 5.0 to 5.5/6.0 - namely there's no
useDirtyFlag, so no way to tell the (more sophisticated) DeltaManager
to behave in a "dumber" way and just send everything everytime.

A comment on this enhancement request about talking directly to the
DeltaSession made me think it's worth a try - a ClusterValve has
access to this and I already had a skeleton implementation on trying
Jon's suggestion with the SimpleTcpReplicationManager. If the valve
simply grabs all the attributes and puts them back in again this is
enough for the DeltaRequest to flag the session as dirty and full
replication happens after each request.

This was the config:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
    <Valve className="org.apache.catalina.ha.tcp.ForceReplicationValve"/>
    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=".*\.gif;.*\.jpg;.*\.png;.*\.js;.*\.htm;.*\.html;.*\.txt;.*\.css;"/>
</Cluster>

the key bit of code in the ForceReplicationValve (I could share the
whole class if anyone's interested - after some clean up; better
logging; etc; etc):
    @Override
    public void invoke(Request request, Response response) throws
IOException, ServletException {
        getNext().invoke(request, response);

        Session session = null;
        try {
            session = request.getSessionInternal();
        } catch (Throwable e) {
            log.error(sm.getString("ReplicationValve.send.failure"), e);
        }

        if (session != null) {
            if (session instanceof ReplicatedSession) {
                // it's a SimpleTcpReplicationManager - can just set to dirty
                ((ReplicatedSession) session).setIsDirty(true);
            } else {
                // for everything else - cycle all attributes
                List cycledNames = new LinkedList();
                // in a cluster this should be
org.apache.catalina.ha.session.DeltaSession - implements HttpSession
                HttpSession deltaSession = (HttpSession)session;
                for (Enumeration<String> names =
deltaSession.getAttributeNames() ; names.hasMoreElements() ; ) {
                    String name = names.nextElement();
                    cycledNames.add(name);
                    deltaSession.setAttribute(name,
deltaSession.getAttribute(name));
                }
                log.debug(getInfo() + ": session " + session.getId() +
" cycled atrributes = " + cycledNames);
            }
        } else {
            String id = request.getRequestedSessionId();

log.debug(sm.getString("ReplicationValve.session.invalid",
request.getContext().getName(), id));
        }
    }

PS thanks for the responses. Martin, the session manager project
sounds awesome but the use of memcached (c-based native code server if
I read correctly) would make it a non-starter for us. The future use
of ehcache sounds promising, but I'd consider this (and Terracotta
too) only for the most critical deployments. Sure the
broadcast-to-all-over-tcp approach above is not going to scale well
for up to dozens of nodes but is good enough for a couple of nodes in
a basic cluster - I believe we're yet to have tomcat instance go down
in the clusters we've been involved in setting up.


--
Kevin Jansz
kevin.ja...@exari.com
Level 7, 10-16 Queen Street, Melbourne 3000 Australia
Tel +61 3 9621 2773 | Fax +61 3 9621 2776
Exari Systems
Boston | London | Melbourne | Munich
www.exari.com

Test drive our software online - www.exari.com/demo-trial.html
Read our blog on document assembly - blog.exari.com



On 2 May 2010 07:21, Martin Grotzke <martin.grot...@javakaffee.de> wrote:
>
> Hi,
>
> I created the memcached-session-manager as an alternative session
> replication solution:
> code.google.com/p/memcached-session-manager/
>
> It keeps sessions in local memory and stores session additionally in
> memcached nodes (for backup, asynchronously if desired).
> Sessions are replicated when session data has changed, so that no
> setAttribute is required.
>
> There are also different serialization stategies available, additionally
> to default java serialization there's a javolution/xml based one, and I
> also just added serialization based on kryo [1] (very fast according to
> protobuf-thrift-compare benchmark). Both (javolution, kryo based) don't
> need objects in the session attributes object graph to implement
> Serializable - which is sometimes useful, e.g. if "legacy" projects
> shall get session failover.
>
> Cheers,
> Martin
>
> [1] code.google.com/p/kryo/
>
>
> On Wed, 2010-04-28 at 22:34 +1000, Kevin Jansz wrote:
> > In a Tomcat 6 cluster can you force session replication on every
> > request? In Tomcat 5.0.x you had the ability to set
> > useDirtyFlag="false" on the manager
> > (org.apache.catalina.cluster.session.SimpleTcpReplicationManager) -
> > meaning a mutable object in the session would always be
> > "re-replicated".
> >
> > Looking at the source I can see the old "SimpleTcpReplicationManager"
> > manager implementation in the new "org.apache.catalina.ha.session"
> > package - and it still has the useDirtyFlag but the javadoc comments
> > in this state it's "Tomcat Session Replication for Tomcat 4.0" ... I
> > don't know if this is ok to use - I'm guessing not as it's not
> > mentioned in the main cluster configuration documentation.
> >
> > aside: a similar question was posed on stackoverflow (with more detail
> > and formatting) with no response:
> > http://stackoverflow.com/questions/2680958 - I'd be happy with
> > comments in either forum, and I'll share the advice.
> >
> > Regards,
> > Kevin
> >
> > --
> > Kevin Jansz
> > kevin.ja...@exari.com
> > Level 7, 10-16 Queen Street, Melbourne 3000 Australia
> > Tel +61 3 9621 2773 | Fax +61 3 9621 2776
> > Exari Systems
> > Boston | London | Melbourne | Munich
> > www.exari.com
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> > For additional commands, e-mail: users-h...@tomcat.apache.org
> >
>
> --
> Martin Grotzke
> http://www.javakaffee.de/blog/

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to