當前位置:才華齋>IT認證>J2EE>

J2EE當前持久層設計常見問題

J2EE 閱讀(3.03W)

當前J2EE專案中,面臨的一個共同問題就是如果控制事務的併發訪問,雖然有些持久層框架已經為我們做了很多工作,但是理解原理,對於我們開發來說還是很有用處的。下面小編為大家整理了J2EE當前持久層設計的常見問題,一起來看看吧:

J2EE當前持久層設計常見問題

  事務併發訪問控制策略

當前J2EE專案中,面臨的一個共同問題就是如果控制事務的併發訪問,雖然有些持久層框架已經為我們做了很多工作,但是理解原理,對於我們開發來說還是很有用處的。

事務併發訪問主要可以分為兩類,分別是同一個系統事務和跨事務訪問的併發訪問控制,其中同一個系統事務可以採取樂觀鎖以及悲觀鎖策略,而跨多個系統事務時則需要樂觀離線鎖和悲觀離線鎖。在討論這四種併發訪問控制策略之前,先需要明確一下資料庫事務隔離級別的問題,ANSI標準規定了四個資料庫事務隔離級別,它們分別是:

  讀取未提交(Read Uncommitted)

這是最低的事務隔離級別,讀事務不會阻塞讀事務和寫事務,寫事務也不會阻塞讀事務,但是會阻塞寫事務。這樣造成的一個結果就是當一個寫事務沒有提交的時候,讀事務照樣可以讀取,那麼造成了髒讀的現象。

  讀取已提交(Read Committed)

採用此種隔離界別的時候,寫事務就會阻塞讀事務和寫事務,但是讀事務不會阻塞讀事務和寫事務,這樣因為寫事務會阻塞讀取事務,那麼從而讀取事務就不能讀到髒資料,但是因為讀事務不會阻塞其它的事務,這樣還是會造成不可重複讀的問題。

  可重複讀(Repeatable Read)

採用此種隔離級別,讀事務會阻塞寫事務,但是讀事務不會阻塞讀事務,但是寫事務會阻塞寫事務和讀事務。因為讀事務阻塞了寫事務,這樣以來就不會造成不可重複讀的問題,但是這樣還是不能避免幻影讀問題。

  序列化(serializable)

此種隔離級別是最嚴格的隔離級別,如果設定成這個級別,那麼就不會出現以上所有的問題(髒讀,不可重複讀,幻影讀)。但是這樣以來會極大的'影響到我們系統的效能,因此我們應該避免設定成為這種隔離級別,相反的,我們應該採用較低的隔離界別,然後再採用併發控制策略來進行事務的併發訪問控制)。

  延伸閱讀:Java EE容器組成:

Web容器:包括Jsp與Servlet元件,可使用EJB中的元件完成複雜的商務邏輯;

EJB容器:包含元件EJB, EJB規範定義了一個開發和部署分散式商業邏輯的框架;

Applet容器 包含元件Applet,即可使用J2SE開發Applet;

Application Client容器:包含元件Application Client。

現在流行的Java EE容器有很多:Tomcat、JBoss、Resin、Glassfish等等。下面對這四種Java EE容器進行了一番簡單的比對。

  1. Tomcat

Tomcat是Apache鼎力支援的Java Web應用伺服器,由於它優秀的穩定性以及豐富的文件資料,廣泛的使用人群,從而在開源領域受到最廣泛的青睞。

  2. Jboss

Jboss作為Java EE應用伺服器,它不但是Servlet容器,而且是EJB容器,從而受到企業級開發人員的歡迎,從而彌補了Tomcat只是一個Servlet容器的缺憾。

  3. Resin

Resin也僅僅是一個Servlet容器,然而由於它優秀的執行速度,使得它在輕量級Java Web領域備受喜愛,特別是在網際網路Web服務領域,眾多知名公司都採用其作為他們的Java Web應用伺服器,譬如163、ku6等。

在商用應用伺服器裡主要有:Weblogic、Websphere,其中Weblogic我也使用過很長一段時間,當時也只用其當Servlet容器,然而就在同等條件下,在效能及易用性等方面,要比Tomcat優秀很多。

  sfish

glassfish是Sun公司推出的Java EE伺服器(Java EE容器),一個比較活躍的開源社群,不斷的通過社群的反饋來提高其的可用性,經過glassfish v1 glassfish v2 到今天的glassfish v3 ,它已經走向成熟。Glassfish是一個免費、開放原始碼的應用服務,它實現了Java EE 5,Java EE 5 平臺包括了以下最新技術:EJB 3.0、JSF 1.2、Servlet 2.5、

JSP 2.1、JAX-WS 2.0、JAXB 2.0、 Java Persistence 1.0、Common Annonations 1.0、StAX 1.0等。

支援叢集,通過記憶體中會話狀態複製,增強了部署體系結構的可用性與可伸縮性,它對叢集有著很好的支援,可以簡單到通過新增機器,就可輕鬆的提高網站的帶負載能力,在解析能力方面,它對html的吞吐能力與apache伺服器不分上下,就是tomcat所不能比的,支援目錄部署,熱部署,解決了tomcat對熱部署能力的缺陷。

在版本方面做的更加人性化,有開發時用的簡化版,專門用於部署web專案的版本,還要完全符合j2ee標準的版本。