J2EE項目開發風險彙總

在各種各樣的風險中,有些風險只是延緩了項目的進度,有些帶來了一些不必要的工作,而另一些則會把成功的可能性徹底地消除。下面小編總結了J2EE項目開發的風險,提供給大家參考!

J2EE項目開發風險彙總

  風險1:沒有真正理解 Java, EJB, 和J2EE

這個問題可以分解爲3個部分,以便於分析。

描述: 沒有真正理解Java

項目階段:開發

影響階段:設計、穩定性測試、成熟期

對系統性能的影響:可維護性、可擴展性、性能

症狀:

重複開發了JDK核心API中的功能或類

不懂得以下列表中的某些項(這只是一些主題或者實際例子而已):

垃圾收集器 (train, generational, incremental, synchronous, asynchronous)

對象在何時能被進行垃圾收集 dangling references

使用的繼承機制及其權衡

overriding和overloading方法

爲什麼ng (在這裏用你所中意的類代替) 提供的性能不好

Java中的passby參考語義和EJB中passby值的語義的比較

使用 == 或者使用equals() 方法 for nonprimitives

在不同平臺上Java線程的運行順序方式(例如是否是搶先方式的)

新線程和本地線程的比較

Hotspot技術(以及爲什麼舊的性能調整技術降低了Hotspot 的優化效果)

JIT,以及什麼時候好的JIT變得不好(未安裝的JAVA編譯器,以及你的代碼運行得剛夠良好)

API蒐集

RMI

規避方案:

你需要不斷改進Java方面的知識,尤其是深入瞭解Java的優勢和不足之處。Java的存在價值已經遠不止是一種語言,理解平臺(JDK及工具等)也是同樣重要的。具體地說,你應該是經過認證的Java程序員,如果你不是的話,也許你有時會爲還有那麼多不知道的內容而感到驚訝。另外,你可以加入Java的郵件列表。以前我曾加盟過的每一個公司都加入了這樣的郵件列表,從同行中學到技術,這將是你最好的資源。

備註:

如果你或者你的團隊中的成員不真正瞭解編程語言和平臺,怎麼還能保持成功的希望呢?強幹的Java程序員之於EJB和J2EE,就象是鴨子之於水一樣。與此相反,比較弱的、沒有經驗的程序員只能開發出質量低劣的J2EE應用程序。

描述: 沒有真正理解EJB

項目階段:

設計

影響階段:

開發、穩定化

對系統的影響:

維護

症狀:

EJB在第一次被調用後沒有再被使用到(尤其是stateless session bean)

沒有重複利用價值的EJB

不理解開發者要做什麼,容器提供什麼

EJB沒有依照規範定義(fire線程, 加載了本地庫,試圖執行I/O,等等)

解決方案:

要改進關於EJB方面的知識,可以找一個週末來閱讀EJB規範 (1.1版有314頁),然後閱讀2.0規範(524頁!),這樣可以瞭解到1.1沒有定義到的而在2.0規範中補充的內容。EJB開發者從18.1及18.2章節開始閱讀是比較合適的。

備註:

不要從提供商的角度去看EJB,要確切地知道規範所支持的標準EJB模型和基於這些模型的特殊應用之間的區別。這也會有助於你遷移到別的提供商的時候所用。

描述: 沒有真正理解J2EE

項目階段:

設計

影響階段:

開發

對系統的影響:

維護、擴展性、性能

症狀:

"Everything is an EJB"的設計方式

用手工事務管理取代了容器提供的機制

自定義方式的安全處理 J2EE平臺在企業級計算中,從表示邏輯到後臺處理,已具有最完整的集成安全架構;但很少用到其全部功能。

解決方案:

學習J2EE的關鍵組件,並且瞭解它們的優缺點,依次用它們替代每一個服務;“知識就是力量”在這裏是行之有效的。

備註:

只有知識能夠彌補這些問題。好的Java開發者會成爲好的EJB開發者,此後也應逐漸成爲J2EE得道高手。Java和J2EE知識掌握得越多,設計和開發工作就會越出色。在設計階段一切都會有條不紊。

  風險2: 過度設計(Overengineering) (採用 EJB或者不採用EJB)

項目階段:

設計

影響的項目階段:

開發

對系統的影響:

維護、擴展性、性能

症狀:

過於龐大的EJB

開發者無法解釋EJB做什麼,以及其間的聯繫

無法重複使用的EJB、組件或者服務

EJB啓動了新的事務,而該事務本該由一個已存在的EJB啓動

爲了安全,把數據分離級別定得太高

解決方案:

過度工程化的解決之道直接來自於極限編程 (XP)方法:用最小的設計和編程來滿足需求,除此之外別無它幹。除非你需要明確知道今後可能的需求,如將來的負載要求,或者系統在最高負載下的表現,否則大可不必爲系統將來的情況做太多考慮或猜測。另外,J2EE平臺已經定義了可伸縮性及出錯恢復等特性,可以讓服務器系統爲你進行處理。

在最小的系統中,只包含一個個小組件,這些組件只做一件事,只要把這些要求做到的進行實現,系統穩定性就已經得到了提高,而且,你的系統的可維護性會變得很強,在未來要增加功能以滿足新的需求也將變得容易。

