sql service

30 views
Skip to first unread message

pepelr

unread,
Mar 17, 2014, 9:20:17 AM3/17/14
to openwon...@googlegroups.com
Hi,
I am implementing a sql service with sql-service module. but i don't know how I can retrieve the data in database because there is three function for attack the database
1. public <T> void execut(SqlRunnable<T> runnable, SqlCallback<T> callback)
2. public void executeQuery(String query, SqlCallback<ResultSet> callback)
3 public void executeUpdate(String update, SqlCallback<Integer> callback)
How can to get ResultSet's callback object?
Thanks.

Abhishek Upadhyay

unread,
Mar 18, 2014, 1:54:40 AM3/18/14
to openwon...@googlegroups.com
Hello,

Have you read the README file from sql-service module? You can use the execute method to retrieve the data from the database. There is an example of getting timestamp as callback object from the ResultSet. The same way you can get the whole ResultSet's object.

Regards,
Abhishek Upadhyay.

pepelr

unread,
Mar 18, 2014, 3:43:22 AM3/18/14
to openwon...@googlegroups.com
I read the README file. SqlManager.execute returns void. The class that extends BaseSqlRunnable execute inside transaction. I can't to access to this class or I don't know. In the example the class that implements SqlCallBack  print the result but I don't know how to retrieve the data. Example:
static class MyCallBack implements<ResultSet>, Serializable
{

pepelr

unread,
Mar 18, 2014, 3:51:44 AM3/18/14
to openwon...@googlegroups.com
Example:
static class MyCallBack implements SqlCallBack<ResultSet>, Serializable
{
        private ResultSet result;
        public MyCallBack(......){
        }
        public void handleResult(ResultSet rs){
               ???rs;
        }
        public void handleError(Throwable t){
                 logger.log(Level.WARNING, "Error");
        }
}
Please add the code that I need for retrieve ResultSet object.
Thanks.

Abhishek Upadhyay

unread,
Mar 18, 2014, 4:11:48 AM3/18/14
to openwon...@googlegroups.com
You can create the getter method of ResultSet object in MyCallBack class as mentioned below.

static class MyCallBack implements SqlCallBack<ResultSet>, Serializable
{
        private ResultSet result;
        public MyCallBack(......){
        }
        public void handleResult(ResultSet rs){
               this.rs = rs;
               ???rs;
        }
        public void handleError(Throwable t){
                 logger.log(Level.WARNING, "Error");
        }
        public ResultSet getResultSet() {
                 return rs;
        }
}

You can call the getResultSet() method to get the result set.

Regards,
Abhishek Upadhyay.

pepelr

unread,
Mar 18, 2014, 5:56:23 AM3/18/14
to openwon...@googlegroups.com
This is my class:
static class SqlQueryCallback implements SqlCallback<ResultSet>, Serializable{
        private ResultSet resultSet;
        
        public SqlQueryCallback(){
           
        }
        
        public void handleResult(ResultSet t){
            logger.getLogger().warning("Inside SqlQueryCallback");
            if(t == null){
                logger.getLogger().warning("ResultSet is null");
            }
            logger.getLogger().warning(t.toString());
            try {
                if(t.next()){
                    logger.getLogger().warning(t.getString("groupName"));
                    
                }
            } catch (SQLException ex) {
                Logger.getLogger(SqlQueryClientHandler.class.getName()).log(Level.SEVERE, null, ex);
            }
            resultSet = t;
        }
        
        public ResultSet getResultSet(){
            return this.resultSet;
        }
        
        public void handleError(Throwable t){
            logger.getLogger().warning("Error getting ResultSet");
        }
    }

getResultSet return null.

Abhishek Upadhyay

unread,
Mar 18, 2014, 6:02:59 AM3/18/14
to openwon...@googlegroups.com
Did you get the resultset null in handleResult method also ?

pepelr

unread,
Mar 18, 2014, 6:05:55 AM3/18/14
to openwon...@googlegroups.com
In handleResult is not null.

Abhishek Upadhyay

unread,
Mar 18, 2014, 6:12:57 AM3/18/14
to openwon...@googlegroups.com
Then you are getting resultset object before it get initialized in handleResult method. You have the following options to deal with this issue.

1) Call a method from the handleResult() method in which you can pass the resultset and use it.
2) Create a variable which will be modified after resultset is initialized in handleResult() method. Then call getResultSet().
3) Create a thread which will be notified to run after resultset is initialized in handleResult() method.

