nginx+terracotta+freemarker集群
来源:互联网 发布:春秋战国士阶层 知乎 编辑:程序博客网 时间:2024/05/01 05:07
前一篇文章已经讲了nginx+terracotta集群,但在项目实施时遇到了一些问题,主要是freemarker和webworker版本太低造成的。
1.登陆后后台执行正常结束,前台freemarker报错,错误如下。于是升级freemarker最新版本(从2.3.1到2.3.20)
HTTP Status 500- java.io.NotSerializableException: freemarker.ext.servlet.HttpSessionHashModel
type Exceptionreport
message java.io.NotSerializableException:freemarker.ext.servlet.HttpSessionHashModel
description Theserver encountered an internal error that prevented it from fulfilling thisrequest.
exception
java.lang.RuntimeException: java.io.NotSerializableException: freemarker.ext.servlet.HttpSessionHashModel
截图:
2.升级freemarker后,可正常登陆和操作,但在服务器1登陆后,在同一session中去检查服务器2,报错。使用jsp验证发现服务器2中已存在相关session对象,说明terrecotta正常复制了session。
在类HttpSessionHashModel增加调试信息,发现session和request都是null,而最初是webwork的FreemarkerServlet调入的,于是想找到webwork 2.1.7的源代码分析,发现时com.opensymphony.webwork.views.freemarker.FreemarkerManager的代码造成的,而webwork 2.2.6版的代码已做了相关调整,于是直接修改了FreemarkerManager类的buildScopesHashModel后集群正常了。
HTTP Status 500-
type Exceptionreport
message
description Theserver encountered an internal error that prevented it from fulfilling thisrequest.
exception
java.lang.NullPointerException
freemarker.ext.servlet.HttpSessionHashModel.get(HttpSessionHashModel.java:122)
freemarker.core.DynamicKeyName.dealWithStringKey(DynamicKeyName.java:151)
freemarker.core.DynamicKeyName._eval(DynamicKeyName.java:108)
freemarker.core.Expression.eval(Expression.java:111)
freemarker.core.Dot._eval(Dot.java:74)
freemarker.core.Expression.eval(Expression.java:111)
freemarker.core.Expression.evalAndCoerceToString(Expression.java:115)
freemarker.core.DollarVariable.accept(DollarVariable.java:76)
freemarker.core.Environment.visit(Environment.java:265)
freemarker.core.MixedContent.accept(MixedContent.java:93)
freemarker.core.Environment.visit(Environment.java:265)
freemarker.core.Environment.process(Environment.java:243)
freemarker.template.Template.process(Template.java:277)
com.opensymphony.webwork.views.freemarker.FreemarkerServlet.process(FreemarkerServlet.java:229)
com.opensymphony.webwork.views.freemarker.FreemarkerServlet.doGet(FreemarkerServlet.java:47)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:171)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)
note The fullstack trace of the root cause is available in the Apache Tomcat/6.0.36 logs.
//新代码
TemplateHashModel sessionModel;
//terracotta集群时,因为terracotta已经Session copy,所以get ATTR_SESSION_MODEL的对象不为空,导致无法初始化HttpSessionHashModel对象,故修改
HttpSession session = request.getSession(false);
if (session != null) {
sessionModel = new HttpSessionHashModel(session, wrapper);
model.put(KEY_SESSION_MODEL, sessionModel);
session.setAttribute(ATTR_SESSION_MODEL, sessionModel);
} else {
// no session means no attributes ???
// model.put(KEY_SESSION_MODEL, new SimpleHash());
}
// 原来的代码
// if (request.getSession(false) != null) {
// HttpSession session = request.getSession();
//
// synchronized (session) {
// sessionModel = (HttpSessionHashModel) session.getAttribute(ATTR_SESSION_MODEL);
// 这里的问题,因为session数据已通过terracotta共享了,所以不能初始化另外一部机器的类HttpSessionHashModel
// if (sessionModel == null) {
// sessionModel = new HttpSessionHashModel(session, wrapper);
// session.setAttribute(ATTR_SESSION_MODEL, sessionModel);
// }
// }
//
// model.put(KEY_SESSION_MODEL, sessionModel);
// }
// else {
// // no session means no attributes ???
// // model.put(KEY_SESSION_MODEL, new SimpleHash());
// }
3.linux下安装terracotta
- nginx+terracotta+freemarker集群
- Nginx+Tomcat+Terracotta的Web服务器集群实做
- Terracotta集群快速安装
- Terracotta进行tomcat集群
- Terracotta进行tomcat集群
- Java集群平台terracotta
- Terracotta与EHcache集群
- Terracotta Server集群
- Terracotta与Tomcat6集群
- terracotta+tomcat集群配置
- Nginx + Tomcat + Terracotta配置
- 配置terracotta高可用集群
- 利用Terracotta实现SmartFoxServer2X集群
- Ehcache与terracotta集群配置
- Ehcache与terracotta集群配置
- Ehcache与terracotta集群配置
- terracotta集群初尝试-helloword
- terracotta+tomcat+apache集群配置
- openproj ubuntu安装及其输入中文变方块乱码解决
- facebook 开源项目
- 喜欢你
- .net 导出Excel
- Android APP OPS移除应用程序项目的修改方法
- nginx+terracotta+freemarker集群
- silverlight 中 支持datatable写法
- WebSphere部署应用后,访问页面处于loading状态。
- linux下vi命令
- 字体闪动的特效!
- C++ 中判断非空的错误指针
- OCP-1Z0-053-200题-50题-628
- Ubuntu 字体安装
- wifi 简单介绍