因此,标题几乎说明了一切:我正在从单服务器ColdFusion安装切换到多服务器ColdFusion安装,如果我设置应用程序名称,会话复制不起作用。
这是一个精简的application.cfc,它不会成功复制会话。
component
{
this.name = 'myTestApp';
this.sessionManagement = true;
this.sessionTimeout = createTimeSpan(0,2,0,0);
}
一旦我注释掉应用程序名称,会话复制就可以在我的服务器之间完美地运行。
我相信this Adobe help page切向引用了这个问题:
如果未在This.name变量中指定应用程序名称 Application.cfc初始化代码或使用ColdFusion cfapplication标签,应用程序未命名,以及应用程序 scope对应于ColdFusion J2EE servlet上下文。 ColdFusion的, 因此,仅支持一个未命名的应用程序。
如果多个cfapplication标签和Application.cfc文件没有 指定应用程序名称,这些应用程序中的所有页面共享 servlet上下文作为其应用程序范围。所有未提名的会议 应用程序直接对应于J2EE的会话对象 应用服务器。 (如果不使用J2EE会话变量, ColdFusion确保J2EE会话至少持续时间 会话暂停。)“
停止使用application.name
显然不是最佳做法。但是,如何在使用命名应用程序时启用服务器以使会话可用?有没有办法在J2EE / JRun servlet上下文中注册应用程序名称?我不想为我们在服务器上运行的每个CF应用程序设置一个单独的实例集群;这似乎不是一个可扩展的解决方案。
我觉得我可能在这里错过了一些非常简单的东西,而不是一个java大师,但任何提示都会受到赞赏.--会
答案 0 :(得分:2)
我们使用ColdFusion(J2EE)群集配置了许多群集,并使会话复制可靠地运行,并且始终使用已定义的ColdFusion应用程序。毫无疑问,在版本6.1到8中,这非常具有挑战性,CF9的确有所改善。但是,聚类ColdFusion并不是一个简单的点击练习,需要仔细创建;从所有服务器上的多个实例创建开始;此时进行检查以确保每个实例按预期单独提供内容;然后我们可以创建集群添加成员(最近创建和测试的实例)。
我们的建议是使用“粘性会话”设置“循环”,但我们已成功启用客户端仅使用循环法。在此过程的每个阶段,每次进行更改或添加时都要重新启动所有实例,并且每次重新启动后都应检查{instance}-out.log
,以确保没有与集群相关的错误,正如Barney所说明的那样在这个帖子里。只有当{instance}-out.log
中没有集群错误时,集群才能正常工作,并且在集群完全配置之前不做任何判断或假设。
答案 1 :(得分:0)
以下是一些想法:
JRun或Coldfusion的日志中是否显示了任何内容?
我希望如果会话无法复制,那么您会在日志中看到它的提及。由于可靠性问题(主要是大量集群成员),我们放弃了JRun / CF中的会话复制,但我们确实让它运行了一个具有应用程序名称的应用程序,所以我知道它是可能的。