日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

J2EE 探索: 有狀態(tài)網(wǎng)絡(luò)的 J2EE 技術(shù)

系統(tǒng) 2075 0

J2EE 探索: 有狀態(tài)網(wǎng)絡(luò)的 J2EE 技術(shù)

選擇合適解決方案的最佳實(shí)踐

?

級別: 初級

Kyle Gabhart , 高級顧問, LearningPatterns

2003 年 5 月 12 日

J2EE 中的 Java servlet 和 Enterprise JavaBeans 組件都提供了有狀態(tài)服務(wù)器端處理。兩種技術(shù)各有千秋,每種技術(shù)都比其它技術(shù)更加適合于某些應(yīng)用程序設(shè)置。為了幫助您為您的企業(yè)選擇合適的解決方案,LearningPatterns 的高級顧問 Kyle Gabhart 比較了這兩種技術(shù),并評估了它們在一些常見的有狀態(tài)應(yīng)用程序方案中的性能。
<!----><!----><!---->

J2EE 探索 系列的 第一部分 中,我們首先研究了 J2EE 中狀態(tài)管理的最新技術(shù)。上個月,我們討論了 J2EE 中管理無狀態(tài)網(wǎng)絡(luò)的最佳選項(xiàng);這個月我們將討論管理有狀態(tài)網(wǎng)絡(luò)的技術(shù)。

首先我將簡要介紹有狀態(tài)應(yīng)用程序管理,然后談?wù)摬煌慕鉀Q方案如何應(yīng)用于 Web 層或業(yè)務(wù)層。接下來,我將比較 J2EE 中有狀態(tài)應(yīng)用程序管理技術(shù)的優(yōu)缺點(diǎn)。就象在前一部分中一樣,我們將通過研究每種技術(shù)最常用的一些實(shí)現(xiàn),以及用于為您的企業(yè)選擇合適解決方案的一些最佳實(shí)踐來結(jié)束本文。

請注意,對于本文而言,JSP(Java ServerPages)文件被認(rèn)為是專用類型的 servlet。

有狀態(tài)應(yīng)用程序管理

您可能會回想起來,在上一篇文章中,Web 應(yīng)用程序協(xié)議被分成兩大類別: 無狀態(tài)(stateless) 有狀態(tài)(stateful) ,協(xié)議的 狀態(tài) 指的是它“記憶”從一個傳輸?shù)较乱粋€傳輸?shù)男畔⒌哪芰?。因?yàn)橛袪顟B(tài)連通性是大多數(shù)企業(yè)應(yīng)用程序的基本需求之一,并且因?yàn)?Web 應(yīng)用程序依賴于 HTTP(內(nèi)在的無狀態(tài)協(xié)議),所以聰明的開發(fā)人員已經(jīng)找到了許多技巧來在 HTTP 上模擬有狀態(tài)連接。有狀態(tài)信息可以存儲在 HTML 表單字段中、附加到超鏈接或者存儲在客戶機(jī)端的 cookie 中。

客戶機(jī)和服務(wù)器之間的有狀態(tài)交互可以在 Web 層或業(yè)務(wù)層上進(jìn)行管理。要在 Web 層上管理狀態(tài),我們使用與 HTTPSession API 結(jié)合的 servlet。要在業(yè)務(wù)層上管理狀態(tài),我們使用有狀態(tài)會話 EJB 組件。在接下來的章節(jié)里,我們將探究這兩種開發(fā)選項(xiàng)。





回頁首


Web 層