備註:

除了上面所列方案之外,可以推行設計模式 它們可以顯著地改進你的系統設計。EJB模型本身也廣泛使用了設計模式。例如,每個EJB所帶的Home 接口就是Finder和Factory模式的實例。EJB的remote接口扮演了一種實際bean實現的代理,並且對於提供容器的能力也是至關重要的,這些容器截取調用信號並提供諸如透明(transparent)負載均衡的服務。忽視設計模式也是危險的一部分。

我常提到要反對的另外一種危險是:僅僅是爲了使用EJB而使用EJB。在你的應用中的某一部分可能並不需要EJB,甚至你的整個應用都不需要。這是過度工程化所走的極端,而且我確實也目睹了一些良好的servlet和JavaBean應用被重構爲EJB,而這樣做並沒有很好的技術上的理由。

  風險3: 沒有將業務規則和邏輯表現形式相分離

項目階段:

設計

影響的項目階段:

開發

對系統的影響:

維護、擴展性、性能

症狀:

過於龐大、沒有邊際的JSP程序

在業務邏輯改變的時候必須修改JSP

在要求改變界面顯示的時候需要修改並重新配置EJB和其它後臺組件

規避方案:

J2EE平臺使你有機會將表示邏輯和導航控制相分離,進而與業務規則相分離。這被稱爲模式2結構。

備註:

可以使用具有一致性的設計來進行用戶界面框架的連接。(例如可以使用taglib),這將幫助你避免邏輯分離的問題。有許多現成的好的方法可供選擇。對每一個分別進行評估,然後採用最合適的框架。

  風險4: 沒有在開發環境中進行適當的配置

項目階段:

開發

影響的項目階段:

穩定化、併發、成熟期

對系統的影響:

你的權衡

症狀:

經過多日或數週的時間才能過渡到成熟系統

風險存在與過渡期,帶有很多不確定性,有些主要的功能場景沒有被測試到

實際系統中的數據和開發、測試中的數據不同

無法在開發者機器上進行組建

應用行爲在開發、穩定化及產品環境中各不相同

規避方案:

解決之道是忠實地在開發環境中配置實際的環境,讓開發所用環境接近於要實施產品的環境。如果未來環境是JDK 1.2.2及Solaris 7,那麼不要在JDK 1.3及Red Hat Linux上進行開發。對於所用的應用服務器也是如此。同樣,要快速地看一下產品數據庫中的數據,並將這樣的數據用於測試。不要依賴於人工創建的數據。如果產品數據很敏感,則要使之變得不敏感,然後把它配置起來。開發中未能預期到的產品數據將對以下過程產生破壞:

數據檢驗規則

系統測試行爲

系統組件構建(特別地包括:EJBEJB以及EJB數據庫)

最爲糟糕的是,這樣還可能產生異常、空指針,以及你從沒見過的問題。

備註:

開發人員常把安全性問題放到穩定化階段纔開始解決。要防止這樣的陷阱產生,你也可以花費同樣多的時間在業務邏輯中改進安全性。

成熟期是一個複雜的過程,其中充滿了技術性問題和非技術性問題。你可能會陷於想不到的一大堆問題中,這就是成熟化所意味的一切。開發及穩定化環境過程爲你提供了製造更多這樣的問題,以及發現這樣的問題的地方,不斷去做,就可以大大減少風險。

你做的工程越多,你就越能瞭解什麼是可行的,什麼是不可行的。你可以對工程問題進行記錄,以避免同樣的錯誤重複發生。

  風險5: 選擇了錯誤的提供商

項目階段:

提供商選擇

影響階段:

設計、開發、穩定化/負載測試,成熟化

對系統的影響:

可伸縮性、性能、可維護性及穩定性

症狀:

開發人員要使用更多的時間來處理工具方面的問題,而不是很有成效地使用這些工具

爲了應付已知的和未知的問題,而不得不進行顯著的系統重新設計

在不同的工具之間很難進行集成(應用服務器與IDE工具,IDE工具與調試器,源碼控制與合成工具,等等)

對於IDE工具和調試器等,開發人員往往排斥它們,而推崇自己所喜歡的工具

規避方案:

爲了避免風險5,你需要一個很好的提供商選擇過程,風險10的規避也適用於此。

要真正衡量一種IDE工具是否最合適的方法是真正地進行使用。而唯一來評估一種J2EE應用的方法是建立一種概念試驗來進行證明,在試驗中要包含你的應用框架。事實上,你也不希望在花費了3個月時間進行了培訓和開發後,在使用時又發現一些bug。

假設在開發到一半的時候,突然發現你的工具集有問題,那麼你早應該知道,有些工具確實比另一些更重要。如果你所選的應用服務器不能充分滿足你的需要,你只好修改原先的設定。如果IDE不好,則需要設置最低限度的代碼標準,並讓開發人員任意選擇他們認爲最爲有效的工具。

備註:

要真正瞭解到哪一個供應商對一項特殊的任務來說最合適,其實並不是一件一次性決定的事情。你需要不斷地跟蹤與評估這個市場。例如,在過去的一年裏我用過4種不同的IDE工具,這取決於我使用了什麼樣的應用服務器、平臺,是否使用EJB等。