明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

無狀態(tài)Enterprise JavaBeans的觀點

[摘要]在Component-Base和N-Tier潮流下,無狀態(tài)(stateless)物件扮演著重要的角色。stateless物件是 OO 和Transaction Service兩項技術(shù)結(jié)合的產(chǎn)物。OO 技術(shù)強(qiáng)調(diào)的是彈性(felxibility)、重用性(reusability)和分散性(distri...
在Component-Base和N-Tier潮流下,無狀態(tài)(stateless)物件扮演著重要的角色。stateless物件是 OO 和Transaction Service兩項技術(shù)結(jié)合的產(chǎn)物。OO 技術(shù)強(qiáng)調(diào)的是彈性(felxibility)、重用性(reusability)和分散性(distribution),Transaction Service技術(shù)強(qiáng)調(diào)的是效率(performance)和延展性(scalability)。 Stateless物件是這兩項技術(shù)結(jié)合的重要支柱。

  傳統(tǒng)的OO技術(shù)大多著重于 Stateful 物件,然而在今天的MiddleWare(如EJB和 COM+/MTS)里面,Stateless物件的地位卻遠(yuǎn)遠(yuǎn)高于Stateful物件。尤其是在EJB的架構(gòu)里,Stateless有著非常重要的用途。例如Stateless的Session物件不需要長期保存自身的狀態(tài)值,也不專屬于特定的用戶(client),所以占用的服務(wù)器資源非常之少,也由于不隸屬于特定的用戶,所以許多EJB物件可以共用少數(shù)的Stateless物件。

  Stateless物件的特性

  就Client而言,在意的是server物件的外在行為,而行為又和物件的狀態(tài)無關(guān)。所以client物件不必在意物件狀態(tài)的變化,而不是此 種物件真的沒有狀態(tài)。比如說stateless的限制并不意味著stateless的session beans不能擁有屬性變量,所以,這些session beans一樣會擁有自己的內(nèi)部狀態(tài),然而重要的是,client不會看到這些內(nèi)部狀態(tài)。

  在Internet時代里,資訊系統(tǒng)的擴(kuò)展性(scalability)顯得無比重要,而高度擴(kuò)展性的前提是必須有效運用Server的資源,而無狀態(tài)的物件的資源共用性極大地減少了服務(wù)器的負(fù)載,因此,在開發(fā)N-Tier系統(tǒng)的時候,活用Stateless物件是系統(tǒng)開發(fā)人員必須具有的技能之一。

  使用Stateless支持交易

  當(dāng)企業(yè)資訊系統(tǒng)的Client數(shù)目大幅度增加的時候,每個Client能夠享有的共用資源(shared resources)自然會更加稀少。面對這個問題,除了投入更多的資源之外,好好協(xié)調(diào)以避免資源的浪費,達(dá)到充分共享,也是重要的解決之道。

  其中,數(shù)據(jù)庫是最典型的稀有共享資源,交易是協(xié)調(diào)這項共享資源的可靠技術(shù),如果加上Stateless物件,交易就會更加具有威力--更有效運用數(shù)據(jù)庫的connection,并能跨越不同的數(shù)據(jù)庫(即分布式交易)。

  交易是商業(yè)往來或異動的事件(event) 。事件一旦發(fā)生,企業(yè)資訊系統(tǒng)就會參與進(jìn)行一連串的作業(yè)過程(process),在這個過程中,會導(dǎo)致共享資源(比如數(shù)據(jù)庫的資料)的一連串異動。為了確保在異動過程中,不受到別的交易的干擾,也為了確保異動過程中的例外處理(比如roll back),“交易”就成為用來管理和協(xié)調(diào)共用資源的工具。

  在交易過程中,需要數(shù)據(jù)庫提供服務(wù)(即資源),以便能夠異動數(shù)據(jù)庫里面的資料,完畢后就把資源釋放,供彼得交易使用。在像EJB等系統(tǒng)的交易服務(wù)(transaction service)里 ,都必須具備有ACID(atomic,consistency,isolation,duration)四個特性,來做到上述的資源管理功能。

  一般來說,必須先取得和數(shù)據(jù)庫的溝通管道(connection) ,才能獲得數(shù)據(jù)庫的服務(wù),而數(shù)據(jù)庫的connection又很有限,所以協(xié)調(diào)connection成為管理數(shù)據(jù)庫資源的重心。讓每個client能盡快釋放connection成為重要的管理工作。

  在交易的進(jìn)行過程中,會取得所需的數(shù)據(jù)庫連接,一直到交易結(jié)束才會釋放掉,所以充分運用連接一定要注意兩點,一是交易的時間越短越好,交易越短就能越快速地釋放被占用的connection。二是交易所需要的connection越少越好,這樣就有更多的共享機(jī)會了。

  在component-based環(huán)境中,一個交易通常由一群物件所共同合作,每個物件可能由不同人所設(shè)計開發(fā),每個物件也都可能向數(shù)據(jù)庫索取connection。如果一個交易的參與物件越多,而且每個物件占用的connection時間越長,則這個交易就需要足夠多的connection才能完成任務(wù)。

  因此,“讓物件迅速釋放connection” 是提升數(shù)據(jù)庫資源運用效率的重要策略,stateless物件則是實現(xiàn)這個策略的重要技術(shù)。