Servlet 體系結(jié)構(gòu)的 HTTPSession API 允許應(yīng)用程序開發(fā)人員管理跨網(wǎng)絡(luò)的客戶機(jī)/服務(wù)器交互(或 會話 )的狀態(tài)。 HTTPSession 接口定義了 HTTPSession API 的核心功能。它為 J2EE 應(yīng)用程序提供了一種方法,使它可以識別跨多個頁面請求的單個客戶機(jī),以及將數(shù)據(jù)存儲在與那個客戶機(jī)相關(guān)聯(lián)的服務(wù)器上。通過該接口,servlet 容器創(chuàng)建和管理客戶機(jī)和服務(wù)器之間的會話。該會話由 HTTPSession 對象表示,它可以跨來自相同客戶機(jī)的多個連接和頁面請求持續(xù)存在一段特定的時間。Servlet 使用該接口來查看與處理有關(guān)會話的信息,如創(chuàng)建時間和上一次訪問會話的時間。該接口還允許 servlet 將對象綁定到會話,從而以一種跨多個連接(來自相同客戶機(jī))持續(xù)存在的方式將該信息與特定的客戶機(jī)進(jìn)行關(guān)聯(lián)。

Servlet 體系結(jié)構(gòu)

Servlet 體系結(jié)構(gòu)并沒有因?yàn)槭褂? HTTPSession API 而發(fā)生改變。就象在無狀態(tài)網(wǎng)絡(luò)中一樣,servlet 代表客戶機(jī)執(zhí)行業(yè)務(wù)請求,并且充當(dāng)控制器、視圖,或者二者同時兼任。Servlet 還可以有效地處理用戶交互,如內(nèi)容格式化和顯示、基本請求處理和安全性請求及更多。就象在無狀態(tài)網(wǎng)絡(luò)中一樣,servlet 最好用于管理客戶機(jī)交互,那么通??墒褂弥诸悾ㄈ?JavaBeans)來應(yīng)付繁重的處理或者與后端組件相互操作(interface)。

因此, HTTPSession 接口允許 servlet 容器創(chuàng)建和管理客戶機(jī)會話,并且使 servlet 能訪問與會話相關(guān)的信息、將對象綁定到會話以及訪問先前綁定的對象。到現(xiàn)在為止,一直都還不錯。但是 servlet 容器如何跟蹤通過無狀態(tài)協(xié)議(如 HTTP)通信的客戶機(jī)呢?為了實(shí)現(xiàn)這一點(diǎn),為每個 HTTPSession 對象都提供一個唯一的標(biāo)識,以確保每個客戶機(jī)會話和與會話相關(guān)的數(shù)據(jù)可以被唯一標(biāo)識。考慮到 HTTP 內(nèi)在的無狀態(tài)本質(zhì),在每次請求時,該會話標(biāo)識必須被客戶機(jī)傳遞給服務(wù)器,以便于 servlet 容器將客戶機(jī)與正確的會話相關(guān)聯(lián)。會話標(biāo)識可以用三種方式中一種進(jìn)行傳遞:作為 HTML 表單中的參數(shù)(通常是隱藏字段);作為附加在查詢字符串后的參數(shù);或者作為 cookie 的屬性。不管會話標(biāo)識如何傳遞,servlet 容器都將攔截它,檢查它,并找到與之關(guān)聯(lián)的 HTTPSession 對象。

Servlet 性能

由 Servlet 體系結(jié)構(gòu)創(chuàng)建的輕量級線程模型決不會因?yàn)?servlet 或 JSP 文件創(chuàng)建、讀取或修改 HTTPSession 對象而受到破壞。該對象只是將對象引用存儲為簡單鍵-值對的散列表或類似的集合。同樣, HTTPSession 內(nèi)存空間的實(shí)現(xiàn)本身也是輕量級的,只需要存儲(或許序列化)會話對象和相應(yīng)的會話標(biāo)識。簡而言之,servlet 可以支持與 HTTP 客戶機(jī)的有狀態(tài)交互,而且對應(yīng)用程序設(shè)計(jì)或容器資源產(chǎn)生最小的影響。





回頁首


業(yè)務(wù)層

