原文:http://www.weicoop.com/web/article/52.html

关于什么是JNDI的概念这里不做解释,本文作为初学者根据所了解到内容做些总结,主要内容如下:

1、JNDI使用描述

2、Tomcat中DataSource的配置和使用

3、Weblogic中JNDI的配置和使用

4、访问分布式JNDI的条件

1、JNDI使用描述

图1-1

根据图1-1进行一下描述:

JNDI Service:J2EE容器 包括Tomcat、Jetty、Weblogic、WebSphere等,提供对JNDI的支持

SPIs:基于JNDI实现的目录服务包括DNS、LDAP、CORBA、Window注册表等(有能力你也可以做)

JNDI ENV:JNDI上下文,关于JNDI服务的环境参数在本地访问和分布式访问时我们的程序在初始化JNDI上下文时回有所不同(稍后介绍)

Application:我们的应用程序打算使用JNDI提供的服务

在我们的应用程序中会经常使用到JNDI提供的资源(废话),比如说使用DataSource进行数据库操作,访问Window注册表,使用NDS服务等,我们可以通过服务提供的支持方便的在服务器上进行这些服务的配置,我们的应用程序就可以方便的使用这些服务了。使用JNDI服务很简单,1、得到JNDI上下文;2、在上写文中更加名字寻找要使用的对象或资源。

Context ctx= new InitialContext();
ctx.lookup("resName");

注意:上述代码一定是在本地环境下使用(也就是你的应用跑在和配置的JNDI在同一个服务器上),这样你就可以再你的代码中直接使用得到的对象或资源了,接下来就看一下我们如何在Tomcat下使用通过JNDI配置提供的DataSource。

2、Tomcat中的DataSource配置和使用(Tomcat7)

1)在Tomcat的conf目录下找到context.xml添加如下配置

<Resource
name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="123456"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"
/>

2)在项目的WEB-INF目录下的web.xml中声明服务器对其的配置

 <resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

3)程序中使用我们配置的DataSource(这里简单起见我你们在Jsp中演示)

<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.sql.DataSource"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%> <%
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/test");
out.print(ds); %>
3‘)显示结果 (Tomcat基于dbcp提供DataSource实现)
 
 

注意:1、这里对上下文环境并没有进行配置,因为相对于你的程序而言Tomcat环境就是你的本地环境,说以他会自动找到JNDI上下文中帮顶的资源;2:、我们配置的资源吗为"java:/comp/env/"命名空间的这个在不同的可能是不同的。

3、Weblogic中JNDI资源的配置(这里以数据源配置为例)

1)基本配置

Weblogic的配置就比较简单了,这里就不在浪费流量,注意在配置完数据源时一定要把它应用到你的Server上才能测试成功;

         我们配置的资源名为”test/db“;
        2)本地访问
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("test/db");
out.print(ds);
2‘)显示结果(这是weblogic自己实现的DataSource)
3)通过客户端远程访问
                Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7003"); Context ctx = new InitialContext(env);
DataSource ds = (DataSource) ctx.lookup("test/db");
System.out.println(ds);

3’)Console输出

ClusterableRemoteRef(-645461901847124827S:127.0.0.1:[7003,7003,-1,-1,-1,-1,-1]:base_domain:AdminServer [-645461901847124827S:127.0.0.1:[7003,7003,-1,-1,-1,-1,-1]:base_domain:AdminServer/287])/287

4、分布式访问JNDI的资源
这个也相对比较简单就是和3中Weblogic中客户端远程访问一样,要指定JNDI资源所在的位置和上下文产生的工场:1、Context.INITIAL_CONTEXT_FACTORY这个参数指定上下文产生的工场类,这个是不同容器不同配置的,根据所选容器文档来就可以了;2、Context.PROVIDER_URL通过此参数指定JNDI资源的位置。当然JNDI上下文的配置和操作远不止这些,对上述有些大致了解相信会有一定帮助。

总结:这里只是简单的描述了一下JNDI通过Tomcat和Weblogic的数据原配进行一个大致的了解,对于不同的容器和不同的JNDI服务自己根据需求去了解就可以了。


        


浅谈JNDI的使用的更多相关文章

  1. [转帖]浅谈IOC--说清楚IOC是什么

    浅谈IOC--说清楚IOC是什么 Need Study https://www.cnblogs.com/DebugLZQ/archive/2013/06/05/3107957.html 博文目录 1. ...

  2. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  3. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  4. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  5. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  6. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  7. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  8. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  9. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

随机推荐

  1. 报LinkageError的原因

    LinkageError是一个比较棘手的异常,准确的说它是一个Error而不是Exception.java api对它没有直接的解释,而是介绍了它的子类: Subclasses of LinkageE ...

  2. Linux系统编程(17)——正则表达式进阶

    C的变量和Shell脚本变量的定义和使用方法很不相同,表达能力也不相同,C的变量有各种类型,而Shell脚本变量都是字符串.同样道理,各种工具和编程语言所使用的正则表达式规范的语法并不相同,表达能力也 ...

  3. 数据挖掘经典算法之KNN

    KNN也称为k近邻算法,本质思想:物以类聚. 在分类或者预测中,待分类或预测的样本的类别和走势将直接参考与该样本最“近邻”的k个邻居. 在这种思路下,KNN注定会遇到3个问题: (1): 谁是我的邻居 ...

  4. Memcached安装,操作,用C#操作

    本文来自:http://li19910722.blog.163.com/blog/static/136856822201406103313163/ 1:安装 下载Memcache:http://cod ...

  5. QT_编程基础

    简单介绍 Qt是一个由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既能够开发GUI程式,也可用于开发非GUI程式,比方控制台工具和server. Qt是面向对象语言,易于扩展,而且同意组 ...

  6. Android 内部存储相关的函数(getCacheDir,getDir, getFileStreamPath,getFilesDir,openFileInput, ...)

    为了保证应用程序存储数据的安全性,开发人员在开发应用程序的过程中须要注意使用Android 应用程序的内部存储空间. 依据不同的要求.将相应的数据文件.缓存文件.暂时文件等分别存储在相应的位置. 注意 ...

  7. hdu1573X问题(不互素的中国剩余定理)

    X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  8. android假设重写onDraw实现一个相似TextView能够显示表情和链接的控件(一)

    先看效果图: 写一个超连接支持的对象: /**作为超连接显示的对象*/ public class LinkInfo implements Comparable<LinkInfo>{ pri ...

  9. MySQL中innodb表主键设计原则

    主键设计的原则:1. 一定要显式定义主键2. 采用与业务无关的单独列3. 采用自增列4. 数据类型采用int,并尽可能小,能用tinyint就不用int,能用int就不用bigint5. 将主键放在表 ...

  10. heroku

    一个可以在上面部署自己的应用一个共享平台,例如可以部署访问google的代理 地址为:https://www.heroku.com/