黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 2232 0

J2EE 探索: 有狀態(tài)網(wǎng)絡(luò)的 J2EE 技術(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ò)的最佳選項;這個月我們將討論管理有狀態(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)缺點。就象在前一部分中一樣,我們將通過研究每種技術(shù)最常用的一些實現(xiàn),以及用于為您的企業(yè)選擇合適解決方案的一些最佳實踐來結(jié)束本文。

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

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

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

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





回頁首


Web 層

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

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

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

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

Servlet 性能

由 Servlet 體系結(jié)構(gòu)創(chuàng)建的輕量級線程模型決不會因為 servlet 或 JSP 文件創(chuàng)建、讀取或修改 HTTPSession 對象而受到破壞。該對象只是將對象引用存儲為簡單鍵-值對的散列表或類似的集合。同樣, HTTPSession 內(nèi)存空間的實現(xiàn)本身也是輕量級的,只需要存儲(或許序列化)會話對象和相應(yīng)的會話標識。簡而言之,servlet 可以支持與 HTTP 客戶機的有狀態(tài)交互,而且對應(yīng)用程序設(shè)計或容器資源產(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ù)在單個客戶機請求的生命周期內(nèi)存活,而有狀態(tài) bean 卻維護與客戶機的對話并且它們的數(shù)據(jù)跨多個請求持續(xù)存在。與 servlet 不同,有狀態(tài)會話 bean 不需要任何特殊的對象,也不需要使用額外的接口來創(chuàng)建有狀態(tài)連接。EJB 容器提供了所有有狀態(tài)會話 bean 管理。對于 bean 而言,所有必要的工作就是在其部署描述符中將其聲明為 stateful

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

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

管理有狀態(tài) bean

正如以前闡述的,會話 bean 是最輕量級類型的企業(yè) bean 類型。特別地,無狀態(tài)會話 bean 可以方便地被容器合用,因為它們只需要維護每個請求的狀態(tài)。

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


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

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

EJB 組件性能

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





回頁首


選擇合適的技術(shù)

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

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

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

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

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

  • 如果客戶機是基于 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 層。任何一種解決方案花費部分成本即可提供有狀態(tài)體驗。最后,如果您的客戶機必須與跨多個請求的業(yè)務(wù)過程的狀態(tài)進行緊耦合,并且不能接受添加 Web 層,那么有狀態(tài)會話 bean 是顯而易見的選擇。
  • 如果您正在使用非 Java 的客戶機或者使用與服務(wù)器不在同一個防火墻之后的客戶機,那么狀態(tài)管理問題略有不同。在這種方案中,您首先應(yīng)該確定狀態(tài)管理的目標。如果目標是通過某種 GUI 為用戶提供流暢的體驗,那么您可以在 Web 層上管理狀態(tài)。如果目標是將跨多個請求的復(fù)雜業(yè)務(wù)過程聯(lián)系在一起,那么狀態(tài)管理應(yīng)該在業(yè)務(wù)層上進行。再次強調(diào),您應(yīng)當(dāng)始終探索其它選項,如使用帶有事務(wù)層的無狀態(tài)會話 bean。
  • 一些應(yīng)用程序服務(wù)器供應(yīng)商以一種諸如接受本機 IIOP 調(diào)用的方式公開 EJB 容器,從而允許 CORBA 客戶機將 EJB 組件當(dāng)成本機 CORBA 應(yīng)用程序。這允許非 Java 客戶機使用 IIOP 協(xié)議與無狀態(tài)會話 bean 進行通信。在該設(shè)置中,客戶機繞過了 Web 層,并使用 IIOP 協(xié)議直接與業(yè)務(wù)層(會話 bean)進行通信。這時,體系結(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è)計的。它們是非常輕量級的,可以輕松地匯聚為池,以確保卓越的可伸縮性。相反,有狀態(tài)會話 bean 并不是為這類應(yīng)用程序而精心設(shè)計的。電子商務(wù)隨需應(yīng)變應(yīng)用程序中通常需要狀態(tài)管理,但是最好由專用的機制或通過 J2EE 事務(wù)進行處理。另一種可能性是調(diào)用 EJB 組件,就好象它是 CORBA 組件一樣。當(dāng)一個或多個被集成的應(yīng)用程序是 CORBA 組件時,該選項特別有用。

“富”GUI 客戶機

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

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

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

Web 應(yīng)用程序

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

  • 有狀態(tài)體驗需要直接與用戶界面聯(lián)系嗎? 如果是,那么必須使用 servlet 和 HTTPSession API 管理狀態(tài)。
  • 您的業(yè)務(wù)過程需要跨越來自客戶機的多個調(diào)用嗎? 如果是,您有三種選項:
    1. 使用有狀態(tài)會話 bean 來提供有狀態(tài)業(yè)務(wù)過程。
    2. 使用無狀態(tài)會話 bean,并且讓持久數(shù)據(jù)高速緩存在服務(wù)器上。接著對高速緩存的引用可以存儲在客戶機的 HTTPSession 對象中。
    3. 通過調(diào)用 bean 上的方法使 JavaBean 充當(dāng)業(yè)務(wù)委派(請參閱 參考資料 ),從而使 bean 批處理所有來自客戶機的數(shù)據(jù),并且僅在客戶機準備提交業(yè)務(wù)過程時才聯(lián)系無狀態(tài)會話 EJB 組件。再次使用了 HTTPSession API 來持久化 JavaBean 實例。
  • 您的有狀態(tài)業(yè)務(wù)過程需要故障保護嗎? 如果是,您有三種選項:
    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ù)器都提供了故障保護 HTTPSession 實現(xiàn)。如果您的服務(wù)器可以這樣做,那么您可以使用 JavaBean 作為業(yè)務(wù)委派。

多客戶機類型

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





回頁首


結(jié)束語

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

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





回頁首


參考資料

  • 您可以參閱本文在 developerWorks 全球站點上的 英文原文 .

  • 參與有關(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 最佳實踐 系列 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è)計模式的使用。


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


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




關(guān)于作者

Kyle Gabhart 是 LearningPatterns 的高級顧問,該公司是為全世界客戶提供世界一流的顧問和培訓(xùn)的動態(tài)知識公司。Kyle 是很受歡迎的公眾講演者,他以其對新興技術(shù)的熱情、精辟分析以及演講而聞名。要獲取他最近以及即將進行的演講或發(fā)表的業(yè)內(nèi)出版物的信息,請訪問 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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論