備忘稿

|

大綱

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