??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩电影一区二区,午夜成人影视,亚洲 国产 日韩 综合一区http://www.aygfsteel.com/ljc-java/category/50294.html模仿中成长,在创C成功Q?/description>zh-cnMon, 05 Dec 2011 07:31:56 GMTMon, 05 Dec 2011 07:31:56 GMT60JAVA事务,JTA,JDBC,JDO,DAO,JNDI概念(转蝲) http://www.aygfsteel.com/ljc-java/articles/365595.htmlMon, 05 Dec 2011 07:17:00 GMThttp://www.aygfsteel.com/ljc-java/articles/365595.htmlhttp://www.aygfsteel.com/ljc-java/comments/365595.htmlhttp://www.aygfsteel.com/ljc-java/articles/365595.html#Feedback0http://www.aygfsteel.com/ljc-java/comments/commentRss/365595.htmlhttp://www.aygfsteel.com/ljc-java/services/trackbacks/365595.html一、什么是Java事务

通常的观念认为,事务仅与数据库相兟?/span> 
事务必须服从ISO/IEC所制定?/span>ACID原则?/span>

ACID是原子性(atomicityQ、一致性(consistencyQ、隔L(isolationQ和持久性(durabilityQ的~写?/span>

事务的原子性表CZ务执行过E中的Q何失败都导致事务所做的M修改失效?/span>

一致性表C当事务执行p|Ӟ所有被该事务媄响的数据都应该恢复到事务执行前的状态?/span>

隔离性表C在事务执行q程中对数据的修改,在事务提交之前对其他事务不可见?/span>

持久性表C已提交的数据在事务执行p|Ӟ数据的状态都应该正确?/span>


     
通俗的理解,事务是一l原子操作单元,从数据库角度_是一l?/span>SQL指oQ要么全部执行成功,若因为某个原因其中一条指令执行有错误Q则撤销先前执行q的所有指令。更{的说就是:要么全部执行成功Q要么撤销不执行?/span>


既然事务的概念从数据库而来Q那Java事务是什么?之间有什么联p?  实际上,一?/span>Java应用pȝQ如果要操作数据库,则通过JDBC来实现的。增加、修攏V删除都是通过相应Ҏ间接来实现的Q事务的控制也相应{UdJavaE序代码中。因此,数据库操作的事务习惯上就UCؓJava事务?/span>


二、ؓ什么需要事?/span>

事务是ؓ解决数据安全操作提出的,事务控制实际上就是控制数据的安全讉K。具一个简单例子:比如银行转帐业务Q̎?/span>A要将自己账户上的1000 元{?/span>B账户下面Q?/span>A账户余额首先要减?/span>1000元,然后B账户要增?/span>1000元。假如在中间|络出现了问题,A账户减去1000元已l结束,B因ؓ|络中断而操作失败,那么整个业务p|Q必d出控Ӟ要求A账户转帐业务撤销。这才能保证业务的正性,完成q个操走需要事务,?/span>A账户资金减少?/span>B账户资金增加方到一个事务里面,要么全部执行成功Q要么操作全部撤销Q这样就保持了数据的安全性?/span>


三?/span>
Java事务的类?/span> 
    Java 
事务的类型有三种Q?/span>JDBC事务?/span>JTA(Java Transaction API)事务、容器事务?/span> 
1
?/span>JDBC事务 
JDBC 
事务是用 Connection 对象控制的?/span>JDBC Connection 接口( java.sql.Connection )提供了两U事务模式:自动提交和手工提交?/span> java.sql.Connection 提供了以下控制事务的ҎQ?/span>

public void setAutoCommit(boolean) 
public boolean getAutoCommit() 
public void commit() 
public void rollback() 
使用 JDBC 事务界定Ӟ您可以将多个 SQL 语句l合C个事务中?/span>JDBC 事务的一个缺Ҏ事务的范围局限于一个数据库q接。一?/span> JDBC 事务不能跨越多个数据库?/span> 
2
?/span>
JTA(Java Transaction API)事务 
    JTA 
是一U高层的Q与实现无关的,与协议无关的APIQ应用程序和应用服务器可以?/span>JTA来访问事务?/span> 
JTA
允许应用E序执行分布式事务处?/span>--在两个或多个|络计算源上讉Kq且更新数据Q这些数据可以分布在多个数据库上?/span>JDBC驱动E序?/span>JTA支持极大地增Z数据讉K能力?/span> 
如果计划?/span> JTA 界定事务Q那么就需要有一个实?/span> javax.sql.XADataSource ?/span> javax.sql.XAConnection ?/span> javax.sql.XAResource接口?/span> JDBC 驱动E序。一个实Cq些接口的驱动程序将可以参与 JTA 事务。一?/span> XADataSource 对象是一?/span>XAConnection 对象的工厂?/span> XAConnection s 是参?/span> JTA 事务?/span> JDBC q接?/span> 
您将需要用应用服务器的理工具讄 XADataSource 。从应用服务器和 JDBC 驱动E序的文档中可以了解到相关的指导?/span> 
J2EE 
应用E序?/span> JNDI 查询数据源。一旦应用程序找C数据源对象,它就调用 javax.sql.DataSource.getConnection() 以获得到数据库的q接?/span> 
     XA 
q接与非 XA q接不同。一定要C XA q接参与?/span> JTA 事务。这意味着 XA q接不支?/span> JDBC 的自动提交功能。同Ӟ应用E序一定不要对 XA q接调用 java.sql.Connection.commit() 或?/span> java.sql.Connection.rollback() 。相反,应用E序应该使用 UserTransaction.begin()?/span> UserTransaction.commit() ?/span> serTransaction.rollback() ?/span>

3、容器事?/span> 
     
容器事务主要?/span>J2EE应用服务器提供的Q容器事务大多是ZJTA完成Q这是一个基?/span>JNDI的,相当复杂?/span>API实现。相对编码实?/span>JTA 事务理Q我们可以通过EJB容器提供的容器事务管理机ӞCMTQ完成同一个功能,q项功能?/span>J2EE应用服务器提供。这使得我们可以单的指定哪个方法加入事务,一旦指定,容器负责事务管理Q务。这是我们土建的解决方式Q因为通过q种方式我们可以事务代码排除在逻辑~码之外Q同时将所有困难交l?/span> J2EE容器去解冟뀂?/span>EJB CMT的另外一个好处就是程序员无需兛_JTA API的编码,不过Q理Z我们必须使用EJB?/span> 
四、三U事务差?/span> 
1
?/span>JDBC事务控制的局限性在一个数据库q接内,但是其用简单?/span> 
2
?/span>JTA事务的功能强大,事务可以跨越多个数据库或多个DAOQ用也比较复杂?/span> 
3
、容器事务,主要指的?/span>J2EE应用服务器提供的事务理Q局限于EJB应用使用?/span> 


JTA

Java事务APIQJTAQJava Transaction APIQ和它的同胞Java事务服务(JTSQJava Transaction Service)QؓJ2EEq_提供了分布式事务服务。一个分布式事务Qdistributed transactionQ包括一个事务管理器Qtransaction managerQ和一个或多个资源理?resource manager)。一个资源管理器Qresource managerQ是Lcd的持久化数据存储。事务管理器Qtransaction managerQ承担着所有事务参与单元者的怺通讯的责仅R下图显CZ事务理器和资源理的间的关pR?/span>


JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库q接?/span>下列M个Javaq_的组仉可以参与C个JTA事务中:

JDBCq接

  • JDO PersistenceManager 对象
  • JMS 队列
  • JMS 主题
  • 企业JavaBeansQEJBQ?/span>
  • 一个用J2EE Connector Architecture 规范~译的资源分配器?/span>


DAO

DAO是Data Access Object数据讉K接口Q数据访问:֐思义是与数据库打交道。夹在业务逻辑与数据库资源中间。对数据库进行CURDQ增删查Ҏ作)?/span>

 

  在核?/span>J2EE模式中是q样介绍DAO模式的:Z建立一个健壮的J2EE应用Q应该将所有对数据源的讉K操作抽象装在一个公共API中。用E序设计的语a来说Q就是徏立一个接口,接口中定义了此应用程序中会用到的所有事务方法。在q个应用E序中,当需要和数据源进行交互的时候则使用q个接口Qƈ且编写一个单独的cL实现q个接口在逻辑上对应这个特定的数据存储?/span>


JDBC

JDBCQJava Data Base Connectivity,java数据库连接)是一U用于执行SQL语句的Java APIQ可以ؓ多种关系数据库提供统一讉KQ它׃l用Java语言~写的类和接口组成。JDBC为工?数据库开发h员提供了一个标准的APIQ据此可以构建更高的工具和接口Q数据库开发h员能够用U? Java API ~写数据库应用程序,同时QJDBC也是个商标名?/span>

 

有了JDBCQ向各种关系数据发送SQL语句是一件很Ҏ的事。换a之,有了JDBC APIQ就不必问Sybase数据库专门写一个程序,问Oracle数据库又专门写一个程序,或ؓ讉KInformix数据库又~写另一个程序等{,E序员只需用JDBC API写一个程序就够了Q它可向相应数据库发送SQL调用。同ӞJava语言和JDBCl合h使程序员不必Z同的q_~写不同的应用程序,只须写一遍程序就可以让它在Q何^Cq行Q这也是Java语言“~写一ơ,处处q行”的优ѝ?/span>


单地_JDBC 可做三g事:与数据库建立q接、发? 操作数据库的语句q处理结果?/span>


JDO

JDO(Java Data Object )是一个JAVA用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发h员来_存储数据对象完全不需要额外的代码Q如JDBC API的用)。这些繁琐的例行工作已经转移到JDO产品提供商n上,使开发h员解脱出来,从而集中时间和_֊在业务逻辑上。另外,JDO很灵z,因ؓ它可以在M数据底层上运行。JDBC只是面向关系数据库(RDBMSQJDO更通用Q提供到M数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMSQ等{,使得应用可移植性更强?/span>


JNDI

英文全称?Java Naming and Directory Interface

术语解释Q一l帮助做多个命名和目录服务接口的API?/span>

JNDI(Java Naming and Directory Interface)是SUN公司提供的一U标准的Java命名pȝ接口QJNDI提供l一的客LAPIQ通过不同的访问提供者接口JNDI SPI的实玎ͼq理者将JNDI API映射为特定的命名服务和目录系l,使得Java应用E序可以和这些命名服务和目录服务之间q行交互。集JNDI实现了高可靠性JNDI[8]Q通过服务器的集群Q保证了JNDI的负载^衡和错误恢复。在全局׃n的方式下Q集中的一个应用服务器保证本地JNDI树的独立性,q拥有全局的JNDI树。每个应用服务器在把部v的服务对象绑定到自己本地的JNDI树的同时Q还l定C个共享的全局JNDI树,实现全局JNDI和自wJNDI的联pR?/span>


 

JNDI(Java Naming and Directory Interface)是一个应用程序设计的APIQؓ开发h员提供了查找和访问各U?/span>

 

命名和目录服务的通用、统一的接口,cMJDBC都是构徏在抽象层上?/span>

 

JNDI可访问的现有的目录及服务有:DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol d目录讉K协议)? CORBA对象服务、文件系l、Windows XP/2000/NT/Me/9x的注册表、RMI?div>DSML v1&v2、NIS?/span>

 


JNDI与JDBC

JNDI提供了一U统一的方式,可以用在|络上查扑֒讉K服务。通过指定一个资源名Uͼ该名U对应于数据库或命名服务中的一个记录,同时q回数据库连接徏立所必须的信息?/span>

JNDI主要有两部分l成Q应用程序编辑接口和服务供应商接口。应用程序编E接口提供了Java应用E序讉K各种命名和目录服务的功能Q服务供应商接口提供了Q意一U服务的供应商用的功能?/span>



2011-12-05 15:17 发表评论
]]>
վ֩ģ壺 | | | | | ɽ| | | ɽ| | | ʯ| | ŷ| Դ| | ƽ| | | | ƶ| ˮ| Զ| ֦| | ԭ| Ӽ| | | ƽ| ƽ| | ع| ͷ| Ϋ| Ǩ| ֺ| ʡ| ˮ| | |