2015-06-29 22 views
1

我試圖連接到cassadra並從this link執行CRUD操作。但執行代碼後得到了下面的異常。無法找出問題所在。使用Kundera無法在Cassandra中保留數據

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Jun 29, 2015 2:47:00 PM com.impetus.client.cassandra.config.CassandraPropertyReader onProperties 
WARNING: No property file found in class path, kundera will use default property 
Jun 29, 2015 2:47:01 PM com.impetus.kundera.persistence.EntityManagerFactoryImpl <init> 
INFO: EntityManagerFactory created for persistence unit : kundera 
Exception in thread "main" com.impetus.kundera.KunderaException: org.scale7.cassandra.pelops.exceptions.NoConnectionsAvailableException: Failed to get a connection within the configured max wait time. 
    at com.impetus.kundera.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:208) 
    at kundera.KunderaClient.main(KunderaClient.java:22) 
Caused by: org.scale7.cassandra.pelops.exceptions.NoConnectionsAvailableException: Failed to get a connection within the configured max wait time. 
    at org.scale7.cassandra.pelops.pool.CommonsBackedPool.getConnectionExcept(CommonsBackedPool.java:345) 
    at org.scale7.cassandra.pelops.Operand.tryOperation(Operand.java:77) 
    at org.scale7.cassandra.pelops.Mutator.execute(Mutator.java:93) 
    at org.scale7.cassandra.pelops.Mutator.execute(Mutator.java:63) 
    at com.impetus.client.cassandra.pelops.PelopsClient.onPersist(PelopsClient.java:527) 
    at com.impetus.kundera.client.ClientBase.persist(ClientBase.java:83) 
    at com.impetus.kundera.lifecycle.states.ManagedState.handleFlush(ManagedState.java:193) 
    at com.impetus.kundera.graph.Node.flush(Node.java:525) 
    at com.impetus.kundera.persistence.PersistenceDelegator.flush(PersistenceDelegator.java:411) 
    at com.impetus.kundera.persistence.PersistenceDelegator.persist(PersistenceDelegator.java:169) 
    at com.impetus.kundera.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:202) 
    ... 1 more 

但是,我可以從cqlsh執行crud操作。

下面是我的persistence.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="kundera"> 
     <provider>com.impetus.kundera.KunderaPersistence</provider> 
     <class>kundera.Catalog</class> 
     <properties> 
      <property name="kundera.nodes" value="localhost" /> 
      <property name="kundera.port" value="9042" /> 
      <property name="kundera.username" value="cassandra" /> 
      <property name="kundera.passsword" value="cassandra" /> 
      <property name="kundera.keyspace" value="Kundera" /> 
      <property name="kundera.dialect" value="cassandra" /> 
      <property name="kundera.client.lookup.class" 
       value="com.impetus.client.cassandra.pelops.PelopsClientFactory" /> 
      <property name="kundera.cache.provider.class" 
       value="com.impetus.kundera.cache.ehcache.EhCacheProvider" /> 
      <property name="kundera.cache.config.resource" value="/ehcache-test.xml" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

我試圖改變kundera.port至9160,但得到了同樣的異常。

回答

0

您的Cassandra服務器是否啓用驗證?你正在使用哪個版本的kundera-cassandra? 另外,你能不能請更新您的persistence.xml,並嘗試:

<persistence-unit name="kundera"> 
    <provider>com.impetus.kundera.KunderaPersistence</provider> 
    <class>kundera.Catalog</class> 
    <properties> 
     <property name="kundera.nodes" value="localhost" /> 
     <property name="kundera.port" value="9160" /> 
     <property name="kundera.username" value="cassandra" /> 
     <property name="kundera.passsword" value="cassandra" /> 
     <property name="kundera.keyspace" value="Kundera" /> 
     <property name="kundera.dialect" value="cassandra" /> 
     <property name="kundera.client.lookup.class" 
      value="com.impetus.client.cassandra.thrift.ThriftClientFactory" /> 

    </properties> 
</persistence-unit> 

0

9042端口是cql3二進制協議功能的客戶端,但不節儉的客戶。更改,

<property name="kundera.client.lookup.class" value="com.impetus.client.cassandra.pelops.PelopsClientFactory" />

TO

<property name="kundera.client.lookup.class" value="com.impetus.kundera.client.cassandra.dsdriver.DSClientFactory" />

它應該爲你工作。

HTH, -Vivek

+0

檢查cassandra.yaml爲不同的原生和RPC端口設置。 –

相關問題