Hey,
the tomcat clustering is design for sticky session is on, like the servlet
spec described (SRV 7.7.2 Servlet Sepc 2.4) Clustering is implemented as
backup, when a node is crashed
or went shutdown. At rare special cases you can used synchron pooled mode
without stickyness (waitForAck="true").
Peter
Mindaugas Zaksauskas schrieb:
Hi,
I was trying to make this work for more than a week, maybe there will be
someone who will be able to help.
Configuration: Tomcat [EMAIL PROTECTED] GNU/Linux, 2.6.13. Cluster configured
accordingly to http://raibledesigns.com/tomcat/ (Apache2 + mod_jk + two
Tomcat instances on the same box, memory-in-memory session replication).
Sticky sessions are turned off, so by requesting a page, I am redirected to
Tomcat #1, then to Tomcat #2, then again to Tomcat #1 and so on.
At the beginning, the application I was trying to launch was developed and
tested on a regular (non-clustered) Tomcat, and the life was beautiful :)
When we decided to move to the cluster, we got some exceptions about
non-serializable data in the session which we had all fixed.
The actual problem is that session data in our application doesn't seem to be
replicated under random circumstances and under random screens. What I see
from the logs, that entire managed beans are missing from within different
Tomcat instance and they really exist in another.
I have written a simple .jsp test with the session replication and it seemed
to work well.
Then I got really angry and tried with more sophisticated example which didn't
(see sourcecode at the bottom). This example puts relatively large amount of
data into the session and under next request this data is retrieved from the
different Tomcat node. I have tested this with IE 6.0 - by opening this page,
and clicking on F5 (refresh), the upper number (current timestamp) must go to
the bottom at the next request. The bug scenario is the following: hold F5
for a couple of seconds and wait till hundreds of refreshes/session
replications finish. Then, quickly save the upper number and _immediately_
click F5 once again. The upper number is *not* getting written into the
session nor gets replicated, some old value is retrieved from the session
instead. Sometimes, the following exception appears in the catalina.out.
java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:448)
at
java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2657)
at java.io.ObjectInputStream.readInt(ObjectInputStream.java:900)
at
org.apache.catalina.cluster.session.DeltaRequest$AttributeInfo.readExternal(DeltaRequest.java:285)
(...skipped...)
The two problems (session replication in my test and in JSF webapp) might have
nothing in common just because I have tested JSF webapp under no load.
However, our JSF webapp is supposed to handle 200+ users so this also might
be an issue.
I have tried the same config on Tomcat 5.5.9. I have tried all the replication
modes (pooled, synchronous and asynchronous), also tried with
waitForAck=false. None has helped.
I'd appreciate any help. Thanks in advance.
m.
8<-------------------------- test.jsp ------------------------------------
<html>
<body>
<center>
<!-- Tomcat id is accordingly to instance, for another I have "Tomcat 1" -->
<h1>Tomcat 2</h1>
<%= request.getSession().getId() %><BR>
<%
String[] mas = new String[10000];
long time = System.currentTimeMillis() % 100000;
out.println("time: " + time + "<BR>");
for (int i=0; i<mas.length; i++)
{
mas[i] = "" + time;
}
String[] from_session = (String[]) session.getAttribute("attr");
if (from_session == null)
{
session.setAttribute("attr", mas);
out.println("from session: null");
}
else
{
String value = from_session[0].toString();
out.println("got from session; length:" + from_session.length + "
value: " + value);
session.setAttribute("attr", mas);
}
%>
</body>
</html>
8<-------------------------- test.jsp ------------------------------------
---------------------------------------------------------------------
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]