[原创]Weblogic之JNDI和JTA的理解_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2346 | 回复: 0   主题: [原创]Weblogic之JNDI和JTA的理解        下一篇 
ruiyu.yu
注册用户
等级:少尉
经验:331
发帖:15
精华:0
注册:1970-1-1
状态:离线
发送短消息息给ruiyu.yu 加好友    发送短消息息给ruiyu.yu 发消息
发表于: IP:您无权察看 2016-10-27 15:16:06 | [全部帖] [楼主帖] 楼主

   JNDI

    1、简介

    JNDI,是Java Naming and Directory Interface的缩写,也就是Java命名和目录接口的意思。它是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录服务,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。

    命名服务:就像DNS一样,通过命名服务器提供服务,大部分的J2EE服务器都含有命名服务器

    目录服务:一种简化的RDBMS系统,通过目录具有的属性保存一些简单的信息,目录服务通过目录服务器实现。

    

    2、运行机制

    (1)、首先程序代码获取初始化的 JNDI 环境并且调用 Context.lookup() 方法从 JNDI 服务提供者那里获一个 DataSource 对象

(2)、中间层 JNDI 服务提供者返回一个 DataSource 对象给当前的 Java 应用程序这个 DataSource 对象代表了中间层服务上现存的缓冲数据源

(3)、应用程序调用 DataSource 对象的 getConnection() 方法

(4)、当 DataSource 对象的 getConnection() 方法被调用时,中间层服务器将查询数据库 连接缓冲池中有没有 PooledConnection 接口的实例对象。这个 PooledConnection 对象将被用于与数据库建立物理上的数据库连接

(5)、如果在缓冲池中命中了一个 PooledCoonection 对象那么连接缓冲池将简单地更 新内部的缓冲连接队列并将该 PooledConnection 对象返回。如果在缓冲池内没 有找到现成的 PooledConnection 对象,那么 ConnectionPoolDataSource 接口将会被 用来产生一个新的 PooledConnection 对象并将它返回以便应用程序使用

(6)、中间层服务器调用 PooledConnection 对象的 getConnection() 方法以便返还一个 java.sql.Connection 对象给当前的 Java 应用程序

(7)、当中间层服务器调用 PooledConnection 对象的 getConnection() 方法时, JDBC 数据 库驱动程序将会创建一个 Connection 对象并且把它返回中间层服务器

(8)、中间层服务器将 Connection 对象返回给应用程序 Java 应用程序,可以认为这个 Connection 对象是一个普通的 JDBC Connection 对象使用它可以和数据库建立。事 实上的连接与数据库引擎产生交互操作 。

(9)、当应用程序不需要使用 Connection 对象时,可以调用 Connection 接口的 close() 方 法。请注意这种情况下 close() 方法并没有关闭事实上的数据库连接,仅仅是释 放了被应用程序占用的数据库连接,并将它还给数据库连接缓冲池,数据库连接 缓冲池会自动将这个数据库连接交给请求队列中下一个的应用程序使用。


    3、架构

    JNDI由两部分组成:客户API和服务提供商接口(SPI)。

    客户API是程序通过客户API提供的接口,实现对命名服务和目录服务的操作,比如注册一个命名、查询、删除、生成一个命名管理结构等。

    服务提供商接口是用于构建JNDI实现的框架。借助于SPI,能够动态插入命名和目录服务提供商的产品。


    4、好处

   (1)、包含大量命名和目录服务,可以使用相同API调用访问任何命名或目录服务器,比如在Tomcat中使用DBCP的连接池。

   (2)、可以同时连接多个命名和目录服务,比如在DBCP连接池中配置Mysql和Oracle数据库。

   (3)、允许把名称同JAVA对象或资源关联起来,不必知道对象或资源的物理ID。

   (4)、使用通用接口访问不同种类的目录服务。

   (5)、使得开发人员能够集中使用和实现一种类型的命名和目录服务客户API上。


    5、主要用途

    在J2EE环境下,JNDI的主要用途:

    (1)、使用JNDI获得对JAVA事务API中的UserTransaction接口的应用

    (2)、借助于JNDI,连接到资源工厂,比如JDBC、JMS等

    (3)、在EJB组件中,借助于JNDI查找其它的EJB组件。


    6、示例

    如下所示,在context.xml中相关配置:

    <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"

               maxActive="100" maxIdle="30" maxWait="10000"

               username="root" password="123" driverClassName="com.mysql.jdbc.Driver"

               url="jdbc:mysql://localhost:3306/test"/>

    其中username为你的用户名,password是密码。maxActive指定最大的连接数,maxIdle指定最大的空闲连接数(即没有连接时,保存多少连接),maxWait指定最大的等待连接数。

  然后在web.xml中配置指定的资源名称(不是必须的)

  <resource-ref>

      <description>DB Connection</description>

      <res-ref-name>jdbc/TestDB</res-ref-name>

      <res-type>javax.sql.DataSource</res-type>

      <res-auth>Container</res-auth>

  </resource-ref>

其他的配置如Oracle仅仅是需要的数据库驱动和创建的JNDI名称不同:

<Resource name="jdbc/myoracle" auth="Container"

              type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"

              url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"

              username="scott" password="tiger" maxActive="20" maxIdle="10"

              maxWait="-1"/>

其实也可以把他们都放在xml下面,注释不用的就可以了。



JTA


JTA,即Java Transaction API(Application Programming Interface),是一组java接口用于描述,J2ee框架中事务管理器与应用程序,资源管理器,以及应用服务器之间的事务通讯。

JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序的JTA支持极大地增强了数据访问能力。


在异构环境中,通常会发现一个事务管理器(Transaction Manager),负责处理分布式事务。(实际上,事务管理器可以完成大量的工作负载平衡。)因此,不仅存在到数据库的直接连接,还有到事务管理器(Transaction Manager)的连接。这就是 JTA 发挥作用的地方:JTA 是 Java 应用程序和事务管理器(Transaction Manager)之间的接口。

由于存在事务管理器(Transaction Manager),它通常包含在应用程序服务器(Application Server)中,就不再有两层(Two-Tier)架构。传统的客户/服务器(Client/Server)架构已经由三层(Tree-Tier)架构所取代,三层架构包含应用程序/客户机、事务管理器(Transaction Manager)/应用程序服务器(Application Server)和数据库服务器,而数据库服务器一般称作 XA Resource。













    

    


        





赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论