- 浏览: 431655 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
xiang37:
wwwang89 写道这位大哥,你好!很感谢你分享的文章,写的 ...
iPhone调用java的webService -
wwwang89:
这位大哥,你好!很感谢你分享的文章,写的很好,适合我们新手学习 ...
iPhone调用java的webService -
QQ371496669:
能否具体讲解一下为什么StringBuilder的长度会不一样 ...
StringBuilder与StringBuffer相比为什么不是线程安全的 -
Sky_257:
请问 能用abap查询sap服务器的配置、会话、队列、spo ...
使用JCo远程调用SAP系统函数 -
xiang37:
vebasan 写道此句代码的单词有错(标红色的):prop. ...
最简单的EJB示例
RMI是Remote Method Innovation的缩写,表示远程方法引进。
为不同机器之间提供服务。
第一步:定义接口。这个接口既是自己实现需要,也是远程需要的。两者定义应该是一样的。
package com.xiva.rmi; import java.rmi.Remote; import java.rmi.RemoteException; /** * @Description 接口必须扩展Remote接口,其方法必须throws RemoteException * @author Administrator * */ public interface RoomService extends Remote{ public String getRoomName(Long roomId) throws RemoteException; ; }
第二步:实现接口。实现接口并写一个main方法启动服务。
package com.xiva.rmi; import java.rmi.RMISecurityManager; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; /** * @Description 需要extends UnicastRemoteObject类 * @author Administrator * */ public class RoomServiceImpl extends UnicastRemoteObject implements RoomService { protected RoomServiceImpl() throws RemoteException { super(); } /** * */ private static final long serialVersionUID = 1L; @Override public String getRoomName(Long roomId) throws RemoteException{ if(Long.valueOf(12l).equals(roomId)){ return "废之间"; } return "天之间"; } public static void main(String[] args) { // System.setProperty("java.security.policy","*.policy");//设置安全策略 System.setSecurityManager(new RMISecurityManager()); try { Registry reg = LocateRegistry.createRegistry(2011); //注册服务端口 RoomServiceImpl pt = new RoomServiceImpl(); reg.rebind( "RoomService" , pt); //绑定服务名称 System.out.println("Ready to do time"); } catch(Exception e) { e.printStackTrace(); } } }
写好上面程序,就可以使用java来运行这个类了。
第三步,编写客户端程序。
package com.xiva.rmi.client; import java.rmi.Naming; import java.rmi.RMISecurityManager; import com.xiva.rmi.RoomService; public class CallRoom { public static void main(String[] args) { System.setSecurityManager( new RMISecurityManager()); try { RoomService t = (RoomService)Naming.lookup( "rmi://192.168.0.16:2011/RoomService"); System.out.println(t.getRoomName(11l)); } catch(Exception e) { e.printStackTrace(); } } }
当然写完这些程序,在一般情况下是可以运行的。比如我的机器就可以正常运行。
但是有时我们是还需要指定keystore的,主要与环境有关系。有的计算机某些端口访问是需要提供验证,一般部署环境都是这样。
相关安全策略的设置:
D:\Program Files\Java\jdk1.6.0_29\jre\lib\security\java.policy
// Standard extensions get all permissions by default grant codeBase "file:${{java.ext.dirs}}/*" { permission java.security.AllPermission; }; // default permissions granted to all domains grant { // Allows any thread to stop itself using the java.lang.Thread.stop() // method that takes no argument. // Note that this permission is granted by default only to remain // backwards compatible. // It is strongly recommended that you either remove this permission // from this policy file or further restrict it to code sources // that you specify, because Thread.stop() is potentially unsafe. // See the API specification of java.lang.Thread.stop() for more // information.stopThread // permission java.lang.RuntimePermission "accessClassInPackage.sun.jdbc.odbc"; permission java.lang.RuntimePermission "stopThread"; permission java.lang.RuntimePermission "modifyThreadGroup"; permission java.lang.RuntimePermission "modifyThread"; permission java.net.SocketPermission "*", "connect,accept,resolve"; // allows anyone to listen on un-privileged ports permission java.net.SocketPermission "localhost:1024-", "listen"; // "standard" properies that can be read by anyone permission java.util.PropertyPermission "java.version", "read"; permission java.util.PropertyPermission "java.vendor", "read"; permission java.util.PropertyPermission "java.vendor.url", "read"; permission java.util.PropertyPermission "java.class.version", "read"; permission java.util.PropertyPermission "os.name", "read"; permission java.util.PropertyPermission "os.version", "read"; permission java.util.PropertyPermission "os.arch", "read"; permission java.util.PropertyPermission "file.separator", "read"; permission java.util.PropertyPermission "path.separator", "read"; permission java.util.PropertyPermission "line.separator", "read"; permission java.util.PropertyPermission "java.specification.version", "read"; permission java.util.PropertyPermission "java.specification.vendor", "read"; permission java.util.PropertyPermission "java.specification.name", "read"; permission java.util.PropertyPermission "java.vm.specification.version", "read"; permission java.util.PropertyPermission "java.vm.specification.vendor", "read"; permission java.util.PropertyPermission "java.vm.specification.name", "read"; permission java.util.PropertyPermission "java.vm.version", "read"; permission java.util.PropertyPermission "java.vm.vendor", "read"; permission java.util.PropertyPermission "java.vm.name", "read"; permission java.util.PropertyPermission "file.encoding", "read"; };
设置为上面安全策略。
createRegister后,可以使用RMIGetRegister 来获取registry,bind新的服务名
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.xiva; import java.rmi.AlreadyBoundException; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; /** * * @author Administrator */ public class RMIGetRegister { private static Registry registry = null; private static String bindName = "RoomService"; public static void main(String[] args) throws InterruptedException, RemoteException, AlreadyBoundException { // 取得RMIRegistry try { registry = LocateRegistry.getRegistry(2012); } catch (RemoteException ex) { System.out.println(ex.getMessage()); } // 解除Registry绑定 try { System.out.println("trying to unbind rmi registry"); registry.unbind(bindName); Thread.sleep(3000); //wait 3 seconds. } catch (RemoteException ex) { ex.printStackTrace(); } catch (NotBoundException ex) { //nothing to do } RoomService o = new RemoteServiceImpl(); //RemoteMethod stub= (RemoteMethod) UnicastRemoteObject.exportObject(o, 0); registry.bind("xiva", o); System.out.println("bindName"); } }
注意UnicastRemoteObject.exportObject(o, 0)其中的o是没有extends UnicastRemoteObject的类。
发表评论
-
Tesseract-OCR的简单使用与训练
2018-06-06 19:45 2800参照: https://www.cnblogs.com/c ... -
JNA与动态链接库交互之使用结构体与结构体数组
2016-10-13 17:54 2238Java调用C/C++动态链接库函数,当传 ... -
ElasticSearch1.7.3 报错Root type mapping not empty after parsing!
2015-12-16 23:02 1376熟悉Lucene也比较久了 ... -
TopN问题的算法实现
2015-05-11 00:15 1550TopN指的是从已经存在的数组中,找出最大(或最小)的前n ... -
NIO之Socket通信
2015-04-11 15:18 0Server端 package com.xiva.nio; ... -
阻塞与非阻塞通讯
2015-03-14 13:18 771在一个阻塞C/S系统中,服务器要为每一个客户连接开启一个线程阻 ... -
[续]Java调用DLL视频解帧,并保存第一关键帧到JPG格式文件
2014-05-15 00:59 1454本篇文章的前一篇是采用FFmpeg解帧,并保持到JPG格式 ... -
Jconsole连接之JVM设置
2014-05-13 03:06 877Jconsole连接之JVM设置 -Xmx256m ... -
Lucene4.x SmartChineseAnalyzer添加扩展词
2013-11-30 23:21 1668之前有一点研究,现在奉上比较完整的代码,可根据项目 ... -
Java ORC
2013-05-22 14:09 0http://blog.csdn.net/lonelyli ... -
OSCache的对action响应的配置
2013-05-08 23:13 1055对action响应的配置其实也不是很特别,这里主要提到的是 ... -
Java PING一个IP地址 isReachable
2013-05-08 17:38 1967Java1.5可以替换很古老Runtime的PING方法 ... -
Java后台返回easyUI的comboxTree数据
2013-05-04 10:08 1716easyUI的实现,其中包括一次加载完毕和动态树: ... -
利用JDBC生成数据库表对应的Class
2013-05-01 19:26 1191简单的实现了Hibernate工具自动生成Class文件的 ... -
HttpClient4示例
2013-04-30 01:27 2153之前做过一个3版本HttpClient简单示例的示例,最 ... -
http client
2013-04-24 17:57 0import java.io.IOException; i ... -
Java6新特性之动态生成Class,并加载
2013-04-24 23:56 1072利用JavaCompiler对文件进行动态编译,JDK1. ... -
利用JNA对文件进行监听之观察者模式
2013-04-25 00:01 1516JNA为第三方的JNI的一个实现包。里面实现了很多wind ... -
Lucene4全文索引示例
2013-04-30 02:20 1569Lucene4.2.1示例,之前也做过3.6的示例。3.6 ... -
改进后的归并排序,对大文件归并排序
2013-04-25 00:05 1148针对大文件,一次无法全部读入内存,可以采用将内容保存到文件 ...
相关推荐
这个简单的示例展示了如何创建一个基本的Java RMI应用程序,包括远程接口、服务器端和客户端。 首先,我们来看远程接口。在这个例子中,`HelloIn`接口定义了一个方法`sayHello()`,该方法抛出`RemoteException`。这...
这在多层架构的应用中尤其有用,比如服务器端处理业务逻辑,客户端通过RMI调用这些逻辑。 首先,我们需要创建一个RMI接口。在这个例子中,我们有一个名为`RMIInterface.java`的文件。这个接口定义了可以在远程对象...
### RMI最简单的一个实例解析 #### 一、RMI简介与应用场景 远程方法调用 (RMI) 是 Java 平台提供的一种机制,允许在一台机器上的虚拟机中的对象调用另一台机器上虚拟机中的对象的方法。RMI 结合了面向对象技术与...
7. **异常处理**:由于网络通信的不稳定性,`RemoteException`是Java RMI中最常见的异常类型,通常需要在所有远程方法中捕获它。 在"RMITest"这个示例中,可能包含以下部分: - **远程接口类(如:IRemoteService....
4. **客户机(Client)**:使用RMI调用远程对象的程序,通过注册表获取远程对象的引用,然后就可以像调用本地对象一样调用远程对象的方法。 5. **服务器(Server)**:运行远程对象的程序,负责创建远程对象并将其...
这里给出一个简单的RMI示例: 1. **定义远程接口**: ```java public interface HelloIFC extends Remote { String sayHello() throws RemoteException; } ``` 2. **实现远程接口**: ```java public class...
### Java RMI基础知识与示例解析 ...通过以上详细分析,我们可以清楚地了解到如何使用Java RMI来实现简单的分布式应用。尽管RMI在现代Java开发中的使用频率不高,但了解其基本原理和技术细节仍然具有一定的价值。
**远程方法调用(Remote Method Invocation,RMI)是Java平台提供的一种分布式计算技术,它允许Java对象在...RMI文档(如RMI.docx文件)通常会包含详细的API参考、示例代码和最佳实践,帮助开发者更好地理解和使用RMI。
文件"ex4_5"和"ex6"可能是实验代码或练习,可能包含了实现RMI程序和多线程Web服务器的示例。通过分析和运行这些代码,你可以更好地理解这两个主题的实际应用。对于初学者来说,动手实践是掌握知识的重要步骤,它可以...
本项目"rmi服务端与客户端小程序"提供了简单易懂的示例,帮助初学者快速理解和上手RMI。 1. **RMI基本概念** - **远程对象**:在远程JVM上运行的对象,可以通过RMI接口被本地对象调用。 - **接口**:定义了远程...
Spring RMI(Remote Method Invocation)简单应用主要涉及的是在Java平台上使用Spring框架来实现远程方法调用的技术。RMI是Java提供的一种分布式计算能力,它允许一个Java对象调用网络另一端的Java对象的方法,从而...
RMI(Remote Method Invocation)是Java平台提供的一种远程方法调用技术,它允许在不同JVM(Java虚拟机)上的对象互相通信,就如同本地调用一样简单。RMI的设计理念在于为分布式计算环境提供一个统一的编程模型,使...
具体到实验文件"rmi",这可能是RMI相关代码或者教程的集合,可能包含了服务器端和客户端的示例代码,以及如何在Java中设置和运行RMI服务的说明。"cs"可能代表"Client-Server",也就是客户端-服务器相关的文件,可能...
### Java分布式之RMI简介...通过上述步骤,我们不仅可以实现简单的RMI服务,还可以构建更为复杂的分布式应用程序。RMI提供了一种强大的工具集,可以帮助开发者轻松地构建分布式系统,同时确保了系统的稳定性和安全性。
其次,URL/RMI编程示例代码涉及到网络资源的访问和远程方法调用。URL(统一资源定位符)是访问互联网上的资源的地址,Java的java.net.URL类提供了打开、读取和连接URL的方法。RMI(Remote Method Invocation)允许...
在这个实例中,我们将详细探讨如何通过四个步骤来设置和使用一个简单的 Java RMI 应用。 1. 创建远程接口及声明远程方法 首先,我们需要定义一个远程接口 `HelloInterface`,它继承自 `java.rmi.Remote`。这个接口...
这个"Rmi.zip_The Beginners"压缩包显然是为初学者准备的一个简单示例,旨在帮助他们理解并开始使用Java RMI。 1. **HelloServer.java**: 这个文件代表服务器端程序。在RMI中,服务器端通常会实现一个或多个远程...
### JDK5新版RMI编程指南 #### RMI简介与发展历程 RMI(Remote Method Invocation),即远程...随着这些新特性的应用,RMI有望成为Java平台上性能最好且最简单的远程访问技术之一,值得开发者深入了解和广泛使用。
7. **异常处理**:由于网络通信的不稳定性,`RemoteException`是RMI中最常见的异常,需要在客户端代码中妥善处理。 RMI规范说明中的多个文件可能涵盖了RMI的详细配置、性能优化、故障排查、以及与其他Java技术如EJB...