⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 namingmodel--rosonsandy.htm

📁 这是最详细的对Tomcat4以上版本的解析。
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0056)http://rosonsandy.blogdriver.com/rosonsandy/1082615.html -->
<HTML><HEAD><TITLE>namingModel--rosonsandy</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GBK">
<META http-equiv=Pragma content=no-cache>
<META http-equiv=Cache-Control content=no-cache>
<META http-equiv=Expires content=0>
<META content="手机 3GnamingModelEVD  博客 博客动力 blog blogdriver blogger 中国" 
name=description>
<META 
content="rosonsandy 手机 3GnamingModelEVD 博客 博客动力 blog blogdriver blogger 中国" 
name=keywords><LINK href="namingModel--rosonsandy.files/diary.css" type=text/css 
rel=stylesheet>
<SCRIPT language=JavaScript src="namingModel--rosonsandy.files/UBB.js"></SCRIPT>

<SCRIPT src="namingModel--rosonsandy.files/blog.js" 
type=text/javascript></SCRIPT>

<META content="MSHTML 6.00.2900.3199" name=GENERATOR></HEAD>
<BODY>
<DIV id=container>
<DIV id=header>
<H1 class=title><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/index.html">rosonsandy</A></H1></DIV>
<DIV id=category><A title=上一篇 
href="http://rosonsandy.blogdriver.com/rosonsandy/1081550.html">手机 3G</A>- -| <A 
href="http://rosonsandy.blogdriver.com/rosonsandy/index.html">回首页</A> | <A 
href="http://rosonsandy.blogdriver.com/rosonsandy/catalog_2005.html">2005年索引</A> 
| - -<A title=下一篇 
href="http://rosonsandy.blogdriver.com/rosonsandy/1083541.html">EVD</A></DIV>
<DIV class=entity>
<H2 class=diaryTitle>namingModel- -</H2>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

<P><IMG height=209 src="namingModel--rosonsandy.files/namingModel.jpg" 
width=278> 
<P>以下是个简单的命名管理程序。为了使容易理解,只提供了bind、lookup和createSubcontext几个功能。</P>
<P><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/1082615.html#a">NameParserImpl.java</A> 
<BR><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/1082615.html#b">NamingContext.java</A> 
<BR><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/1082615.html#c">NamingContextFactory.java</A> 
<BR><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/1082615.html#d">jndi.properties</A> 
<BR><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/1082615.html#e">TestNaming.java</A> 
</P>
<P>相关词汇:<BR><FONT color=#0000ff><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/1080638.html">composite 
name</A><BR><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/1080677.html">compound 
name</A></FONT> </P>
<P>参考:<BR>jndi-1_4_2-tutorial<BR>Tomcat naming<BR>Jboss naming</P>
<P><A name=#a></A></P>
<DIV 
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; FONT: 11px/110% Andale Mono, Courier New, Courier, monospace; OVERFLOW: visible; WIDTH: 550px; PADDING-TOP: 5px; WHITE-SPACE: pre; BACKGROUND-COLOR: #efefef"><PRE style="COLOR: #006600; FONT-FAMILY: Andale Mono, Courier New, Courier, monospace"><B>NameParserImpl.java</B>

/*
 * @author roson
 *
 * 2005-12-5 
 */

package com.netone.naming;

import javax.naming.Name;
import javax.naming.NameParser;
import javax.naming.NamingException;
import javax.naming.CompositeName;

public class NameParserImpl implements NameParser {

	public Name parse(String name) throws NamingException {
		return new CompositeName(name);
	}
}
</PRE></DIV>
<P><A name=#b></A></P>
<DIV 
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; FONT: 11px/110% Andale Mono, Courier New, Courier, monospace; OVERFLOW: visible; WIDTH: 550px; PADDING-TOP: 5px; WHITE-SPACE: pre; BACKGROUND-COLOR: #efefef"><PRE style="COLOR: #006600; FONT-FAMILY: Andale Mono, Courier New, Courier, monospace"><B>NamingContext.java</B>

/*
 * @author roson
 *
 * 2005-12-5 
 */

package com.netone.naming;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InvalidNameException;
import javax.naming.Name;
import javax.naming.NameAlreadyBoundException;
import javax.naming.NameNotFoundException;
import javax.naming.NameParser;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.CompositeName;
import javax.naming.NotContextException;
import javax.naming.spi.NamingManager;

