发表于: 2016-08-31 13:50:37

4 2667


【完成任务】

1.      Java RMI (Remote Method Invocation)

见《Java Network Programming》第18章。

链接:http://pan.baidu.com/s/1cBnmNk

先写个RMI HelloWorld感受一下。

(1)     新建一个继承remote的接口

(2)     再来一个继承UnicastRemoteObject的实现类

(3)     然后将实现类的的实例注册到RMI的注册表中

(4)     最后从注册表中拿到该实例。

(5)     启动测试

a) 先运行HelloServer将实例注册到RMI注册表中

b) 然后运行HelloClient拿到实例并运行其方法

(6)     这个过程就像去拿一个代理对象一样,并不复杂。

 

2.      Srping RMI

感谢曹小瞒同学的链接:http://blog.csdn.net/shirdrn/article/details/6359254

Spring 封装了RMI让其的用法更为简便。

(1)     依然新建一个接口,不过不用继承Remote

(2)     然后写个它的实现类,也不用继承UnicastRemoteObject

(3)     再配置一个注册表的信息(server.xml

(4)     然后写一个启动server的方法

创建一个加载server.xmlspring容器就算是启动server了。

(5)    Server端写完了再来写Client端,先得写一个从注册表中拿注册实例的配置文件client.xml

(6)     再写一个main方法拿到实例

(7)     测试

a) 先运行RmiServer

b) 再运行RmiClient

结果如下:

(8)   spring整合了JavaRMI,写接口的时候不需要继承Remote,其实现类不用继承UnicastRemoteObjectSpring大法好。

 

3.      SpringMVC + Mybatis +RMI

(1)     首先新建聚合的maven工程。

Packagingpom

(2)     新建 coreservice controller 子项目

新建时Maven Module

然后Parent Project 选择SpringRMI-Test

(3)     建完过后的工程目录

(4)     我自己写的demo

Springrmi-studentpom文不需要引jar

(5)     首先写coremodel service

                                      

                                  Student.class得继承Serializable

                

                                   StudentService接口:

                              

(6)     然后写service

因为coreservice不再是同一个工程,所以servicepom文件得引入core

studentDao, StudentServiceImpl, jdbc.properties, log4j.properties spring-mybatis的配置和之前的spring-mybatis一样,不再赘述。

不同是的spring配置文件里得加入server的配置。

然后在StartServer里启动server

(7)     最后controller

         按照springmvc的流程走就行了。

         先配置web.xml

再配置springrmi-client.xml

Controllerspringmvc-mybatis的写法一毛一样。

写完了事。

(8)     测试

a)      首先把springrmi-student进行 clean install 打包(目前我也不知道为什么),然后对springrmi-student-core进行clean install打包。因为发布springrmi-student-controller的时候需要springrmi-student-corejar包。

b)      先启动service层的StartServer

c)      再用tomcat启动controller

d)      访问

                  成功。

 


能看到这的观众老爷一定是真爱粉。常言道,没demo说个xx

好哒,RMI+SpirngRMI+SpringMVC-Mybatis-RMI链接如下:

http://pan.baidu.com/s/1o8rRT0I


【遇到问题】

1.      Springrmi-student-service spring配置文件写成了两个,spring-mybatis.xml(已改成spring-mybatis-server.xml)server.xml

然后加载了两个spring容器,从第二个容器中拿到的studentServicestudentDao没有注入进去。一直报空指针。

这是因为两个容器分开加载,第二个容器并没有加载spring-mybatis的配置,也没有扫描studentDao。从中拿到的studentService自然就没有studentDao的注入。(晓进进,你害得我一顿好找啊)。

只要将两个xml并成一个,然后从spring容器中过去studentServiceOK了。

2.      Springrmi-student-controllerweb.xml中的Spring监听器没有打开

这个完全是自己挖坑自己跳。

对,监听器一直是被我注释的。

因为我一直以为我配置了contextConfigLocation监听器会默认打开。我擦嘞。

额,因为我之前的springmvc-mybatis就是注释的。

然后启动就一直报创建创建studentController bean 失败,autowird失败。因为我压根就没有加载spring-client.xmlspring容器。(妈个鸡,找了一下午,知道真相的我眼泪掉下来)。

我很好奇我为啥会有配置了contextConfigLocation后会自动启动spring监听器这种想法。

然后我看了看spirngmvc-mybatisweb.xml

这个项目不需要配置spring监听器就能启动。

看了一会,发现了。

我擦,DispatcherServlet加载的contextConfigLocationspring容器加载的contextConfigLocation是同一个文件。这个时候不管有没有spring容器的contextConfigLocation工程都能正常访问。

         妈个鸡,一直以为是springmvc给自动起了个监听器,再次暴露自己无知的嘴脸。

3.      手贱的我在tomcatwebapp下放了一个没有spring监听器的springrmi-student-controller-0.0.1 -SNAPSHOT.war

然后不管我怎么改controller里面的东西,报的错都是

我擦勒,当时感觉闯到鬼老哟,controller里面的东西都删完了还报这么个错。

嗯,又找了一下午。

感谢培宇大师兄拯救了我,大师兄最帅。(两次问大师兄的问题都是改这个工程的代码,然后看另一个工程报的错,蠢得发指)。

【目前收获】

1.      bug的时候实在找不到了,去吃个饭,遛个弯,看个女团,说不定灵感就来了。

2.      弱智的bug是居多滴。

【后续安排】

1.      任务9我来了。



返回列表 返回列表
评论

    分享到