/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jdesktop.wonderland.modules.sqlqueryconn.server;
import com.sun.sgs.app.AppContext;
import com.sun.sgs.app.ManagedObject;
import com.sun.sgs.app.ManagedReference;
import com.sun.sgs.impl.sharedutil.LoggerWrapper;
import java.io.FileInputStream;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdesktop.wonderland.common.comms.ConnectionType;
import org.jdesktop.wonderland.common.messages.Message;
import org.jdesktop.wonderland.modules.sqlqueryconn.common.SqlQueryConnectionType;
import org.jdesktop.wonderland.modules.sqlqueryconn.common.SqlQueryMessage;
import org.jdesktop.wonderland.modules.sqlqueryconn.common.SqlResultSetMessage;
import org.jdesktop.wonderland.modules.sqlqueryconn.common.SqlResultUpdateMessage;
import org.jdesktop.wonderland.modules.sqlqueryconn.common.SqlUpdateMessage;
import org.jdesktop.wonderland.modules.sqlservice.server.BaseSqlRunnable;
import org.jdesktop.wonderland.modules.sqlservice.server.SqlCallback;
import org.jdesktop.wonderland.modules.sqlservice.server.SqlManager;
import org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl;
import org.jdesktop.wonderland.server.comms.ClientConnectionHandler;
import org.jdesktop.wonderland.server.comms.WonderlandClientID;
import org.jdesktop.wonderland.server.comms.WonderlandClientSender;
/**
*
* @author joselopezruiz
*/
public class SqlQueryClientHandler implements ClientConnectionHandler, ManagedObject, Serializable{
/** The logger for this class. */
private static final LoggerWrapper logger =
new LoggerWrapper(Logger.getLogger(SqlQueryClientHandler.class.getName()));
/** connection properties */
WonderlandClientSender snd = null;
private static ManagedReference<SqlQueryClientHandler> handleRef;
public static SqlQueryClientHandler getInstance(){
if (handleRef == null){
SqlQueryClientHandler handler = new SqlQueryClientHandler();
handleRef = AppContext.getDataManager().createReference(handler);
return handler;
}
return handleRef.get();
}
private SqlQueryClientHandler(){
super();
}
public ConnectionType getConnectionType() {
return SqlQueryConnectionType.SQLQUERY_TYPE;
}
public void registered(WonderlandClientSender sender) {
logger.getLogger().fine("SqlQuery Server manager registered");
}
public void clientConnected(WonderlandClientSender sender, WonderlandClientID clientID, Properties properties) {
//add the code when the client is connected
logger.getLogger().fine("client connected...");
}
public void messageReceived(WonderlandClientSender sender, WonderlandClientID clientID, Message message) {
//add code when message is received in the server
if(message instanceof SqlQueryMessage){
logger.getLogger().warning("SqlQueryMessage has arrived to the server");
SqlQueryMessage query = (SqlQueryMessage) message;
SqlManager manager = AppContext.getManager(SqlManager.class);
logger.getLogger().warning("Query: "+query.getQuery());
SqlQueryCallback callback = new SqlQueryCallback(sender,clientID,message);
manager.executeQuery(query.getQuery(),callback);
logger.getLogger().warning("SqlManager has returned");
ResultSet rs = callback.getResultSet();
SqlResultSetMessage sqlMessage = new SqlResultSetMessage(rs);
sqlMessage.setType(query.getType());
logger.getLogger().warning("The server is going to send message to clients");
sender.send(clientID,sqlMessage);
return;
}
if(message instanceof SqlUpdateMessage){
logger.getLogger().warning("SqlMessage has arrived to the server");
SqlUpdateMessage update = (SqlUpdateMessage) message;
SqlManager manager = AppContext.getManager(SqlManager.class);
SqlUpdateCallback callback = new SqlUpdateCallback();
manager.executeUpdate(update.getQuery(), callback);
logger.getLogger().warning("SqlManager has returned");
Integer rs = callback.getResult();
SqlResultUpdateMessage updateMessage = new SqlResultUpdateMessage(rs);
updateMessage.setType(update.getType());
logger.getLogger().warning("The server is going to send message to clients");
sender.send(clientID,updateMessage);
}
}
public void clientDisconnected(WonderlandClientSender sender, WonderlandClientID clientID) {
//add the code when the client is connected
logger.getLogger().fine("client disconnected...");