2016-03-23 21 views
4

Wso2 ESB & wso2 DSSからCassandra DBに接続しようとしていますが、両方の方法で同じエラーが発生しています。WSO2とJDBCからCassandra 3.0.3に接続

1)アプローチ1:我々は、WSO2 ESB 4.9以下

からカサンドラDB 3.0.3を接続しようとしているWSO2 ESB

からカサンドラへの接続部品/ libフォルダにコピー瓶です。

(jar listing) 下記のmaster-datasource.xmlには設定が追加されています。

<datasource> 
     <name>CassandraDB</name> 
     <description>The datasource used for cassandra</description> 
           <jndiConfig> 
      <name>cassandraWSO2DB</name> 
     </jndiConfig> 
      <definition type="RDBMS"> 
      <configuration> 
       <url>jdbc:cassandra://127.0.0.1:9042/sample</url>(tried with port 9160) 
       <username>cassandra</username> 
       <password>cassandra</password> 
       <driverClassName>org.apache.cassandra.cql.jdbc.CassandraDriver</driverClassName> 
       <maxActive>50</maxActive> 
       <maxWait>60000</maxWait> 
       <testOnBorrow>true</testOnBorrow> 
       <validationQuery>SELECT COUNT(*) from sample.users</validationQuery> 
       <validationInterval>30000</validationInterval> 
       <defaultAutoCommit>true</defaultAutoCommit> 
      </configuration> 
     </definition> 
    </datasource> 

2)アプローチ2:私たちはWSO2 DSS 3.5.0 からカサンドラDBを接続しようとしている

WSO2 DSS

からカサンドラに接続するには、以下のコンポーネント/ libフォルダにコピー瓶です。

データサービスを作成し、以下のデータソースが同一の構成である追加:鍵空間が作成される上記構成「サンプル」で

<config enableOData="false" id="CassandraSampleId"> 
    <property name="url">jdbc:cassandra://127.0.0.1:9042/sample</property> 
    <property name="driverClassName">org.apache.cassandra.cql.jdbc.CassandraDriver</property> 

<query id="SampleQuery" useConfig="CassandraSampleId"> 
    <expression>select * from users</expression> 

カサンドラで 両方の場合、すなわち、1 & [2]は以下のようなエラーに直面しています。あなたは問題を解決することをお勧めしますか?

java.sql.SQLNonTransientConnectionException: org.apache.thrift.transport.TTransportException: Read a negative frame size (-2080374784)! 

    at org.wso2.carbon.dataservices.core.description.config.RDBMSConfig.<init>(RDBMSConfig.java:45) 
    at org.wso2.carbon.dataservices.core.description.config.ConfigFactory.getRDBMSConfig(ConfigFactory.java:92) 
    at org.wso2.carbon.dataservices.core.description.config.ConfigFactory.createConfig(ConfigFactory.java:60) 
    at org.wso2.carbon.dataservices.core.DataServiceFactory.createDataService(DataServiceFactory.java:150) 
    at org.wso2.carbon.dataservices.core.DBDeployer.createDBService(DBDeployer.java:785) 
    at org.wso2.carbon.dataservices.core.DBDeployer.processService(DBDeployer.java:1139) 
    at org.wso2.carbon.dataservices.core.DBDeployer.deploy(DBDeployer.java:195) 
    ... 8 more 
Caused by: java.sql.SQLNonTransientConnectionException: org.apache.thrift.transport.TTransportException: Read a negative frame size (-2080374784)! 
     at org.apache.cassandra.cql.jdbc.CassandraConnection.<init>(CassandraConnection.java:159) 
     at org.apache.cassandra.cql.jdbc.CassandraDriver.connect(CassandraDriver.java:92) 
     at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:278) 
     at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) 
     at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701) 
     at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635) 
     at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:188) 
     at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127) 
     at org.wso2.carbon.dataservices.core.description.config.SQLConfig.createConnection(SQLConfig.java:187) 
     at org.wso2.carbon.dataservices.core.description.config.SQLConfig.createConnection(SQLConfig.java:173) 
     at org.wso2.carbon.dataservices.core.description.config.SQLConfig.initSQLDataSource(SQLConfig.java:151) 
     at org.wso2.carbon.dataservices.core.description.config.RDBMSConfig.<init>(RDBMSConfig.java:43) 
     ... 14 more 
