JNDI 简单地实践

94 篇文章 0 订阅
69 篇文章 0 订阅
package com.xiuye.jndi.test;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import javax.naming.Binding;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NameClassPair;
import javax.naming.NameParser;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;

public class TestContext implements Context {

	private Map<String,Object> bindings = new HashMap<>();

	@Override
	public Object lookup(Name name) throws NamingException {
		return this.lookup(name.toString());
	}

	@Override
	public Object lookup(String name) throws NamingException {
		return this.bindings.get(name);
	}

	@Override
	public void bind(Name name, Object obj) throws NamingException {

		this.bind(name.toString(),obj);

	}

	@Override
	public void bind(String name, Object obj) throws NamingException {
		this.bindings.put(name, obj);
	}

	@Override
	public void rebind(Name name, Object obj) throws NamingException {
		this.rebind(name.toString(),obj);
	}

	@Override
	public void rebind(String name, Object obj) throws NamingException {
		this.bind(name, obj);
	}

	@Override
	public void unbind(Name name) throws NamingException {
		this.unbind(name.toString());
	}

	@Override
	public void unbind(String name) throws NamingException {
		this.bindings.remove(name);
	}

	@Override
	public void rename(Name oldName, Name newName) throws NamingException {
		this.rebind(oldName.toString(), newName.toString());
	}

	@Override
	public void rename(String oldName, String newName) throws NamingException {
		Object v = this.bindings.get(oldName);
		this.bindings.remove(oldName);
		this.bindings.put(newName, v);
	}

	@Override
	public NamingEnumeration<NameClassPair> list(Name name) throws NamingException {
		return null;
	}

	@Override
	public NamingEnumeration<NameClassPair> list(String name) throws NamingException {
		return null;
	}

	@Override
	public NamingEnumeration<Binding> listBindings(Name name) throws NamingException {
		return null;
	}

	@Override
	public NamingEnumeration<Binding> listBindings(String name) throws NamingException {
		return null;
	}

	@Override
	public void destroySubcontext(Name name) throws NamingException {

	}

	@Override
	public void destroySubcontext(String name) throws NamingException {
		// TODO Auto-generated method stub

	}

	@Override
	public Context createSubcontext(Name name) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Context createSubcontext(String name) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object lookupLink(Name name) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object lookupLink(String name) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public NameParser getNameParser(Name name) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public NameParser getNameParser(String name) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Name composeName(Name name, Name prefix) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String composeName(String name, String prefix) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object addToEnvironment(String propName, Object propVal) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object removeFromEnvironment(String propName) throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Hashtable<?, ?> getEnvironment() throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void close() throws NamingException {
		// TODO Auto-generated method stub

	}

	@Override
	public String getNameInNamespace() throws NamingException {
		// TODO Auto-generated method stub
		return null;
	}

}


package com.xiuye.jndi.test;

import java.util.Hashtable;
import java.util.ServiceLoader;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;

public class TestInitialContextFactory implements InitialContextFactory{


	@Override
	public Context getInitialContext(Hashtable<?, ?> environment) throws NamingException {

		String context = (String) environment.get("CONTEXT");
		Context ctx = null;
		switch (context.toLowerCase()) {
		case "test":
			ServiceLoader<Context> contextLoader = ServiceLoader.load(Context.class);
			ctx = contextLoader.iterator().next();
			ctx.rebind("URL1", "URL1 OK");
			ctx.rebind("URL2", "URL2 OK");
			ctx.rebind("URL3", 3);
			break;
		case "debug":
			break;
		case "release":
			break;
		default:
			break;
		}
		if(ctx == null){
			ctx = new TestContext();
			ctx.rebind("URL1", "URL1 OK");
			ctx.rebind("URL2", "URL2 OK");
			ctx.rebind("URL3", 3);
		}


		return ctx;
	}

}

package com.xiuye.jndi.test;

import java.util.Properties;

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

public class Test {

	private static<T> void log(T t){
		System.out.println(t);
	}

	public static void main(String[] args) throws NamingException {

		Properties p1 = new Properties();
		p1.put(Context.INITIAL_CONTEXT_FACTORY, "com.xiuye.jndi.test.TestInitialContextFactory");
		p1.put("CONTEXT","TEST");

		log("Create a InitialContext 1");
		Context ctx1 = new InitialContext(p1);

		log("Look up a URL1");
		Object url1_val = ctx1.lookup("URL1");
		log(url1_val);
		log("Look up a URL2");
		Object url2_val = ctx1.lookup("URL2");
		log(url2_val);
		log("Look up a URL3");
		Object url3_val = ctx1.lookup("URL3");
		log(url3_val);
		log("Look up a URL4(not exist)");
		Object url4_val = ctx1.lookup("URL4");
		log(url4_val);


		log("=========================================");

		Properties p2 = new Properties();
		p2.put(Context.INITIAL_CONTEXT_FACTORY, "com.xiuye.jndi.test.TestInitialContextFactory");
		p2.put("CONTEXT","DEBUG");

		log("Create a InitialContext 2");
		Context ctx2 = new InitialContext(p1);

		log("Look up a URL1");
		url1_val = ctx2.lookup("URL1");
		log(url1_val);
		log("Look up a URL2");
		url2_val = ctx2.lookup("URL2");
		log(url2_val);
		log("Look up a URL3");
		url3_val = ctx2.lookup("URL3");
		log(url3_val);
		log("Look up a URL4(not exist)");
		url4_val = ctx2.lookup("URL4");
		log(url4_val);

	}

}





Create a InitialContext 1
Look up a URL1
URL1 OK
Look up a URL2
URL2 OK
Look up a URL3
3
Look up a URL4(not exist)
null
=========================================
Create a InitialContext 2
Look up a URL1
URL1 OK
Look up a URL2
URL2 OK
Look up a URL3
3
Look up a URL4(not exist)
null


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值