/**********************************************************\ | | | hprose | | | | Official WebSite: http://www.hprose.com/ | | http://www.hprose.org/ | | | \**********************************************************/ /**********************************************************\ * * * HproseProxyFactoryBean.java * * * * HproseProxyFactoryBean for Java Spring Framework. * * * * LastModified: Mar 13, 2016 * * Author: Ma Bingyao <andot@hprose.com> * * * \**********************************************************/ package org.springframework.remoting.hprose; import hprose.client.HproseClient; import hprose.client.HproseHttpClient; import hprose.client.HproseTcpClient; import hprose.common.FilterHandler; import hprose.common.HproseFilter; import hprose.common.InvokeHandler; import hprose.io.HproseMode; import org.springframework.beans.factory.FactoryBean; import org.springframework.remoting.support.UrlBasedRemoteAccessor; public class HproseProxyFactoryBean extends UrlBasedRemoteAccessor implements FactoryBean { private HproseClient client = null; private Exception exception = null; private boolean keepAlive = true; private int keepAliveTimeout = 300; private int timeout = -1; private String proxyHost = null; private int proxyPort = 80; private String proxyUser = null; private String proxyPass = null; private HproseMode mode = HproseMode.MemberMode; private HproseFilter filter = null; private InvokeHandler invokeHandler = null; private FilterHandler beforeFilterHandler = null; private FilterHandler afterFilterHandler = null; @Override public void afterPropertiesSet() { super.afterPropertiesSet(); try { client = HproseClient.create(getServiceUrl(), mode); } catch (Exception ex) { exception = ex; } if (client instanceof HproseHttpClient) { HproseHttpClient httpClient = (HproseHttpClient)client; httpClient.setKeepAlive(keepAlive); httpClient.setKeepAliveTimeout(keepAliveTimeout); httpClient.setTimeout(timeout); httpClient.setProxyHost(proxyHost); httpClient.setProxyPort(proxyPort); httpClient.setProxyUser(proxyUser); httpClient.setProxyPass(proxyPass); httpClient.use(invokeHandler); httpClient.beforeFilter.use(beforeFilterHandler); httpClient.afterFilter.use(afterFilterHandler); } if (client instanceof HproseTcpClient) { HproseTcpClient tcpClient = (HproseTcpClient)client; tcpClient.setTimeout(timeout); } client.setFilter(filter); } // for HproseHttpClient public void setKeepAlive(boolean value) { keepAlive = value; } public void setKeepAliveTimeout(int value) { keepAliveTimeout = value; } public void setProxyHost(String value) { proxyHost = value; } public void setProxyPort(int value) { proxyPort = value; } public void setProxyUser(String value) { proxyUser = value; } public void setProxyPass(String value) { proxyPass = value; } // for HproseClient public void setTimeout(int value) { timeout = value; } public void setMode(HproseMode value) { mode = value; } public void setFilter(HproseFilter filter) { this.filter = filter; } public void setInvokeHandler(InvokeHandler value) { invokeHandler = value; } public void setBeforeFilterHandler(FilterHandler value) { beforeFilterHandler = value; } public void setAfterFilterHandler(FilterHandler value) { afterFilterHandler = value; } @Override @SuppressWarnings("unchecked") public Object getObject() throws Exception { if (exception != null) { throw exception; } return client.useService(getServiceInterface()); } @Override public Class getObjectType() { return getServiceInterface(); } @Override public boolean isSingleton() { return true; } }