02_Java通信_JNDI_demo1

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

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

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

2.导入JDK


02_Java通信_JNDI_demo1_第1张图片

在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_第2张图片
 

 6.demo运行的结果:
 
02_Java通信_JNDI_demo1_第3张图片
 

你可能感兴趣的:(JNDIdemo)