一,服务器端
1.真正的业务interface
package cn.com.legendapl.spring.service;
public interface OperationService {
public int add(int a, int b);
public int sub(int a, int b);
public int mul(int a, int b);
public int div(int a, int b);
}
2.RMI interface
需要特别注意的是RMI interface 与真正的业务interface所定义的方法是一样的。
但是每个方法都应声明抛出异常(java.rmi.RemoteException)。
package cn.com.legendapl.spring.rmi.service;
import java.rmi.RemoteException;
public interface OperationServiceRmiInterface extends java.rmi.Remote{
public int add(int a, int b) throws RemoteException;
public int sub(int a, int b) throws RemoteException;
public int mul(int a, int b) throws RemoteException;
public int div(int a, int b) throws RemoteException;
}
3.ServiceImpl
业务实现必须同时实现两个接口。
package cn.com.legendapl.spring.service;
import cn.com.legendapl.spring.rmi.service.OperationServiceRmiInterface;
public class OperationServiceImpl
implements OperationService, OperationServiceRmiInterface {
public int add(int a, int b) {
return a + b;
}
public int div(int a, int b) {
return a / b;
}
public int mul(int a, int b) {
return a * b;
}
public int sub(int a, int b) {
return a - b;
}
}
4.spring 配置文件
<beans>
<bean id="service" class="cn.com.legendapl.spring.service.OperationServiceImpl" />
<bean id="rmiService" class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="service" ref="service" />
<property name="serviceInterface"
<!-- 这个地方的接口是实际的业务接口,不是那个继承自Remote接口的接口 -->
value="cn.com.legendapl.spring.service.OperationService" />
<property name="serviceName" value="operation" />
<property name="registryPort" value="8899" />
</bean>
<beans>
5.启动服务代码
这里也有地方不甚了解,spring怎么帮我把当前线程阻塞的?下列代码中的日志是有效的,
而记录完成后,进程并不会结束。
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Start {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("applicationContext.xml");
LOG.debug("start...");
}
}
二,客户端
1.配置文件
<bean id="rmi" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceInterface" value="cn.com.legendapl.spring.service.OperationService" />
<property name="serviceUrl" value="rmi://localhost:8899/operation" />
</bean>
2.使用远程模块
当然了,客户端工程里也要有业务接口的定义才行的。
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.com.legendapl.spring.service.OperationService;
public class TestCase {
@Test
public void case1() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
OperationService os = (OperationService) context.getBean("rmi");
System.out.println(os.mul(12, 3));
}
}
分享到:
相关推荐
本教程将介绍一个基础的RMI HelloWorld应用,以及如何在Spring环境下配置RMI。 首先,我们要创建一个Server端项目。在Eclipse中,创建一个新的项目,并定义一个远程接口`UserManagerInterface`,它需要继承`Remote`...
Spring支持RMI、HTTP、Hessian和 Burlap等协议的远程服务调用,使分布式系统间的通信变得更加简单。 **7. Spring MVC** Spring MVC是Spring提供的Web层框架,用于构建RESTful风格的Web应用。它简化了MVC模式的实现...
- **远程调用**:Spring支持多种远程调用技术,如RMI、EJB、JAX-RPC等。 #### 七、Web层设计 - **设计目标**:Spring的Web层设计目标是提供一个灵活且可扩展的MVC架构。 - **集成Struts**:Spring可以很容易地与...
### SpringCloud微服务基础知识解析 #### 一、项目架构演进概述 在现代软件开发过程中,随着业务复杂度和技术需求的不断提升,项目架构也经历了从单点系统到分布式架构的演变。下面我们将深入探讨其中的关键知识点...
【Spring框架简介】 Spring是一个轻量级的企业级应用开发框架,由Rod Johnson创建并在2003年首次发布。它的核心目标是使开发过程变得简单,通过POJO(Plain Old Java Object)编程模型来促进良好的编程实践。Spring...
在IT行业中,Hessian是一种高效的远程方法调用(Remote Method Invocation, RMI)协议,它由Caucho Technology开发。Hessian提供了一种二进制的序列化格式,使得网络通信更加高效,减少了数据传输量。它支持Java、...
Java提供了RMI(远程方法调用)、JMS(Java消息服务)以及近年来流行的微服务框架如Dubbo、Spring Cloud等,用于构建分布式应用。理解这些技术的基本原理和使用方式,有助于开发者构建可扩展、高可用的系统。 代码...
**J2EE精华学习笔记** J2EE,全称为Java 2 Platform, Enterprise Edition,是Java平台上用于构建企业级分布式应用程序的框架。本学习笔记旨在深入解析J2EE的核心概念和技术,帮助读者全面掌握J2EE开发的关键知识。 ...
Spring Boot和Spring Cloud为Java微服务提供了强大的支持,包括服务发现、配置中心、熔断器等。 9. 容器化与编排 Docker容器化技术简化了应用的部署和管理,而Kubernetes(K8s)作为容器编排工具,可以管理和调度...
从给定的文件信息来看,标题和描述都指向了“Java分布式学习笔记01分布式Java应用”,这显然是关于Java在分布式环境下的应用和技术的学习资料。虽然提供的部分内容由于格式问题难以直接解析,但我们可以根据标题、...
**J2EE笔记要点** 1. **MVC模式**:在J2EE开发中,Model-View-Controller(模型-视图-控制器)模式广泛应用于Web层,帮助分离业务逻辑、视图展示和用户交互。 2. **EJB3.0**:EJB3.0引入了注解,大大减少了XML配置...
【EJB学习笔记2】 EJB,全称Enterprise JavaBeans,是Java EE(现在被称为Jakarta EE)平台的一部分,主要用于构建可复用的、安全的、可伸缩的服务器端应用程序。EJB标准定义了一组规范,使得开发者可以创建分布式...
原生Java、Fastjson、Jackson、Hessian2、XML反序列化漏洞利用和Spring、Dubbo、Shiro、CAS、Tomcat、RMI、Nexus等框架\中间件\功能的exploitsJava Security Manager绕过、Dubbo-Hessian2安全等实践代码。...
fastjson漏洞分析 jackson漏洞分析 rmi、ldap spring漏洞分析目前所有文章分析都在博客 后期会转到项目下,所有的分析文章写完之后统一转入。项目优势:1. 每一个漏洞环境都支持单独运行,方便分析2. 漏洞都有分析...
3. **RMI(Remote Method Invocation)**:Java RMI允许对象通过网络调用另一个对象的方法,如同调用本地方法一样。 4. **JMS(Java Message Service)**:Java消息服务提供了一种与语言无关的API,用于在分布式环境...
6. **协议与序列化**:Dubbo支持多种通信协议,如Dubbo、HTTP、RMI等,以及各种序列化方式,如Hessian、FastJSON等。这部分内容将帮你理解不同协议和序列化方式的特点和适用场景。 7. **服务治理**:包括服务的版本...
"最新dubbo视频教程.txt"可能是课程大纲或者笔记,包含了每个章节的重点和案例,方便学习者按照步骤进行实践。通过这个文本文件,你可以更清晰地了解整个教程的结构和内容。 总的来说,这个教程不仅涵盖了Dubbo的...