首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

webservice一个有关问题的解决方案

2012-12-17 
webservice一个问题的解决方案,求助目前有A系统的客户端AC和服务端AS,B系统AC所需的展现数据由AS通过Webse

webservice一个问题的解决方案,求助
目前有A系统的客户端AC和服务端AS,B系统
AC所需的展现数据由AS通过Webservice向B发送请求的返回提供,而B在接到AS的请求时恰好无数据,可能30秒内才会有数据

Webservice服务由spring ws搭建
现在解决方案是
B接到AS的请求,返回给AS一个任务号taskID放入内存,30秒内B有数据时通过Webservice向AS发送数据(其中包括taskID),
AS把数据和taskID放入map再放入内存,等待AC再次请求并返回。

还有没有其它的解决办法呢,具体怎样实现?
[解决办法]
请求B没有返回数据  就是没数据  假如B是连的数据库 
你可以监听30秒 就是判断数据是不是null  不行继续让他请求
30秒后如果没有就不在请求这个service

[解决办法]
这个解决方案的程序如下,不过有问题


class ... {
...
static id = "";
static HashMap<String, String> map = new HashMap<String, String>();
Object obj = new Object();

//先执行
//此方法为本系统客户端的请求
public String getResult() {
//id的值通过webservice从外部系统获取
id = xxx.getId();

String data = "";
int time = 0;
synchronized (obj) {
while (time++ < 6) { //等待30秒,也就是等map里有值
try {
obj.wait(5 * 1000);  //每5秒查看一次data是否有值
data = map.get(id);
if(data != null && data != "") //若data有值则退出,方法返回
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return data;
}

//后执行
//此方法为外部系统通过webservie发布数据过来
public Element receiveData(String data) {
map.put(id, data);
return null;
}
}


就是webservice请求异步应答
程序的大体意思就是这样了
但问题是
getResult方法可以获得id值
而receiveData方法中id为空

什么原因啊,线程同步不是太明白,要怎么做才正确呢,请大家帮忙。。。。

热点排行