发表于: 2016-05-16 22:19:44
0 2065
【操作步骤】
1.把项目中的models、service、util接口都放在一个新的maven项目中,并打包成jar文件。
2.把生成的jar包配置到service项目和client项目中。
【知识总结】
【出现的问题(已解决)】
1.背景:我在服务端同时配置好阿里云工具类(AliyunOSSUtilImpl)和七牛云工具类(QiniuOSSUtilImpl),这两个类各自实现接口AliyunOSSUtil和QiniuOSSUtil,分别对应配置文件aliyunoss.xml和qiniuoss.xml,同时,这两个配置文件都被import到applicationContext.xml中。
问题:当我开始编译时,spring并不会配置这两个类,同时在applicationContext.xml文件中的还有云通讯服务(ccpsms.xml)和SendCloud服务(sendcloud.xml),在编译时,Spring会跳进CcpSmsUtilImpl类和SendCloudUtilImpl类,都没有问题,但是不能够跳进AliyunOSSUtilImpl类和QiniuOSSUtilImpl类。
错误提示:
2016-05-15 09:49:29(AbstractAutowireCapableBeanFactory.java:1555)[DEBUG] Invoking afterPropertiesSet() on bean with name 'AliyunOSSUtil'
2016-05-15 09:49:29(RmiServiceExporter.java:393)[INFO ] Looking for RMI registry at port '9100'
2016-05-15 09:49:29(RmiServiceExporter.java:403)[DEBUG] RMI registry access threw exception
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: 拒绝连接
但是吧,你要说我ip搞错了,没道理啊,如果ip有问题,那么CcpSmsUtilImpl类和SendCloudUtilImpl类也应该在编译时抛异常啊,可见不应该是ip的问题。
而且我还发现,在编译时,正常的CcpSmsUtilImpl类和不正常的QiniuOSSUtilImpl类的debug信息有一些不同,种种迹象表明一定是我的AliyunOSSUtilImpl类和QiniuOSSUtilImpl类配置文件写的有问题。
解决办法:真正的错误原因是在aliyunoss.xml配置文件中,我把AliyunOSSUtilImpl的id写成了“AliyunOSSUtil”,同时,我的AliyunOSSUtilImpl类所继承的接口名称是“AliyunOSSUtil”,问题就出在这里,只要把配置文件中的id改成和接口名称不一样就可以了。
感想:卧槽,还能有什么感想,这问题简直了,当我解决掉问题的那一刻,我突然感觉这个BUG有点可爱!!
2.背景:我可以通过RMI服务把studentService类中的相关方法传过去,在前台能够调用,但是,调用studentService方法需要参数student,我刚开始在前台和后台都加上了student这个model,但是在前台调用studentService方法时,传入的是前台的student对象,当执行后台方法时,没办法获得前台的student对象了,就会抛异常。
解决办法:项目中的models和接口是前后端公用的,所以可以把这些东西打成一个jar包,然后在前后端的pom.xml文件中都配置上这个jar包,这样就可以了。
【出现的问题(未解决)】
1.有一些util类里面我写了一些静态方法,但是我不知道应该怎样传递一个静态方法到客户端,因为RMI在客户端必须要有接口,但接口不能是静态的,所以没办法把静态方法传递过去,我现在的做法是,把所有的静态方法都该写成非静态的,然后配置到远程调用。
我还想过,是不是可以把这些Util类打包成jar包,然后导入到客户端,但是我觉得这样的话,客户端就太臃肿了。
我目前的解决办法是放弃了静态方法,全部使用非静态方法,也能实现功能。
2.还在修改RMI分离后的service端和client端项目,小问题一大堆!!
【疑问】
评论