rmi和jndi基础

您所在的位置:网站首页 ldap服务是什么 rmi和jndi基础

rmi和jndi基础

2023-03-23 13:52| 来源: 网络整理| 查看: 265

rmi和jndi基础

文章目录 rmi和jndi基础前言一、RMI1.定义一个接口继承remote(必须抛出RemoteException异常)2.服务端创建接口实现类3.服务端4.客户端 二、JNDI操作rmi1、jndi客户端2、jndi服务端3、运行结果

前言

RMI:远程方法调用(Remote Method Invocation),它支持存储在不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。 JNDI:Java命名和目录接口Java Naming and Directory Interface,作用是为JAVA应用程序提供命名和目录访问服务的API

提示:以下是本篇文章正文内容,下面案例可供参考

一、RMI

官方文档:https://docs.oracle.com/javase/tutorial/rmi/overview.html 下图描述了一个RMI分布式应用程序,该应用程序使用RMI注册表来获取对远程对象的引用。服务器调用注册表将名称与远程对象相关联(或绑定)。客户端在服务器注册表中按名称查找远程对象,然后调用该对象上的方法。该图还显示,RMI系统使用现有的web服务器在需要时从服务器到客户端和从客户端到服务器加载对象的类定义。 在这里插入图片描述

1.定义一个接口继承remote(必须抛出RemoteException异常)

代码如下(示例):

package com.star.rmiDemo; import java.rmi.Remote; import java.rmi.RemoteException; public interface testRmi extends Remote { public String World(String test) throws RemoteException; } 2.服务端创建接口实现类

代码如下(示例):

package com.star.rmiDemo; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class testRmiImpl extends UnicastRemoteObject implements testRmi { protected testRmiImpl() throws RemoteException { super(); } @Override public String World(String test) throws RemoteException { String s = test.toUpperCase(); System.out.println(s); return s; } } 3.服务端 package com.star.rmiDemo; import java.rmi.AlreadyBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; /** * 编号7089 */ public class rmiServer { public static void main(String[] args) throws RemoteException, AlreadyBoundException { System.out.println("远程方法创建等待调用ing......"); //创建远程对象 testRmiImpl testRmi = new testRmiImpl(); // //创建注册表 Registry registry = LocateRegistry.createRegistry(1099); // //将远程对象注册到注册表里面,并且取名为test registry.rebind("test",testRmi); } } 4.客户端 package com.star.rmiDemo1; import com.star.rmiDemo.SayHello; import com.star.rmiDemo.testRmi; import java.rmi.NotBoundException; import java.rmi.Remote; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; /** * 编号7089 */ public class rmiClient { public static void main(String[] args) throws RemoteException, NotBoundException { //获取到注册中心的代理 Registry registry = LocateRegistry.getRegistry("localhost", 1099); // //利用注册中心的代理去查询远程注册表中名为test的对象 testRmi rmi = (testRmi)registry.lookup("test"); // //调用远程方法 rmi.World("hello world"); } } 二、JNDI操作rmi

官方文档:https://docs.oracle.com/javase/tutorial/jndi/overview/index.html JNDI体系结构由一个API和一个服务提供者接口(SPI)组成。Java应用程序使用JNDI API来访问各种命名和目录服务。SPI允许透明地插入各种命名和目录服务,从而允许Java应用程序使用JNDI API访问它们的服务。如下图所示: 在这里插入图片描述 JNDI可以访问的目录及服务,比如:DNS、LDAP、CORBA对象服务、RMI等等。 简单理解:在前面的RMI,比如RMI对外提供了服务,那么JNDI可以通过 相关API可以链接处理这些服务。

1、jndi客户端 package com.star.jndi; import com.star.rmiDemo.SayHello; import com.star.rmiDemo.testRmi; import javax.naming.InitialContext; import javax.naming.NamingException; import java.rmi.RemoteException; public class JndiClient { public static void main(String[] args) throws NamingException, RemoteException { InitialContext initialContext = new InitialContext(); //检索名称对象 testRmi lookup = (testRmi) initialContext.lookup("rmi://127.0.0.1/test"); System.out.println(lookup.World("hello China")); } } 2、jndi服务端 package com.star.jndi; import com.star.rmiDemo.SayHelloImpl; import javax.naming.InitialContext; import javax.naming.NamingException; import java.rmi.RemoteException; public class JndiServer { public static void main(String[] args) throws NamingException, RemoteException { //构建一个初始上下文 InitialContext initialContext = new InitialContext(); //将名称绑定到对象,覆盖任何现有绑定 initialContext.rebind("rmi://127.0.0.1:1099/test",new testRmiImpl()); System.out.println("JNDI启动成功!!!"); } } 3、运行结果

先运行RMI服务端,在运行jndi服务端,在运行jndi客户端 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3