我有一个在本地 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。有人有什么想法吗?