Tomcat サーバーで Java Maven プロジェクトを実行しています。これは、チャット アプリ用の Atmium フレームワークを使用したサーバー サイド スクリプトです。
socket.fire("message="+"testmessage")
クライアント側からサーバーに対して起動されると、Tomcat コンソールに次のエラーが表示されることがあります。
Oct 16, 2013 7:26:39 PM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
このエラーはランダムに発生しています。
また、すべてのメッセージ送信が失敗するためにサーバーがクラッシュすることもあります。
メッセージブロードキャストに次のサーバー側コードを使用しています: @Path("/pubsub/{topic}") public class JerseyPubSub {
private @PathParam("topic")
Broadcaster topic;
@GET
public SuspendResponse<String> subscribe() {
return new SuspendResponse.SuspendResponseBuilder<String>()
.broadcaster(topic)
.outputComments(true)
.addListener((AtmosphereResourceEventListener) new EventsLogger())
.build();
}
@POST
@Broadcast
@Produces("text/html;charset=ISO-8859-1")
public Broadcastable publish(@FormParam("message") String message) throws JSONException, IOException, SQLException {
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost", 6379);
Jedis jedis = pool.getResource();
int remote_id = 0;
int local_id = 0;
int from = 0;
int to = 0;
String msg = null;
int chatroomid = 0;
JSONObject json = new JSONObject();
JSONObject sender_respondejson = new JSONObject();
String msg_for = null;
String msg_content = null;
String msg_type = null;
//{"local_id": "123", "from": "100", "to": "200", "message": "'+getElementByIdValue("phrase")+'", "msg_for": "0", "msg_content": "0", "msg_type": "0"}
JSONObject msgObject = new JSONObject(message.toString());
//if(msgObject.has("msg_for")){
msg_for = msgObject.getString("msg_for");
msg_content = msgObject.getString("msg_content");
msg_type = msgObject.getString("msg_type");
if (msg_for.equals("0")) {
//One-to-one message
if (msg_content.equals("0")) {
if (msg_type.equals("0")) {
local_id = msgObject.getInt("local_id");
from = msgObject.getInt("from");
to = msgObject.getInt("to");
msg = msgObject.getString("message");
//json.put("local_id", local_id);
json.put("from", from+"");
json.put("to", to+"");
json.put("message", msg);
Date now = new Date();
Long sent = new Long(now.getTime() / 1000);
json.put("sent", sent);
String key = (from + "_" + to);
String rkey = (to + "_" + from);
String val = json.toString();
jedis.rpush(key, val);
jedis.rpush(rkey, val);
String history = (jedis.lrange(key, 0, 10)).toString();
jedis.set(msg, history);
MysqlConnection mysqlcon = new MysqlConnection();
String lastmessageid = mysqlcon.send_message(message, sent);
sender_respondejson.put("remote_id", lastmessageid);
sender_respondejson.put("local_id", local_id);
sender_respondejson.put("to", to+"");
sender_respondejson.put("msg_for", msg_for);
sender_respondejson.put("msg_content", msg_content);
sender_respondejson.put("msg_type", "1");
json.put("remote_id", lastmessageid);
json.put("msg_for", msg_for);
json.put("msg_content", msg_content);
json.put("msg_type", msg_type);
jedis.publish(to + "", json.toString());
} else if (msg_type.equals("2")) {
//{"to": "1", "remote_id": "234", "msg_content": "0", "msg_for": "0", "msg_type": "2"}
from = msgObject.getInt("from");
to = msgObject.getInt("to");
remote_id = msgObject.getInt("remote_id");
json.put("remote_id", remote_id+"");
json.put("to", to+"");
json.put("msg_for", msg_for);
json.put("msg_content", msg_content);
json.put("msg_type", msg_type);
MysqlConnection mysqlcon = new MysqlConnection();
mysqlcon.update_message_status(remote_id);
sender_respondejson.put("remote_id", remote_id);
sender_respondejson.put("msg_for", msg_for);
sender_respondejson.put("msg_content", msg_content);
sender_respondejson.put("msg_type", "3");
jedis.publish(from + "", json.toString());
}
}
} else if (msg_for.equals("1")) {
//Chatroom message
if (msg_content.equals("0")) {
if (msg_type.equals("0")) {
local_id = msgObject.getInt("local_id");
from = msgObject.getInt("from");
chatroomid = msgObject.getInt("chatroomid");
to = chatroomid;
msg = msgObject.getString("message");
Date now = new Date();
Long timestamp = new Long(now.getTime() / 1000);
MysqlConnection mysqlcon = new MysqlConnection();
String chatroomusersjson = mysqlcon.send_chatroom_message(message, timestamp, msg_content);
json.put("from", from+"");
json.put("message", msg);
json.put("chatroomid", chatroomid+"");
json.put("msg_for", msg_for);
json.put("msg_content", msg_content);
json.put("msg_type", msg_type);
String key = "chatroom_" + chatroomid;
String val = json.toString();
jedis.rpush(key, val);
JSONObject chatroomusersjsonobject = new JSONObject(chatroomusersjson);
JSONArray chartoomusers = chatroomusersjsonobject.getJSONArray("chatroomusers");
String lastchatroommessageid = chatroomusersjsonobject.getString("lastchatroommessageid");
json.put("remote_id", lastchatroommessageid);
sender_respondejson.put("local_id", local_id);
sender_respondejson.put("remote_id", lastchatroommessageid);
sender_respondejson.put("msg_for", msg_for);
sender_respondejson.put("msg_content", msg_content);
sender_respondejson.put("msg_type", "1");
for (int i = 0; i < chartoomusers.length(); i++) {
to = chartoomusers.getInt(i);
jedis.publish(to + "", json.toString());
}
/*for(int i=0; i<500; i++){
jedis.publish(to + "", i+ " " + chatroomusersjson + " " +json.toString());
}*/
}
}
} else if (msg_for.equals("2")) {
//Group message
}
//}
/*String[] temptp = topic.toString().split("Name: ");
String[] temptp1 = temptp[1].split("AtmosphereResource:");
String[] temptp2 = topic.toString().split(temptp1[0]);
String newtopic = "Name: " + to + " " + temptp2[1];*/
return new Broadcastable(sender_respondejson.toString(), "", topic);
}
}
この tomcat サーバーのクラッシュを回避するには、どうすればよいか教えてください。