欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
在spring中使用聲明型事務(wù)

spring使用aop機制管理jdbc的連接和事務(wù)。它使用TransactionInterceptor類(lèi),Spring事務(wù)支持中的核心接口是
org.springframework.transaction.PlatformTransactionManager。為了實(shí)際執行事務(wù),Spring所有的事務(wù)劃分功能都通過(guò)傳遞適當的TransactionDefinition實(shí)例,委托給 PlatformTransactionManager。
盡管PlatformTransactionManager接口可以直接使用,應用程序通常配置具體的事務(wù)管理器并使用聲明性事務(wù)來(lái)劃分事務(wù)。
Spring具有多種PlatformTransactionManager實(shí)現,它們分為兩類(lèi):
局部事務(wù)策略即針對單個(gè)資源執行事務(wù)(主要是針對單個(gè)的數據庫)。實(shí)現有 org.springframework.jdbc.datasource.DataSourceTransactionManager。它用于jdbc數據源的配置,調用TransactionInterceptor開(kāi)是一個(gè)事務(wù),
從DataSource得到一個(gè)connection并確保auto-commit設為disabled。他用JdbcTemplate在一個(gè)線(xiàn)程內綁定一個(gè)JDBC connection,TransactionInterceptor負責提交事務(wù),
DataSourceTransactionManager 調用Connection.commit()關(guān)閉connection,并解除綁定(potentially allowing for one thread connection per data source)。
例如
<bean id="DataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521:hua2</value>
</property>
<property name="username">
<value>user</value></property>
<property name="password">
<value>gotpassword</value>
</property>
</bean>
</beans>
<bean id="DataSourceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="DataSource" />
</bean>
<bean id="tatanTransactionScriptsProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<idref bean="tatanTransactionScripts" />
</list>
</property>
<property name="interceptorNames">
<list>
<idref bean="DataSourceTransactionInterceptor" />
</list>
</property>
</bean>
<bean id="DataSourceTransactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager"
ref="DataSourceTransactionManager" />
<property name="transactionAttributeSource">
<value>
com.tatan.tatanTransactionScriptsImpl.*=PROPAGATION_REQUIRED
</value>
</property>
</bean>
transactionAttributesSource 屬性指定每個(gè)方法的transaction attribute,PROPAGATION_REQUIRED說(shuō)明在一個(gè)事務(wù)內這個(gè)方法被執行。
和EJB一樣,默認的情況下,spring只有當unchecked exception被拋出時(shí),才rollback事務(wù),也可以自己加入checked exception。
tatanTransactionScripts被TransactionInterceptor封裝,在一個(gè)事物內執行類(lèi)的每一個(gè)方法。
更為簡(jiǎn)單的配置

    <bean id="UserManagerTran"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager">
                <ref bean="transactionManager"/></property>
            <property name="target"><ref bean="UserManager"/></property>
            <property name="transactionAttributes">
                <props>
                    <prop key="insert*">
                        PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED</prop>
                    <prop key="tran*">
                        PROPAGATION_REQUIRED, ISOLATION_SERIALIZABLE</prop>
                    <prop key="deposit*">
                        PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED</prop>
                </props>
            </property>
        </bean>
         <bean id="transactionManager"
           class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
           <property name="dataSource"><ref bean="dataSource"/></property>
       </bean>

(The TransactionProxyFactoryBean is a ProxyFactoryBean where every bean is adviced with a TransactionInterceptor. And the TransactionInterceptor is a piece of advice.
So you can use a seperate TransactionInterceptor and ProxyFactoryBean. But if you are lazy/smart, you can use the TransactionProxyFactoryBean that does the same thing (only less configuration needed))
對于特定的方法或方法命名模式,代理的具體事務(wù)行為由事務(wù)屬性驅動(dòng),如下面的例子所示:
<prop key="insert*">
ROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED
</prop>
key屬性確定代理應該給哪個(gè)方法增加事務(wù)行為。這樣的屬性最重要的部份是傳播行為。有以下選項可供使用:
PROPAGATION_REQUIRED--支持當前事務(wù),如果當前沒(méi)有事務(wù),就新建一個(gè)事務(wù)。這是最常見(jiàn)的選擇。
PROPAGATION_SUPPORTS--支持當前事務(wù),如果當前沒(méi)有事務(wù),就以非事務(wù)方式執行。
PROPAGATION_MANDATORY--支持當前事務(wù),如果當前沒(méi)有事務(wù),就拋出異常。
PROPAGATION_REQUIRES_NEW--新建事務(wù),如果當前存在事務(wù),把當前事務(wù)掛起。
PROPAGATION_NOT_SUPPORTED--以非事務(wù)方式執行操作,如果當前存在事務(wù),就把當前事務(wù)掛起。
PROPAGATION_NEVER--以非事務(wù)方式執行,如果當前存在事務(wù),則拋出異常。
PROPAGATION_NESTED--如果當前存在事務(wù),則在嵌套事務(wù)內執行。如果當前沒(méi)有事務(wù),則進(jìn)行與PROPAGATION_REQUIRED類(lèi)似的操作。
前六個(gè)策略類(lèi)似于EJB CMT,第七個(gè)(PROPAGATION_NESTED)是Spring所提供的一個(gè)特殊變量。
它要求事務(wù)管理器或者使用JDBC 3.0 Savepoint API提供嵌套事務(wù)行為(如Spring的DataSourceTransactionManager)。
事務(wù)屬性中的readOnly標志表示對應的事務(wù)應該被最優(yōu)化為只讀事務(wù)。這是一個(gè)最優(yōu)化提示。在一些情況下,一些事務(wù)策略能夠起到顯著(zhù)的最優(yōu)化效果,例如在使用Object/Relational映射工具(如:Hibernate或TopLink)時(shí)避免dirty checking(試圖“刷新”)。
在事務(wù)屬性中還有定義“timeout”值的選項,指定事務(wù)超時(shí)為幾秒。在JTA中,這將被簡(jiǎn)單地傳遞到J2EE服務(wù)器的事務(wù)協(xié)調程序,并據此得到相應的解釋。

   全局事務(wù)管理即執行有可能跨越多個(gè)資源的全局事務(wù)。主要對應的Spring類(lèi)是org.springframework.transaction.jta.JtaTransactionManager,它委托給遵循JTA規范的J2EE服務(wù)器,也有例外。