J2EE 為在業(yè)務(wù)層上處理狀態(tài)提供了內(nèi)置的支持。與無狀態(tài)會話 bean 一樣,有狀態(tài)會話 bean 也被映射到業(yè)務(wù)過程。兩者之間的關(guān)鍵區(qū)別是:無狀態(tài) bean 及其數(shù)據(jù)在單個客戶機(jī)請求的生命周期內(nèi)存活,而有狀態(tài) bean 卻維護(hù)與客戶機(jī)的對話并且它們的數(shù)據(jù)跨多個請求持續(xù)存在。與 servlet 不同,有狀態(tài)會話 bean 不需要任何特殊的對象,也不需要使用額外的接口來創(chuàng)建有狀態(tài)連接。EJB 容器提供了所有有狀態(tài)會話 bean 管理。對于 bean 而言,所有必要的工作就是在其部署描述符中將其聲明為 stateful 。

EJB 體系結(jié)構(gòu)

從體系結(jié)構(gòu)的觀點(diǎn)看,有狀態(tài)會話 bean 與其無狀態(tài)的同類沒有任何差別。兩種類型的 bean 都可以很好地充當(dāng)視圖、控制器或模型;二者通常都可以實(shí)現(xiàn)虛包(Facade)模式或業(yè)務(wù)委派(Business Delegate)模式;二者都可以與多個客戶機(jī)類型一起使用。有狀態(tài)會話 bean 可以通過 servlet(或 JSP 文件)、幫助 servlet(或 JSP 文件)的 JavaBean 和另一個企業(yè) bean 訪問,或者直接通過 applet、Swing 應(yīng)用程序或其它 Java 應(yīng)用程序,或者甚至是使用 IIOP 協(xié)議的非 Java 客戶機(jī)訪問。

管理有狀態(tài) bean

正如以前闡述的,會話 bean 是最輕量級類型的企業(yè) bean 類型。特別地,無狀態(tài)會話 bean 可以方便地被容器合用,因?yàn)樗鼈冎恍枰S護(hù)每個請求的狀態(tài)。

相反,有狀態(tài)會話 bean 與容器資源并不那樣友好。有狀態(tài)會話 bean 的池不能象無狀態(tài) EJB 組件的池那樣用來容納任何客戶機(jī)請求。有狀態(tài) bean 只能處理來自一個客戶機(jī)的請求,直到該客戶機(jī)釋放其對那個特殊 bean 實(shí)例的控制。有狀態(tài)會話 bean 消耗了容器的大量時間和內(nèi)存。為了保存客戶機(jī)調(diào)用之間的 bean 狀態(tài),容器必須將 bean 實(shí)例保存在活動內(nèi)存中,或者臨時將狀態(tài)寫到持久性存儲(如文件系統(tǒng)或數(shù)據(jù)庫)中。將狀態(tài)分配到持久性存儲中就是所謂的 鈍化(passivation) 。當(dāng)以前鈍化的企業(yè) bean 被再次請求時,容器通過從池中檢索 bean,并且利用鈍化前 bean 的持久性狀態(tài)對它進(jìn)行初始化,來激活它。下圖闡明了有狀態(tài)會話 bean 的鈍化和激活:


圖 1. 有狀態(tài)會話 bean 的鈍化/激活

決定將 bean 保存在內(nèi)存中還是對它進(jìn)行鈍化,然后再激活它,這取決于各個供應(yīng)商。盡管在釋放容器資源方面鈍化機(jī)制非常有幫助,但是在防止服務(wù)器崩潰以避免丟失有狀態(tài)會話 bean 的活動狀態(tài)方面卻無能為力。盡管一些供應(yīng)商提供了會話恢復(fù)功能以解決這個問題,但它不是標(biāo)準(zhǔn)的,因此依賴該功能會降低應(yīng)用程序的可移植性。但是,別擔(dān)心!EJB 規(guī)范確實(shí)定義了一個接口( javax.ejb.SessionSynchronization ),它可以向企業(yè) bean 警報(bào)事務(wù)的狀態(tài),包括由于服務(wù)器崩潰而失敗的事務(wù)(假定不是拔了服務(wù)器的插頭)。實(shí)現(xiàn) SessionSynchronization 接口的企業(yè) bean 必須定義三個已聲明的方法特征符: afterBegin() beforeCompletion() afterCompletion(boolean) 。這些方法使 bean 可以從容器接收三個額外的回調(diào),以允許正確處理 bean 中的事務(wù)狀態(tài)。

