- 浏览: 227738 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
itlang01:
推荐一款动态添加日期的插件https://github.com ...
利用mysql触发器记录数据的插入和更新时间 -
daydayupzzc:
好,不错,清楚
Spring MVC的拦截器 -
zi_wu_xian:
不管用POI还是JXL都是第三的操作excel的组件,都有破坏 ...
java操作excel——jxl和poi比较 -
小头猎豹:
支持无私的分享,很有用,十分感谢!!
Maven之使用SVN版本号 -
superich2008:
写的很详细,正在找这个资料,多谢博主分享。
Maven之使用SVN版本号
Java远程方法调用(Java Remote Method Invocation, RMI)支持一个JVM中的对象调用另一个JVM对象的方法,而这两个JVM可以分布在不同的主机上,为Java的分布式应用提供了支持。
1.首先,定义一个远程调用接口,该接口必须实现java.rmi.Remote接口,接口的方法声明要抛出java.rmi.RemoteException
import java.rmi.Remote; import java.rmi.RemoteException; public interface HelloRemote extends Remote { String sayHello(UserRemote user)throws RemoteException; }
import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 3553604278956856032L; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
2.实现接口并继承UnicastRemoteObject
import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class HelloRemoteImpl extends UnicastRemoteObject implements HelloRemote { private static final long serialVersionUID = -6209023821784985143L; protected HelloRemoteImpl() throws RemoteException { super(); } @Override public String sayHello(User user) throws RemoteException { return "Hello, " + user.getName(); } }
3.注册该服务并启动
import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; public class RemoteServer { public static void main(String[] args) { try { // System.setProperty("java.rmi.server.hostname", "10.0.0.249"); LocateRegistry.createRegistry(5590); HelloRemoteImpl server = new HelloRemoteImpl(); Naming.rebind("//10.0.0.249:5590/HelloRemote", server); System.out.println("server start……"); } catch (RemoteException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } }
5.调用RMI服务
package com.lanhuidong.client; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; public class RMIClient { public static void main(String[] args) { String url = "//10.0.0.249:5590/HelloRemote"; try { HelloRemote helloRemote = (HelloRemote) Naming.lookup(url); User user = new User(); user.setName("RMI"); System.out.println(helloRemote.sayHello(user)); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (NotBoundException e) { e.printStackTrace(); } } }
在实际项目中,可能项目使用了Spring等框架,下面是spring的rmi服务
1定义接口(不用继承任何其它接口)
public interface UserRmiService { public String sayHello(User user); }
import java.io.Serializable; public class User implements Serializable{ private static final long serialVersionUID = 8550373205815267923L; private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
2.实现该接口
public class UserRmiServiceImpl implements UserRmiService { @Override public String sayHello(User user) { return "Hello, " + user.getUserName(); } }
3.在applicationContext.xml中配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="userRmiServiceImpl" class="com.darcy.rmi.service.impl.UserRmiServiceImpl"/> <bean id="userRmi" class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="service" ref="userRmiServiceImpl" /> <property name="serviceName" value="userRmi" /> <property name="serviceInterface" value="com.darcy.rmi.service.UserRmiService" /> <property name="registryPort" value="9999" /> </bean> </beans>
4.启动服务
import org.springframework.context.support.ClassPathXmlApplicationContext; public class ServerTest { public static void main(String[] args) { System.setProperty("java.rmi.hostname", "10.0.0.249"); new ClassPathXmlApplicationContext("applicationContext-Server.xml"); System.out.println("server start......"); } }
5.调用服务
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ClientTest { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml"); UserRmiService ums = (UserRmiService) ctx.getBean("rmiProxy"); User user = new User(); user.setUserName("RMI"); System.out.println(ums.sayHello(user)); } }
applicationContext-client.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="rmiProxy" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="rmi://127.0.0.1:9999/userRmi"/> <property name="ServiceInterface" value="com.darcy.rmi.service.UserRmiService" /> </bean> </beans>
发表评论
-
Java日志系统-logback配置
2013-10-30 19:52 4783logback配置文件:logback.xml < ... -
关于ThreadPoolExecutor的理解
2013-09-03 16:07 894做Java也有4年了,原来对于ThreadPoolExec ... -
Garbage-First Collector
2013-01-30 21:51 1217从JDK7 update4开始完全支持G1垃圾收集器,这是一 ... -
JDK自带工具
2013-01-30 10:21 01.Java Virtual Machine Process ... -
JAVA定时器
2013-01-20 23:14 5533最近有同事提出在项目中使用JDK自带的定时器,之前的任务调度 ... -
开发环境配置
2012-09-11 11:50 53将自己的开发环境安装及配置过程写成文件,供自己或他人参考。 -
异常没有打印栈信息
2012-07-04 21:36 1625最近上的项目bug很多,服务器经常爆java.lang.Nul ... -
java操作excel——jxl和poi比较
2012-06-06 20:48 20620最近需要需要项目开发需要从excel导入数据到数据库,于是就开 ... -
SecurityManager使用
2011-06-15 14:49 2068因为只允许指定IP的服务器访问RMI,因此研究了Securit ... -
关于String连接(+运算符)
2011-03-08 20:54 26531.代码 package lan.jdk.study; ... -
HotSpot VM 内存管理
2011-02-22 21:18 12041.HotSpot VM的内存有三个g ... -
The Java HotSpot VM's GC
2011-02-18 15:04 1108GC的主要特点: 一、精 ... -
Java HotSpot
2011-02-17 17:16 0JDK中包含两种风格的虚拟机:Client VM and Se ... -
maven在eclipse中报错问题解决
2010-07-17 10:03 1123Eclipse is running in a J ... -
Java中的for和for-each效率问题
2010-06-22 11:59 1322今天看到Effective Java中说foreach比for ... -
Integer之==
2010-05-12 20:41 1043package lan; public class T ...
相关推荐
在提供的压缩包文件中,"三种方式(原始方式_spring_jndi)实现java远程调用(rmi)"包含了相关的示例代码,帮助开发者理解并实践这三种RMI实现方法。在MyEclipse或其他Java开发环境中导入这些代码,可以进行调试和...
Java 远程方法调用(Remote Method Invocation,RMI)是一种在分布式环境中调用对象方法的技术,它使得Java应用程序能够透明地调用运行在不同 JVM 上的远程对象的方法。RMI 包含了一系列的参数,这些参数对于优化...
Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...
### Java远程方法调用(RMI):深入解析与实践 #### 一、RMI概念与原理 Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算模型,允许一个Java虚拟机(JVM)上的对象通过网络...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛这些方法是在本地对象上执行一样。这个技术极大地简化了构建分布式应用的...
首先,我们需要定义一个实现了`java.rmi.Remote`接口的类,比如`MyRemoteInterface.java`,并在这个接口中声明所有需要远程调用的方法。这些方法必须抛出`java.rmi.RemoteException`,因为网络通信可能会出现异常。...
Eclipse 插件RMI Plug-in for Eclipse 2.0 博文链接:https://robinjie.iteye.com/blog/34606
在Windows环境下,同样需要JRE,运行客户端程序来执行远程调用。 注意,RMI的安全性、异常处理和网络通信细节也是开发者需要考虑的问题。例如,需要处理可能的`RemoteException`,以及配置JVM的安全策略文件以允许...
2. **类型安全**:由于使用Java语言,RMI提供了类型安全的远程调用。 3. **高性能**:RMI可以利用Java的自动内存管理和垃圾收集机制,减少资源消耗。 ### RMI的劣势 1. **平台依赖**:虽然Java有“一次编写,到处...
1. **创建远程接口**:定义一个继承自Remote的接口,声明需要远程调用的方法。 2. **实现远程接口**:编写一个类实现这个接口,提供具体的方法实现。 3. **注册远程对象**:在服务器端创建远程对象实例,然后将其...
JAVA远程调用RMI与应用 一、RMI(Remote Method Invocation)概念解析 RMI,即远程方法调用,是Java平台提供的分布式计算模型,它允许Java对象跨网络进行方法调用,如同本地调用一样。RMI的实现基于Java的面向对象...
接下来,`getMemberAccountCount`方法实现了远程调用逻辑,通过`this.ref.invoke`方法调用了远程方法,并处理了可能抛出的异常。 #### 2. 客户端代码分析 客户端通过`Naming.lookup`方法获取远程服务的引用,然后...
1. **远程接口**:定义了可以被远程调用的方法,这个接口需要继承自`java.rmi.Remote`。 2. **远程实现**:实现了远程接口的具体逻辑,它通常包含实际业务功能的代码。 3. **Stub**:客户端调用的代理对象,它负责将...
Java远程方法调用(Remote Method Invocation,简称RMI)组件是一种关键的技术,它允许Java应用程序在不同的网络节点之间透明地调用对象的方法,仿佛这些对象都在本地进程中一样。这种技术在构建分布式系统、大型...
1. 远程接口(Remote Interface):定义了可以被远程调用的方法,这些方法必须声明抛出`java.rmi.RemoteException`。接口需要使用`@Remote`注解标记。 2. 远程实现类(Remote Implementation):实现了远程接口,并...