日期:2014-05-20  浏览次数:20742 次

请教,webservice远程调用方法的同步解决办法~
一客户提交一远程方法,提交中,程序经过处理,修改数据库 
但是这同一客户同一时间2台电脑提交或者多个客户端提交,如何能禁止他同时提交而修改数据库错误 
而在同一时间,必须要允许其他用户提交过来请求. 


服务器程序如下:
Java code

public class BusinessService {
     //无效 public synchronized   int send(String account, String password) { 
         //无效synchronized(this){}
         public  int send(String account, String password) { 
            //里面代码省略
                int i=0;
        return i;
         
    }
        //其他方法省略
}



客户端调用webservice代码如下:
Java code

public class Call {
    public static void main(String[] args) {
        BusinessService bs = new BusinessService();
        bs.setWebService("http://127.0.0.1:8080/Server/services/BusinessService");        
        System.out.println(bs.send("test1", "1"));    
    }
}



使用加synchronized关键字的方法试过了都无效,我估计是webservice的问题,如果多个客户端电脑调用接口,无法形成同一个锁对象,就无法同步处理

连接数据库是用的jdbc,有想过connection.setAutoCommit(false)的方法,但是连接修改数据库的的是使用其他公司开发的类包,无法修改里面的代码

请高手帮忙解决,谢谢

------解决方案--------------------
Java code

public class BusinessService {
         private static Object lock = new Object();
         public  int send(String account, String password) { 
            synchronized(lock)
            {
                //里面代码省略
                  int i=0;
                return i;
            }         
    }
        //其他方法省略
}

------解决方案--------------------
加个队列是否可以呢

如果要满足你说的要求,动态维护多个队列,如果并发量很大的话,需要再想想其他方式,或者程序性能比较高才行