J2EE應用體系中有很多名詞,其中就包括JTA和JTS,剛一接觸能夠感覺到兩者存在某種特定的關系,但是卻無法顧名思義。因為平常工作用的都是C++開發,很少看這些玩意,不知道也就不知道吧,反正就是一種技術而已。可是最近因為學習的緣故,需要弄清楚這兩者之間的關系,于是在網上找了一些資料,也稍微做了一下思考,感覺SUN太喜歡故弄玄虛了,搞這麼多名詞還不能顧名思義。JTA和JTS是用于分布式事務管理的一套約定或規範。
大體上所來,JTA是一種接口規範,定義了一套接口,接口定義了相關的程式角色之間需要遵守的約定,JTA中約定了幾種主要的程式角色,分别是事務管理器、事務客戶、應用伺服器、資料總管。簡單地說來就是,事務客戶發起事務,應用伺服器根據事物客戶的請求決定如何向事務管理器體送出一個事務請求,如建立一個(require new),參與(require)等,事務管理器接收到了應用伺服器發出的事務請求,然後事務管理器根據某種特定的協定(一般是兩階段送出協定)和資料總管通過交換事務上下文來實作事務的功能。在這裡,事務客戶使用UserTransaction接口,應用伺服器使用TransactionManager、Transaction、Synchronization接口,資料總管實作XAResource接口。
那麼JTS呢?JTA和JTS的關系如何呢?上面的内容有提到事務管理器要和資料總管要進行事務上下文傳播的互動,其中應用伺服器和事務管理器之間也有傳播事務上下文的互動,有時候事務客戶和應用伺服器也需要傳播事務上下文,衆所周知,隻要涉及到軟體互動往往都會有一套規範。那麼如何來傳遞這種事務上下文呢?這就是JTS了。JTS也定義了一套規範,它約定了各個程式角色之間如何傳遞事務上下文,它源自CORBA 的OTS規範,基于IIOP(一種軟體互動協定)。不要認為JTS是JTA的實作,JTA其實就定義了一個空架子,告訴JTA的實作者應該怎樣做怎樣做,但是具體到做的時候JTS就來插一手了。因為JTA約定的這些角色要進行事務上下文的互動啊,JTS約定了應該怎樣去進行互動。
總體上來說JTA更多的是從架構的角度來約定程式角色的接口,而JTS則是從具體實作的角度來約定程式角色之間的接口,兩者各司其職。照這樣看來,SUN搞出來的這兩個名字還真有點藝術感,有點哲學的味道了。