【问题标题】:Cannot persist data in Cassandra using Kundera无法使用 Kundera 在 Cassandra 中保存数据
【发布时间】:2015-09-15 17:30:55
【问题描述】:

我尝试连接到 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。但遇到了同样的异常。

【问题讨论】:

    标签: cassandra kundera


    【解决方案1】:

    您的 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>
    

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • 检查您的 cassandra.yaml 以了解不同的本机和 rpc 端口设置。
      猜你喜欢
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2016-01-15
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      相关资源
      最近更新 更多