📄 namingmodel--rosonsandy.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>
<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 + -