spring支持JTA,只需要一個(gè)標準的JtaTransactionManager定義,數據庫必須支持XA protocol,或者J2EE服務(wù)器提供支持XA規范的DataSource。
默認的Spring JtaTransactionManager設置將從標準的JNDI位置獲取JTA的 javax.transaction.UserTransaction對象,該JNDI位置由J2EE指定:java: comp/UserTransaction。對于大多數標準J2EE環(huán)境下的用例來(lái)說(shuō),它工作良好。
但是,默認的 JtaTransactionManager不能執行事務(wù)掛起操作(即它不支持PROPAGATION_REQUIRES_NEW和 PROPAGATION_NOT_SUPPORTED)。原因是標準的JTA UserTransaction接口不支持掛起或恢復事務(wù)的操作;它只支持開(kāi)始和完成新事務(wù)的操作。
為執行事務(wù)掛起操作,還需要提供javax.transaction.TransactionManager實(shí)例,按照JTA的規定,它提供標準的掛起和恢復方法。遺憾的是,J2EE沒(méi)有為JTA TransactionManager定義標準的JNDI位置!
因此,必須使用特定于供應商的(vendor-specific)查尋機制。J2EE沒(méi)有考慮把JTA TransactionManager接口作為它的公開(kāi)API的一部分。JTA規范規定的TransactionManager接口原本是打算用于容器集成的。
但是為JTA TransactionManager定義標準的JNDI位置還是有重大意義的,尤其是對于輕量級容器(如Spring);然后,便可以以同樣的方式來(lái)定位任意的J2EE服務(wù)器的JTA TransactionManager。
結合jboss JTA的Spring事務(wù)劃分
oracle-ds.xml
<?xml version="1.0" encoding="UTF-8"?>

<datasources>
<xa-datasource>
  <jndi-name>XASpringDS</jndi-name>
  <track-connection-by-tx/>
  <isSameRM-override-value>false</isSameRM-override-value>
  <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
  <xa-datasource-property name="URL">jdbc:oracle:oci8:@orcl</xa-datasource-property>
  <xa-datasource-property name="User">SCOTT</xa-datasource-property>
  <xa-datasource-property name="Password">tiger</xa-datasource-property>
  <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
  <no-tx-separate-pools/>
</xa-datasource>
<mbean
  code="org.jboss.resource.adapter.jdbc.xa.oracle.OracleXAExceptionFormatter"
  name="jboss.jca:service=OracleXAExceptionFormatter">
  <depends optional-attribute-name="TransactionManagerService">
   jboss:service=TransactionManager</depends>
</mbean>
</datasources>
spring配置
<!-- Data source bean -->

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName"><value>java:/XASpringDS</value></property>
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>

Spring有效地將DAO實(shí)現從實(shí)際的運行時(shí)環(huán)境中分離出來(lái),允許在J2EE容器之外輕松地測試或重用用。
Spring提供了多種事務(wù)策略,比如JtaTransactionManager和JDBC DataSourceTransactionManager,
前者委托給J2EE服務(wù)器的事務(wù)協(xié)調程序,后者則針對單個(gè)JDBC DataSource(即單個(gè)的目標數據庫)執行事務(wù)。
通過(guò)對后端配置進(jìn)行簡(jiǎn)單的更改,就能夠輕松地調整事務(wù)策略適應另一個(gè)環(huán)境。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
SpringFramework(8)
spring 事務(wù)管理(Transaction) 例子
SpringBoot整合分布式事務(wù),JTA+Atomikos實(shí)現多數據源
spring+ibatis事務(wù)配置
Spring事務(wù)管理
TransactionManager
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久