使用Kundera无法在Cassandra中保留数据

时间:2015-06-29 09:46:15

标签: cassandra kundera

我尝试连接到cassadra并从this link执行CRUD操作。但执行代码后得到以下异常。无法找出问题。

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.但是也有同样的例外。

2 个答案:

答案 0 :(得分:0)

您的Cassandra服务器是否已启用身份验证?您使用的是哪个版本的kundera-cassandra? 另外,您可以更新您的persistence.xml并尝试使用:

self.data

答案 1 :(得分:0)

9042端口用于启用cql3二进制协议的客户端,但不支持thrift客户端。改变,

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

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

它应该适合你。

HTH, -Vivek