Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Cassandra,Jersey rest api增加了每个rest请求的线程、内存使用和端口_Java_Rest_Cassandra_Jersey - Fatal编程技术网

Java Cassandra,Jersey rest api增加了每个rest请求的线程、内存使用和端口

Java Cassandra,Jersey rest api增加了每个rest请求的线程、内存使用和端口,java,rest,cassandra,jersey,Java,Rest,Cassandra,Jersey,我创建了简单的jersey rest api来查询cassandra。还使用了Ajax长轮询。但对于每个请求,内存、端口使用率和线程都会增加,即使在请求完成后,这些也不会减少。卡桑德拉会议也结束了,但运气不好。下面是其余代码 @Path("/pull") @GET @Produces(MediaType.APPLICATION_JSON) public JSONArray get(@QueryParam("offset") String offset, @QueryParam("currentU

我创建了简单的jersey rest api来查询cassandra。还使用了Ajax长轮询。但对于每个请求,内存、端口使用率和线程都会增加,即使在请求完成后,这些也不会减少。卡桑德拉会议也结束了,但运气不好。下面是其余代码

@Path("/pull")
@GET
@Produces(MediaType.APPLICATION_JSON)
public JSONArray get(@QueryParam("offset") String offset, @QueryParam("currentUser") String currentUser,
        @QueryParam("longPolling") boolean longPolling) {
    JSONArray messages = new JSONArray();
    JSONObject message = null;
    Session session = Connector.getSession();
    String query = "SELECT * FROM messages";
    ResultSet resultSet = null;
    PreparedStatement ps = null;
    BoundStatement stmt = null;
    int timeOut = 0;
    try {
        while (messages.length() == 0 && timeOut++ < 30) {
            if (longPolling && !offset.equals("0")) {
                query = "SELECT * FROM messages WHERE id > ? ALLOW FILTERING";
                ps = session.prepare(query);
                stmt = ps.bind(UUID.fromString(offset));
                resultSet = session.execute(stmt);
            } else {
                resultSet = session.execute(query);
            }
            List<Row> ls = resultSet.all();
            ls.sort(new Sort<Row>());
            for (Row row : ls) {
                if ((!longPolling || !row.getString("sentby").equals(currentUser))) {
                    message = new JSONObject();
                    message.put("id", row.getUUID("id"));
                    message.put("sentby", row.getString("sentby"));
                    message.put("message", row.getString("message"));
                    messages.put(message);
                }
            }
            if (messages.length() == 0 && longPolling) {
                Thread.sleep(1000);
            }
        }
    } catch (JSONException | InterruptedException e) {
        e.printStackTrace();
    } finally {
        message = null;
        resultSet = null;
        session.close();
    }
    return messages;
}
@Path(“/pull”)
@得到
@产生(MediaType.APPLICATION_JSON)
公共JSONArray get(@QueryParam(“offset”)字符串offset,@QueryParam(“currentUser”)字符串currentUser,
@QueryParam(“longPolling”)布尔值(longPolling){
JSONArray messages=新的JSONArray();
JSONObject消息=null;
Session Session=Connector.getSession();
String query=“从消息中选择*”;
ResultSet ResultSet=null;
PreparedStatement ps=null;
BoundStatement stmt=null;
int超时=0;
试一试{
while(messages.length()==0&&timeOut++<30){
if(longPolling&!offset.equals(“0”)){
query=“从id>的消息中选择*?允许筛选”;
ps=会话准备(查询);
stmt=ps.bind(UUID.fromString(offset));
resultSet=session.execute(stmt);
}否则{
resultSet=session.execute(查询);
}
List ls=resultSet.all();
ls.sort(new sort());
用于(行:ls){
if((!longPolling | | |!row.getString(“sentby”).equals(currentUser))){
message=新的JSONObject();
message.put(“id”,row.getUUID(“id”);
message.put(“sentby”,row.getString(“sentby”);
message.put(“message”,row.getString(“message”);
messages.put(message);
}
}
if(messages.length()==0&&longPolling){
睡眠(1000);
}
}
}捕获(JSONException | InterruptedException e){
e、 printStackTrace();
}最后{
消息=null;
resultSet=null;
session.close();
}
返回消息;
}

我认为主要问题是您每次都在初始化会话并将其拆下。会话是一个相对较重的对象,每个应用程序只能使用一个。请将会话放到其他bean中,然后在这里的代码中使用依赖项注入来获得它。不要根据请求打开和关闭会话。这绝对不会被执行


也不要每次都准备陈述。在您的这个bean上,只创建一个准备好的语句,并在请求之间使用它。

我认为主要的问题是您每次都初始化会话并将其拆掉。会话是一个相对较重的对象,每个应用程序只能使用一个。请将会话放到其他bean中,然后在这里的代码中使用依赖项注入来获得它。不要根据请求打开和关闭会话。这绝对不会被执行


也不要每次都准备陈述。在您的这个bean上,只创建一个准备好的语句,并在请求之间使用它。

是的,您是对的。。没有结束会议就没有效果。还准备了一次声明,这将进一步提升绩效。谢谢是的,你是对的。。没有结束会议就没有效果。还准备了一次声明,这将进一步提升绩效。谢谢