EJB 組件性能

從性能的角度看,servlet 和無狀態(tài)會話 bean 是相當(dāng)具有競爭力的技術(shù)。它們都可以使用實(shí)例池為來自客戶機(jī)的請求提供服務(wù)。但是,當(dāng)您添加了應(yīng)用程序狀態(tài)管理時,巨大的性能差異就將顯現(xiàn)。與可用作 Servlet 體系結(jié)構(gòu)一部分的輕量級 HTTPSession 機(jī)制不同,有狀態(tài)會話 bean 需要一個更加重量級的針對狀態(tài)管理(如上面概述的鈍化/激活方案)的解決方案。這個針對有狀態(tài)會話 bean 的常用解決方案需要花費(fèi)服務(wù)器時間和資源來鈍化 bean 狀態(tài)、回收 bean 實(shí)例和激活 bean 狀態(tài)。上述的每個過程都需要幾次容器調(diào)用,以及需要直接對 bean 執(zhí)行回調(diào)方法,以確保正確處理 bean 的狀態(tài)??偠灾袪顟B(tài)會話 EJB 組件為管理應(yīng)用程序狀態(tài)提供了一種重量級機(jī)制。





回頁首


選擇合適的技術(shù)

與無狀態(tài)的 J2EE 體系結(jié)構(gòu)不同,J2EE 應(yīng)用程序不提供典型的配置來充當(dāng)指南或藍(lán)圖。管理狀態(tài)時,合適的體系結(jié)構(gòu)取決于下列因素:

  • 客戶機(jī)是基于 Web(HTTP)的嗎?
  • 對話狀態(tài)需要包含到 GUI 中嗎?
  • 服務(wù)器將處于哪種負(fù)載條件下呢?
  • 有狀態(tài)組件需要能夠在服務(wù)器崩潰后仍然有效嗎?
  • 該組件需要哪種事務(wù)上下文呢?
  • 有狀態(tài)數(shù)據(jù)有多重要?

盡管上述一些問題似乎明顯地傾向于其中一種技術(shù),但是許多有狀態(tài)方案實(shí)際上既需要使用 servlet 又需要使用 EJB 組件。至關(guān)重要的決定就是確定是在 Web 層還是在業(yè)務(wù)層上管理狀態(tài),或者同時在兩個層上管理狀態(tài)。在下一節(jié)中,我們將研究一些可能的企業(yè)應(yīng)用程序方案,及其最適宜的解決方案。

應(yīng)用程序客戶機(jī)

