轉貼:使用EJB創建CRM系統
發表時間:2024-06-20 來源:明輝站整理相關軟件相關文章人氣:
[摘要]利用EJB創建CRM系統 林建剛、聶旭琰、薛瑛 本文主要是利用EJB(Enterprise JavaBean)技術來開發一個CRM系統,整個系統應用J2EE構架,以IBM Websphere Application Server作為應用服務器來進行開發的。本文將介紹整個系統的構架以及整個系統中...
利用EJB創建CRM系統
林建剛、聶旭琰、薛瑛
本文主要是利用EJB(Enterprise JavaBean)技術來開發一個CRM系統,整個系統應用J2EE構架,以IBM Websphere Application Server作為應用服務器來進行開發的。本文將介紹整個系統的構架以及整個系統中EJB的分析設計和實現。
系統結構
本系統運用了當今流行的J2EE構架,將整個CRM系統分成四層,即客戶層、Web層、EJB層和數據層。其中EJB層主要處理系統的業務邏輯,系統運用Session facade設計模式即利用Session Bean包裝所有Entity Bean,來負責調用Entity Bean的方法,客戶端只允許與Session Bean交互,這樣可以縮短系統響應時間,減少資源利用。Entity Bean用來代表數據庫中的數據,所有對Entity Bean的操作都代表了底層數據庫中數據的變動,EntityBean與數據庫的同步過程由容器來管理。Session Bean用來處理業務邏輯和工作流,是客戶端工作的抽象。由Web層來處理企業的表示邏輯,用來處理與EJB層和客戶端之間的交互,包括接收、響應客戶端的請求,并向EJB層發出請求,接收它的響應結果。
系統以IBM VasualAge for Java作為開發工具,以IBM DB2作為后臺數據庫,利用IBM Websphere Application Server作為應用服務器。下圖就是整個系統的結構圖。
客戶層(Client Tier):包括瀏覽器、筆記本等客戶端。
Web層(Web Tier):使用JSP(Java Server Pages)來開發業務邏輯。
業務層(也叫EJB層):WebServer / AppServer,使用IBM HTTP Server 作為HTTP Server,IBM Websphere Server作為應用服務器。
數據層(Data Tier):使用IBM DB2存儲企業數據。
EJB設計
下面,我們將詳細介紹系統中所需的實體EJB與會話Bean的功能。
實體EJB設計
使用了EJB的實體Bean類型,所有的數據都封裝到實體EJB中,因此數據庫設計就成了EJB的設計。對應于上面的數據庫設計,這里可以抽象出來以下數據實體:
SystemManagerEJB:主要用來描述整個系統的管理員信息的實體Bean;
CustomerEJB:主要用來描述整個系統的客戶信息的實體Bean;
ContactEJB:主要用來描述與客戶接觸洽談的有關信息的相關資料的實體Bean;
CustomerServiceEJB:主要用來描述企業對客戶提供服務的相關信息的實體Bean;
ProductPurchaseEJB:主要用來描述客戶向企業購買產品的有關信息的實體Bean;
ProdutCheckoutEJB:主要用來描述客戶向企業購買產品后,企業的產品出庫的相關信息的實體Bean;
ProductStorageEJB:主要用來企業向銷售廠家購買產品后,產品入庫的相關信息的實體Bean。
會話Bean設計
會話Bean(Session Bean)主要完成一些邏輯處理,包括以下會話Bean :
FacadeEJB:主要用來封裝所有實體Bean;
StatProductEJB:主要是用來統計庫存產品的會話Bean;
StatCustomerEJB:主要是用來統計客戶信息的會話Bean。
程序示例
下面,筆者以CustomerEJB為例,簡述程序的開發過程:
編寫Home接口
Home接口是用來創建、定位和刪除對象的,每個實體Bean都有自己的Home接口。下面的代碼包含了CustomerHome接口的具體代碼:
import java.rmi.;
import javax.ejb.;
import java.util.;
public interface CustomerHome extends EJBHome {
public Customer create(
String customerName,
String customerPassword,
String customerSex,
String customerDepartment,
String customerInfo)
throws RemoteException,CreateException;
public Customer findByPrimaryKey(String primaryKey)
throws RemoteException,FinderException;
public Collection findAll() throws RemoteException, FinderException;
……
}
編寫Remote接口
遠程接口定義了客戶端和Bean交互使用的商務方法。下面的代碼顯示了Customer接口的定義。
import java.rmi.;
import javax.ejb.;
public interface Customer extends EJBObject {
String getCustomerName() throws RemoteException;
void setCustomerName(String customerName) throws RemoteException;
……
}
編寫Bean類
開發任何Bean都要以它的遠程接口作向導。遠程接口中定義的商務方法必須復制到Bean類中。在一個CMP中,Bean類必須有與Home接口中的創建方法對應的方法.最后還必須實現javax.ejb.EntityBean接口中定義的回調方法。下面是CustomerBean類的代碼示例:
import java.rmi.;
import javax.ejb.;
public abstract class UserinfoBean implements EntityBean {
EntityContext entityContext;
String customerName;
……
public Customer ejbcreate(
String customerName,
String customerPassword,
String customerSex,
String customerDepartment,
String customerInfo)
throws RemoteException,CreateException {
this.customerName = customerName;
……
}
public void ejbRemove()
throws RemoveException {
}
…… //其他回調方法
public String getCustomerName(){
return customerName;
}
…… //其他商務方法
}
在會話Bean中包裝實體
在FacadeEJB中包裝實體Bean,以便客戶端調用。
下面代碼演示了如何在會話Bean的一個商務方法中包裝實體Bean:
public Collection getAllRecords(){
Vector vectUserInfos = new Vector();
try {
Context ctx = new InitialContext();
Object ref = ctx.lookup("CustomerHome");
CustomerHome customerHome = (CustomerHome) PortableRemoteObject.narrow(ref, CustomerHome.class);
Collection collection = customerHome.findAll();
Return collection;
} catch(Exception e) {
e.printStackTrace();
}
}
最后,我們只要在JSP頁面中調用整個Customer的數據資料即可。完成其他的設計工作后,一個用EJB技術開發的CRM系統就初具規模了。