JNDI 配置:JBoss + MySQL

一、JNDI 名词解释

JNDI 是Java 命名和目录接口(Java Naming and Directory Interface,JNDI)的简称.从一开始就一直是 Java 2 平台企业版(JEE)的核心技术之一。在JMS,JMail,JDBC,EJB等技术中,就大量应用的这种技术。

命名服务:它提供了为给定的数据集创建一个标准名字的能力。它允许把名称同Java对象或资源关联起来,而不必指出对象或资源的物理ID。基本的名字操作包含在Context接口中。

目录服务:目录服务是一种特殊类型的数据库,与SQL Server、Access、Oracle等关系数据库管理系统相反,构造目录服务的目的是为了处理基于行为的事务,并且使用一种关系信息模型。基本的目录服务操作包含在DirContext接口中。

JNDI 的架构与实现

JNDI 的服务提供者

一个服务提供者就是一组Java类的集合,它支持开发者同目录服务进行通信,其方式类似于JDBC驱动程序与数据库之间的通信方式。能够用于JNDI的服务提供者必须实现Context接口或Context的扩展接口Directory- Context。

在使用JNDI时,读者只需要了解JNDI,而服务提供者才关注实际的网络协议、编码/解码值等细节。

当下载SDK软件开发包时,同时就下载了Sun公司的一些现有的服务提供者。这些服务提供者包括LDAP、NIS、COS(CORBA对象服务)、RMI注册及文件系统的提供者。如:hashtableObj.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.ldapCtx- Fatory")就是表示使用Sun LDAP服务提供者。当然如果要使用IBM服务提供者时就可以用com.ibm.jndi.LDAPCtxFatory来代替com.sun.jndi.ldap.ldapCtxFatory。

JNDI 的包

JNDI 包含5个包

·    javax.naming:主要用于命名操作,它包含了命名服务的类和接口,该包定义了Context接口和InitialContext类;

·    javax.naming.directory:主要用于目录操作,它定义了DirContext接口和InitialDir- Context类;

·    javax.naming.event:在命名目录服务器中请求事件通知;

·    javax.naming.ldap:提供LDAP支持;

·    javax.naming.spi:允许动态插入不同实现,为不同命名目录服务供应商的开发人员提供开发和实现的途径,以便应用程序通过JNDI可以访问相关服务。

常用的 JNDI 操作

常用的JNDI操作如下:

 void bind(String sName,Object object),绑定:把名称同对象关联的过程。

 void rebind(String sName,Object object),重新绑定:用来把对象同一个已经存在的名称重新绑定。一般使用rebind()而不使用bind(),因为当有重名的时候rebind()不会出现异常,而bind()会报异常。

 void unbind(String sName),释放:用来把对象从目录中释放出来。

 void lookup(String sName,Object object),查找:返回目录总的一个对象。

 void rename(String sOldName,String sNewName),重命名:用来修改对象名称绑定的名称。

 NamingEnumeration listBindings(String sName),清单:返回绑定在特定上下文中指定属性名对象的清单列表,它返回名字、类和对象本身,它用于那些需要对

具体使用情况如下:

//得到初始目录环境的一个引用

Context cntxt = new InitialContext();

//返回绑定在特定上下文中指定属性名对象的清单列表

NamingEnumeration namEnumList = ctxt.listBinding("cntxtName");

//循环列出所有名字、类和对象

while ( namEnumList.hasMore() )  {

    Binding bnd = (Binding) namEnumList.next();

    String sObjName = bnd.getName();

    String sClassName = bnd.getClassName();

    //得到对象

    SomeObject objLocal = (SomeObject) bnd.getObject();

}

NamingEnumeration list(String sName)与listBindings(String sName)相似,只是它只返回一系列名字/类映射,它主要是用于上下文浏览应用。

二、JNDI 配置

 配置 JNDI 资源

复制 JBoss 文档的数据库引用的数据源定义模板到 JBoss 服务器。 $DOC_HOME/docs/examples/jca/mysql-ds.xml ---> $Server_HOME/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/demo</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>

配置 JNDI 资源引用

为了让 JNDI 解析 java:comp/env/jdbc/mydatasource 引用,必须把 <resource-ref> 标签插入 web.xml 文件(Web 应用程序的部署描述符)

<resource-ref>: 资源引用,一般声明管理资源,如数据库驱动程序、JavaMail 会话、自定义类工厂等。
<resource-env-ref>: 资源环境引用,在Servlet 2.4里用来简化设置不需认证信息的资源环境,一般声明与资源相关的被管理对象,如环境参数、resource-ref变量。

<resource-ref>
   <res-ref-name>jdbc/mydatasource</res-ref-name>
   <jndi-name>java:MySqlDS</jndi-name>  // 指向真实的 JNDI name
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

<resource-ref> 入口告诉 servlet 容器,部署人员要在 组件命名上下文(component naming context) 中设置一个叫做 jdbc/mydatasource的资源。组件命名上下文由前缀 java:comp/env/ 表示,所以完全限定的本地资源名称是: java:comp/env/jdbc/mydatasource.

