解决hessian远程调用连接超时的问题
目前几套系统中主要使用的hessian进行远程调用webservice服务的有hessian的HessianProxyFactory(com.caucho.hessian.client.HessianProxyFactory)和spring的HessianProxyFactoryBean(org.springframework.remoting.caucho.HessianProxyFactoryBean).
protected URLConnection openConnection(URL url) throws IOException { URLConnection conn = url.openConnection(); conn.setDoOutput(true); if (_readTimeout > 0) { try { conn.setReadTimeout((int) _readTimeout); } catch (Throwable e) { } } conn.setRequestProperty("Content-Type","x-application/hessian"); if (_basicAuth != null) conn.setRequestProperty("Authorization",_basicAuth); else if (_user != null && _password != null) { _basicAuth = "Basic " + base64(_user + ":" + _password); conn.setRequestProperty("Authorization",_basicAuth); } return conn; }
public class MyHessianProxyFactory extends HessianProxyFactory { private int connectTimeOut = 10000; private int readTimeOut = 10000; public int getConnectTimeOut() { return connectTimeOut; } public void setConnectTimeOut(int connectTimeOut) { this.connectTimeOut = connectTimeOut; } public int getReadTimeOut() { return readTimeOut; } public void setReadTimeOut(int readTimeOut) { this.readTimeOut = readTimeOut; } protected URLConnection openConnection(URL url) throws IOException { URLConnection conn = url.openConnection(); conn.setDoOutput(true); if (this.connectTimeOut > 0) { conn.setConnectTimeout(this.connectTimeOut); } if (this.readTimeOut > 0) { conn.setReadTimeout(this.readTimeOut); } conn.setRequestProperty("Content-Type","x-application/hessian"); if (_basicAuth != null) conn.setRequestProperty("Authorization",_basicAuth); } return conn; } }
public class HessianProxyFactoryBean extends HessianClientInterceptor implements FactoryBean { private Object serviceProxy; public void afterPropertiesSet() { super.afterPropertiesSet(); this.serviceProxy = ProxyFactory.getProxy(getServiceInterface(),this); } public Object getObject() { return this.serviceProxy; } public Class getObjectType() { return getServiceInterface(); } public boolean isSingleton() { return true; } }
public class MyHessianProxyFactoryBean extends HessianProxyFactoryBean { private MyHessianProxyFactory proxyFactory = new MyHessianProxyFactory(); private int readTimeOut = 10000; private int connectTimeOut = 10000; public int getReadTimeOut() { return readTimeOut; } public void setReadTimeOut(int readTimeOut) { this.readTimeOut = readTimeOut; } public int getConnectTimeOut() { return connectTimeOut; } public void setConnectTimeOut(int connectTimeOut) { this.connectTimeOut = connectTimeOut; } public void afterPropertiesSet() { proxyFactory.setReadTimeout(readTimeOut); proxyFactory.setConnectTimeOut(connectTimeOut); setProxyFactory(proxyFactory); super.afterPropertiesSet(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |