1. JNDI的理解
我觉得JNDI就好像是肯德基,在远端提供外卖服务。客户本身看到的,也就是肯德基对外公开的仅仅是一份外卖菜单而已,您需要什么直接打个电话向服务台要就行了,至于汉堡包、薯条是怎么做的,客户不用关心。客户只需要知道怎么打电话,告诉他您的联系方式就行了。而客户拿到套餐后就分为2种情况了,这就取决于服务商——肯德基了。比如说人家服务上需要回收您剩下的废弃物用于二次循环利用(对应于有状态的SessionBean);或者如果说人家服务商不管了,给你送过去就不管了(无状态的SessionBean),您爱怎么用就怎么用,无所谓。其中网上的菜谱和您最终拿到的对象是一个对应关系。菜谱是比较抽象的,您最后拿到的却是实实在在的,为您服务的对象。
官方的说法是:JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。JNDI可访问的现有的目录及服务有:DNS、XNam、Novell目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
2. JNDI的应用
1.在JavaEE中一般是利用JNDI获取应用上下文档中的数据源对象
Context ctx = new InitialContext();
DataSource ds1 = (DataSource) ctx.lookup("java:/oracle1");
|
其中oracle1就是应用上下文中的JNDI名称。
2.利用JNDI获得EJB的SessionBean
Context context = init();
Hello hello = (Hello) context.lookup("HelloEAOImpl/remote-ejb.sessionBean.Hello");
System.out.println(hello.hello("素还真"));
|
用JNDI获取远程的SessionBean接口之后为自己的业务服务。
3.松耦合的方式访问远程、处在应用上下文的对象
对象-绑定代码
//环境设置
String factory = "org.jnp.interfaces.NamingContextFactory";
String serverURL = "jnp://127.0.0.1:1099";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, factory);
env.put(Context.PROVIDER_URL, serverURL);
//正式绑定
final String testName = "testName";
Context ctx = new InitialContext(env);
JFrame mainWin = new JFrame("服务端控件");
mainWin.setBounds(20,30,400,300);
ctx.rebind(testName,mainWin);
out.print("绑定成功");
|
对象-获取代码
String factory = "org.jnp.interfaces.NamingContextFactory";
String serverURL = "jnp://127.0.0.1:1099";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, factory);
env.put(Context.PROVIDER_URL, serverURL);
Context context = new InitialContext(env);
JFrame mainWin = (JFrame) context.lookup("testName");
//mainWin.setBounds(20,30,400,300);
mainWin.setVisible(true);
context.close();
|
3. JNDI的使用步骤
1.创建应用上下文Context(可以自己加入配置)
String factory = "org.jnp.interfaces.NamingContextFactory";
String serverURL = "jnp://127.0.0.1:1099";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, factory);
env.put(Context.PROVIDER_URL, serverURL);
Context context = new InitialContext(env);
|
2.调用Context的lookup方法查找自己想要的对象
JFrame mainWin = (JFrame) context.lookup("testName");
|
3.用查找后的对象为自己的业务提供相关的服务
mainWin.setVisible(true);
|
4.关闭Context
如此一个简单的调用JNDI流程完成。
4. Jboss的JNDI支持
实际上上面的代码已经体现了JBoss对JNDI的支持了,数据源可以通过JBOSS管理界面进行配置,在代码中利用以下代码就可以获取数据源,(此代码有重复)
Context ctx = new InitialContext();
DataSource ds1 = (DataSource) ctx.lookup("java:/oracle1");
|
还有就是绑定EJB的sessionBean,上面代码也有过交代。只是EJB必须以jar的方式部署到JBoss下面,或者打进war包中,和web项目一起发布到JBoss当中。最后一个就是以一种固定的配置上下文、硬编码的方式将命名和对象捆绑起来发布到JBoss中,获取的时候也通过固定的配置获取上下文,从而获取想要的对象。
所以可以看到,一般是数据源、EJB用JNDI捆绑比较多,自己做一个捆绑服务对象、获取的情况相对来说少一些,也不太友好。
分享到:
相关推荐
JavaEE5学习笔记02-JNDI与RMI,
JavaEE5学习笔记05-EJB之会话Bean总结...
JavaEE5学习笔记03-JMS介绍与使用..
JavaEE5学习笔记01-JTA和数据库事务.
JavaEE5学习笔记12-JSF集成AJAX使用经验总结。
JavaEE5学习笔记07-Web层与EJB集成总结。
javaEE servlet 学习笔记 jsp本质上是servlet,但是为了更加符合mvc的框架,将页面显示和逻辑控制分离,jsp页面只负责页面,也就是mvc中的V(view),而servlet负责mvc中的C(control)。 而为了更加好的理解结构,一下...
JavaEE5学习笔记04-JavaMail使用总结----
JavaEE5学习笔记09-将EJB发布成WebService总结。
JavaEE5学习笔记13-JSF集成Facelets使用经验总结.
javase和javaee学习笔记, 下载绝对没错, 这是自己在学习的时候写的笔记包括javase和javaee
JavaEE5学习笔记11-JSF转换器验证器使用经验总结。
javaee的杂乱笔记
JAVAEE系列笔记2JAVAEE系列笔记2JAVAEE系列笔记2JAVAEE系列笔记2JAVAEE系列笔记2JAVAEE系列笔记2JAVAEE系列笔记2
JavaEE学习笔记.pdf
NULL 博文链接:https://hanyi366.iteye.com/blog/1155573
javaee的学习笔记
JavaEE5实战笔记04JSF的一些补充 JavaEE5实战笔记04JSF的一些补充
这是我自己在学习过程中总结的javaweb各项技术和知识点,内容十分丰富,分享给正在学习javaweb的同道们作为借鉴