標(biāo)準(zhǔn)的應(yīng)用程序客戶機(jī)是與另一個系統(tǒng)或組件相互操作的客戶機(jī)。我們將研究三種典型的應(yīng)用程序客戶機(jī)方案,并且討論每個客戶機(jī)最適合的有狀態(tài)解決方案:

  • 如果客戶機(jī)是基于 Java 的,并且與服務(wù)器處于相同的防火墻之后,那么您首先應(yīng)該決定有狀態(tài)交互模型是否是必需的。管理有狀態(tài)會話 bean 是資源密集型的,因此您應(yīng)該考慮更輕量級的備用方案。最佳解決方案就是使用 RMI 直接與應(yīng)用程序服務(wù)器中的 無狀態(tài) 會話 bean 對話。如果 有狀態(tài) 解決方案是必需的,則請考慮使用帶有簡單事務(wù)層的無狀態(tài)會話 bean,或者在業(yè)務(wù)層上創(chuàng)建瘦 servlet 層。任何一種解決方案花費(fèi)部分成本即可提供有狀態(tài)體驗(yàn)。最后,如果您的客戶機(jī)必須與跨多個請求的業(yè)務(wù)過程的狀態(tài)進(jìn)行緊耦合,并且不能接受添加 Web 層,那么有狀態(tài)會話 bean 是顯而易見的選擇。
  • 如果您正在使用非 Java 的客戶機(jī)或者使用與服務(wù)器不在同一個防火墻之后的客戶機(jī),那么狀態(tài)管理問題略有不同。在這種方案中,您首先應(yīng)該確定狀態(tài)管理的目標(biāo)。如果目標(biāo)是通過某種 GUI 為用戶提供流暢的體驗(yàn),那么您可以在 Web 層上管理狀態(tài)。如果目標(biāo)是將跨多個請求的復(fù)雜業(yè)務(wù)過程聯(lián)系在一起,那么狀態(tài)管理應(yīng)該在業(yè)務(wù)層上進(jìn)行。再次強(qiáng)調(diào),您應(yīng)當(dāng)始終探索其它選項(xiàng),如使用帶有事務(wù)層的無狀態(tài)會話 bean。
  • 一些應(yīng)用程序服務(wù)器供應(yīng)商以一種諸如接受本機(jī) IIOP 調(diào)用的方式公開 EJB 容器,從而允許 CORBA 客戶機(jī)將 EJB 組件當(dāng)成本機(jī) CORBA 應(yīng)用程序。這允許非 Java 客戶機(jī)使用 IIOP 協(xié)議與無狀態(tài)會話 bean 進(jìn)行通信。在該設(shè)置中,客戶機(jī)繞過了 Web 層,并使用 IIOP 協(xié)議直接與業(yè)務(wù)層(會話 bean)進(jìn)行通信。這時,體系結(jié)構(gòu)分析與位于防火墻后的基于 Java 的應(yīng)用程序分析是相同的。請參考第一種方案,以理解業(yè)務(wù)層上的狀態(tài)管理問題。

電子商務(wù)隨需應(yīng)變環(huán)境

正如我們 上個月 討論的,無狀態(tài)會話 bean 是為電子商務(wù)隨需應(yīng)變(e-business on demand)應(yīng)用程序精心設(shè)計(jì)的。它們是非常輕量級的,可以輕松地匯聚為池,以確保卓越的可伸縮性。相反,有狀態(tài)會話 bean 并不是為這類應(yīng)用程序而精心設(shè)計(jì)的。電子商務(wù)隨需應(yīng)變應(yīng)用程序中通常需要狀態(tài)管理,但是最好由專用的機(jī)制或通過 J2EE 事務(wù)進(jìn)行處理。另一種可能性是調(diào)用 EJB 組件,就好象它是 CORBA 組件一樣。當(dāng)一個或多個被集成的應(yīng)用程序是 CORBA 組件時,該選項(xiàng)特別有用。

“富”GUI 客戶機(jī)

有三種基本的“富”GUI(不是 HTML,也不是命令行)客戶機(jī)類型:Java applet、獨(dú)立應(yīng)用程序和 Java Web Start。下列解決方案適用于這三種“富”GUI 組件類型中的任何一種:

  • 如果您的客戶機(jī)和服務(wù)器被防火墻分隔,您應(yīng)該讓客戶機(jī)通過 HTTP 與 servlet 直接通信。該 servlet 層可以使用助手類應(yīng)付簡單的業(yè)務(wù)處理。如果您的應(yīng)用程序有更復(fù)雜的需求,或者對企業(yè)資源有更高的請求頻率,您應(yīng)該使用會話 bean 來處理業(yè)務(wù)過程。這里再強(qiáng)調(diào)一次,您應(yīng)當(dāng)將有狀態(tài)交互模型的必要性作為決策過程的一部分進(jìn)行考慮。
  • 如果您的客戶機(jī)和服務(wù)器位于同一個防火墻之后,直接的 RMI 調(diào)用可能是您的最佳選擇。在這種情形下,servlet 只會帶來額外的開銷和不必要的體系結(jié)構(gòu)復(fù)雜性。在 applet 或 Java Web Start 情形中,通過提供帶有 applet 或 Java Web Start 應(yīng)用程序鏈接的首個 HTML 文檔,servlet 可以啟動事務(wù)。然后,最好使客戶機(jī)與一個或多個會話 bean 建立直接的 RMI 連接。該方案的設(shè)置與典型的應(yīng)用程序客戶機(jī)方案(與服務(wù)器不在同一個防火墻之后)的設(shè)置相同。

