`
lishengwu_java
  • 浏览: 13675 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JNDI入门

    博客分类:
  • JNDI
阅读更多
JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。
那么,JNDI到底起什么作用?

要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI后我们又将怎样做?”这个问题来探讨。

没有JNDI的做法:
程序员开发时,知道要开发访问MySQL数据库的应用,于是将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的 JDBC URL 连接到数据库。
就像以下代码这样:

Connection conn=null;
try {Class.forName("com.mysql.jdbc.Driver",true, Thread.currentThread().getContextClassLoader());
conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");
/* 使用conn并进行SQL操作 */......
conn.close();
}
catch(Exception e)
{e.printStackTrace();}
finally {if(conn!=null)
{try {conn.close();}
catch(SQLException e) {
}}}

这是传统的做法,也是以前非Java程序员(如Delphi、VB等)常见的做法。这种做法一般在小规模的开发过程中不会产生问题,只要程序员熟悉Java语言、了解JDBC技术和MySQL,可以很快开发出相应的应用程序。

没有JNDI的做法存在的问题:
1、数据库服务器名称MyDBServer 、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;
2、数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;
3、随着实际使用终端的增加,原配置的连接池参数可能需要调整;
4、......

解决办法:
程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

由此,就有了JNDI。

用了JNDI之后的做法:
首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。
具体操作如下(以JBoss为例):
1、配置数据源
在JBoss的 D:\jboss420GA\docs\examples\jca 文件夹下面,有很多不同数据库引用的数据源定义模板。将其中的 mysql-ds.xml 文件Copy到你使用的服务器下,如 D:\jboss420GA\server\default\deploy。
修改 mysql-ds.xml 文件的内容,使之能通过JDBC正确访问你的MySQL数据库,如下:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/lw</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>rootpassword</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
</local-tx-datasource>
</datasources>

这里,定义了一个名为MySqlDS的数据源,其参数包括JDBC的URL,驱动类名,用户名及密码等。

2、在程序中引用数据源:

Connection conn=null;
try
{
Context ctx=new InitialContext();
Object datasourceRef=ctx.lookup("java:MySqlDS");
//引用数据源
DataSource ds=(Datasource)datasourceRef;
conn=ds.getConnection();
/* 使用conn进行数据库SQL操作 */......
c.close();
}
catch(Exception e)
{e.printStackTrace();}
finally {if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException e)
{
}}}

直接使用JDBC或者通过JNDI引用数据源的编程代码量相差无几,但是现在的程序可以不用关心具体JDBC参数了。
在系统部署后,如果数据库的相关参数变更,只需要重新配置 mysql-ds.xml 修改其中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。

由此可见,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。

JNDI的扩展:
JNDI在满足了数据源配置的要求的基础上,还进一步扩充了作用:所有与系统外部的资源的引用,都可以通过JNDI定义和引用。

所以,在J2EE规范中,J2EE 中的资源并不局限于 JDBC 数据源。引用的类型有很多,其中包括资源引用(已经讨论过)、环境实体和 EJB 引用。特别是 EJB 引用,它暴露了 JNDI 在 J2EE 中的另外一项关键角色:查找其他应用程序组件。

EJB 的 JNDI 引用非常类似于 JDBC 资源的引用。在服务趋于转换的环境中,这是一种很有效的方法。可以对应用程序架构中所得到的所有组件进行这类配置管理,从 EJB 组件到 JMS 队列和主题,再到简单配置字符串或其他对象,这可以降低随时间的推移服务变更所产生的维护成本,同时还可以简化部署,减少集成工作。 外部资源”。


总结:
J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。JNDI 在 J2EE 中的角色就是“交换机” —— J2EE 组件在运行时间接地查找其他组件、资源或服务的通用机制。在多数情况下,提供 JNDI 供应者的容器可以充当有限的数据存储,这样管理员就可以设置应用程序的执行属性,并让其他应用程序引用这些属性(Java 管理扩展(Java Management Extensions,JMX)也可以用作这个目的)。JNDI 在 J2EE 应用程序中的主要角色就是提供间接层,这样组件就可以发现所需要的资源,而不用了解这些间接性。

在 J2EE 中,JNDI 是把 J2EE 应用程序合在一起的粘合剂,JNDI 提供的间接寻址允许跨企业交付可伸缩的、功能强大且很灵活的应用程序。这是 J2EE 的承诺,而且经过一些计划和预先考虑,这个承诺是完全可以实现的。
分享到:
评论

相关推荐

    JNDI基础教程课件

    jndi入门学习资料,介绍jndi基本原理,安装和使用,基本配置

    JNDI一本入门的好是格式chm

    JNDI一本入门的好是格式chm...... JNDI一本入门的好是格式chm

    J2EE JNDI配置原理详解 JBOSS安装配置 Maven入门 Ant使用入门

    1.10 Ant使用入门 1.11 Maven Ant之间的比较 1.12 详解MANIFEST.MF文件 1.13 Maven入门--概念与实例 1.14 Subversion 1.15 jar war ear区别 1.16 如何在Eclipse中调试JBoss应用 1.17 JBoss 5.0 安装与配置...

    tomcat配置jndi

    tomcat配置jndi、数据库连接jndi、jndi实例、非常简单,可以快速学习入门。有连接数据库的例子,和具体的配置。

    初学jndi笔记

    此文的目的是记录自己学习j2ee的一些过程。 这理解过程中可能有一些错误,如果高手看到了我的文章希望能够替我指正,感激不尽!!! 同时也希望能从一个初学者的角度去理解一些东西为后来学习j2ee的人提供一些...

    jndi.rar_jndi_site:www.pudn.com

    JNDI课件,初学者入门使用

    SpringLDAP和JNDI的增删改查

    SpringLDAP和JNDI增删改查的入门级例子 能够通过编译和运行 已经包含了需要的包,用eclipse导入即可

    tomcat6+jndi+c3p0配置数据库连接池

    c3p0配置数据库连接池、数据库连接池 已经测试通过,可以提供给新入门的朋友学习之用,如果是要结合spring就不用下载了,网上其他地方应该很多资料,简单修改一下,原理都是一样的。

    JSP快速入门教程

     服务:JNDI JDBC RMI JAAS JavaMail等等  Java EE包括2个体系:标准(上面介绍的)+流行(Struts+Hibernate+Spring)  两套体系都是JSP+Servlet为基础。 2 JSP会涉及哪些内容  JSP语法基础(Java+HTML)...

    JSP 程序设计从入门到精通 PDF 教程

     6.4 JNDI 和RowSet 154  6.5 RowSet之实践 157  6.6 本章小结 164  第7章 JSP数据库操作例程 164  7.1安装mysql 165  7.1.1第一步:下载mysql 165  7.1.2第二步:安装、配置mysql 165  7.1.3第三步...

    Spring基础与快速入门

    Spring作为实现J2EE的一个全方位应用程序框架,为我们开发企业级应用提供了一个健壮、高效的解决方案。所谓全方位,不得不说以下几个特点: 1 非侵入式:对于写代码从来不考虑...还有对JNDI、mail等服务进行封装。

    weblogic快速入门

    资料是公司内部培训的,非常真贵,包括从weblogic的介绍、安装、管理、domain的创建管理,程序的部暑、JMS、JDBC、JNDI、JTA、SNMP、集群(Cluster)、服务器的负载均衡、weblogic的日常维护、性能调优、故障排查,...

    Seam简单入门学习教程.docx

    java JBoss Seam 是 EJB3 和 JSF 中间的粘合剂,这是 Jboss Seam 最基本的和...在层与层之间,没有了必需的手动 JNDI 查找,没有了冗长的 JSF 支持 bean 的声明,没有了过多 facade 方法,没有了艰辛的对象传递,快哉!

    完整的Java代码审计学习笔记资源(免费下载)

    添加一些关于 jndi 的内容 3年前 java代码审计-sqli.md 第一的 4年前 java代码审计-ssrf.md 第一的 4年前 java代码审计-ssti.md 第一的 4年前 java代码审计-xss.md 第一的 4年前 java代码审计-xxe.md 第一的 4年前 ...

    jsp从入门到高级编程

    第一部分 JSP入门 第1章 概述 1.1 Java技术 1.1.1 Java技术的发展 1.1.2 JavaBeans 1.1.3 JDBC 1.1.4 J2EE 1.1.5 EJB 1.1.6 Java Servlet 1.2 JSP技术 1.2.1 JSP技术概述 1.2.2 JSP的优势及与其他Web开发...

    C语言上机练习题(据说是试题集)

    C语言上机练习题(据说是试题集) c语言 经典试题 从入门到精通,必备。 学好C语言,必备书籍!

    jsp servlet 入门学习资料-新手一看就懂

    第一部分 JSP入门 第1章 概述 1.1 Java技术 1.1.1 Java技术的发展 1.1.2 JavaBeans 1.1.3 JDBC 1.1.4 J2EE 1.1.5 EJB 1.1.6 Java Servlet 1.2 JSP技术 1.2.1 JSP技术概述 1.2.2 JSP的优势及与其他Web开发...

    Activiti6.0.x-中文版用户指南

    入门 o 2.1。一分钟版 o 2.2。Activiti设置 o 2.3。Activiti数据库设置 o 2.4。包括Activiti jar及其依赖项 o 2.5。下一步 • 3.配置 o 3.1。创建一个ProcessEngine o 3.2。ProcessEngineConfiguration bean o 3.3。...

    SpringBoot2.x入门教程之引入jdbc模块与JdbcTemplate简单使用方法

    主要介绍了SpringBoot2.x入门教程之引入jdbc模块与JdbcTemplate简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    weblogic10.3.6-win32.part07

    傻瓜式安装,安装就能用。 此安装程序支持多国语言,当然包括中文。 另外,多提一点,此版本的入门使用可以去搜一些资料。 如果要系统的学习控制台的使用,可以参考CONSOLE主页面中的“帮助”。

Global site tag (gtag.js) - Google Analytics