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

[原创]对于JNDI和JTA的学习

一、JNDI

     1.基本概念

     JNDI(The Naming and Directory Interface,Java命名和目录接口)是一组Java应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。

     Naming Service命名服务,本质上是一种注册和定位服务,即将名字和一个对象相关联,通过名字可以方便地找到对应的对象。例如:文件系统就包含了一个命名服务,你可以通过文件名找到对应的文件对象。

     Directory Service目录服务,是命名服务的扩展和提高,提供了对命名信息的管理和操作,即对属性的查询、增加、修改、删除操作。

     目录服务器,是提供命名和目录服务的系统,实际上是一种特殊的数据库,其结构为树状目录,特别适合查询多但更新少的应用。常见的目录服务器:LDAP,DNS等。

     Directory目录,目录是目录服务器的主体,通过属性来保存命名信息。

     Context上下文,目录中的每个节点可以被认为是一个上下文,目录服务允许我们读取和修改上下文相关的属性,并且可以用这些属性作为过滤器来搜索一个上下文。

    Service Provider服务提供者,每一个目录服务器都要求有一个服务提供者,以把JNDI映射到该目录服务所支持的特定 操作。

     2.JNDI架构

     JNDI架构提供了一组标准的独立于命名系统的API,这些API构建在与命名系统有关的驱动之上。这一层有助于将应用与实际数据源分离,���此不管应用访问的是LDAP、RMI、DNS、还是其他的目录服务。换句话说,JNDI独立于目录服务的具体实现,只要你有目录的服务提供接口(或驱动),你就可以使用目录。

    JNDI制定了一组公开的API和一组SPI,API是面向应用程序开发者的,SPI是面向目录服务器生产厂商。

     3.JNDI API

     JNDI API 由5个包组成:javax.naming 提供了访问命名服务的类和接口,其中最重要的是Context和InitalContext接口,它们是命名服务器的入口。

     Javax.naming.directory:对命名包的扩充,提供了访问目录服务的类和接口。例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。

    Javax.naming.event:提供了对访问命名和目录服务时的时间通知的支持。例如,定义了NamingEvent类,这个类用来表示命名/目录服务产生的事件,定义了侦听NamingEvents的NamingListener接口。

     Javax.naming.ldap:这个包提供了对LDAP 版本3扩充的操作和控制的支持,通用包javax.naming.directory没有包含这些操作和控制。

     Javax.naming.spi:这个包提供了一个方法,通过javax.naming和有关包动态增加对访问命名和目录服务的支持。这个包是为有兴趣创建服务提供者的开发者提供的。

二、JTA

     JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。Java事务API(JTA;Java Transaction API)和它的同胞Java事务服务(JTS;Java Transaction Service),为J2EE平台提供了分布式事务服务��一个分布式事务(distributed transaction)包括一个事务管理器(transaction manager)和一个或多个资源管理器(resource manager)。一个资源管理器(resource manager)是任意类型的持久化数据存储。事务管理器(transaction manager)承担着所有事务参与单元者的相互通讯的责任。下车站显示了事务管理器和资源管理的间的关系。

     常用的DAO模式事务界定方式除了JTA事务,还有JDBC事务。

     JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。
      在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。
      在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性。

       JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接,JDO PersistenceManager 对象,JMS 队列,JMS 主题,企业JavaBeans(EJB),一个用J2EE Connector Architecture 规范编译的资源分配器。

     一般情况下,J2EE应用服务器是支持JDBC事务、JTA事务、容器管理事务三种事务的。




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