如果您正在使用本機(jī) GUI 客戶機(jī),并且需要管理復(fù)雜的事務(wù)或事務(wù)系列,那么您應(yīng)該再次考慮調(diào)用 EJB 組件,就象它是 CORBA 組件一樣。如果不能那樣做,您可以始終讓客戶機(jī)通過 HTTP 與 servlet 通信,并且相應(yīng)地管理會話。

Web 應(yīng)用程序

在標(biāo)準(zhǔn)的、基于 Web 的應(yīng)用程序情形中,客戶機(jī)位于防火墻的哪一側(cè)并不重要;使用 servlet 是必需的。因?yàn)槟鷮⑹褂?HTTP 作為傳輸協(xié)議,所以將在 Web 層上工作。唯一實(shí)際的決定 ― 是否在幕后使用 EJB 組件 ― 將取決于對 EJB 容器服務(wù)的相關(guān)需求。首先,您將選擇通用的組件類型(如 servlet 和會話 bean)。接下來,您將選擇一些匹配應(yīng)用程序的用戶界面顯示和業(yè)務(wù)請求處理需求的更特定類型(如 JSP 頁面和有狀態(tài)會話 bean)。就所關(guān)心的狀態(tài)管理而言,Web 應(yīng)用程序中存在著和其它客戶機(jī)類型中類似的問題。一些標(biāo)準(zhǔn)問題(和答案)將有助于您為您的 Web 應(yīng)用程序確定合適的狀態(tài)管理解決方案:

  • 有狀態(tài)體驗(yàn)需要直接與用戶界面聯(lián)系嗎? 如果是,那么必須使用 servlet 和 HTTPSession API 管理狀態(tài)。
  • 您的業(yè)務(wù)過程需要跨越來自客戶機(jī)的多個調(diào)用嗎? 如果是,您有三種選項(xiàng):
    1. 使用有狀態(tài)會話 bean 來提供有狀態(tài)業(yè)務(wù)過程。
    2. 使用無狀態(tài)會話 bean,并且讓持久數(shù)據(jù)高速緩存在服務(wù)器上。接著對高速緩存的引用可以存儲在客戶機(jī)的 HTTPSession 對象中。
    3. 通過調(diào)用 bean 上的方法使 JavaBean 充當(dāng)業(yè)務(wù)委派(請參閱 參考資料 ),從而使 bean 批處理所有來自客戶機(jī)的數(shù)據(jù),并且僅在客戶機(jī)準(zhǔn)備提交業(yè)務(wù)過程時才聯(lián)系無狀態(tài)會話 EJB 組件。再次使用了 HTTPSession API 來持久化 JavaBean 實(shí)例。
  • 您的有狀態(tài)業(yè)務(wù)過程需要故障保護(hù)嗎? 如果是,您有三種選項(xiàng):
    1. 使用應(yīng)用程序服務(wù)器,該服務(wù)器為有狀態(tài)會話 bean 的狀態(tài)恢復(fù)提供自動支持。
    2. SessionSycnhronization 接口允許無狀態(tài)或有狀態(tài)會話 bean 對事務(wù)故障做出響應(yīng)。這將允許您回滾事務(wù)、持久化數(shù)據(jù)或執(zhí)行您可能需要的任何其它清除功能。通常,服務(wù)器故障將不會阻礙容器調(diào)用由接口聲明的回調(diào)方法。
    3. 許多 Web 服務(wù)器都提供了故障保護(hù) HTTPSession 實(shí)現(xiàn)。如果您的服務(wù)器可以這樣做,那么您可以使用 JavaBean 作為業(yè)務(wù)委派。

