与Apache Cassandra的SoapUI JDBC连接

时间:2014-03-26 11:25:22

标签: java jdbc cassandra soapui

有没有人知道如何使用SoapUI中的JDBC连接字符串连接到cassandra。

我试过了,但无法连接。基于这项研究,我发现org.apache.cassandra.cql.jdbc.CassandraDriver并不支持。

我正在使用以下信息。

  • 驱动程序:org.apache.cassandra.cql.jdbc.CassandraDriver
  • 连接字符串:jdbc:cassandra://localhost:8080/test3

4 个答案:

答案 0 :(得分:3)

现在Thrift在Cassandra接口方面已经死了,你需要使用本机CQL协议来做任何有用的事情。幸运的是,如果JDBC wrapper是您唯一的集成选项,则可以使用cassandra.yaml,并且本机驱动程序的概念将比旧的Thrift协议更好地映射到JDBC。

  

JDBC驱动程序类:com.github.adejanovski.cassandra.jdbc.CassandraDriver

     

JDBC URL:jdbc:cassandra:// host1 - host2 - host3:9042 / keyspace

其中9042是默认的本机传输端口,可通过updated version配置。

似乎还有一个Maven Central基于Thrift的JDBC驱动程序用于Cassandra 3.x,但Apache或Cassandra开发人员不再支持它。

由于此处的其他答案一直在共享(有时是虚假的)依赖关系的固定列表,我认为我最好提一下正确的依赖关系管理,因为如果不同的jar版本不在,很多事情都会起作用#&# 39; t all up up(特别是,2.x到3.x对于Cassandra本身和cassandra-driver-core都是一个突破性的变化)。

上面提到的包装器项目包含一个pom.xml,它指定所有依赖项并发布到{{3}}。您应该能够使用任意数量的依赖管理工具(包括maven,ivy或grape)来解析和下载特定驱动程序版本所需的所有jar。

或者,开发人员似乎提供了一个包含所有必需依赖项的jar,但这将与特定的驱动程序版本绑定。

答案 1 :(得分:0)

这很有趣,我之前从未和Cassandra合作过,所以我花了一些时间才想出这个,我觉得我有。

要使用Cassandra,您需要多个jar文件,下面是我使用过的屏幕截图。 enter image description here

我使用cassandra-cli找出正确的端口号,在我的例子中是9160

正确的连接字符串为jdbc:cassandra://localhost:9160/soapuikeyspace,正确的驱动程序为org.apache.cassandra.cql.jdbc.CassandraDriver。 当我尝试从JDBC步骤访问Cassandra时,我能够成功连接到Cassandra但是当我尝试运行一个选择查询时我得到了

  

获得回复时出错

以及soapUI日志中的以下错误跟踪

Sat Apr 05 17:33:09 ADT 2014:ERROR:java.sql.SQLFeatureNotSupportedException
   java.sql.SQLFeatureNotSupportedException
    at org.apache.cassandra.cql.jdbc.CassandraResultSet$CResultSetMetaData.getTableName(CassandraResultSet.java:1307)
    at com.eviware.soapui.support.xml.XmlUtils.addResultSetXmlPart(XmlUtils.java:1712)
    at com.eviware.soapui.support.xml.XmlUtils.createJdbcXmlResult(XmlUtils.java:1651)
    at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcResponse.<init>(JdbcResponse.java:38)
    at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.createResponse(JdbcSubmit.java:334)
    at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.runQuery(JdbcSubmit.java:199)
    at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.run(JdbcSubmit.java:161)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

所以这种方法很糟糕。

这不是彻底的失败,因为我能够访问Cassandra并对其进行查询。我使用下面的代码来做到这一点。

import java.sql.DriverManager;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.Statement;
import javax.sql.DataSource;
import org.apache.cassandra.cql.jdbc.*;

com.eviware.soapui.support.GroovyUtils.registerJdbcDriver("org.apache.cassandra.cql.jdbc.CassandraDriver");
def con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/soapuikeyspace"); //keyspace has to be in lowercase

 def stmt = con.createStatement();

//add data
def qry = "insert into users (user_id, lname, fname) values (1747,'Abhishek','Asthana');"
def rs = stmt.executeUpdate(qry)

使用此代码时要记住的最重要的事情是将键空间名称写成小写。

对于任何有兴趣的人,我写了a blog about all this

答案 2 :(得分:0)

我能够通过创建Cassandra集群并使用它来连接到cassandra,如下所示:

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;

def rs;

//query
def qry = "select id soapuikeyspace.users where id='aaa';"

//create cluster for cassandra
Cluster cluster = new Cluster.Builder().addContactPoint("localhost").withCredentials("cassandra", "cassandra").withPort(9042).build();

//get seesionm from cassandra claster
session = cluster.connect();

//get result set
rs = session.execute(qry);

必需的jar:

  • cassandra-all-2.0.6.jar
  • 卡桑德拉驱动器芯-2.0.1.jar
  • 网状-3.9.0.Final.jar
  • 度量核-3.0.2.jar

答案 3 :(得分:0)

我通过cql连接成功连接到Cassandra 3.x和SoapUI版本5.3.0。

以下是我的步骤:

  1. 将这些罐子复制到bin / ext:

      

    DSE-java的驾驶员芯1.4.0

         

    DSE-java的驱动程序映射-1.4.0

         

    度量核-3.0.2

         

    netty-all-4.1.6.Final

  2. 从lib更新guava jar:

      

    番石榴-18.0

  3. 启动soapui并创建groovy脚本:

  4. &#13;
    &#13;
        import com.datastax.driver.core.*;
    
        Cluster cluster = null;
    
        cluster = new Cluster.Builder().addContactPoints("127.0.0.1").withPort(9042).build();
        
        Session session = cluster.connect();                         
    
        PreparedStatement statement = session.prepare("select * from keyspace.exemple_table");
    
        ResultSet rs = session.execute(statement.bind());
    
        Row row = rs.one();
    &#13;
    &#13;
    &#13;