Grails Hessian 问题

标签 grails hessian

我们正在将生产环境转移到客户的数据中心。目前,为了解释该场景,我们有一个 Apache 负载均衡器,它对托管 2 个 Grails 应用程序的 2 个 Apache Tomcat 应用程序服务器的请求进行负载均衡。我会很感激任何帮助!

总而言之,我们的设置是:
- 作为负载均衡器的 Apache HTTP 服务器

  • 2 台 Tomcat 服务器(节点 A 和节点 B)
  • 我们在每个 Tomcat 服务器上托管了两个 Java/Grails 应用程序。
    在我们当前的环境中,我们通过负载均衡器将 hessian 请求从我们的一个 grails 应用程序发送到另一个 grails 应用程序。这完美地工作。在我们要迁移到的环境中,这是失败的。

    我们已经能够验证所有防火墙和安全包都已关闭。我们还能够验证每次该 hessian 调用失败时负载均衡器访问日志中是否存在错误 (/var/log/httpd/access_log):

  • 10.30.95.51 - - [19/Jun/2014:11:55:13 -0400] "POST /Application/hessian/RemoteTicketService HTTP/1.1" 500 8067 "-" "Java/1.6.0_30"



    我继续执行 tcpdump,我能够确定 Hessian 返回了 Grails 应用程序错误 - 有人有什么想法吗?:

    L6DàL6<83>¢HTTP/1.1 500 Internal Server Error^M Date: Fri, 20 Jun 2014 14:40:08 GMT^M Server: Apache/2.2.15 (Red Hat)^M Connection: close^M Transfer-Encoding: chunked^M Content-Type: text/html;charset=UTF-8^M ^M 1f83^M Grails Runtime Exception .message { border: 1px solid black; padding: 10px; background-color:#E9E9E9; margin: 30px; } .header{ margin: 30px; } .stack { border: 1px solid black; padding: 5px; overflow:auto; height: 300px; } .snippet { padding: 5px; background-color:white; border:1px solid black; margin:3px; font-family:courier; }

    Looks like you've encountered an error, sorry about that Message: Expected 'H'/'C' (Hessian 2.0) or 'c' (Hessian 1.0) in hessian input at -1
    Caused by: Hessian skeleton invocation failed; nested exception is java.io.IOException: Expected 'H'/'C' (Hessian 2.0) or 'c' (Hessian 1.0) in hessian input at -1 Class: Unknown
    At Line: [-1]
    Code Snippet:

    最佳答案

    这原来是 Apache/2.2.15 上的 mod_jk 模块 1.2.39 的问题。我们将 mod_jk 模块换成了 1.2.37 版本,一切正常。使用 tcpdump 和一个基本的 hessian java 项目,我们能够通过在我们的 hessian 工厂上将“chunked post”设置为 false 来确认问题已得到解决。不幸的是,我们显然无法在我们的项目库/依赖项中执行此代码更改,但我们发现在 mod_jk 1.2.39 中分 block HTTP 请求的转发被破坏了。 mod_jk 1.2.40 修复了这个错误,它也不会影响我们在 1.2.37 中的环境。

    http://tomcat.apache.org/connectors-doc/miscellaneous/changelog.html

    关于Grails Hessian 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24330244/

    相关文章:

    java - 如何使用 Hessian 二进制远程处理协议(protocol)将 DateTime 或某种时间戳从 PHP 发送到 Java?

    grails - Grails-编辑时出现jQuery datepicker错误

    session - 如果之前未访问 session ,则Grails 2.3.0无法访问 View 中的 session

    grails - 服务类的build.gradle中的Grails访问变量

    java - 序列化工具如何在反序列化过程中跳过未知字段?

    web-services - 有没有 HessianKit Sample 项目?

    java - Java中的hessian,如何控制实例化?

    grails - Grails 中 Unresolved 依赖关系

    pdf - Grails和pdf生成

    hessian - 开始使用 Hessian