2

所以,标题几乎说明了一切:我正在从单服务器 ColdFusion 安装切换到多服务器 ColdFusion 安装,如果我设置应用程序名称,会话复制将不起作用。

这是一个没有成功复制会话的精简 application.cfc。

    component 
    {
        this.name                = 'myTestApp';
        this.sessionManagement   = true;
        this.sessionTimeout      = createTimeSpan(0,2,0,0);
    }

只要我注释掉应用程序名称,会话复制就可以在我的服务器之间完美运行。

我相信这个 Adob​​e 帮助页面切线地引用了这个问题:

如果您未在 Application.cfc 初始化代码中的 This.name 变量中或使用 ColdFusion cfapplication 标记指定应用程序名称,则应用程序未命名,并且应用程序范围对应于 ColdFusion J2EE servlet 上下文。因此,ColdFusion 仅支持一个未命名的应用程序。

如果多个 cfapplication 标记和 Application.cfc 文件未指定应用程序名称,则这些应用程序中的所有页面共享 servlet 上下文作为它们的应用程序范围。未命名应用程序的所有会话都直接对应于 J2EE 应用程序服务器的会话对象。(如果您不使用 J2EE 会话变量,ColdFusion 会确保 J2EE 会话的持续时间至少与会话超时时间一样长。)"

显然,停止使用application.name. 但是,如何让我的服务器在使用命名应用程序时使会话可用?有没有办法在 J2EE/JRun servlet 上下文中注册应用程序名称?我不想为我们在服务器上运行的每个 CF 应用程序设置一个单独的实例集群;这似乎不是一个可扩展的解决方案。

我觉得我可能在这里遗漏了一些非常简单的东西,不是 Java 大师,但任何提示都值得赞赏。--Will

4

2 回答 2

2

我们已经使用 ColdFusion (J2EE) 集群配置了许多集群,并让 Session Replication 可靠地运行,并且始终使用定义的 ColdFusion 应用程序。毫无疑问,在 6.1 到 8 版本中,这是非常具有挑战性的,CF9 肯定会变得更好。然而,ColdFusion 聚类并不是一个简单的点击操作,它需要小心地创建;从在所有服务器上创建多个实例开始;此时检查以确保每个实例都按预期单独提供内容;然后我们可以创建集群添加成员(最近创建和测试的实例)。

我们的建议是使用“粘性会话”设置“循环”,但是我们已经成功地使客户端只能使用循环。在此过程的每个阶段,每次进行更改或添加时重新启动所有实例非常重要,并且{instance}-out.log应在每次重新启动后检查以确保没有与集群相关的错误,正如 Barney 在此线程中所说的那样。只有在{instance}-out.log's 中没有集群错误时,集群才能正常工作,并且在集群完全配置之前不要做出任何判断或假设。

于 2012-10-01T14:01:07.277 回答
0

这里有一些想法:

  • 您是否在两个 CF 实例上都启用了 J2EE 会话?
  • 您的 CF 服务器是否都在完全相同的 CF 和 JRun 版本上?
  • 他们是否运行相同版本的 Java?

JRun 或 Coldfusion 的日志中是否显示任何内容?

我希望如果会话无法复制,那么您会在日志中看到它的提及。由于可靠性问题(主要是集群成员数量众多),我们放弃了 JRun/CF 中的会话复制,但我们确实让它运行在具有应用程序名称的应用程序上,所以我知道这是可能的。

于 2012-10-01T08:31:14.857 回答