2013-02-12 2 views
3

У меня есть приложение, которое отлично работает в локальном экземпляре tomcat - это клиентское приложение cassandra, которое использует Hector как клиентскую библиотеку для Cassandra. Приложение создает пространство ключей и столбцы семьи (если она уже не существует), используя код, как следующее:Что нового: работа в локальном tomcat vs. in cloud Foundry

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()); 
}}); 

Когда я нажимаю это точно то же самое приложение к облачным литейному (нашему собственному внутреннему облаку, где у нас есть простой 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) 

пучок прибегая к помощи и, похоже, беда в том, что код Гектор пытается добавить к непреложным list - java.util.AbstractList. Но опять же, этот код отлично работает на моем локальном экземпляре tomcat, поэтому я думаю о различии в jdk? Может быть? Я запускаю java 7 (sun) локально и толкнул выбор java 7. У кого-нибудь есть идеи?

ответ

3

Скорее всего, вы используете другую версию Hector в вашем коте, чем в сервере (т.е. сервер имеет старую библиотеку), поскольку неизменяемый список Ограничить было удален из новых Hector версий

See this pull request discussion

Edit

Вы можете проверить конфигурацию сервера и убедитесь, что он имеет самую последнюю hector библиотеки и/или проверить, что hector-cor-xxx.jar делает не существует под вашей библиотекой tomcat/jetty, так как это может вызвать проблему зависимости.

+0

Интересная мысль и это ограничение, устраняемое с более новых версий гетра, наверняка кажется разумным объяснением. Но hector-cor-1.1-2.jar является частью файла войны, который я нажимаю. Некоторая транзитивная зависимость, которая чем-то дополняется деа по-разному, чем у моего местного кота или пристани? (работает и в местном причале). Любая идея, как я могу диагностировать это? –

+0

Если в папке с библиотеками веб-серверов существует более старая библиотека 'hector', это может вызвать такую ​​проблему, см. Мой обновленный ответ. – iTech

+0

iTech - вы абсолютно правы. В моем/var/vcap/data/dea/apps/myapp/webapps/ROOT/WEB-INF/lib/каталоге (а также в новой банке) есть более ранняя версия ядро ​​ядра hector. Итак, вот вопрос $ 10K - как он туда попал? Это не в военном файле, который я толкнул. –

Смежные вопросы