javaRMI写法记录
服务器
必须针对端口开启注册服务器LocateRegistry.createRegistry(port),上述方法会返回一个注册服务器registry
1. 开启rmi的方法可以使用全局的方法 Naming.rebind("rmi://127.0.0.1:2222/testClass", testClass); 会自动向端口为2222的注册服务器注册服务,所以执行之前必须开启注册服务器 2. 也可以调用注册服务器自己的绑定服务的方法 registry.rebind("testClass", testClass); 3. 也可以新建命名空间,默认是绑定到1099端口号的,之前开启端口1099的注册服务器 Context nameContext = new InitialContext(); nameContext.bind("rmi:testClass", testClass); 此方法没有找到改变注册到不同的端口的方法
上述三种方法同样会影响此端口的注册服务器,调用注册服务器registry的list方法,可以查看此端口上的服务名字。
客户端
1. ITestClass testClass = (ITestClass)
Naming.lookup("rmi://127.0.0.1:2222/testClass"); 2. 新建命名空间 Context namecContext = new InitialContext(); ITestClass testClass = (ITestClass) namecContext.lookup("rmi://127.0.0.1:2222/testClass");
当然推荐第一种写法。官方提供的静态方法。并不知道第二种方法存在的意义。
测试中的错误记录
描述:报错ClassNotFound
原因:客户端和服务器的两个Interface的包的路径不一致,导致在类型强制转换的时候报错ClassNotFound。
修改:在客户端配置构建路径,添加服务器。在实战中,应该将接口单独写成一个项目,客户端和服务器同时引用此项目,发布的时候将接口打包成jar包,放进客户端和服务器中。