public class NamingContext implements Context {
	
	protected Hashtable env;
	protected Hashtable bindings;
	protected String name;
	protected static NameParser nameParser=new NameParserImpl();

	public NamingContext(Hashtable env,String name)
	{
		if(env!=null)
			this.env=(Hashtable)env.clone();
		else
			this.env=new Hashtable();
		
		this.name=name;
		
		bindings=new Hashtable();
	}
	
	public NamingContext(Hashtable env,String name,Hashtable binding)
	{
		this(env,name);
		this.bindings=(Hashtable)binding.clone();
	}
	
	public Object lookup(Name name) throws NamingException {
		if(name.isEmpty())
			return new NamingContext(env,this.name,bindings);
		
		String atom=name.get(0);
		Object object=bindings.get(atom);
		
		if(name.size()==1)
		{
			if(object==null)
				throw new NameNotFoundException(atom+" not found");
			
			try
			{
				return NamingManager.getObjectInstance(object,name,this,env);
			}
			catch(Exception e)
			{
				NamingException ne=new NamingException("getObjectInstance failed");
				ne.setRootCause(e);
				throw ne;
			}
		}
		else
		{
			if(!(object instanceof Context))
				throw new NotContextException(atom+" does not a context");
			
			return ((Context)object).lookup(name.getSuffix(1));
		}
	}

	public Object lookup(String name) throws NamingException {
		return lookup(new CompositeName(name));
	}
	
	public void bind(Name name, Object obj) throws NamingException {
		if(name.isEmpty())
			throw new InvalidNameException("cannot bind object by empty name");
		
		String atom=name.get(0);
		Object object=bindings.get(atom);
		
		if(name.size()==1)
		{
			if(object!=null)
				throw new NameAlreadyBoundException("Name already bound");
			
			obj=NamingManager.getStateToBind(obj,name,this,env);
			
			bindings.put(atom,obj);
		}
		else
		{
			if(!(object instanceof Context))
				throw new NotContextException(atom+" does not a context");
			
			((Context)object).bind(name.getSuffix(1),obj);
		}
	}

	public void bind(String name, Object obj) throws NamingException {
		bind(new CompositeName(name),obj);
	}

	public Context createSubcontext(Name name) throws NamingException {
		if(name.isEmpty())
			throw new InvalidNameException("cannot bind empty name");
		
		String atom=name.get(0);
		Object object=bindings.get(atom);
		
		if(name.size()==1)
		{
			if(object!=null)
				throw new NameAlreadyBoundException("context already bound");
			
			Context child=new NamingContext(env,this.name);
			bindings.put(atom,child);
			
			return child;
		}
		else
		{
			if(!(object instanceof Context))
				throw new NotContextException(atom+" is not a context");
			
			return ((Context)object).createSubcontext(name.getSuffix(1));
		}
	}

	public Context createSubcontext(String name) throws NamingException {
		return createSubcontext(new CompositeName(name));
	}
	.
	.
	.	
}
</PRE></DIV>
<P><A name=#c></A></P>
<DIV 
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; FONT: 11px/110% Andale Mono, Courier New, Courier, monospace; OVERFLOW: visible; WIDTH: 550px; PADDING-TOP: 5px; WHITE-SPACE: pre; BACKGROUND-COLOR: #efefef"><PRE style="COLOR: #006600; FONT-FAMILY: Andale Mono, Courier New, Courier, monospace"><B>NamingContextFactory.java</B>

/*
 * @author roson
 *
 * 2005-12-5 
 */

package com.netone.naming;

import java.util.Hashtable;

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


public class NamingContextFactory implements InitialContextFactory
		 {
	
	public static String main="initialContext";
	
	protected static Context initialContext=null; 

	public Context getInitialContext(Hashtable env) throws NamingException {
		if(initialContext==null)
			initialContext=new NamingContext(env,main);
		return initialContext;
	}
}
</PRE></DIV>
<P><A name=#d></A></P>
<DIV 
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; FONT: 11px/110% Andale Mono, Courier New, Courier, monospace; OVERFLOW: visible; WIDTH: 550px; PADDING-TOP: 5px; WHITE-SPACE: pre; BACKGROUND-COLOR: #efefef"><PRE style="COLOR: #006600; FONT-FAMILY: Andale Mono, Courier New, Courier, monospace"><B>jndi.properties</B>

