今天遇到一个问题,webservice client获取server信息没有任何反应,现在希望如果这个等待时间(超时)过长,那么中断这个request。
方法一:weblogic设置方法
(javax.xml.rpc.Stub)PortObject._setProperty("weblogic.wsee.transport.connection.timeout", 5);
(javax.xml.rpc.Stub)PortObject._setProperty("weblogic.wsee.transport.read.timeout", 5);
资源地址:http://edocs.weblogicfans.net/wls/docs92/webserv/client.html
方法二:下面是自己最初用thread手动写的例子
public class Test1 {
public static void main(String[] args) {
new Test1().test("para1");
}
/**
* 主线程中,在启动A线程之前先启动B线程来控制超时时间
* 由于A,B和主线程平级运行,所以在主线程里需要等待A,B线程isNotAlive的时候再来判定变量isResponse,进而控制是否超时
* @param para
* @return
*/
public synchronized String test(String para) {
String result = null;
B b = new B();
A a = A.getIntance();
a.setPara(para);
b.start();
a.start();
while(true) {
if (A.isResponse && !a.isAlive() && !b.isAlive()) {
result = a.getResult();
System.out.println(a.getResult());break;
}
if (!A.isResponse && !a.isAlive() && !b.isAlive()) {
System.out.println("time out");break;
}
}
System.out.println(a.getPara());
a.clear();
System.out.println(a.getPara());
return result;
}
}
class A extends Thread{
private static A a = null;
private A(){}
public static A getIntance() {
if (a == null) {
a = new A();
}
return a;
}
public String result;
public String para;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getPara() {
return para;
}
public void setPara(String para) {
this.para = para;
}
public void run() {
result = getSIDetails();
}
public static boolean isResponse = false;
public String getSIDetails(){
//获取server的information,模拟无反应
while (true) {}
//isResponse = true;
//return result;
}
public void clear() {
a = null;
result = null;
para = null;
isResponse = false;
}
}
class B extends Thread {
public void run() {
if (!A.isResponse) {
try {
sleep(10*1000);//设置超时时间,等待10s后B线程舒醒,继续执行后面的程序
if (A.getIntance().isAlive()) {
A.getIntance().stop();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}