发表于: 2017-06-13 16:23:59

2 1174


今天完成的事情:

1、将服务端系统中的Service中拆分出来,变成一个RMI的Service。想拆几个拆几个。

过程是这样的:

起先,我挑了一个任务7学员报名系统中的service、打算将它们发布成 RmiServiceExporter 类,但是在客户端调用时会100%报错。报错就是以下这种:

我就是按照各种教程的步骤来的。 (各种教程的步骤无非是那么几步。英文的springRMI文档我也看了,spring集成 rmi 远程调用是看到了,但看到hessian部分我就撤了)。

教程上说明的步骤:

<-------服务端开始--------->

第一步:写个配置文件,将项目中的某个service发布成 RmiServiceExporter 。

之后将这个配置文件import 入 applicationContext.xml 中。

service是对真实类的引用。

serviceName 是用在 

rmi://localhost:7777/rmiTestService

中端口号斜杠后面那个。

serviceInterface 是指定想被远程调用的那个接口类的路径。

registryPort 是服务注册端口。默认为1099。

<bean id="studentService" class="com.jn.service.impl.StudentServiceImpl" />
<bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">

   <property name="service" ref="studentService" />
   <property name="serviceName" value="studentService" />
   <property name="serviceInterface" value="com.jn.service.StudentService" />
   <property name="registryPort" value="7777" />

</bean>


第二步:

服务端写一个main方法,然后在这个main方法中调用函数:

new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
System.out.println("RMI服务伴随Spring的启动而启动了.....");


<-------服务端 结束-------->

<-------客户端 开始-------->

第三步:首先我在客户端的pom文件中添加了对服务端的依赖。

(如果没有maven。那就将服务器端的接口和接口实现类打成jar文件(或者直接将服务器端接口和接口实现类直接拷到应用中),  添加到应用中,然后添加相关Spring的jar。)

将服务器端的接口和接口实现类打成

jar

文件

(

或者直接将服务器端接口和接口实现类直

接拷到应用中

), 

添加到应用中

,

然后添加相关

Spring

jar )

在客户端的spring配置文件中加上远程调用的那个服务。

<bean id="studentService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceUrl" value="rmi://localhost:7777/studentService"/>
   <property name="serviceInterface" value="com.jn.service.StudentService"/>
</bean>

第四步:同样写个main方法:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("rmi-client.xml");

RmiService service = (RmiService) context.getBean("studentService");

第五步:启动main方法,查看报错

<-------客户端结束-------->

一次一次的尝试之后的报错让我很崩溃。改注册端口号,localhost改127.0.0.0改本地ip都试过。

然后我在服务端新写了个service,就是下面这样。形式和上一个任务中的service一样,有个@resource的mapper类,有个crud之一的方法。

@Service
public class RmiServiceImpl implements RmiService {

@Resource
   private StudentMapper studentMapper;

   @Override
   public String doWork() {
return "这条信息是由服务器返回的。";
   }

@Override
   public int add(int a, int b) {
return a+b;
   }

@Override
   public Student selectById(Long id) {
return studentMapper.selectByPrimaryKey(id);
   }
}

然后在客户端调用。

很兴奋。

于是我又回去调用服务端其他的service。依旧报错。

我真是奇了怪了,服务端的那些service是怎么样的呢?

不也是实现类带上@service注解,有一个@autowired的mapper类。方法里是操作数据的。

为什么会失败呢?


明天计划的事情:

1、自己另外建一个task8项目。

把所有的dao、models、util都放到service端,把jsp页面和controller类放到client端,把util类中所有要用到的方法都做好接口放到client端。

遇到的问题:

1、从一接触任务8的这个远程方法调用的框架开始,思维就凌乱了。
收获:



返回列表 返回列表
评论

    分享到