2016-03-23 16 views
4

Her iki yaklaşımda da aynı hataya yol açan Wso2 ESB & wso2 DSS'den Cassandra DB'ye bağlanmaya çalışıyorum.WSO2 ve JDBC'den Cassandra 3.0.3 Bağlantısı

1) Yaklaşım 1: Biz WSO2 ESB Aşağıda 4.9

den Cassandra DB 3.0.3 bağlanmaya çalıştığınız

WSO2 ESB

den Cassandra bağlanma bileşenleri/lib klasörüne kopyalanan kavanozlardır.

(jar listing) Aşağıdaki master-datasource.xml dosyasında yapılandırma eklenmiştir.

<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) Yaklaşım 2: Biz WSO2 DSS 3.5.0 den Cassandra DB bağlanmaya çalıştığınız

WSO2 DSS

den Cassandra bağlanma Aşağıda bileşenler/lib klasörüne kopyalanan kavanozlardır.

Veri servisini düzenlendi ve aşağıdaki veri kaynağı aynı yapılandırma olduğunu ekledi: Yukarıdaki yapılandırma “örnek” olarak

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

oluşturulan KEYSPACE olduğunu Cassandra'da. Her iki durumda da, aynı hatayla karşılaşan 1 & [2]. Sorunu çözmeyi önerebilir misiniz? Ben fark

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) 

cevap

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

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

ilk şey ... ilişkisiz sorguları Cassandra'ya yapmak için iyi bir fikir değil bulunmaktadır. Her zaman bir bölüm anahtarı ile sorgulamalısınız. Bu sizin sorununuzu gidermez, ancak kesinlikle milyonlarca satırlık üretimde bunu yapmak istemezsiniz.

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

org.apache.thrift.transport.TTransportException: 

WSO2 ESB 4.9 den Cassandra DB 3.0.3 bağlanmaya çalıştığınız, bir kaç şey burada fark ettim. WSO2'yi hiç kullanmadım (aslında, ne olduğu hakkında hiçbir fikrim yok) ama sanki burada birkaç (kötü) varsayım yapıyor gibi görünüyor.

  • ben "tip" için seçenekler bilmiyorum ama Cassandra kesinlikle değil bir RDBMS dir.
  • JDBC'yi kullanıyorsunuz. Cassandra ile Java arasında etkileşimde bulunan MANY sürücüleri var. JDBC aslen ilişkisel veritabanları için ve Cassandra ile kullanılmak üzere zenginleştirilmiş için tasarlanmıştır. Özellikle Cassandra 3.x kullanıyorsanız, DataStax Java Sürücüsünü kullanarak en yüksek başarı şansına sahip olacaksınız.
  • thrift.transport.TTransportException'u attığını görüyorum. Cassandra 3.0.3 varsayılan olarak tasarruflu (9160) protokolü ile kurulur.Bağlantı noktasının 9042'ye değiştirilmesi yeterli değil ... bunun çalışması için yerel ikili protokolü kullanmanız gerekir.

Denenecek ilk şey, Thrift'i Cassandra düğümünüzün içinde yeniden etkinleştirmektir. senin cassandra.yaml içinde, start_rpc özelliği bulmak ve true olarak ayarlayın: Thrift 9160 üzerinde çalışan alacak En azından

start_rpc: true 

, ve tekrar bağlanmayı denemek için hazır olacaksınız. Ancak, JDBC'nin Cassandra 3.x ile çalışıp çalışmayacağını bilmiyorum. Ve eğer varsa, tüm mevcut özellikleri kesinlikle alamazsınız.

Burada gördüğüm en büyük sorun, Cassandra'nın yeni bir sürümünü, etkileşimde bulunmak üzere tasarlanmadığı teknolojilerle kullanmaya çalıştığınızdır. Ama Thrift'i Cassandra’da yapmaya çalışın ve bunun işe yarayıp yaramadığını görün. Eğer bir şey olursa, sizi bir sonraki probleme çıkarmalı.

+0

@kishoreNagula Burada önerdiğim herhangi bir şey yardımcı oldu mu? Bu çalışmayı başarabildin mi? – Aaron

+0

Merhaba Aaron, Sorunu incelediğiniz için teşekkür ederiz. start_rpc ile çalıştı: doğru ama yine de aynı hata. Cassandra sürücülerinin farklı versiyonları da kullanılıyor. Şanssız. –