发表于: 2018-04-05 23:43:03

1 632


今天完成的事情:

继续学习RMI以及Spring中整合RMI。
首先是关于序列化的问题。
因为远程通信必然会涉及到将引用类型转化成基本数据类型,这也就必然涉及到序列化以及反序列化。
一开始在学习的时候,只知道序列化引用类型可以进行网络传输,但是并不知道序列化那个数字的意义。
直到看到这句话:
private static final long serialVersionUID = 42L;
如果没有该字段,则默认该类会随机生成一个整数,且在客户端和服务器生成的整数不相同,则会抛出异常。
也就是说,serialVersionUID字段,实际上是用户自行书写一个任意的Long类型的数,然后序列化接口会根据该数字对程序进行序列化,然后进行反序列化成为原本的类。
而数字不同的时候,两个类序列出来的数据就会存在差异。
大致学习了一下打包,其实很简单。
首先随便编写一个实体类。
然后使用插件打包。
打好包以后,就在命令行用maven进行导入。
命令大致如下:
mvn install:install-file -DgroupId=对应依赖的groupid -DartifactId=对应依赖artifactId 
-Dversion=对应依赖版本 -Dpackaging=jar -Dfile=对应jar包的路径+jar包名+后缀名。
项目中进行引入如下,可以对应上方的命令:
结果如下:
尝试着运行:
然后尝试着做了一下RMI

一开始看了好久都搞不明白怎么把spring和RMI组合起来。


明天计划的事情:


遇到的问题:

1.报错:

从普通RMI改编时要注意需要将实现类的extends UnicastRemoteObject去掉,否则会报错[org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'refreshService' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.rmi.server.ExportException: object already exported] 

因为UnicastRemoteObject的作用就是生成stub object。

去掉服务层接口继承的那个类,运行成功。

2.报错:

原来异常信息是说,定义的接口里面的方法有问题,我仔细看了一下方法,方法好像少了点什么,原来使用远程方法调用都必须抛出一个RemoteException,因为 网络出现类似机器故障或者网络阻塞等问题时会产生RemoteException。在接口定义的方法里throws RemoteException,问题就解决了。


3.报错:(no security manager: RMI class loader disabled)

看了好久,问题在于自己把服务器端的StudentsService接口与客户端的StudentsService在配置文件里写的不是同一个路径。

更换为同一个路径,完美运行。

收获:

进度:
任务开始时间:2018年04月03日
预计demo时间:2018年04月07日



返回列表 返回列表
评论

    分享到