发表于: 2018-02-06 01:23:14

1 823


今天完成的事情:

1  Java 1.4原生rmi demo

   

黄色是service端需要的文件,红色是client端需的文件,也就是说在client端需要用Person接口,这里直接生成了PersonStub对象。

2  Java 1.5之后 代理对象

黄色是service端,红色是client端需要的文件,client端同样需要demo的接口来生成代理对象。

3  spring rmi demo

同样的黄色是service端需要接口和实现类,然后注册rmi服务,spring直接注册到ioc容器中

红色是client同样需要接口,来生成代理对象。

4  分离原项目

service端:也就是service层、Dao层、bean层、utils

web(client)端:也就是controller层、jsp页面(view)utils

具体代码不贴了

贴下注册服务的bean

要对应起来。

成功运行

5  随机访问两台service的问题

service端好解决:配两个不同端口就可以,client(web)端是个问题

看师兄的日报,看到两种解决方法:

在一个client中的spring配置文件中,一次性添加两个端口的service,也就是spring容器加载时,按上面三个rmi service的例子,直接注册6service的代理对象,然后在controllerAutoAire两次,调用时,用try catch

2种:写两个 spring 配置文件,每次都重新读取容器

http://www.jnshu.com/daily/49447?dailyType=others&total=84&page=1&uid=14237&sort=0&orderBy=3

 

这两种方法根本不能用到生产环境中,个人用,实现也不太优雅

延伸:

不引入其他包,写一个拦截器或aop,如果超过规定时间某个service没有响应,认为service挂掉,然后使用spring容器的refresh方法,重新加载。

使用ZooKeeper来注册服务

使用dubbo框架

 

我也没想到什么好招,关键的一点是这个servicespring容器初始化的时候生成的代理对象,后面抛出错误,如何捕获,然后重新加载?

 

明天计划的事情:

完成任务8,开始任务9

遇到的问题:

序列化失败

 

rmi接口之间传递的数据需要序列话之后才能传递:

这里调用了 /user/login/status controller

userServiceImpl是用spring rmi生成的代理对象,所以真正执行时,要把user对象的数据传递给RMI service,所以,这个user类也要可以序列化。

 

不要在service层和controller层之间传递HttpServletRequest HttpServletResponse ,因为这些对象也没有impl序列化接口,无法序列化,会传递失败。

而且从分层的思想来说,也不要传递RequestResponse

 

收获:

不要来回传递RequestResponse 把层次搞复杂



返回列表 返回列表
评论

    分享到