发表于: 2017-06-15 13:06:06
1 1273
今天完成的事情:
1、部署了好几个RMI service。也算是完成了 “部署两台Service,在WEB中随机访问任意一台Service。”
2、学习Tuscany。搭建demo。
3、本地重装 memcache,版本为1.1.4。
重装以后,从java客户端存入的值、用可视化工具读取时不会乱码了。
4、学习一道算法题。一个二维数组从左到右从上到下都是递增,从中查找某个数。
明天计划的事情:
1、任务9。
遇到的问题:
1、第三方API工具类 如何发布成RMI service?由于第三方API 的账密等参数、都是通过spring配置文件读取的。如下图,是任务7中自己写的一个封装了容联短信API的工具类。
<!--封装第三方接口的工具类-->
<!--容联短信-->
<bean id="ccPclient" class="utils.CCPclient">
<property name="serverIP" value="${serverIP}" />
<property name="serverPort" value="${serverPort}" />
<property name="accountSid" value="${accountSid}" />
<property name="accountToken" value="${accountToken}" />
<property name="appId" value="${ccp_appId}" />
</bean>
其中,有5个property,所以并不能直接配置成 RMIService Exporter 。
解决办法:
那么我就新建一个名为 SMSService 的 Interface:
public interface SMSService {
HashMap<String, Object> sendSMS(String phoneNum, String templateId, String[] info);
}
再来个实现类,实现类中,持有一个CCPclient,也就是图一里配置在spring文件里的bean。
现在可以在服务端 ( springRMI-service 项目) 的 server.xml 中配置它了。
<bean id="smsService" class="service.impl.SMSServiceImpl" />
<bean id="serviceExport" class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="service" ref="smsService" />
<property name="serviceName" value="SMSService" />
<property name="serviceInterface" value="com.jn.service.SMSService" />
<property name="registryPort" value="7777" />
</bean>
-------------------------------------------------------------------------------------------------------------------
客户端的xml中也配置一下:
<bean id="smsService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost:7777/SMSService"/>
<property name="serviceInterface" value="com.jn.service.SMSService"/>
</bean>
客户端试着调用一下,
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("rmi-client.xml");
String[] beanDefinitionNames = context.getBeanDefinitionNames();
for (String s : beanDefinitionNames) {
System.out.println("已经实例化的bean:" + s);
}
// 测试发短信 smsService
SMSService smsService = (SMSService) context.getBean("smsService");
HashMap<String, Object> result = smsService.sendSMS("17721420363", "1", new String[]{"7529", "5"});
System.out.println(result);
运行结果:一看返回信息就知道成功啦。
手机也收到短信了。
收获:
1、对spring配置文件特别是实例化bean的部分有了一定的认识。
2、了解了萝卜多项目的启动方式。service模块(服务端)不需要通过容器启动,
在main方法中调用server.start()方法就可以了。
评论