pepelr

unread,
Mar 18, 2014, 7:02:59 AM3/18/14
to openwon...@googlegroups.com
I used the firs option and darkstar server displays this exception:
[java] WARNING: dropping a task that failed with a non-retryable exception: com.sun.sgs.impl.service.session.ClientSessionHandler$2[NotifyListenerMessageReceived][owner:alberto]
[java] com.sun.sgs.app.ObjectIOException: ManagedObject of type org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler was not referenced through a ManagedReference because of a reference from an inner class:
[java] -object (class "org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler$SqlQueryCallback", org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler$SqlQueryCallback@10f8c60)
[java] -field (class "org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackWrapper", name: "callback", type: "org.jdesktop.wonderland.modules.sqlservice.server.SqlCallback")
[java] -root: object (class "org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackWrapper", org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackWrapper@125c9ef)
[java] at com.sun.sgs.impl.service.data.SerialUtil.check(SerialUtil.java:348)
[java] at com.sun.sgs.impl.service.data.SerialUtil.serialize(SerialUtil.java:187)
[java] at com.sun.sgs.impl.service.data.ManagedReferenceImpl.flush(ManagedReferenceImpl.java:665)
[java] at com.sun.sgs.impl.service.data.ReferenceTable.flushModifiedObjects(ReferenceTable.java:169)
[java] at com.sun.sgs.impl.service.data.ManagedReferenceImpl.flushAll(ManagedReferenceImpl.java:620)
[java] at com.sun.sgs.impl.service.data.Context.beforeCompletion(Context.java:262)
[java] at com.sun.sgs.impl.service.transaction.TransactionImpl.notifyListenersBefore(TransactionImpl.java:514)
[java] at com.sun.sgs.impl.service.transaction.TransactionImpl.commit(TransactionImpl.java:389)
[java] at com.sun.sgs.impl.service.transaction.TransactionCoordinatorImpl$TransactionHandleImpl.commit(TransactionCoordinatorImpl.java:111)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.executeTask(TransactionSchedulerImpl.java:633)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.access$500(TransactionSchedulerImpl.java:91)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl$TaskConsumer.run(TransactionSchedulerImpl.java:523)
[java] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
[java] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
[java] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[java] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
[java] at java.lang.Thread.run(Thread.java:722)
[java] Caused by: com.sun.sgs.app.ObjectIOException: ManagedObject was not referenced through a ManagedReference: org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler@b5fe69
[java] at com.sun.sgs.impl.service.data.SerialUtil$CheckReferencesObjectOutputStream.replaceObject(SerialUtil.java:306)
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1140)
[java] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
[java] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
[java] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
[java] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
[java] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
[java] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
[java] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
[java] at com.sun.sgs.impl.service.data.SerialUtil.serialize(SerialUtil.java:183)
[java] ... 16 more
[java] 

Abhishek Upadhyay

unread,
Mar 18, 2014, 7:21:27 AM3/18/14
to openwon...@googlegroups.com
It seems like you are passing the parent class object to inner class. In this case you have to use the object in inner class as a managed reference. The following steps might help you.

First create a managed reference.

ManagedReference<CellMO> parentRef = AppContext.getDataManager().createReference(parent);

In inner class where ever you are using the object, you can get the object using following method.

parentRef.get()

pepelr

unread,
Mar 18, 2014, 7:47:39 AM3/18/14
to openwon...@googlegroups.com
Now darkstar displays this:
mar 18, 2014 12:39:16 PM com.sun.sgs.impl.kernel.TransactionSchedulerImpl shouldRetry

[java] WARNING: dropping a task that failed with a non-retryable exception: com.sun.sgs.impl.service.session.ClientSessionHandler$2[NotifyListenerMessageReceived][owner:alberto]
[java] com.sun.sgs.app.ObjectIOException: ManagedObject of type org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler was not referenced through a ManagedReference because of a reference from an inner class:
[java] -object (class "org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler$SqlQueryCallback", org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler$SqlQueryCallback@78857e)

[java] -field (class "org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackWrapper", name: "callback", type: "org.jdesktop.wonderland.modules.sqlservice.server.SqlCallback")
[java] -root: object (class "org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackWrapper", org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackWrapper@baabfd)

