全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:9598
推到 Plurk!
推到 Facebook!

Enterprise JavaBeans Distilled(1)

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-22 20:49:04 IP:61.64.xxx.xxx 未訂閱
 http://www.javaresearch.org/article/showarticle.jsp?column=107&thread=10469
Enterprise JavaBeans Distilled(1) 
worldheart 原創
     寫作動因:     鑒於Enterprise JavaBeans(簡稱,EJB)技術本身的魅力,EJB開發者,企業商
務J2EE應用系統,現有中文資料的缺乏,個人的興趣等等構成了本人寫作本文的
源泉。本人水準有限,不對的地方,望來函、來信批評指正!謝謝!    另一方面,EJB技術現在成了很多產品的賣點,所以對於開發者來說,掌握這種
技能變得很重要。EJB技術誕生的時間不長,在國內應用也剛剛起步,國內也有
不少這方面的資料、書籍,但都有這樣幾個毛病。第一,內容沒有深度,比如用
什麼工具開發一個EJB實例,一步一步教會讀者具體應用,這種內容對於初學者
而言有一定幫助。第二,EJB技術是很好的,為什麼好呢?我們都會去用它,我
想很多人都忽視了技術本身的內部機理。第三,每個技術領域都有自己的核心內
容,這些資料都沒有教會讀者如何面對新技術快熟的切入到核心層的方法,如果
以後出現了“Java 3”呢?等等這些問題,是我們值得考慮的。在國外,EJB技
術用的很多,通過http://java.sun.com 中提供的EJB郵件列表內容就知道別人
的水準了。    其實,EJB技術儘管複雜、難學,但還是有很好的辦法來學的,就像UML一樣,抓
住根本、先不管細節部分,這也是本文的題目用意所在!    帶上這些問題,開始我們的EJB技術之旅。希望大家旅途愉快。        開題    EJB技術是Sun公司發明的,從發明至今已經發佈了3個版本的EJB規範,1.0,1.1,2.0。
EJB 2.1版已經發佈了被提義的最終草案(http://java.sun.com/products/ejb/ ,詳細地址)
。EJB規範定義了元件開發者和EJB伺服器廠商各自的職責。元件開發者根據EJB
規範中定義的編程模型編寫EJB。遵循EJB規範的EJB在各個EJB伺服器中都可以移
植。這樣的一種編程模型給EJB開發者提供了很好的便利,EJB的產生背景是如何
呢?    EJB技術將TP monitors和distributed-component services中的優點吸收過來,
同時把它們的缺點拋棄掉。TP monitors是一種運行用過程語言,比如COBOL、
PL/1,編寫的應用程式可靠、功能強大的平臺,該平臺管理應用環境,比如事務
性、安全性、資源管理、負載均衡、容錯等方面。所以這種平臺優勢給”
mission-critical”企業級應用程式提供了很好的基礎架構。同時,TP 
monitors採用業界先進的3層體系結構,即由表示層、商業邏輯層和後端資源組
成。distributed-component services提供了更為先進的3層體系結構,即把商
業物件、元件放置在中間層,其他的進程可以通過其提供的romote proxies來訪
問本身(熟悉CORBA、Java RMI、DCOM的朋友,都知道這一點)。    分散式元件和負荷在傳統的TP monitors的基於過程的應用程式相比,其優點在
於,它提供了更好的重用性和靈活性,因為它們可以將不同種類的商業物件集成
起來,但這樣的元件很難編寫,同時缺少TP monitors所提供的健壯的基礎框
架。如果能夠將兩者的優勢結合起來,便構成EJB出現的緣由。EJB伺服器給
distributed components提供了類似TP monitors的環境。EJB伺服器中,類似
TP monitors環境的給出減少了開發的複雜度、distributed components的給出
使得開發者的開發效率大大提高。    EJB客戶通過JNDI、Java RMI-IIOP來訪問。這種客戶可能是Java應用程式、JSP
(Servlets)、其他的EJB或者用其他語言寫的應用。    Sun公司給EJB Architecture下的定義:    “The Enterprise JavaBeans architecture is a component architecture 
for the development and deployment of componentbased distributed 
business applications. Applications written using the Enterprise 
JavaBeans architecture are scalable, transactional, and multi-user 
secure. These applications may be written once, and then deployed on 
any server platform that supports the Enterprise JavaBeans 
specification.”    這樣一種定義反映出,EJB適合“mission-critical”企業級應用。    文章組織結構:    該系列文章主要以EJB 2.0規範涉及到的技術為主。開發工具建議採用JBuilder 
7、伺服器自己隨意。本人採用WebLogic 7.0。關於兩者的集成,建議大家最好
看看Borland提供的集成白皮書,鏈結位址本人前面的文章中給出過。    每一次文章都會給出EJB中一個關鍵技術的分析,或者是設計實例。
-------------------------------------------------------------
設計實例的深入分析
-------------------------------------------------------------
要求:
  本文假設讀者對EJB技術有一定熟悉,對SQL有一定瞭解就可以了。由於EJB
涉及到的技術很多,儘管每次只講述一種技術,但各種技術是相關的,所以希望
讀者諒解,因為這樣不是很好組織。    實例背景      資料庫: SQL Server 2000
  作業系統: Windows 2000
  開發工具; JBuilder 7
  EJB伺服器: WebLogic 7.0    機器IP地址,10.11.12.58    實例綜述:通過無狀態Session Beans得到容器管理的Entity Beans中的資料,
然後把無狀態Session Beans得到的資料給JSP頁面,從而客戶可以看到所要的結
果。通過這樣一種過程使得您知道編寫EJB元件是多麼簡單的事情。    準備工作    配置好SQL Server 2000的JDBC驅動(微軟網站有下載,或者用BEA提供的也可
以!該例子中用的是微軟的JDBC)、JBuilder 7 + WebLogic 7集成環境,其他
的也可以。    開發過程    1. 配置JDBC資料源:這個過程包括兩個步驟,首先配置連接池(Connection 
Pools)。(為什麼採用連接池:開發人員不想編寫Database方面的代碼、更換資
料庫系統變得簡單、限制資料庫的連接數量、不需要為每個客戶建立新連接。這
種池的概念在J2EE中有很多地方出現了,比如EJB本身)配置的參數如下:    Name: cacd
URL: jdbc:microsoft:sqlserver://10.11.12.58:1433;user=sa;password=cacd;
Driver ClassName: com.microsoft.jdbc.sqlserver.SQLServerDriver
Initial Capacity: 3
Maximum Capacity: 10    其次,配置JDBC資料源,在Tx Data Sources中配置的參數如下:    Name: cacd
JNDI Name: cacd
Pool Name: cacd(要與前面的相匹配!)
(Tx Data Sources與一般的Data Sources 區別何在?讀給讀者思考、討論。)    其中,在URL中,你需要為SQL Server 2000配置一個用戶名sa,密碼為cacd,因
為這裏用的是Type 4的JDBC,所以需要將SQL Server 2000的用戶認證修改為:
NT+SQL Server 2000混合認證。    2. 資料庫的建立:Entity Beans代表了Database中的資料,所以需要資料庫支
援,但一般情況下,我們知道,可以根據容器管理的Entity Beans導出SQL 
DDL。另一方面,可以根據SQL DDL生成容器管理的Entity Beans。兩種方法都可
以。比如JBuilder 7兩種方法都提供了。但我想,資訊模型(資料庫)的建立在
編碼之前就應該存在,所以建議採用第二種辦法。當然有些時候第一種會較為合
理些,因為並不是表中所有的欄位都會映射到Entity Beans中。該例子中建立了
這樣這樣一個Table:    /*===================================================*/    /* Table : techniquespec */    /*===================================================*/    create table techniquespec (
techniqueitem char(100) not null,
units char(10) null,
minvalue decimal(16,6) null,
maxvalue decimal(16,6) null,
types char(1) null,
signon char(1) null,
constraint PK_TECHNIQUESPEC primary key (techniqueitem)
)    其中,開發人員在建表的過程中,不需要手工去寫SQL DDL語句,一般都可以借
助於工具進行,比如PowerDesigner、ERWin等工具。用用就會了,不要對工具產
生不好的情緒,但前提是你熟悉資料庫理論。    用戶建好Table後,可以填入資料,中文的也可以。    3. 容器管理的Entity Beans的開發:JBuilder對EJB開發支援的比較好,提供
了圖形化的方式。由於我們已經建立好了Database,前面的techniquespec表,
我們可以借助於Import Schema From Database,將SQL DLL引入進來。(由於這
裏不能貼出操作圖片,所以只能用文字說明梗概,大家在設計過程中有什麼問
題,可以發郵件給我,我盡力而為。)在這個過程中,一定要注意JNDI的名字和
資料源中的JNDI要一致。得到SQL DLL後,我們可以根據techniquespec表生成
CMP 2.0 Entity Beans,在這裏我們採用LocalHome訪問Entity Beans,為什麼
採用?後續文章中都會詳細闡述。現在想返回表techniquespec中列
techniqueitem的所有內容。首先,真假一個findByTypes Finder方法,EJB QL
語句為: SELECT OBJECT(p) from Techniquespec AS p,其中返回值為
Collection。下面給出代碼。    LocalHome介面:    package cacdsystem;import javax.ejb.*;import java.util.*;public 
interface TechniquespecHome extends javax.ejb.EJBLocalHome{public 
Techniquespec create(String techniqueitem) throws 
CreateException;public Collection findByTypes() throws 
FinderException;//添加的Finder方法public Techniquespec 
findByPrimaryKey(String techniqueitem)   throws FinderException;}        Local介面:    package cacdsystem;import javax.ejb.*;import java.util.*;import 
java.math.*;public interface Techniquespec extends 
javax.ejb.EJBLocalObject{public String getTechniqueitem();public void 
setUnits(String units);public String getUnits();public void 
setMinvalue(BigDecimal minvalue);public BigDecimal getMinvalue
();public void setMaxvalue(BigDecimal maxvalue);public BigDecimal 
getMaxvalue();public void setTypes(String types);public String 
getTypes();public void setSignon(String signon);public String 
getSignon();}         bean類:    package cacdsystem;import javax.ejb.*;abstract public class 
TechniquespecBean implements EntityBean{EntityContext 
entityContext;public java.lang.String ejbCreate(java.lang.String 
techniqueitem) throws CreateException {setTechniqueitem
(techniqueitem);return null;}public void ejbPostCreate
(java.lang.String techniqueitem) throws CreateException {}public void 
ejbRemove() throws RemoveException {}public abstract void 
setTechniqueitem(java.lang.String techniqueitem);public abstract void 
setUnits(java.lang.String units);public abstract void setMinvalue
(java.math.BigDecimal minvalue);public abstract void setMaxvalue
(java.math.BigDecimal maxvalue);public abstract void setTypes
(java.lang.String types);public abstract void setSignon
(java.lang.String signon);public abstract java.lang.String 
getTechniqueitem();public abstract java.lang.String getUnits();public 
abstract java.math.BigDecimal getMinvalue();public abstract 
java.math.BigDecimal getMaxvalue();public abstract java.lang.String 
getTypes();public abstract java.lang.String getSignon();public void 
ejbLoad(){}public void ejbStore(){}public void ejbActivate(){}public 
void ejbPassivate(){}public void unsetEntityContext()
{this.entityContext = null;}public void setEntityContext
(EntityContext entityContext){this.entityContext = entityContext;}}        4. 無狀態Session Beans的開發: 通過EJB 圖形設計器,生成一個Session Bean,代碼如下。    Home介面:    package cacdsystem;import javax.ejb.*;import java.util.*;import 
java.rmi.*;public interface VocHome extends javax.ejb.EJBHome {public 
Voc create() throws CreateException, RemoteException;}        Remote介面:    package cacdsystem;import javax.ejb.*;import java.util.*;import 
java.rmi.*;public interface Voc extends javax.ejb.EJBObject {public 
Collection getVocTechnique() throws RemoteException;}        bean類:    package cacdsystem;import javax.ejb.*;import java.util.*;public class 
VocBean implements SessionBean {SessionContext 
sessionContext;TechniquespecHome techniquespecHome;public void 
ejbCreate() throws CreateException {}public void ejbRemove() {}public 
void ejbActivate() {}public void ejbPassivate() {}public void 
setSessionContext(SessionContext sessionContext) {this.sessionContext 
= sessionContext;try{javax.naming.Context context = new 
javax.naming.InitialContext();techniquespecHome = (TechniquespecHome)
context.lookup("Techniquespec");}catch (Exception ex) 
{System.out.println("Techniquespecs調用出錯!");throw new EJBException
(ex);}}public java.util.Collection getVocTechnique() {/**@todo 
Complete this method*//*** 獲得全部技術需求項函數!
*/System.out.println("調用getVocTechnique()!");java.util.Collection 
collection = null;java.util.List results = new ArrayList();try
{collection= techniquespecHome.findByTypes();if(collection.size() > 0)
{System.out.println(collection.size());Iterator iter = 
collection.iterator();String tempStr = null;Techniquespec techniqu = 
null;while(iter.hasNext()){techniqu = (Techniquespec) iter.next
();tempStr = techniqu.getTechniqueitem();tempStr = charASC.chinTOISO
(tempStr);results.add(tempStr);}}}catch (Exception ex) 
{ex.printStackTrace();throw new EJBException(ex);}return results;}}        說明:(1)我們在Session Bean中添加了一個商務方法,getVocTechnique(),
以獲得techniqueitem中的全部內容。(2)setSessionContext中,我們完成了
EJB的一些初始化工作。(3) charASC.chinTOISO是用於中文轉換的靜態方法,
代碼如下:        package cacdsystem;public class charASC{static private String results 
= null;public charASC(){}static public String chinTOISO(String temp)
{if(temp == null){results = "";}else{try{results = new String
(temp.getBytes("ISO-8859-1"),"gb2312");results = results.trim();}catch
(Exception ee){System.out.println("中文轉換失敗!");}}return results;}}        5. JSP頁面的開發:針對Session Bean,我編寫了一個JSP頁面。    <%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.text.*" %>
<%@page import="java.util.*"%>
<%@page import="java.sql.*" %>
<%@page import="javax.naming.*" %>
<%@page import="java.lang.*" %>
<%@page import="javax.rmi.PortableRemoteObject" %>
<%@page import="javax.ejb.* "%>
<%@page import="cacdsystem.*"%>    <html>
<head>
<title>產品技術需求提取</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form id=form name=form1 method=post>
<input type=hidden id=pageFlag name=pageFlag value='input'>
您所在位置:產品技術需求提取
產品技術需求提取
<% InitialContext ctx = new InitialContext(); VocHome vocHome = (VocHome)PortableRemoteObject.narrow(ctx.lookup("Voc"),VocHome.class); Voc voc = vocHome.create(); Collection collection = voc.getVocTechnique(); if(collection.size() > 0) { Iterator iters = collection.iterator(); int i = 0; while(iters.hasNext()) { ++i; %> <% } } %> <% voc.remove(); %>
<input type='checkbox' name=<%= "select"+i %> value=<%= i %>><%= (String)iters.next() %>
<input type=submit id=submit1 name=submit1 value="提 交"> <input type=reset id=submit1 name=submit value="重 置">
</form> </body> </html> 6. 系統Deploy: 到現在為止,我們實現了Entity Bean、Session Bean、JSP, 從而實現了該實例所需要的代碼。為使我們測試代碼的正確性,我們來Deploy到 伺服器上。首先,由於在Session Bean中引用了Entity Bean,所以需要申明。 Voc Voc cacdsystem.VocHome cacdsystem.Voc cacdsystem.VocBean Stateless Container //手工添加的配置描述符代碼! Techniquespec Entity cacdsystem.TechniquespecHome cacdsystem.Techniquespec Techniquespec 其次,需要將EJB的介面檔拷貝到web-inf\classes目錄下。在這裏由於是存在 package cacdsystem中,需要把4個介面檔拷貝到web-inf\classes\cacdsystem 中。第三,將EJB打包成.jar檔,JBuilder 7可以自動完成,記得要包括 charASC.class文件。生成.jar後發佈到伺服器上可以通過JBuilder 7發佈,也 可以通過WebLogic提供的Builder工具,或者通過Console發佈,或者通過將.jar 拷貝到applications目錄即達到發佈的目的。 最後,我們也可以通過把整個EJB、JSP打包成.ear檔,JBuilder工具提供了Wizard。 總結 整個過程實現了EJB元件開發,從而對EJB有了一定的認識。接下來的文章中,我 會繼續深入講述EJB技術涉及到的技術。謝謝大家看完我的寫文章,也希望大家 寫信和我交流 ------------------------------------------------------------- EJB 2.0規範研究、學習 ------------------------------------------------------------- 通過前兩次,大家對EJB有了大概的瞭解,當然細節部分您可以參考我給出的參 考資料。這次的主要任務是分析Enterprise JavaBeans 2.0 Specification。規 範的PDF下載版本地址在http://java.sun.com/products/ejb/docs.html,這個 地方。為什麼將規範作為一次內容來講呢? 本人認為。第一,如果您沒有看過EJB規範,是否就一定瞭解EJB的真正意義?因 為我們知道Java相關的東西,都是通過JCP組織(http://www.jcp.org )發佈相關 規範來給出各個技術所包含的內容,所以通過分析規範我們可以對EJB有更好的 認識。第二,不要把會開發EJB元件作為自己的終極目標。我們知道,軟體工程 的使用使得軟體發展將會越來越簡單,比如舉一個簡單的例子,Together,不知 道大家用過沒有?Java語言本身推薦有編碼要求,如果開發人員需要自己維護代 碼的風格很頭疼,Together給你做好了,簡單的快捷方式使得你減少工作量。所 以你需要研究EJB規範,注重EJB技術的底層內容。第三,如果您研究過EJB規 範,是否覺得將近600頁的內容使得您很費力去分析、研究。所以在這裏給出一 些建設性的意見輔助您學習。 進入正題。。。 首先讓我們看看EJB 2.0中主要增加了什麼內容。這些內容自然是我們要研究的重點。 (1) 通過集成EJB和JMS,引入一種新的EJB,消息驅動Bean(Message-Drivern Beans)。消息驅動Bean是一種無狀態、非同步處理消息、非分散式元件(實現 過程中不需要實現EJBHome、EJBOject介面),其開發過程很簡單。建議學習方 式:需要JMS基礎,和一定的EJB基礎,然後結合一些應用實例可以開始學習,推 薦J2EE Tutorial,JBuilder 7幫助中提供的例子也不錯,或者Enterprise JavaBeans,3rd這本書中的例子。 (2) EJB 2.0中,用於CMP的Entity Beans作了很大的修改,並且引入了CMR,容 器管理關係。其中,用於管理Entity Beans間關係的CMR的引入給我們帶來很大 的便利。EJB QL也是不錯的新東西。還有一些提高性能方面的改進。建議看看 J2EE Tutorial中的例子,仔細分析分析,http://www.theserverside.com 上有 不少這方面較為深入的分析。 (3) Local介面的引入。在EJB元件的開發上,開發人員的開發方式沒有多大改 變,但這種改變帶來了其他很重要的東西。比如,性能上的提高,因為EJB客戶 不需要採用分散式協定訪問該EJB元件。還有,Local介面使得CMR成為可能,如 果你開發過EJB 1.1元件,就需要自己去管理Beans之間的關係。建議,同上。 (4) EJB QL的引入。類似SQL 的東西,但操作物件不一樣,可以說EJB QL實現了 SQL的子集。建議:同上,同時我會專門有一次專題講述EJB QL。 (5) EJB安全方面的加強:通過角色宣稱(role declarative)實現。建議參考 Enterprise JavaBeans,3rd. (6) 允許EJB客戶可以是不同產品上的J2EE元件。 這些內容是EJB 2.0中介紹的,所以我們要重點注意這些技術。 其次,600頁的規範,我們不可能在很短的實踐中全部都掌握了。可以結合自己 專案中用到的具體開發內容,有選擇的學習,但首先一定要知道EJB 2.0規範中 的具體內容。 有的放矢 循序漸進,有了這種過程,你每次看EJB 2.0規範過程中會有新的領悟。孔子總 結出來的道理。比如,我剛王成一個專案,其中的消息驅動Beans用得比較多, 所以結合這些內容把EJB 2.0規範中相應的內容多多研究。 再者,需要您去多看看Enterprise JavaBeans API Reference。這些文檔可以去 Java網站下載。在Mastering EJB中有詳細介紹。 ------------------------------------------------------------- EJB常見的開發模式 ------------------------------------------------------------- 本文的應用伺服器以WebLogic為例,其他的伺服器過程差不多。 在基於J2EE平臺中,EJB的開發屬於重中之重。本文試著從幾方面,講述了常用 的開發模式和方法。無論是給初學者,還是有經驗的朋友都有一定的參考價值。 大家知道,EJB對於初學者來說是一個很頭疼的問題,無論是開發還是發佈、測 試,尤其是Entity Beans更為頭疼,所以本文介紹幾種用於設計、開發、測試的 方法,以供參考。 WebLogic平臺,作為業界優秀的產品,其本身提供了很多優秀的工具來開發、發 佈J2EE應用程式。除此之外,和其他集成開發環境,比如JBuilder、VisualCafe 以及支援軟體發展整個過程的Together ControlCenter。有了業界這樣一種方式 的支援,使得WebLogic平臺的應用更為廣泛。 第一種方式: 用一般的軟體發展EJB,比如JCreator、EditPlus都可以。對於初學者,用這種 方式比較好,能夠對EJB的機制有較為深入的瞭解。編寫完後,把所有的EJB原始 檔案放置在一個src的目錄下,並在當前目錄(和src目錄平行)下建立一個目錄 deployment,並將寫好的配置描述檔ejb-jar.xml和weblogic-ejb-jar.xml拷貝 目錄deployment下。然後你可以將下面的批次檔案拷貝到目錄src的父目錄中, 然後運行批次檔案。(當然,你需要在這之前設置classpath和相關變數,自己推 敲以下就知道了) //用於編譯打包EJB的批次檔案compilejar.bat: mkdir classes mkdir lib mkdir classes\META-INF copy deployment\*.xml classes\META-INF javac -d classes src\*.java cd classes jar cf ..\lib\temp.jar * cd .. cd lib java weblogic.ejbc -keepgenerated temp.jar xxxEJB.jar del temp.jar cd .. //最終,我們得到了XXXEJB.jar,也就是可以用來直接在WebLogic中發佈的jar檔 其中編譯EJB我們用到weblogic.ejbc,老版本的WebLogic用的是 weblogic.ejbc20。(注: WebLogic中EJB的編譯是預編譯,也就是說會生成EJB 所需的所有的目標檔,但有些應用伺服器不是這樣的,比如JBoss借助於反射機 制在運行期動態生成!) 我們從而得到了xxxEJB.jar,發佈到WebLogic上。如果不借助於其他工具,只用 WebLogic自己的輔助工具的話,有兩種方式可以選擇。其一,通過Console台, 這種方式最簡單了,您應該大體上知道如何弄了。其二,通過WebLogic提供的 startWLBuilder.cmd工具。啟動後首先要連接到WebLogic中,如圖1(圖略)所 示。步驟是主功能表-〉Tools-〉Connect to Server。 然後連接上伺服器後,打開要deploy的EJB,或者Web Application。然後就可以 發佈了。這兩種辦法都可以。當然,個人喜歡第二中,因為它可以檢查你的EJB 打包是否符合要求,同時你需要修改EJB中的配置描述符都很簡單,這種圖形化 的介面操作很方便,從而大大提高deploy的成功率。 第二種方式: 通過第一種方式,我想您也體會到不少東西。當然,大家會想,這樣的一種方式 還是比較麻煩,至少需要更換兩種工具,不舒服。那好,接下來我們介紹第二種 方式。與IDE的集成。通過JBuilder Enterprise提供的集成我們可以更加智慧的 完成工作。關於JBuilder與WebLogic的集成過程,Borland網站, http://bdn.borland.com/,上有兩篇分別介紹JBuilder 6 + WebLogic 6.1和 JBuilder 7 + WebLogic 7.0的白皮書。 這種方式的引入,使得J2EE應用程式的開發、發佈和測試都是在一個統一的環境 下進行的,可以大大提高生產效率,使得開發人員可以更加專注於軟體本身。 第三種方式: 現在的開發工具、集成開發環境慢慢的很難和軟體前期的需求分析、系統建模聯 繫起來,這也是IDE所面臨的困境。比如,JBuilder提供了數量有限的UML圖以支 援軟體產品開發。而作為Together ControlCenter,由於其對軟體工程的整個過 程支持力度很高,所以慢慢流行起來。 Together ControlCenter中內置的BEA WebLogic Application Server PlugIn使 得該支援建模、開發、部署J2EE應用程式的工具獲得在WebLogic平臺下開發軟體 的開發人員的青睞。如圖2(圖略)所示。 該平臺支援開發人員在開發階段更換應用伺服器,無論是同一伺服器的不同版 本,還是不同伺服器。 綜上所述,本文介紹了3種開發EJB的方式,在實際應用中也是使用的模式,開發 者可以根據自己的喜好來選擇不同的模式。 參考資料 1. Enterprise JavaBeans, 3rd Edition by Richard Monson-Haefel 個人認為 最好的EJB書! 2. Effective Java Programming Language Guide by Joshun Bloch(中文版翻 譯的不太好,個人觀點) 3. Thinking in Java ,2nd Edition by Bruce Eckel(侯捷翻譯的中文版也不錯) 4. http://www.theserverside.com 5. http://java.sun.com/j2ee/tutorial/1_3-fcs/ Enterprise JavaBeans Technology部分 6. http://www.ejbnow.com/ 很有價值的網站! 7. http://java.sun.com/products/ejb/
發表人 - conundrum 於 2004/05/22 22:29:31
系統時間:2024-05-08 22:53:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!