使用cassandra构建java REST API

时间:2016-06-02 05:08:12

标签: java cassandra

我正在尝试使用cassandra构建一个REST API作为数据库但是我没有在线看到任何文档或示例,我使用的是datastax java驱动程序3.0.0。

public class CassandraDBUtil {

private Cluster cluster;
private PoolingOptions options;
private Session session;

public void connect(String node) {
    options = new PoolingOptions(). setMaxRequestsPerConnection(HostDistance.LOCAL, 32768);
    cluster = Cluster.builder()
            .addContactPoint(node)
            .withAddressTranslator(new EC2MultiRegionAddressTranslator())
            .withPoolingOptions(options)
            .build();
    Metadata metadata = cluster.getMetadata();
    System.out.printf("Connected to cluster: %s\n", metadata.getClusterName());
    for (Host host : metadata.getAllHosts()) {
        System.out.printf("Datacenter: %s; Host: %s; Rack: %s\n", host.getDatacenter(), host.getAddress(),
                host.getRack());
    }
    session = cluster.connect("dropalletcassdb");
}

public Session getSession(){
    if(this.cluster != null){
        System.out.println("@@@@ Returning an old session");
        return this.session;
    }else{
        System.out.println("@@@ Creating a new session");
        connect("127.0.0.1");
        return this.session;
    }
}

下面是另一个类中的函数,

@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public List<ActiveBid> getTrackInJSON() {
    logger.info("LoginApi: Returning the active bid");
    Session session = cassDB.getSession();
    String cqlStatement = "select * from active_bid where username='xyz'";
    for (Row row : session.execute(cqlStatement)) {
      System.out.println(row.toString());
    }
    session.close();
    ActiveBid activeBid = new ActiveBid("3d673111-894d-4fcb-84f7-7d027a9a2419", "XXX-XXX-XXXXXXX", "/p/project_id=1367777", 25, new BigInteger("125"), new BigInteger("150"), "2016-06-04 18:32:37");
    List<ActiveBid> activeBidList = new ArrayList<ActiveBid>();
    activeBidList.add(activeBid);
    return activeBidList;
}

在上面的代码中,我有一个用于构建集群和会话的util类,然后我在另一个类中有getTrackInJSON,它在向http://localhost:8080/cassExample/rest/get发出请求时调用。每次我调用/ get调用时,它都会构建集群和会话,平均响应时间为500毫秒。我不确定我做错了什么,我甚至没有将结果集作为响应返回,我回复了一个模拟的响应并且花了这么多时间。有人可以指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

只需将静态与所有类变量放在一起。喜欢以下

private static Cluster cluetr; 私有静态会话会话; 。 。 。然后创建此类的构造函数并初始化所有类变量。然后创建一个方法getSession。在第一次检查是否初始化集群和会话变量如果未初始化,则使用默认构造函数创建此类的对象,以便初始化所有变量,然后发回会话变量。