[java] at com.sun.sgs.impl.service.data.SerialUtil.check(SerialUtil.java:348)
[java] at com.sun.sgs.impl.service.data.SerialUtil.serialize(SerialUtil.java:187)
[java] at com.sun.sgs.impl.service.data.ManagedReferenceImpl.flush(ManagedReferenceImpl.java:665)
[java] at com.sun.sgs.impl.service.data.ReferenceTable.flushModifiedObjects(ReferenceTable.java:169)
[java] at com.sun.sgs.impl.service.data.ManagedReferenceImpl.flushAll(ManagedReferenceImpl.java:620)
[java] at com.sun.sgs.impl.service.data.Context.beforeCompletion(Context.java:262)
[java] at com.sun.sgs.impl.service.transaction.TransactionImpl.notifyListenersBefore(TransactionImpl.java:514)
[java] at com.sun.sgs.impl.service.transaction.TransactionImpl.commit(TransactionImpl.java:389)
[java] at com.sun.sgs.impl.service.transaction.TransactionCoordinatorImpl$TransactionHandleImpl.commit(TransactionCoordinatorImpl.java:111)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.executeTask(TransactionSchedulerImpl.java:633)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.access$500(TransactionSchedulerImpl.java:91)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl$TaskConsumer.run(TransactionSchedulerImpl.java:523)
[java] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
[java] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
[java] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[java] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
[java] at java.lang.Thread.run(Thread.java:722)
[java] Caused by: com.sun.sgs.app.ObjectIOException: ManagedObject was not referenced through a ManagedReference: org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler@95dd66

[java] at com.sun.sgs.impl.service.data.SerialUtil$CheckReferencesObjectOutputStream.replaceObject(SerialUtil.java:306)
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1140)
[java] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
[java] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
[java] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
[java] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
[java] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
[java] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
[java] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
[java] at com.sun.sgs.impl.service.data.SerialUtil.serialize(SerialUtil.java:183)
[java] ... 16 more

Abhishek Upadhyay

unread,
Mar 18, 2014, 7:52:05 AM3/18/14
to openwon...@googlegroups.com
This is same as the previous exception. If you can paste here your server side code, it will be helpful to identify the issue.

pepelr

unread,
Mar 18, 2014, 9:51:09 AM3/18/14
to openwon...@googlegroups.com
Now I geting this error. Now I am sending the message inside handleResult of callback. When I use WonderlandClientSender for send the message to the client appear this error.
[java] SEVERE: null
[java] java.io.NotSerializableException: com.mysql.jdbc.JDBC4ResultSet
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)

[java] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
[java] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
[java] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
[java] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
[java] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
[java] at org.jdesktop.wonderland.common.messages.MessagePacker.serializationPack(MessagePacker.java:122)
[java] at org.jdesktop.wonderland.common.messages.MessagePacker.pack(MessagePacker.java:88)
[java] at org.jdesktop.wonderland.server.comms.WonderlandSessionListener.serializeMessage(WonderlandSessionListener.java:691)
[java] at org.jdesktop.wonderland.server.comms.WonderlandSessionListener.access$400(WonderlandSessionListener.java:88)
[java] at org.jdesktop.wonderland.server.comms.WonderlandSessionListener$WonderlandClientSenderImpl.send(WonderlandSessionListener.java:826)
[java] at org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler$SqlQueryCallback.handleResult(SqlQueryClientHandler.java:151)
[java] at org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler$SqlQueryCallback.handleResult(SqlQueryClientHandler.java:123)
[java] at org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackWrapper.handleResult(SqlServiceImpl.java:287)
[java] at org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackKernelRunnable.run(SqlServiceImpl.java:264)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.executeTask(TransactionSchedulerImpl.java:619)

