|
|
|
|
|
|
|
|
Java 2 Platform Enterprise Edition ( J2EE ) 概觀 |
|
Enterprise JavaBean ( EJB ) 介紹 |
|
Inprise Application Server 簡介 |
|
Workshop 實作部分 |
|
EJB 實作基本觀念 |
|
以 JBuilder 3.5 實作 Session Bean |
|
分發 Session Bean 至 Inprise Application Server 4 |
|
以 JBuilder 3.5 實作用戶端應用程式使用 Session Bean |
|
|
|
|
|
Java 2 Platform, Standard Edition ( J2SE ) |
|
提供基礎 Java 開發工具,執行環境與 API |
|
JDK 1.2 , JDK 1.3 開發 Java Applet , Java
Application 以及 JavaBean |
|
Java 2 Platform, Micro Edition ( J2ME ) |
|
經過最佳化,適用於消費性電子產品,嵌入式系統所使用的 Java 開發工具,執行環境與 API |
|
|
|
|
|
|
|
|
|
|
|
|
Java 2 Platform, Enterprise Edition ( J2EE ) |
|
J2EE 是由 Sun Microsystems 公司所提出之一組技術規格,規劃企業用戶以
Java 2 技術開發,分發,管理多層式應用架構之伺服器端軟體平台 |
|
是多項技術規格,而非特定產品名稱 |
|
獲得眾多廠商支持 |
|
Inprise/Borland,BEA,IBM,Oracle,Sybase,IONA,SilverStream
等超過 25 廠商提供 J2EE 解決方案 |
|
Java 跨越作業平台執行優勢適合伺服器端應用 |
|
|
|
|
|
|
|
EJB ( Enterprise JavaBean ) |
|
EJB 1.1 規格定案於 1999 年 12 月 |
|
Java 伺服器端的軟體元件 ( Component ) 規格 |
|
提供軟體系統廠商與企業應用程式開發人員間共同遵循之 Java 軟體元件標準 |
|
J2EE 中核心規格,整合 J2EE 各項技術提供完整企業解決方案 |
|
|
|
|
|
|
|
|
|
|
RMI ( Remote Method Invocation ) |
|
Java 程式與程式間物件相互呼叫方法的機制 |
|
可以跨越網路間通訊 |
|
RMI
– IIOP |
|
RMI – IIOP 是將 RMI 實作於 CORBA IIOP 通訊協定之上的延伸規格 |
|
提供了 Java 與 CORBA 規格間的整合能力 |
|
|
|
|
|
|
|
Servlets |
|
類似 CGI 運用 Java 技術的 Web Server 端延伸模組,可透過 HTTP 通訊協定利用
HTML/XML 與 Web Browser 溝通 |
|
JSP ( Java Server Page ) |
|
簡化 Servlets 開發過程的 Scripting Language,執行時將轉換為
Servlets |
|
|
|
|
|
|
|
JDBC ( Java Database Connectivity ) |
|
Java 存取資料庫標準與 Class API |
|
定義 4 種類型 JDBC Driver |
|
JDBC 2 增添 2 Phase commit 與 X/Open XA 支援 |
|
JNDI ( Java Naming and Directory Interface ) |
|
透過網路尋找 Java 元件或資源的介面 |
|
|
|
|
|
|
|
|
|
JTS ( Java Transaction Service ) |
|
Java 對應 CORBA OTS ( Object Transaction Service )
規格的一組管理交易的服務,以確保不同廠商間的資料庫或交易伺服器能夠協同運作 |
|
JTA ( Java Transaction API ) |
|
提供開發人員使用 JTS 掌控交易的一組 API Class, 涵蓋了 X/Open XA 交易管理與開發人員自訂之交易管理 |
|
|
|
|
|
|
|
JMS ( Java Messaging Service ) |
|
定義 Java 程式間非同步 ( Asynchronous ) 傳遞的機制,提供類似 IBM
MQ Series, Microsoft Queue 等產品對應服務. |
|
EJB 1.1 規格尚未與 JMS 緊密整合 |
|
Java IDL |
|
為 Java 提供 CORBA IDL 支援,以便透過 CORBA 與其它程式語言整合 |
|
|
|
|
|
|
|
XML ( Extensible Markup Language ) |
|
W3C 組織定義之資料交換格式,Sun Microsystems 提供存取此格式的 Java
API Class |
|
被運用於 J2EE 中多項技術 ( EJB , JSP … ) 中 |
|
Java Mail |
|
不受限於通訊協定與伺服器平台,定義 Java 發送電子郵件的一組服務 |
|
|
|
|
|
Connectors |
|
提供 Java 整合 mainframe 上現有系統 ( 例如 IBM CICS ) 或企業內大型
ERP 應用系統 ( 例如 SAP ) 能力 |
|
將納入 EJB 2.0 規格中 |
|
|
|
|
|
|
“The Enterprise Java Beans Architecture |
|
is a component architecture for the development |
|
and
deployment of object oriented distributed |
|
enterprise-level applications” |
|
|
|
|
|
|
|
皆是分散式軟體元件的標準 |
|
EJB 許多觀念衍生自 CORBA |
|
Sun Microsystems 是 OMG 組織重要成員 |
|
EJB 規格可以與 CORBA 相容 |
|
CORBA 用戶端應用程式透過 RMI-IIOP 使用 EJB |
|
RMI-IIOP 用戶端應用程式可以使用 CORBA 物件 |
|
主要 CORBA 系統廠商皆已經進入 EJB 市場 |
|
Inprise/Borland,IBM,IONA,BEA … |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CORBA 相較於 EJB 優勢之處 |
|
規格制定掌控於 OMG 組織而非單一公司 |
|
支援多種程式語言 |
|
完備 CORBA COS Service |
|
CORBA 相較於 EJB 弱勢之處 |
|
新規格形成速度緩慢 |
|
學習難度較高,開發成本高 |
|
不同廠商間伺服器端解決方案未必完全相容 |
|
|
|
|
|
Bean Provider |
|
了解特定領域或行業別專業知識,熟悉 Java 分散式物件技術,提供可重複使用的 EJB 元件的廠商或專家 |
|
Application Assembler |
|
組合運用 EJB 元件撰寫應用程式之 Java 開發人員 |
|
Deployer |
|
規劃,配置,分發 EJB 元件至網路上多台 EJB Server/Container 中的技術人員 |
|
System Administrator |
|
日常
EJB Server/Container 系統管理人員 |
|
EJB Server/Container Provider |
|
提供 EJB Server/Container 專業系統廠商 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
定義 |
|
a Session Bean is an extension of the Client
that creates it |
|
Session Bean 生命週期即為應用程式叫用此 EJB 所建立之 Session 的生命週期,當
EJB Server/Container 關閉或當機即喪失所有資料及狀態 |
|
適合實作 Business Logic , Business Rule 的 EJB |
|
能夠具備狀態 ( Stateful ) 或不具狀態 ( Stateless ) |
|
具備交易 ( Transactional ) 處理能力 |
|
|
|
|
最單純的 EJB 類型 |
|
EJB 不維護應用程式與 EJB 間方法呼叫往返時任何狀態 ( State ) |
|
應用程式必須自行負責維護狀態 |
|
單一 EJB 可被多個應用程式共用,任何時刻此類 EJB 皆可被應用程式叫用 |
|
具備延展性,可重複使用性佳, EJB 在 Container 中易於被 Pooled |
|
|
|
|
|
|
EJB 會維護應用程式與 EJB 間方法呼叫往返時任何狀態 ( State ) |
|
狀態 ( State ) 被儲存於 EJB Server 端 |
|
邏輯上 EJB 與應用程式間採 1 對 1 的服務方式 |
|
EJB Container 可將記憶體中久未被使用的 EJB 自動鈍化 ( Passivated
),並依照 Java Object Serialization 規則將狀態儲存至磁碟, 當該 EJB 再被叫用時 EJB Container 自動活化
( Activated ) 此 EJB 並載入之前儲存的狀態 |
|
|
|
|
|
以物件形式展現永續類型 ( Persistent Data ) 資料的一種 EJB, 資料可能儲存於資料庫,檔案系統或其它永續類型儲存媒體 |
|
可被多個應用程式所共享共用 |
|
Entity Bean 生命週期與叫用之應用程式或 EJB Server/Container 無關,當
Server/Container 關閉或當機不會喪失資料 |
|
具備交易 ( Transactional ) 處理能力 |
|
每個 Entity Bean 都必須有一個主鍵物件 ( Primary Key Object )
以便辨識與使用 |
|
|
|
|
|
|
|
|
|
Bean Provider 必須負責為此類 Entity Bean 實作下列四個方法 |
|
ejbCreate ( 相當於 SQL 之 insert ) |
|
ejbLoad ( 相當於 SQL 之 select ) |
|
ejbRemove ( 相當於 SQL 之 delete ) |
|
ejbStore ( 相當於 SQL 之 update ) |
|
|
|
|
|
|
EJB container 必須負責為此類 Entity Bean 實作 ejbLoad,ejbRemove,ejbCreate,ejbStore
四個方法 |
|
Entity Bean 儲存於資料庫或其它儲存媒體時, Container 提供物件與關聯式資料對應
(object-to-relational mapping ) 能力 |
|
|
|
|
|
同時支援 J2EE 與 CORBA 的企業級 Application Server |
|
可承載 Java/C++ CORBA 元件與 Java EJB 元件 |
|
具備容錯能力 |
|
自由規劃配置軟體元件所在位置 |
|
具備延展性 |
|
高執行效能 |
|
支援多種作業平台 |
|
支援 Windows NT/2000,Solaris,Linux |
|
陸續推出 HP-UX 與 AIX 平台版本 |
|
與 Borland JBuilder 3.5 Enterprise 緊密整合 |
|
|
|
|
|
|
|
以 CORBA 為基礎,完整實作 J2EE 主要規格 |
|
內建 VisiBroker 4.0 CORBA ORB |
|
實作 Java IDL 與 RMI-IIOP |
|
完整支援 EJB 1.1 規格之 EJB Server/Container |
|
內建支援 Java Servlets 與 JSP 之 Java Web Server |
|
實作 JNDI 於 CORBA COS Naming Service |
|
實作 JTS/JTA 於 CORBA Object Transaction Service |
|
陸續推出 JMS 以及 Security Service |
|
圖形化 EJB 元件管理及分發工具 |
|
提供 JDataStore 可儲存 Entity Bean |
|
|
|
|
|
|
|
|
EJB 實作基本觀念 |
|
以 JBuilder 3.5 實作 Session Bean |
|
分發 Session Bean 至 Inprise Application Server 4 |
|
以 JBuilder 3.5 實作用戶端應用程式使用 Session Bean |
|
|
|
|
|
|
|
|
必須實作 EJB interface 的 Java Class |
|
EJB interface 可能為下列兩者之一: |
|
javax.ejb.SessionBean |
|
javax.ejb.EntityBean |
|
此 Java Class 提供實作 Business Logic 於 public
methods 中供應用程式叫用 |
|
命名慣例 |
|
您欲撰寫之元件名稱 + ‘Bean’ |
|
例如 . Ping 元件即為 PingBean |
|
|
|
|
|
|
|
Enterprise Bean Class 內除了您自訂實作 Business Logic 之
public method 外另有下列供 Container 叫用 call back method : |
|
public void ejbCreate ( ) |
|
public void ejbRemove ( ) |
|
public void ejbActivate ( ) |
|
public void ejbPassivate ( ) |
|
public void setSessionContext ( SessionContext
ctx ) |
|
|
|
|
|
|
|
|
|
|
Remote Interface 繼承自 javax.ejb.EJBObject |
|
Remote Interface 定義一個提供用戶端應用程式叫用 Interface |
|
必須包含 Enterprise Bean 中實作 Business Logic 之 public
method 的宣告 |
|
所有方法都將產生 Remote Exception 以預防網路間通訊發生非預期之狀況 |
|
可由 JBuilder 3.5 自動產生介面程式碼或自行撰寫 |
|
命名慣例 |
|
Enterprise Bean 名稱去掉 ‘Bean’ |
|
例如. 若 Enterprise Bean 名為 PingBean 則對應之 Remote
Interface 命名為 Ping |
|
|
|
|
|
|
|
|
|
|
Home Interface 繼承自 javax.ejb.EJBHome |
|
用戶端應用程式使用 EJB 的機制採用 Design Pattern 中常見的 Factory
Pattern |
|
Home Interface 中提供一個重要的方法 – create 來建立
Enterprise Bean |
|
Home Interface 中的 create method 會回傳對應之 Remote
Interface 的型態 |
|
可由 JBuilder 3.5 自動產生介面程式碼或自行撰寫 |
|
命名慣例 |
|
Remote Interface 名稱加上 ‘Home’ |
|
例如 Remote Interface 名為 Ping 則對應之 Home Interface 名為PingHome |
|
|
|
|
|
|
|
EJB Object 實作了 Remote Interface |
|
Interface 內 Method 實作程式碼由 EJB Container 產生 |
|
EJB Object 由 Container 所產生,扮演 Proxy 角色,用戶端應用程式透過它來使用您所實作
Enterprise Bean |
|
您所實作 Enterprise Bean 之 public method 永遠不會被用戶端應用程式直接呼叫 |
|
|
|
|
|
|
|
Home Object 實作了 Home Interface |
|
Interface 內 Method 實作程式碼由 EJB Container 產生 |
|
Home Object 透過 JNDI 取得 Home Object Reference |
|
Home Object 之 create method 負責通知 Container 準備建立您所實作之
Enterprise Bean 以及 EJB Object,並且回傳 EJB Object 之 reference |
|
您所實作 Enterprise Bean 永遠不會被用戶端應用程式直接建立 |
|
|
|
|
|
|
|
|
|
|
|
運用 Factory , Proxy 等 Design Pattern 讓 EJB
Container/Server 有機會提供 |
|
伺服器系統資源管控 ( 例如 Object Pooling ) |
|
EJB 生命週期管控 |
|
EJB 狀態 ( State ) 管控 |
|
交易管理 |
|
權限管制 |
|
…………. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
先安裝 JBuilder 3.5 Enterprise 版於 C:\JBuilder35 |
|
接著安裝 Inprise Application Server 4 於
C:\inprise\appserver 並執行中文環境修補程式 |
|
為 JBuilder 3.5 加上 Enterprise JavaBean Wizard |
|
關閉 JBuilder 3.5 |
|
以編輯器開 C:\JBuilder35\bin\jbuilder.config |
|
加上 addjars C:\inprise\appserver\lib |
|
|
|
|
|
|
|
|
|
為 JBuilder 3.5 設定妥 VisiBroker CORBA ORB |
|
啟動 JBuilder 3.5 並 |
|
選取功能表 Tools | CORBA Setup … |
|
Select a configuration: |
|
選取 VisiBroker 並按下 |
|
右方的 Set … 按鈕 |
|
|
|
|
|
|
|
鍵入 VisiBroker ORB 相關工具所在路徑,由於 Inprise
Application Server 4 內建了 VisiBroker 4.0 for Java , 可直接鍵入
C:\inprise\appserver\bin |
|
依序按下 OK 按鈕確認動作 |
|
|
|
|
|
|
|
|
|
為 JBuilder 3.5 設定妥 Inprise Application Server 相關
Library |
|
選取功能表 |
|
Project | Default project properties … |
|
選取 Require Libraries 頁次 |
|
按下 Add … 按鈕準備加入 |
|
相關函式庫,按下按鈕後將出 |
|
現 Select one or more libraries 對 |
|
話方塊,按下右方 New… 按鈕, |
|
準備為 Inprise Application Server |
|
定義一個新的函式庫 |
|
|
|
|
|
|
|
|
|
|
|
|
|
按下右方 New… 按鈕後將出現 Edit Library 對話方塊,請在 Name : 編輯方塊中為此函式庫定義一個識別名稱,例如
“ Inprise Application Server 4” 並以右方 Add … 按鈕將位於 C:\inprise\appserver\lib 內的所有
.jar 檔案加入清單方塊中 |
|
依序按下 OK 按鈕確認動作 |
|
|
|
|
選取功能表 File | New project… 建立一個名為 simple.jpr 的專案檔 |
|
選取功能表 File | New … |
|
出現右圖的 Object Gallery |
|
對話方塊,在 Enterprise 頁 |
|
次選取 Enterprise JavaBean |
|
並按下 OK 按鈕 |
|
|
|
|
|
|
按下 OK 按鈕後出現如圖所示的 Enterprise JavaBean Wizard 對話方塊,依照前述命名建議,將
Class Name 編輯方塊內建入PingBean |
|
並在 Options 選項 |
|
按鈕選取 |
|
Session Bean 完成 |
|
後按下 OK 按鈕 |
|
此精靈將產生 |
|
PingBean.java 程式 |
|
碼骨架 |
|
|
|
|
|
|
|
欲使用 Inprise Application Server 4 開發 EJB 至少必須包含之前自行定義函式庫 |
|
Inprise Application Server 4 |
|
以及 JBuilder 預先定義妥之 |
|
Enterprise JavaBeans |
|
|
|
|
|
|
|
|
在 PingBean.java 程式碼加上自訂的方法 getTime |
|
|
|
public class PingBean implements SessionBean { |
|
private SessionContext sessionContext; |
|
|
|
// 加入自訂的方法並實作 |
|
public long getTime( ) { |
|
return ( System.currentTimeMillis ( ) ) ; //
回傳系統時間 |
|
} |
|
…………….. |
|
} |
|
|
|
|
選取功能表 Wizards | EJB Interfaces … 出現如圖的對話方塊此精靈將依據
PingBean.java 內容自動產生 |
|
Remote Interface |
|
及 |
|
Home Interface |
|
的原始程式碼 |
|
|
|
|
勾選欲公開給用戶端應用程式使用的方法並按下 Finish 按鈕, JBuilder 3.5 將依照命名慣例產生名為 |
|
Ping.java |
|
以及 |
|
PingHome.java |
|
兩個介面原始 |
|
程式碼檔案 |
|
|
|
|
|
|
此時 simple.jpr 專案檔中包含了下列檔案 |
|
ejb-jar.xml |
|
通用的 EJB Deployment descriptor |
|
Ping.java |
|
Remote Interface 程式碼 |
|
PingBean.java |
|
真正實作封裝應用邏輯的 Enterprise Bean 程式碼 |
|
PingHome.java |
|
Home Interface 程式碼 |
|
Simple.html |
|
說明專案檔的 HTML 檔案 ( 非必要檔案 ) |
|
|
|
|
|
|
|
編譯及儲存整個專案檔 simple.jpr |
|
選取功能表 |
|
Wizards | Deployment |
|
出現如圖所示對話方 |
|
塊,我們將所產生的 |
|
主要檔案打包成名為 |
|
simple.jar 的檔案,完成 |
|
後按下 Next 按鈕 |
|
|
|
|
|
|
按下 Next 按鈕出現如圖所示的對話方塊 |
|
由於支援 Java 2 的 Inprise Application Server 4 已經內建
javax package |
|
,不必勾選分發 javax |
|
package 以節省空間,接 |
|
著按下 Finish 按鈕完成 |
|
分發動作產生 simple.jar |
|
|
|
|
|
|
|
|
啟動 Inprise Application Server 4 |
|
執行 Inprise EJB Deployment Descriptor Editor |
|
選取功能表 File | Open 開啟將前述步驟產生的 simple.jar |
|
|
|
|
|
|
選取左方清 |
|
單方塊中 |
|
Ping 項目並 |
|
在 JNDI |
|
Bean Name |
|
的編輯方塊 |
|
中鍵入辨識名稱 “LaLaLa” , 未來 JNDI 將以此名稱代表該 EJB |
|
|
|
|
如圖選取左方清單方塊中 Container Transaction 項目,接著按下滑鼠右鍵選取
New Container Transaction 以設定此 EJB 交易支援狀態 |
|
|
|
|
選取功能表 File | Verify 檢查 EJB Deployment
Descriptor 由於未產生 RMI-IIOP Stub
會有 8 個警告訊息,可 |
|
以暫時忽略,接 |
|
著選取功能表 |
|
File | Save 儲存 |
|
全部編修內容, |
|
全部動作完成後 |
|
結束此程式 |
|
|
|
|
執行 Inprise Application Server Console |
|
選取功能表 Tools | Deployment Wizard 出現如圖的對話方塊,運用
Browse 按鈕選取之前已經編修過的simple.jar 檔案, |
|
由於之前並未 |
|
產生 RMI-IIOP |
|
Stub 請勾選 |
|
Generate Stub |
|
核取方塊,完成後 |
|
按下 Deploy Jar To |
|
Container 按鈕 |
|
|
|
|
分發完成後可在 Inprise Application Server Console |
|
看到 |
|
Ping 這個 |
|
EJB |
|
|
|
|
|
|
|
選取功能表 Tools | Generate Client Jar 出現如圖的對話方塊,
Source Jar File 編輯方塊請鍵入 simple.jar 而 Save Client As 編輯方塊則鍵入名為
simpleclient.jar 可供用戶端應用程式叫用的函式庫 |
|
,按下 Generate |
|
按鈕後即開始 |
|
產生該檔案 |
|
|
|
|
啟動 JBuilder 3.5 選取功能表 File | New project… 建立名為
simpleclient.jpr 的專案檔 |
|
選取功能表 File | New … |
|
出現右圖的 Object Gallery |
|
對話方塊,在 New 頁 |
|
次選取 Application 並按下 |
|
OK 按鈕 |
|
|
|
|
|
|
依照 Application Wizard 指示設定用戶端應用程式基本外觀 |
|
|
|
|
|
為 JBuilder 3.5 設定妥使用 PingBean 這個 EJB 所需要的
Library |
|
選取功能表 |
|
Project | project properties … |
|
選取 Require Libraries 頁次 |
|
按下 Add … 按鈕準備加入 |
|
相關函式庫,按下按鈕後將出 |
|
現 Select one or more libraries 對 |
|
話方塊, 按下 New… 按鈕,為 |
|
叫用 PingBean 這個 EJB 定義 |
|
一個新的函式庫 |
|
|
|
|
|
|
|
|
|
|
|
|
|
按下右方 New… 按鈕後將出現 Edit Library 對話方塊,請在 Name : 編輯方塊中為此函式庫定義一個識別名稱,例如
“ PingBean Client” 並以右方 Add … 按鈕將之前所產生的 simpleclient.jar 加入清單方塊中 |
|
依序按下 OK 按鈕確認動作 |
|
|
|
|
|
欲使用 Ping 這個 EJB 至少必須包含之前自行定義的兩個函式庫 |
|
PingBean Client |
|
Inprise Application Server 4 |
|
以及 JBuilder 預先定義妥之 |
|
Enterprise JavaBeans |
|
|
|
|
|
|
|
|
設計用戶端應用程式使用者介面 |
|
Frame1.java |
|
|
|
|
開啟 Frame1.java 原始程式碼 |
|
欲使用 Ping 這個 EJB 請在程式碼中加入 |
|
import simple.*; |
|
|
|
準備撰寫按鈕 jButton1 被按下後之處理程式碼 |
|
|
|
void jButton1_actionPerformed ( ActionEvent e )
{ |
|
// 叫用 Ping EJB 的程式碼將寫在此處 |
|
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
// 建立 JNDI 的 naming context |
|
javax.naming.Context ctx = new
javax.naming.InitialContext(); |
|
// 利用 JNDI Bean Name “LaLaLa” 取得 Home Object
Reference |
|
PingHome home = (PingHome)
javax.rmi.PortableRemoteObject.narrow |
|
( ctx.lookup( “LaLaLa“ ), PingHome.class ) ; |
|
// 取得 EJB Object Reference |
|
Ping ping = home.create ( ) ; |
|
// 呼叫自訂方法 getTime 並將回傳值顯示於 jLabel1 內 |
|
jLabel1.setText ( String.valueOf
( ping.getTime( ) ) ) ; |
|
} |
|
catch (Exception ex) { // 撰寫錯誤處理程式碼 |
|
} |
|
|
|
|
執行用戶端應用程式,按下 Get Time 按鈕,呼叫 Ping EJB 的 getTime 方法取得系統時間 |
|
|
|
|
|
完整步驟 |
|
http://www.inprise.com/devsupport/appserver/faq/jbuilder/DebuggingEJBsInStandaloneContainers.htm |
|
簡易方法 |
|
EJB 程式碼中運用 System.out.print (“Debug Message”); 將除錯訊息及變數值輸出 |
|
輸出之訊息可利用 Inprise Application Server Console 開啟
EJB Containers | Logs | Event 直接觀看 |
|
|
|
|
|
|
|
|
White Paper : EJB Development Using JBuilder 3.5
& Inprise Application Server 4.0 |
|
Copyright 2000 by Todd Spurling,Inprise/Borland
Corp |
|
Mastering Enterprise JavaBeans and the Java 2
Platform,Enterprise Edition |
|
Copyright 1999 by Ed Roman,Wiley Computer Publishing |
|
Enterprise JavaBeans™ Specification, v1.1 |
|
Copyright 1999 by Sun Microsystems, Inc. |
|
Inprise Application Server Enterprise JavaBeans
Programmer’s Guide |
|
Copyright 2000 by Inprise/Borland Corp |
|
|
|