Hi Andy,
Please, look to ReplicationValve source code!
=== Snip ReplicationValve code 346ff
getNext().invoke(request, response);
Manager manager = request.getContext().getManager();
if (manager != null && manager instanceof ClusterManager) {
ClusterManager clusterManager = (ClusterManager)
manager;
CatalinaCluster containerCluster = (CatalinaCluster)
getContainer().getCluster();
if (containerCluster == null) {
if (log.isWarnEnabled())
log.warn(sm.getString
("ReplicationValve.nocluster"));
return;
}
// valve cluster can access manager - other cluster
handle replication
// at host level - hopefully!
if(containerCluster.getManager(clusterManager.getName
()) == null)
return ;
if(containerCluster.hasMembers()) {
sendReplicationMessage(request, totalstart,
isCrossContext, clusterManager, containerCluster);
} else {
resetReplicationRequest(request,isCrossContext);
}
===
You see that first complete request/response is process and after
that the replication message is generated and send.
Both cluster session manager send the delta or complete session after
response is complete processed.
OK, the description is bad, but the code is clean :-)
Please setup a cluster with clusterlog:
<Cluster ...
doClusterLog="true" clusterLogName="clusterLog" > ...
and setup conf/logging.properties
#handlers = java.util.logging.ConsoleHandler
handlers = 1catalina.org.apache.juli.FileHandler,
java.util.logging.ConsoleHandler
.handlers = java.util.logging.ConsoleHandler
#.handlers = 1catalina.org.apache.juli.FileHandler,
java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = clusterLog.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter =
java.util.logging.SimpleFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
#org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level
= INFO
#org.apache.catalina.core.ContainerBase.[Catalina].
[localhost].handlers = 2localhost.org.apache.juli.FileHandler
# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
#org.apache.catalina.startup.ContextConfig.level = FINE
#org.apache.catalina.startup.HostConfig.level = FINE
#org.apache.catalina.session.ManagerBase.level = FINE
org.apache.catalina.cluster.tcp.ReplicationValve.level = FINE
clusterLog.handlers= 1catalina.org.apache.juli.FileHandler
clusterLog.level=INFO
===
With this configuration you get a protocol from every message that
cluster send or received.
Regards
Peter
Am 18.01.2007 um 10:31 schrieb <[EMAIL PROTECTED]>:
Hi Peter,
The ReplicationValve will intercept the request when the request is
completed and before the response is returned to the user.
Copied from the JavaDoc for the SimpleTcpReplicationManager:
Title: Tomcat Session Replication for Tomcat 4.0
Description: A very simple straight forward implementation of
session replication of servers in a cluster.
This session replication is implemented "live". By live I mean,
when a session attribute is added into a session on Node A a
message is broadcasted to other messages and setAttribute is called
on the replicated sessions.
A full description of this implementation can be found under
Filip's Tomcat Page
Copyright: See apache license Company: www.filip.net (Tomcat Site
is not available).
This sounds like it works just like the DeltaManager replicating
the changes not the complete session. My applikations works on the
objects written to the session but does not call setAttribute again
and so neither the DeltaManager nor the SimpleTcpReplicationManager
would replicate these objects. Thus I am looking for a Manager
which just replicates the complete session (after processing the
request) no matter what. To trigger the replication the
ReplicationValve is used but I am still searching for a *Manager
which fits my needs described above.
Regards
Andy
-----Ursprüngliche Nachricht-----
Von: Peter Rossbach [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 18. Januar 2007 08:45
An: Tomcat Users List
Betreff: Re: AW: AW: AW: Tomcat 5.5 Cluster: Session Replication
before sending the response
Hmm,
It is not true, that multiple session replications are processed of
one request! Session are replicated only after response processing
is finished, see class o.a.c.cluster.tcp.ReplicationValve. As you
have multiple request at same session, you can have small
inconsistency problems.
Regards
Peter
Am 17.01.2007 um 10:38 schrieb <[EMAIL PROTECTED]>
<[EMAIL PROTECTED]>:
Hi Peter,
Thanks for your answer. As far as I know the
SimpleTcpReplicationManager has been implemented for Tomcat 4 an
replicates the session when it changes. So everytime the session
changes it would replicate it. Thus TC would replicate my session
several times during the processing of a request which would not be
appropriate since the session would hold the wrong information in
case tomcat crashes during the processing of a request but already
replicated the session several times. Thus it really looks like the
only way to replicate the complete session is to implement a filter
or valve.
Regards
Andy
-----Ursprüngliche Nachricht-----
Von: Peter Rossbach [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 17. Januar 2007 09:43
An: Tomcat Users List
Betreff: Re: AW: AW: Tomcat 5.5 Cluster: Session Replication before
sending the response
Hi
you can give o.a.c.cluster.session.SimpleTcpReplicationManager a
chance, but I don't know it works really.
Regards
Peter
Am 16.01.2007 um 15:57 schrieb <[EMAIL PROTECTED]>
<[EMAIL PROTECTED]>:
Hi Filip,
I understand that I will just change the session in a way the delta
manager will replicate everything.
But is there no other Manager I can use which just replicates the
complete session and not just the changed data (like the
DeltaManager
does)?!
I couldn't find a Manager which replicates everything. Is there one?
Thanks in advance!
Andy
-----Ursprüngliche Nachricht-----
Von: Filip Hanik - Dev Lists [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 16. Januar 2007 15:35
An: Tomcat Users List
Betreff: Re: AW: Tomcat 5.5 Cluster: Session Replication before
sending the response
even with this method, you are not managing the sessions, you're
just
making sure that everything gets replicated, so doing this, you are
not changing the session manager.
remember, the code below would be inserted into a filter or a valve
Filip
wrote:
Hi Filip,
Thanks for your answer. I also thought about this solution of just
setting all objects again at the end of the doGet method.
But if possible I would like to use a tomcat replication mechanism
since I do not want to "manage" session since I have a tomcat-
built-in session manager :)
Andy
-----Ursprüngliche Nachricht-----
Von: Filip Hanik - Dev Lists [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 10. Januar 2007 16:52
An: Tomcat Users List
Betreff: Re: Tomcat 5.5 Cluster: Session Replication before sending
the response
to achieve what you want, although slower, you can create a filter,
and in that filter simply set all the attributes again
Enumeration e = session.getAttributeNames(); while ( e.hasNext
() ) {
String name = e.next();
Object value = session.getAttribute(name);
if ( value != null ) session.setAttribute(name,value); }
you get the point :)
Filip
wrote:
Hi everybody,
I have a Tomcat 5.5 cluster with 2 nodes on SLES8 and want to
replicate the complete session before the response is send.
According to the Tomcat Clustering documentation the example with
the DeltaManager does this since the ReplicationValve triggers the
replication after the request has been processed and before the
response is sent.
Unfortunately the DeltaManager only replicates the changed data.
Only changes made by using methods like setAttribute make changes
visible to the DeltaManager and changes made to the object (like
changing one field value noch setAttribute-call) do not.
Thus I would need to change the way these objects are handled in
the
application. So I thought it would be the easiest way to just
replicate the complete session instead of changes only. Is this
possible?
JavaDoc of org.apache.catalina.session.StandardManager:
"Standard implementation of the Manager interface that provides
simple session persistence across restarts of this component (such
as when the entire server is shut down and restarted, or when a
particular web application is reloaded."
This sounds like the session is only replicated when the server
ist
shutdown/restarted/app reloaded. It also doesn't specify what is
replicated - the complete session?
Any suggestions?
Thanks in advance
--Andy
--------------------------------------------------------------------
-
To start a new topic, e-mail: users@tomcat.apache.org To
unsubscribe,
e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------
-
To start a new topic, e-mail: users@tomcat.apache.org To
unsubscribe,
e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org To
unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]