【问题标题】:Unable to connect to Cassandra db through Kundera in Play! framework无法通过 Kundera in Play 连接到 Cassandra db!框架
【发布时间】:2015-12-15 14:22:50
【问题描述】:

当我通过 Intellij IDEA 中的 SBT 控制台运行我的应用程序时出现以下错误。

[info] play - Application started (Dev)
[error] c.i.c.c.t.ThriftClientFactory - Error during pool creation: caused by 
org.apache.thrift.TException: org.apache.thrift.transport.TTransportException: Read a negative frame size (-2080374784)!
    at net.dataforte.cassandra.pool.ConnectionPool.init(ConnectionPool.java:345) ~[cassandra-connection-pool-0.7.1.jar:na]
    at net.dataforte.cassandra.pool.ConnectionPool.<init>(ConnectionPool.java:127) ~[cassandra-connection-pool-0.7.1.jar:na]
    at com.impetus.client.cassandra.thrift.ThriftClientFactory.createPoolOrConnection(ThriftClientFactory.java:146) ~[kundera-cassandra-2.5.jar:na]
    at com.impetus.kundera.loader.GenericClientFactory.load(GenericClientFactory.java:95) [kundera-core-2.5.jar:na]
    at com.impetus.kundera.configure.ClientFactoryConfiguraton.configure(ClientFactoryConfiguraton.java:67) [kundera-core-2.5.jar:na]
Caused by: org.apache.thrift.transport.TTransportException: Read a negative frame size (-2080374784)!
    at org.apache.thrift.transport.TFastFramedTransport.readFrame(TFastFramedTransport.java:144) ~[libthrift-0.7.0.jar:0.7.0]
    at org.apache.thrift.transport.TFastFramedTransport.read(TFastFramedTransport.java:134) ~[libthrift-0.7.0.jar:0.7.0]
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) ~[libthrift-0.7.0.jar:0.7.0]
    at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378) ~[libthrift-0.7.0.jar:0.7.0]
    at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297) ~[libthrift-0.7.0.jar:0.7.0]
[error] application - 

! Internal server error, for (GET) [/] ->

java.lang.ExceptionInInitializerError: null
    at models.process.EmployeeProcessImpl$.<init>(EmployeeProcess.scala:82) ~[myEntities.jar:na]
    at models.process.EmployeeProcessImpl$.<clinit>(EmployeeProcess.scala) ~[myEntities.jar:na]
    at controllers.Application$.<init>(Application.scala:168) ~[na:na]
    at controllers.Application$.<clinit>(Application.scala) ~[na:na]
    at Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(routes_routing.scala:107) ~[na:na]
Caused by: com.impetus.kundera.loader.ClientLoaderException: org.apache.thrift.TException: org.apache.thrift.transport.TTransportException: Read a negative frame size (-2080374784)!
    at com.impetus.client.cassandra.thrift.ThriftClientFactory.createPoolOrConnection(ThriftClientFactory.java:151) ~[kundera-cassandra-2.5.jar:na]
    at com.impetus.kundera.loader.GenericClientFactory.load(GenericClientFactory.java:95) ~[kundera-core-2.5.jar:na]
    at com.impetus.kundera.configure.ClientFactoryConfiguraton.configure(ClientFactoryConfiguraton.java:67) ~[kundera-core-2.5.jar:na]
    at com.impetus.kundera.configure.Configurator.configure(Configurator.java:65) ~[kundera-core-2.5.jar:na]
    at com.impetus.kundera.KunderaPersistence.initializeKundera(KunderaPersistence.java:109) ~[kundera-core-2.5.jar:na]
Caused by: org.apache.thrift.TException: org.apache.thrift.transport.TTransportException: Read a negative frame size (-2080374784)!
    at net.dataforte.cassandra.pool.ConnectionPool.init(ConnectionPool.java:345) ~[cassandra-connection-pool-0.7.1.jar:na]
    at net.dataforte.cassandra.pool.ConnectionPool.<init>(ConnectionPool.java:127) ~[cassandra-connection-pool-0.7.1.jar:na]
    at com.impetus.client.cassandra.thrift.ThriftClientFactory.createPoolOrConnection(ThriftClientFactory.java:146) ~[kundera-cassandra-2.5.jar:na]
    at com.impetus.kundera.loader.GenericClientFactory.load(GenericClientFactory.java:95) ~[kundera-core-2.5.jar:na]
    at com.impetus.kundera.configure.ClientFactoryConfiguraton.configure(ClientFactoryConfiguraton.java:67) ~[kundera-core-2.5.jar:na]
