欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

02_Java通信_JNDI_demo1

程序员文章站 2022-05-09 15:58:28
...

下面这个小demo会将一个对象绑定到一个JNDI服务器上,然后通过JNDI客户端获得这个对象。

PS:我们姑且这样叫:JNDI服务器,JNDI客户端这样理解起来可能比较简单

1.建立一个普通的Java项目

2.导入JDK


02_Java通信_JNDI_demo1
            
    
    博客分类: Java通信 JNDIdemo 

在JDK 5的rt.jar中一共找到了4种SUN自带的JNDI实现:LDAP,CORBA,RMI,DNS。
这4种JNDI要正常运行还需要底层的相应服务。我们没有LDAP或CORBA服务器,也就无法启动这两种JNDI服务,DNS用于查域名。唯一可以在main()中启动的就是基于RMI的JNDI服务。

PS:因为只是一个理解性的demo所以没有必要那么认真,下一个demo我们将连接weblogic服务器,获得服务器上的连接,那么我们看到的会更加直观。

3.开发绑定对象

在使用RMI来绑定对象,我们的对象必须继承接口:Remote;然后由于对象要在网络中传输,所以对象还得序列化即:继承接口——Serializable

package com.hh.jndi2;
import java.io.Serializable;
import java.rmi.Remote;

/**
 * 
 * @title Person
 * @description 使用RMI实现JNDI对象绑定到服务器上,对象必须继承Remote。对象要在网络中传输必须要序列化,所以继承Serializable
 * @author hadoop
 * @version 
 * @copyright (c) SINOSOFT
 *
 */
public class Person implements Remote,Serializable {
	/**
	 * @title long
	 * @description TODO
	 * @author hadoop
	 * @param Person.java
	 * @return TODO
	 * @throws 
	 */
	private static final long serialVersionUID = 1L;
	private String name;
	private String password;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String toString(){
		return "name:"+name+" password:"+password;
	}
}

4.开发测试类

package com.hh.jndi2;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.spi.NamingManager;


public class Test {
	/**
	 * 
	 * @title initPerson
	 * @description 绑定一个对象到JNDI服务上
	 * @author hadoop
	 * @throws Exception
	 */
	public static void initPerson() throws Exception{
		//配置JNDI工厂和JNDI的url和端口。如果没有配置这些信息,将会出现NoInitialContextException异常
		LocateRegistry.createRegistry(3000);
		System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
		System.setProperty(Context.PROVIDER_URL, "rmi://localhost:3000");
		
		////初始化
		InitialContext ctx = new InitialContext();
		
		//实例化person对象
		Person p = new Person();
		p.setName("zc");
		p.setPassword("123");
		
		//将person对象绑定到JNDI服务中,JNDI的名字叫做:person。
		ctx.bind("person", p);
		ctx.close();
	}
	
	/**
	 * 
	 * @title findPerson
	 * @description 通过JNDI获得person对象
	 * @author hadoop
	 * @throws Exception
	 */
	public static void findPerson() throws Exception{
		//因为前面已经将JNDI工厂和JNDI的url和端口已经添加到System对象中,这里就不用在绑定了
		InitialContext ctx = new InitialContext();
		
		//通过lookup查找person对象
		Person person = (Person) ctx.lookup("person");
		
		//打印出这个对象
		System.out.println(person.toString());
		ctx.close();
	}
	
	public static void main(String[] args) throws Exception {
		initPerson();
		findPerson();
	}
}

 5.demo的结构:


02_Java通信_JNDI_demo1
            
    
    博客分类: Java通信 JNDIdemo 
 

 6.demo运行的结果:
 
02_Java通信_JNDI_demo1
            
    
    博客分类: Java通信 JNDIdemo 
 

  • 02_Java通信_JNDI_demo1
            
    
    博客分类: Java通信 JNDIdemo 
  • 大小: 37 KB
  • 02_Java通信_JNDI_demo1
            
    
    博客分类: Java通信 JNDIdemo 
  • 大小: 37.1 KB
  • 02_Java通信_JNDI_demo1
            
    
    博客分类: Java通信 JNDIdemo 
  • 大小: 27.6 KB
相关标签: JNDIdemo