<bean id="bookService"
class="com.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"></property>
</bean>
<bean name="/BookService" factory-bean="remoteFactory" factory-method="getExporter">
<property name="service" ref="bookService"></property>
<property name="serviceInterface" value="com.service.interf.IBookService" />
</bean>
<bean id="bookService" factory-bean="remoteFactory" factory-method="getAccessor">
<property name="serviceUrl" value="${remote.service.address}/BookService" />
<property name="serviceInterface" value="com.service.interf.IBookService" />
</bean>
<!-- remote factory -->
<bean id="remoteFactory"
class="com.RemoteFactory"
factory-method="getInstance">
<constructor-arg value="1"></constructor-arg>
</bean>
public class RemoteFactory {
private RemoteFactory() {
}
/**
* 远程代理集合
*/
protected static Map<Integer, Class<? extends UrlBasedRemoteAccessor>> remoteProxyMap = new HashMap<Integer, Class<? extends UrlBasedRemoteAccessor>>();
/**
* 远程导出集合
*/
protected static Map<Integer, Class<? extends RemoteExporter>> remoteExportMap = new HashMap<Integer, Class<? extends RemoteExporter>>();
static {
remoteProxyMap.put(1, HessianProxyFactoryBean.class);
remoteProxyMap.put(2, BurlapProxyFactoryBean.class);
remoteProxyMap.put(3, HttpInvokerProxyFactoryBean.class);
remoteProxyMap.put(4, RmiProxyFactoryBean.class);
remoteExportMap.put(1, HessianServiceExporter.class);
remoteExportMap.put(2, BurlapServiceExporter.class);
remoteExportMap.put(3, HttpInvokerServiceExporter.class);
remoteExportMap.put(4, RmiServiceExporter.class);
}
/**
* 返回默认实例(Hessian)
*
* @return
*/
public static RemoteFactory getInstance() {
return new RemoteFactory();
}
/**
* 根据类型返回实例 1: Hessian 2: Burlap 3: HttpInvoker 4: Rmi
*
* @param type
* @return
*/
public static RemoteFactory getInstance(int type) {
RemoteFactory factory = new RemoteFactory();
factory.setType(type);
return factory;
}
private int type = 1;
/**
* @param type
*/
public void setType(int type) {
this.type = type;
}
/**
* 返回远程代理
*
* @return
*/
public UrlBasedRemoteAccessor getAccessor() {
try {
Class<? extends UrlBasedRemoteAccessor> cls = remoteProxyMap
.get(this.type);
if (cls == null) {
throw new NullPointerException("can not find type " + this.type
+ " RemoteAccessor.");
}
UrlBasedRemoteAccessor accessor = cls.newInstance();
if (accessor instanceof HessianProxyFactoryBean) {
//nginx 报411错误
HessianProxyFactoryBean hessianAccessor = (HessianProxyFactoryBean)accessor;
hessianAccessor.setChunkedPost(false);
}
return accessor;
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return null;
}
/**
* 返回远程导入
*
* @return
*/
public RemoteExporter getExporter() {
try {
Class<? extends RemoteExporter> cls = remoteExportMap
.get(this.type);
if (cls == null) {
throw new NullPointerException("can not find type " + this.type
+ " RemoteExporter.");
}
return cls.newInstance();
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return null;
}
}
class="com.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"></property>
</bean>
<bean name="/BookService" factory-bean="remoteFactory" factory-method="getExporter">
<property name="service" ref="bookService"></property>
<property name="serviceInterface" value="com.service.interf.IBookService" />
</bean>
<bean id="bookService" factory-bean="remoteFactory" factory-method="getAccessor">
<property name="serviceUrl" value="${remote.service.address}/BookService" />
<property name="serviceInterface" value="com.service.interf.IBookService" />
</bean>
<!-- remote factory -->
<bean id="remoteFactory"
class="com.RemoteFactory"
factory-method="getInstance">
<constructor-arg value="1"></constructor-arg>
</bean>
public class RemoteFactory {
private RemoteFactory() {
}
/**
* 远程代理集合
*/
protected static Map<Integer, Class<? extends UrlBasedRemoteAccessor>> remoteProxyMap = new HashMap<Integer, Class<? extends UrlBasedRemoteAccessor>>();
/**
* 远程导出集合
*/
protected static Map<Integer, Class<? extends RemoteExporter>> remoteExportMap = new HashMap<Integer, Class<? extends RemoteExporter>>();
static {
remoteProxyMap.put(1, HessianProxyFactoryBean.class);
remoteProxyMap.put(2, BurlapProxyFactoryBean.class);
remoteProxyMap.put(3, HttpInvokerProxyFactoryBean.class);
remoteProxyMap.put(4, RmiProxyFactoryBean.class);
remoteExportMap.put(1, HessianServiceExporter.class);
remoteExportMap.put(2, BurlapServiceExporter.class);
remoteExportMap.put(3, HttpInvokerServiceExporter.class);
remoteExportMap.put(4, RmiServiceExporter.class);
}
/**
* 返回默认实例(Hessian)
*
* @return
*/
public static RemoteFactory getInstance() {
return new RemoteFactory();
}
/**
* 根据类型返回实例 1: Hessian 2: Burlap 3: HttpInvoker 4: Rmi
*
* @param type
* @return
*/
public static RemoteFactory getInstance(int type) {
RemoteFactory factory = new RemoteFactory();
factory.setType(type);
return factory;
}
private int type = 1;
/**
* @param type
*/
public void setType(int type) {
this.type = type;
}
/**
* 返回远程代理
*
* @return
*/
public UrlBasedRemoteAccessor getAccessor() {
try {
Class<? extends UrlBasedRemoteAccessor> cls = remoteProxyMap
.get(this.type);
if (cls == null) {
throw new NullPointerException("can not find type " + this.type
+ " RemoteAccessor.");
}
UrlBasedRemoteAccessor accessor = cls.newInstance();
if (accessor instanceof HessianProxyFactoryBean) {
//nginx 报411错误
HessianProxyFactoryBean hessianAccessor = (HessianProxyFactoryBean)accessor;
hessianAccessor.setChunkedPost(false);
}
return accessor;
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return null;
}
/**
* 返回远程导入
*
* @return
*/
public RemoteExporter getExporter() {
try {
Class<? extends RemoteExporter> cls = remoteExportMap
.get(this.type);
if (cls == null) {
throw new NullPointerException("can not find type " + this.type
+ " RemoteExporter.");
}
return cls.newInstance();
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return null;
}
}