Hessian远程方法调用

<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;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值