使用 JNDI 得到数据源

Connection conn=null;
try {
  Context ctx=new InitialContext();
  Object datasourceRef=ctx.lookup("java:comp/env/jdbc/mydatasource");
  DataSource ds=(Datasource)datasourceRef;
  Connection c=ds.getConnection();
  /* use the connection */
  c.close();
}
catch(Exception e) {
  e.printStackTrace();
}
finally {
  if(conn!=null) {
    try {
      conn.close();
    } catch(SQLException e) { }
  }
}

外部资源链接:

JNDI 在 J2EE 中的角色

详解JNDI的lookup资源引用java:/comp/env

tomcat下jndi的三种配置方式

Apache Tomcat 5.5 Servlet/JSP 容器

resource-ref和resource-env-ref

时间: 2024-11-05 22:36:00

JNDI 配置:JBoss + MySQL的相关文章

EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源

通过注解方式注入并使用其他EJB或者服务 真实项目EJB对象很多,EJB之间也可以互相调用, 在项目HelloWorld下新建接口Other在cn.hqu.ejb3下: public interface Other { public abstract String sayMe(); } 新建实现类OtherBean在cn.hqu.ejb3下: public class OtherBean implements Other { @Override public String sayMe() { r

jboss6.3 mariadb的jndi配置

jboss6.3 mariadb的jndi配置 在/usr/java/jboss/jboss-eap-6.3/modules/目录下创建文件夹com/mysql/main,创建后新建文件module.xml,文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="com.mysql"&g

配置JBoss数据源

配置JBoss数据源,为什么要在JBoss中配置数据源?这其实是面向对象思想的一种体现:通过容器管理对数据库的访问. 最开始我们通过JDBC访问数据库,什么Connection.Command都由我们自己创建.但每次打开关闭数据库很消耗资源,于是出现了数据库连接池,提前建立好对数据库的连接,用的时候去连接池取,用完了送回到连接池.这样虽然解决了资源消耗问题,但连接过程仍需要手动干预.后来在用Spring整合Hibernate时,出现了用Spring的IOC容器管理Hibernate对数据库的访问

tomcat dbcp 基于jndi配置时出现java.sql.SQLException: Already closed

最近观察生产环境发现一个现象,一段时间不操作,再重新操作时,数据库连接第一次会出现:java.sql.SQLException: Already closed.,如下: 数据源是用tomcat dbcp 基于jndi配置管理的,查了下,如下: 原因: You're probably running into the fact that MYSQL closes connections  which have been open "too long". Probably if you m

Apache Tomcat/6.0.39如何配置连接mysql,JDBC:mysql-connector-java-5.1.30-bin.jar-成功连接心得

http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html 前提:开启TOMCAT,MYsql MySQL DBCP Example0. Introduction Versions of MySQL and JDBC drivers that have been reported to work: MySQL 3.23.47, MySQL 3.23.47 using InnoDB,, MySQL 3.23

Discuz Windows 部署 配置 php mysql

Discuz! X 是一款以 PHP 为编程语言,以 MySQL 为数据库,并使用 Apache/IIS/Nginx(任意一种即可) 提供 web 服务的产品.要搭建 Discuz! X 站点,服务器必须安装由 PHP.MySQL.Apache/IIS/Nginx 构成的环境.其中,IIS 主要用于 Windows 服务器,Apache.Nginx 多用于 Linux 服务器(即 LAMP 和 LNMP) 下面以在 Windows 服务器上部署 IIS.MySQL.PHP 为例,演示搭建环境的具

在mac OS X中配置python mysql开发环境

1. 首先要下载安装mysql,下载地址: http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.19.tar.gz 解压: tar -xzvf mysql-5.6.19.tar.gz 然后下载gmock,编译mysql时需要用到: https://googlemock.googlecode.com/files/gmock-1.7.0.zip 解压到指定目录 <span style="font-size:14px;">unzi

OS X Mavericks 10.9.4 配置 Apache+MySQL+PHP 详细图文教程

很多时候我们需要将自己开发的程序在本地做测试,这个时候php运行环境就必不可少了,本文是根据笔者在网上找的一些资料加上自己的实践写出来的,以便自己日后参照,同时希望对有同样需求的同学可以多一份借鉴. 我这里用的是黑苹果,具体参数配置如下: CPU:Intel Xeon E3-1230 v2 主板:Asrock B75 Pro 3 显卡:七彩虹iGAME HD5870-GD5 CH版 内存:芝奇4GB*2 DDR3 1600 系统硬盘:英睿达CRUCIAL/镁光 M4 64G mSATA(自己X2

linux 下安装配置jboss as7以及部署应用

linux 下安装配置jboss as7以及部署应用 1.测试平台及软件 centos 5.4 jdk-7u5-linux-i586.rpm jboss-as-7.1.1.Final.zip jboss-as-quickstarts-7.1.1.CR2-dist.zip apache-maven-3.0.4-bin.tar.gz 2.安装相关软件 a.安装jdk [[email protected] ~]# chmod +x jdk-7u5-linux-i586.rpm [[email prot