【问题标题】:What's different: running in local tomcat vs. in cloud foundry有什么不同:在本地 tomcat 中运行与在 Cloud Foundry 中运行
【发布时间】:2013-01-28 10:19:09
【问题描述】:

我有一个在本地 tomcat 实例中运行良好的应用程序 - 它是一个 cassandra 客户端应用程序,它使用 Hector 作为 Cassandra 的客户端库。应用程序使用如下代码创建一个键空间和列族(如果它不存在):

final ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition(keySpaceName,
    columnFamilyName, ComparatorType.BYTESTYPE);
    cfDef.setKeyValidationClass(ComparatorType.LONGTYPE.getClassName());
    cfDef.setComparatorType(ComparatorType.UTF8TYPE);

cfDef.addColumnDefinition(new BasicColumnDefinition() {{
    setName(StringSerializer.get().toByteBuffer("id"));
    setValidationClass(ComparatorType.LONGTYPE.getClassName());
}});

当我将这个完全相同的应用程序推送到 Cloud Foundry(我们自己的内部云,我们有一个简单的 cassandra 服务)时,上面带有“addColumnDefinition”的行会导致异常 - 这是堆栈跟踪:

java.lang.UnsupportedOperationException
java.util.AbstractList.add(Unknown Source)
java.util.AbstractList.add(Unknown Source)
me.prettyprint.cassandra.service.ThriftCfDef.addColumnDefinition(ThriftCfDef.java:311)
org.pvtl.cassandra.HectorSample.createColumnFamily(HectorSample.java:94)
org.pvtl.cassandra.HectorSample.<init>(HectorSample.java:37)
org.apache.jsp.index_jsp._jspService(index_jsp.java:61)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

一堆谷歌搜索,看起来问题在于 Hector 代码试图添加到一个不可变列表 - java.util.AbstractList。但同样,该代码在我的本地 tomcat 实例上运行良好,所以我在考虑 jdk 的不同之处?可能是?我在本地运行 java 7 (sun) 并推动选择 java 7。有人有什么想法吗?

【问题讨论】:

    标签: cassandra cloud-foundry hector


    【解决方案1】:

    很可能您在本地 tomcat 中使用的 Hector 版本与服务器中的版本不同(即服务器具有较旧的库),因为不可变列表约束已从较新的 Hector 版本中删除

    See this pull request discussion

    编辑

    您可能需要检查您的服务器配置并确保它具有最新的 hector 库和/或检查 hector-cor-xxx.jar 在您的 tomcat/jetty 库文件夹下是否存在导致依赖问题。

    【讨论】:

    • 有趣的想法以及从较新的 hector 版本中删除的约束似乎是一个合理的解释。但是 hector-cor-1.1-2.jar 是我正在推动的战争文件的一部分。与我当地的tomcat或码头不同,dea上的某些东西满足了一些传递依赖? (也在当地码头工作)。知道如何诊断吗?
    • 如果您的 Web 服务器库文件夹下存在 hector 库的旧 jar 可能会导致此类问题,请参阅我的更新答案
    • iTech - 你是绝对正确的。我的 /var/vcap/data/dea/apps/myapp/webapps/ROOT/WEB-INF/lib/ 目录(以及较新的 jar)中有旧版本的 hector 核心 jar。所以,现在这是 10,000 美元的问题 - 它是如何到达那里的?它不在我推送的战争文件中。
    • 当你意识到你正在推送一个与你正在查看的不同的战争文件时,尴尬的时刻来了……我正在推送的战争文件确实在许多地方都有不同的版本罐子。只需推送正确的战争文件,一切都很好。再次感谢!!
    • :) 这样的事情总是会发生
    猜你喜欢
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多