Caused by: org.apache.thrift.transport.TTransportException: Read a negative frame size (-2080374784)!
    at org.apache.thrift.transport.TFastFramedTransport.readFrame(TFastFramedTransport.java:144) ~[libthrift-0.7.0.jar:0.7.0]
    at org.apache.thrift.transport.TFastFramedTransport.read(TFastFramedTransport.java:134) ~[libthrift-0.7.0.jar:0.7.0]
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) ~[libthrift-0.7.0.jar:0.7.0]
    at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378) ~[libthrift-0.7.0.jar:0.7.0]
    at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297) ~[libthrift-0.7.0.jar:0.7.0]
[error] application - Error while rendering default error page
scala.MatchError: java.lang.ExceptionInInitializerError (of class java.lang.ExceptionInInitializerError)
    at play.api.GlobalSettings$class.onError(GlobalSettings.scala:148) ~[play_2.11-2.3.0.jar:2.3.0]
    at play.api.DefaultGlobal$.onError(GlobalSettings.scala:206) [play_2.11-2.3.0.jar:2.3.0]
    at play.core.server.Server$class.logExceptionAndGetResult$1(Server.scala:76) [play_2.11-2.3.0.jar:2.3.0]
    at play.core.server.Server$$anonfun$getHandlerFor$4.apply(Server.scala:86) [play_2.11-2.3.0.jar:2.3.0]
    at play.core.server.Server$$anonfun$getHandlerFor$4.apply(Server.scala:84) [play_2.11-2.3.0.jar:2.3.0]

我正在使用的示例取自: http://blog.knoldus.com/2014/06/22/playing-kundera-cassandra/

我正在玩! 2.4.6 框架与 Cassandra 2.2。不允许连接到数据库的项目可能有什么问题?我是否需要对 CQL 或 Kundera 版本进行一些更改,以便我的数据库可以连接?我的 persistence.xml 文件如下:

<persistence 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
    https://raw.github.com/impetus-opensource/Kundera/Kundera-2.0.4/kundera-core/src/test/resources/META-INF/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="cassandra_employees">
        <provider>com.impetus.kundera.KunderaPersistence</provider>
        <class>models.domains.Employee</class>
        <properties>
            <property name="kundera.nodes" value="localhost" />
            <property name="kundera.port" value="9042" />
            <property name="kundera.keyspace" value="EmployeeExample" />
            <property name="kundera.dialect" value="cassandra" />
            <property name="kundera.client.lookup.class" value="com.impetus.client.cassandra.thrift.ThriftClientFactory" />
            <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>

请告诉我是否必须对 Cassandra 或 CQL 进行一些与版本相关的更改,以及在哪个文件中?

【问题讨论】:

  • 数据库未连接的原因可能是什么?需要更多与配置相关的更改才能从我的本地系统连接 Cassandra db。我已经安装了播放!框架和 Cassandra 在单个系统本身上,但无法从我的代码连接 Cassandra db。任何帮助表示赞赏。
  • 把端口改成9160就可以去掉kundera.cache.provider.classkundera.cache.config.resource属性了..
  • native_transport_port 的端口在 cassandra.yaml 文件中为 9042。那么 9160 在这种情况下是否可以正常工作?我也应该在 persistence.xmlcassandra.yaml 文件中将其更改为 9160 吗?
  • 目前显示以下错误:com.impetus.kundera.KunderaException: All hosts are down. please check servers manully.
  • 不要更改cassandra.yaml.. 中的端口。昆德拉使用的端口是rpc_port.. 只需在您的cassandra.yaml 中设置start_rpc 为true 并将kundera.port 设置为@ 中的9160 987654337@

标签: scala playframework-2.0 cql cassandra-2.0 kundera


【解决方案1】:

在配置下使用,它在我的系统上运行良好..

更新了 cassandra.yaml:
从: start_rpc: 假
到: start_rpc: 真

持久性.xml:
下面提到的单元名称是随机的,将用于访问这个特定的持久性。
keyspace name 是在 cassandra 中创建的表的名称。

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

            <property name="kundera.pool.size.max.active" value="500" />
            <property name="kundera.pool.size.max.total" value="500" />
        </properties>

【讨论】:

  • 我的问题得到了解决,我的问题得到了解决,对 persistence.xml 和 build.sbt 本身进行了一些更改。我使用的是 Cassandra 2.2.4 版本,我无法从终端使用 nodetool 进行备份。关于这个有什么想法吗?它告诉我一些错误nodetool: Failed to connect to 'localhost:7199' - ConnectException: 'Connection refused'.
猜你喜欢
  • 2016-06-17
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 2016-04-03
  • 2016-05-23
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
相关资源
最近更新 更多