- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Tomcat6 上将 PersistentManager 与 JDBC Store 结合使用时,我遇到了一个奇怪的问题。我可以看到正在写入数据库的 session 。我可以将 int、boolean、String 和 Date 之类的东西直接放入 session 中,但是当我放入自定义 java 对象时, session 会在几秒钟后从数据库中删除。自定义对象实现了 Serializable 接口(interface)。
文件:context.xml
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
debug="10"
checkInterval="0"
maxActiveSessions="-1"
minIdleSwap="-1"
maxIdleSwap="0"
maxIdleBackup="0"
maxInactiveInterval="600">
<Store className="org.apache.catalina.session.JDBCStore"
connectionURL="[CONNECTION URL]"
driverName="com.mysql.jdbc.Driver"
sessionAppCol="app_name"
sessionDataCol="session_data"
sessionIdCol="session_id"
sessionLastAccessedCol="last_access"
sessionMaxInactiveCol="max_inactive"
sessionTable="sessions"
sessionValidCol="valid_session"
checkInterval="0"
debug="99" />
</Manager>
<Valve className="org.apache.catalina.valves.PersistentValve" />
文件:TestObj.java
import java.io.Serializable;
public class TestObj implements Serializable {
private static final long serialVersionUID = 1L;
private String test;
private Integer testObjId;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
public Integer getTestObjId() {
return testObjId;
}
public void setTestObjId(Integer testObjId) {
this.testObjId = testObjId;
}
@Override
public String toString() {
StringBuffer str = new StringBuffer();
str.append("[");
str.append("test : ").append(test);
str.append(", testObjId : ").append(testObjId);
str.append("]");
return str.toString();
}
public TestObj() {
this.test = "";
this.testObjId = 0;
}
}
注意:我曾尝试在 TestObj 中只包含整数或字符串,但 session 仍会过早删除。
我还使用 HttpSessionListener 和 HttpSessionAttributeListener 接口(interface)实现了监听器,以查看何时创建 session 以及何时更改 session 属性。我从来没有看到 session 或 session 属性被破坏的消息。
我怀疑是 PersistentManager 清理了 session 。我检查了时间戳,删除的 session 没有空闲超过 10 分钟,如我的 context.xml 文件中的 maxInactiveInterval 中所指定的那样。
任何见解和帮助将不胜感激!谢谢!
最佳答案
我想我找到了这个问题的根本原因。我查看了 MySQL 日志,发现有 2 个到数据库的连接。其中一个连接总是发送删除相关 session 的 DELETE 语句。另一个发送了 DELETE 和 INSERT 语句,这在根据 source code 更新 session 时是正常的。对于 org.apache.catalina.session.JDBCStore。
我意识到,在这一切开始之前,我在本地计算机上编译并意外部署了具有相同配置的应用程序。服务器和我机器上的持久性管理器似乎都在检查数据库中是否存在过期 session 。它无法识别来自服务器的 session ,只是将其删除。
基本上,不要在不属于同一集群的不同机器上运行的同一应用程序上使用 PersistentManager。
@Will,谢谢你的建议!
关于java - 使用 JDBC Store 使用 Tomcat 和 PersistentManager 时 session 被过早地从数据库中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238245/
我的测试代码: int SIZE = 1900; int[][] array = new int[SIZE][]; for (int i = 0; i < SIZE; i++) { array[i
我有一堆 WAV 文件和一个将它们复制到另一个目录的脚本,但使用 SoX 处理了一些文件。输出的文件都应该有 1 个 channel ,采样率不超过 44.1khz。我的大多数文件要么有一个以上的 c
我正在运行一个相当占用内存的 Python 脚本,但似乎我的机器正在提前终止进程。我安装了 16GB(并通过 lshw -class memory 确认),但我的进程似乎在使用量达到 4GB 左右时被
我很难确定在使用 .NET 的 HttpWebRequest 类调用远程服务器(特别是 REST Web 服务)时是否有办法处理潜在的连接问题。根据我的调查,WebClient 类的行为是相同的,这在
所以我有这个网址: http://test.com/afolder/who-else-wants-to-make-horror-movies%3f/ 这是 URL 编码版本: http://test.
我是一名优秀的程序员,十分优秀!