[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.access$500(TransactionSchedulerImpl.java:91)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl$TaskConsumer.run(TransactionSchedulerImpl.java:523)
[java] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
[java] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
[java] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[java] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
[java] at java.lang.Thread.run(Thread.java:722)
[java] 
[java] mar 18, 2014 2:34:13 PM com.sun.sgs.impl.kernel.TransactionSchedulerImpl shouldRetry
[java] WARNING: dropping a task that failed with a non-retryable exception: org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl.SqlCallbackKernelRunnable[owner:alberto]
[java] java.lang.IllegalArgumentException: Error serializing org.jdesktop.wonderland.modules.sqlqueryconn.common.SqlResultSetMessage@16a18a1
[java] at org.jdesktop.wonderland.server.comms.WonderlandSessionListener.serializeMessage(WonderlandSessionListener.java:693)
[java] at org.jdesktop.wonderland.server.comms.WonderlandSessionListener.access$400(WonderlandSessionListener.java:88)
[java] at org.jdesktop.wonderland.server.comms.WonderlandSessionListener$WonderlandClientSenderImpl.send(WonderlandSessionListener.java:826)
[java] at org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler$SqlQueryCallback.handleResult(SqlQueryClientHandler.java:151)
[java] at org.jdesktop.wonderland.modules.sqlqueryconn.server.SqlQueryClientHandler$SqlQueryCallback.handleResult(SqlQueryClientHandler.java:123)
[java] at org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackWrapper.handleResult(SqlServiceImpl.java:287)
[java] at org.jdesktop.wonderland.modules.sqlservice.server.SqlServiceImpl$SqlCallbackKernelRunnable.run(SqlServiceImpl.java:264)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.executeTask(TransactionSchedulerImpl.java:619)

[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.access$500(TransactionSchedulerImpl.java:91)
[java] at com.sun.sgs.impl.kernel.TransactionSchedulerImpl$TaskConsumer.run(TransactionSchedulerImpl.java:523)
[java] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
[java] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
[java] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[java] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
[java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
[java] at java.lang.Thread.run(Thread.java:722)
[java] Caused by: org.jdesktop.wonderland.common.messages.MessagePacker$PackerException
[java] at org.jdesktop.wonderland.common.messages.MessagePacker.serializationPack(MessagePacker.java:126)
[java] at org.jdesktop.wonderland.common.messages.MessagePacker.pack(MessagePacker.java:88)
[java] at org.jdesktop.wonderland.server.comms.WonderlandSessionListener.serializeMessage(WonderlandSessionListener.java:691)
[java] ... 15 more

This is my server:
/*
 * 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...");
    }
    
    
    
    static class SqlQueryCallback implements SqlCallback<ResultSet>, Serializable{
        private ResultSet resultSet;
        private WonderlandClientSender sender;
        private WonderlandClientID clientID;
        private Message message;
        public SqlQueryCallback(WonderlandClientSender sender, WonderlandClientID clientID, Message message){
           this.clientID = clientID;
           this.sender = sender;
           this.message = message;
        }
        
        public void handleResult(ResultSet t){
            logger.getLogger().warning("Inside SqlQueryCallback");
            if(t == null){
                logger.getLogger().warning("ResultSet is null");
            }
            logger.getLogger().warning(t.toString());
            try {
                if(t.next()){
                    logger.getLogger().warning(t.getString("groupName"));
                    
                }
            } catch (SQLException ex) {
                Logger.getLogger(SqlQueryClientHandler.class.getName()).log(Level.SEVERE, null, ex);
            }
            SqlQueryMessage query = (SqlQueryMessage) message;
            SqlResultSetMessage sqlMessage = new SqlResultSetMessage(t);
            sqlMessage.setType(query.getType());
            sender.send(clientID,sqlMessage);
            resultSet = t;
        }
        
        public ResultSet getResultSet(){
            return this.resultSet;
        }
        
        public void handleError(Throwable t){
            logger.getLogger().warning("Error getting ResultSet");
        }
    }
    
    static class SqlUpdateCallback implements SqlCallback<Integer>, Serializable{
        private Integer result;
        
        public SqlUpdateCallback(){
           
        }
        
        public void handleResult(Integer t){
            result = t;
        }
        
        public Integer getResult(){
            return this.result;
        }
        
        public void handleError(Throwable t){
            logger.getLogger().warning("Error getting Integer result");

Abhishek Upadhyay

unread,
Mar 18, 2014, 10:08:07 AM3/18/14
to openwon...@googlegroups.com
The ResultSet is not serializable. So it can't be packed inside CellMessage. You have to create your own serializable class and set the resultset data in it. Then pass that class in CellMessage. This should work.
Now darkstar displays this:
El martes, 18 de marzo de 2014 11:12:57 UTC+1, Abhishek Upadhyay escribió:<blockquote class="gmail_quote" style="margin:0;margin-left:
...
Reply all
Reply to author
Forward
0 new messages