多客戶機(jī)類型

最后的情形需要客戶機(jī)類型的組合,例如基于 Web 的瀏覽器和標(biāo)準(zhǔn)的“富”GUI 桌面。在這種情形下,有狀態(tài)選項(xiàng)同無狀態(tài)選項(xiàng)沒有區(qū)別。請參考 本系列的第一篇文章 以獲取詳細(xì)信息。





回頁首


結(jié)束語

在本部分( J2EE Pathfinder 系列的第二部分)中,我們探討了使用 Java servlet 和有狀態(tài)會話 bean 來執(zhí)行客戶機(jī)請求和提供有狀態(tài)體驗(yàn)的相對優(yōu)缺點(diǎn)。本文討論的方案并未包含所有情形,但是它們代表了有狀態(tài)通信環(huán)境中的 servlet 和會話 EJB 組件的一些最常見用法。

在下一部分中,我們將開始有關(guān)持久數(shù)據(jù)管理的兩部分探討,首先將比較實(shí)體 bean 和 JDBC。愿我們到時“探索”愉快!





回頁首


參考資料

  • 您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文 .

  • 參與有關(guān)本文的 論壇 。(您也可以單擊文章頂部或底部的 討論 來訪問論壇。)

  • 請參閱由 Kyle Gabhart 撰寫的完整 developerWorks J2EE pathfinder 系列 。


  • 如果您還是 EJB 技術(shù)的新手,那么您可能應(yīng)該查閱本系列的第一篇文章“ The ABCs of EJBs ”中的側(cè)欄。


  • 如果您希望學(xué)習(xí)更多有關(guān) Java 2 平臺,企業(yè)版和相關(guān)技術(shù)的知識,可以從 J2EE 主頁 開始。


  • Brett McLaughlin 的 EJB 最佳實(shí)踐 系列 developerWorks )介紹了與 Enterprise JavaBeans 組件相關(guān)的一些基本模式和用法。


  • 了解本文提及的有關(guān)虛包(Facade)、業(yè)務(wù)委派(Business Delegate)和工廠(Factory)模式的更多知識。請參閱 Sun Microsystems 的 Java BluePrints


  • Paul Monday 的優(yōu)秀“ Java design patterns 201 ”教程( developerWorks ,2002 年 4 月)更理論上的討論了 Java 編程中設(shè)計(jì)模式的使用。


  • developerWorks Java 技術(shù)專區(qū) 可以找到數(shù)百篇有關(guān) Java 編程各個方面的文章。


  • 還請參閱 developerWorks Java 技術(shù)教程頁面 以獲取有關(guān) Java 技術(shù)的免費(fèi)教程的完整清單。




關(guān)于作者

Kyle Gabhart 是 LearningPatterns 的高級顧問,該公司是為全世界客戶提供世界一流的顧問和培訓(xùn)的動態(tài)知識公司。Kyle 是很受歡迎的公眾講演者,他以其對新興技術(shù)的熱情、精辟分析以及演講而聞名。要獲取他最近以及即將進(jìn)行的演講或發(fā)表的業(yè)內(nèi)出版物的信息,請?jiān)L問 Gabhart.com ??梢酝ㄟ^ kyle@learningpatterns.com 與 Kyle 聯(lián)系。



?

J2EE 探索: 有狀態(tài)網(wǎng)絡(luò)的 J2EE 技術(shù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 宝应县| 婺源县| 健康| 得荣县| 桃江县| 潮州市| 始兴县| 财经| 洱源县| 沾化县| 宁武县| 安康市| 福安市| 昆明市| 宁都县| 望谟县| 大安市| 固始县| 乌兰县| 江源县| 马山县| 镇坪县| 阿拉尔市| 南安市| 鄄城县| 阳新县| 淮阳县| 泸溪县| 东兰县| 凤凰县| 砚山县| 商水县| 阿尔山市| 固始县| 瑞昌市| 连州市| 临高县| 东光县| 荔波县| 交城县| 绥宁县|