Caused by: org.apache.thrift.transport.TTransportException: Read a negative frame size (-2080374784)! 
     at org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:133) 
     at org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101) 
     at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) 
     at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378) 
     at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297) 
     at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:204) 
     at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69) 
     at org.apache.cassandra.thrift.Cassandra$Client.recv_describe_cluster_name(Cassandra.java:1101) 
     at org.apache.cassandra.thrift.Cassandra$Client.describe_cluster_name(Cassandra.java:1089) 
     at org.apache.cassandra.cql.jdbc.CassandraConnection.<init>(CassandraConnection.java:130) 

答えて

1
<query id="SampleQuery" useConfig="CassandraSampleId"> 
    <expression>select * from users</expression> 

<validationQuery>SELECT COUNT(*) from sample.users</validationQuery> 

私が最初に気づい...結合していないクエリはカサンドラに行うことをお勧めないです。常にパーティションキーを使用してクエリを実行する必要があります。これで問題は解決されませんが、何百万行もの量産環境でこれを行うことは間違いありません。

我々はWSO2 ESB 4.9 [OK]を

 <definition type="RDBMS"> 
     <configuration> 
      <url>jdbc:cassandra://127.0.0.1:9042/sample</url>(tried with port 9160) 

org.apache.thrift.transport.TTransportException: 

、私はここに気づいた物事のカップルからカサンドラDB 3.0.3を接続しようとしています。私はWSO2を使ったことはありませんでした(実際には何か分かりません)が、ここではいくつか(悪い)仮定をしているようです。

  • 私は「タイプ」のためのオプションがありますが、カサンドラは間違いない RDBMSが何であるかを知りません。
  • 私はあなたがJDBCを使用しているのを見ています。 JavaからCassandraとやりとりする多くのドライバがあります。 JDBCはもともとリレーショナルデータベース用に設計されたもので、は、Cassandraで使用するためにを拡張しました。特にCassandra 3.xを使用している場合は、DataStax Java Driverを使用することで成功のチャンスが最大になります。
  • thrift.transport.TTransportExceptionを投げるのがわかります。 Cassandra 3.0.3はデフォルトで無効になっているthrift(9160)プロトコルでインストールされます。ポートを9042に変更するだけでは不十分です...ネイティブのバイナリプロトコルを使用して動作させる必要があります。

最初に試してみるのは、カサンドラノードの内部でThriftを再び有効にすることです。あなたのcassandra.yaml内部では、start_rpcプロパティを見つけて、trueに設定します。スリフトは9160上で実行されているでしょう非常に少なくとも

start_rpc: true 

を、あなたは再度接続を試して準備ができていますよ。しかし、JDBCがCassandra 3.xでも動作するかどうかはわかりません。そしてもしそうなら、あなたは確かにすべての利用可能な機能を得ることはありません。

私がここで見ている最大の問題は、あなたが実際にやりとりするように設計されていない技術でカサンドラの新しいバージョンを使用しようとしていることです。しかし、CassandraでThriftを開始し、それが役立つかどうかを確認してください。何かがあれば、次の問題に遭遇するはずです。

+0

@kishoreNagula私がここで示唆した何かが助けになりましたか?あなたはこれを得ることができましたか? – Aaron

+0

こんにちはAaron、問題を探していただきありがとうございます。 start_rpc:trueを試みましたが、同じエラーです。使用した異なるバージョンのcassandraドライバもあります。運がない。 –