java.naming.factory.initial=<FONT color=#0000ff>com.netone.naming.NamingContextFactory</FONT><BR>
java.naming.factory.url.pkgs=<FONT color=#0000ff>com.netone.naming</FONT><BR>
java.naming.provider.url=<FONT color=#0000ff>localhost</FONT><BR>
</PRE></DIV>
<P><A name=#e></A></P>
<DIV 
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; FONT: 11px/110% Andale Mono, Courier New, Courier, monospace; OVERFLOW: visible; WIDTH: 550px; PADDING-TOP: 5px; WHITE-SPACE: pre; BACKGROUND-COLOR: #efefef"><PRE style="COLOR: #006600; FONT-FAMILY: Andale Mono, Courier New, Courier, monospace"><B>TestNaming.java</B>

/*
 * @author roson
 *
 * 2005-12-5 
 */

package com.netone.naming;

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

public class TestNaming {

	
	public static void main(String[] args) throws NamingException {
		Context ctx=new InitialContext();
		System.out.println(ctx);
		Context com=ctx.createSubcontext("com");
		ctx.createSubcontext("com/netone");
		Object hello="hello";
		ctx.bind("com/server",hello);
		Object java =  com.lookup("server");
		System.out.println(java);
		System.out.println(ctx.lookup("com/server"));	
	}
}
</PRE></DIV>
<P></P>
<P class=diaryFoot>- 作者: <A 
onclick="window.open('http://publishblog.blogdriver.com/blog/postMessage.b?receiver=517836','发送短消息','width=520, height=455')" 
href="javascript:void(0);">rosonsandy</A> 2005年12月5日, 星期一 18:37 </P></DIV>
<DIV class=operation><A name=trackback>
<H3>Trackback</H3></A>
<P class=trackback>你可以使用这个链接引用该篇日志 
http://publishblog.blogdriver.com/blog/tb.b?diaryID=1082615 </P></DIV>
<DIV class=operation><A name=comment>
<H3>回复</H3></A></DIV>
<DIV class=operation>
<TABLE class=comment cellSpacing=0 cellPadding=0 width=700 border=0>
  <FORM id=replyForm method=post><INPUT type=hidden value=356891 name=blogID> 
  <INPUT type=hidden value=1082615 name=diaryID> <INPUT type=hidden 
  value=rosonsandy name=blogDomino>
  <SCRIPT>
if(getCookie('userID') == null){        
document.write('<tr><td width="70">发布人:</td>');
document.write('<td width="150"> <input name="remark.authorNameFUI" type="text" size="20" class="inputStyle" maxlength="20"></td>');
document.write('<td width="70">邮箱:</td>');
document.write('<td width="435"> <input name="remark.authorEmail" type="text" size="20" class="inputStyle" maxlength="40"></td>');
document.write('</tr><tr><td>主 页:</td>');
document.write('<td colspan="3"> <input name="remark.authorURL" type="text" class="inputStyle" value="HTTP://" size="63" maxlength="40"></td></tr>');
}else{
document.write('<input type="hidden" name="remark.authorNameFUI" value="Blogdriver">');
}
</SCRIPT>
   
  <TBODY>
  <TR align=left>
    <TD colSpan=4>评论内容:<BR><TEXTAREA class=textStyle id=remark name=remark.remarkFUI rows=8 cols=60>          </TEXTAREA> 
    </TD></TR>
  <TR align=left>
    <TD colSpan=4>              <INPUT onclick=reply() type=button value=提交>   
<INPUT type=reset value=重置> </TD></TR></FORM></TBODY></TABLE></DIV></DIV>
<SCRIPT src="" type=text/javascript></SCRIPT>

<DIV id=footer><A 
href="http://statices.blogdriver.com/jsp/reg/register.jsp"><IMG class=logo 
src="namingModel--rosonsandy.files/logo3.gif" border=0></A><A 
href="http://www.blogdriver.com/">2003-2004 BLOGDRIVER.COM All rights 
reserved</A></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -