明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

轉(zhuǎn)貼:使用EJB創(chuàng)建CRM系統(tǒng)

[摘要]利用EJB創(chuàng)建CRM系統(tǒng) 林建剛、聶旭琰、薛瑛   本文主要是利用EJB(Enterprise JavaBean)技術(shù)來(lái)開(kāi)發(fā)一個(gè)CRM系統(tǒng),整個(gè)系統(tǒng)應(yīng)用J2EE構(gòu)架,以IBM Websphere Application Server作為應(yīng)用服務(wù)器來(lái)進(jìn)行開(kāi)發(fā)的。本文將介紹整個(gè)系統(tǒng)的構(gòu)架以及整個(gè)系統(tǒng)中...
利用EJB創(chuàng)建CRM系統(tǒng)

林建剛、聶旭琰、薛瑛

  本文主要是利用EJB(Enterprise JavaBean)技術(shù)來(lái)開(kāi)發(fā)一個(gè)CRM系統(tǒng),整個(gè)系統(tǒng)應(yīng)用J2EE構(gòu)架,以IBM Websphere Application Server作為應(yīng)用服務(wù)器來(lái)進(jìn)行開(kāi)發(fā)的。本文將介紹整個(gè)系統(tǒng)的構(gòu)架以及整個(gè)系統(tǒng)中EJB的分析設(shè)計(jì)和實(shí)現(xiàn)。


  系統(tǒng)結(jié)構(gòu)


  本系統(tǒng)運(yùn)用了當(dāng)今流行的J2EE構(gòu)架,將整個(gè)CRM系統(tǒng)分成四層,即客戶層、Web層、EJB層和數(shù)據(jù)層。其中EJB層主要處理系統(tǒng)的業(yè)務(wù)邏輯,系統(tǒng)運(yùn)用Session facade設(shè)計(jì)模式即利用Session Bean包裝所有Entity Bean,來(lái)負(fù)責(zé)調(diào)用Entity Bean的方法,客戶端只允許與Session Bean交互,這樣可以縮短系統(tǒng)響應(yīng)時(shí)間,減少資源利用。Entity Bean用來(lái)代表數(shù)據(jù)庫(kù)中的數(shù)據(jù),所有對(duì)Entity Bean的操作都代表了底層數(shù)據(jù)庫(kù)中數(shù)據(jù)的變動(dòng),EntityBean與數(shù)據(jù)庫(kù)的同步過(guò)程由容器來(lái)管理。Session Bean用來(lái)處理業(yè)務(wù)邏輯和工作流,是客戶端工作的抽象。由Web層來(lái)處理企業(yè)的表示邏輯,用來(lái)處理與EJB層和客戶端之間的交互,包括接收、響應(yīng)客戶端的請(qǐng)求,并向EJB層發(fā)出請(qǐng)求,接收它的響應(yīng)結(jié)果。

  系統(tǒng)以IBM VasualAge for Java作為開(kāi)發(fā)工具,以IBM DB2作為后臺(tái)數(shù)據(jù)庫(kù),利用IBM Websphere Application Server作為應(yīng)用服務(wù)器。下圖就是整個(gè)系統(tǒng)的結(jié)構(gòu)圖。


  客戶層(Client Tier):包括瀏覽器、筆記本等客戶端。

  Web層(Web Tier):使用JSP(Java Server Pages)來(lái)開(kāi)發(fā)業(yè)務(wù)邏輯。

  業(yè)務(wù)層(也叫EJB層):WebServer / AppServer,使用IBM HTTP Server 作為HTTP Server,IBM Websphere Server作為應(yīng)用服務(wù)器。

  數(shù)據(jù)層(Data Tier):使用IBM DB2存儲(chǔ)企業(yè)數(shù)據(jù)。


  EJB設(shè)計(jì)


  下面,我們將詳細(xì)介紹系統(tǒng)中所需的實(shí)體EJB與會(huì)話Bean的功能。

  實(shí)體EJB設(shè)計(jì)

  使用了EJB的實(shí)體Bean類(lèi)型,所有的數(shù)據(jù)都封裝到實(shí)體EJB中,因此數(shù)據(jù)庫(kù)設(shè)計(jì)就成了EJB的設(shè)計(jì)。對(duì)應(yīng)于上面的數(shù)據(jù)庫(kù)設(shè)計(jì),這里可以抽象出來(lái)以下數(shù)據(jù)實(shí)體:

  SystemManagerEJB:主要用來(lái)描述整個(gè)系統(tǒng)的管理員信息的實(shí)體Bean;

  CustomerEJB:主要用來(lái)描述整個(gè)系統(tǒng)的客戶信息的實(shí)體Bean;

  ContactEJB:主要用來(lái)描述與客戶接觸洽談的有關(guān)信息的相關(guān)資料的實(shí)體Bean;

  CustomerServiceEJB:主要用來(lái)描述企業(yè)對(duì)客戶提供服務(wù)的相關(guān)信息的實(shí)體Bean;

  ProductPurchaseEJB:主要用來(lái)描述客戶向企業(yè)購(gòu)買(mǎi)產(chǎn)品的有關(guān)信息的實(shí)體Bean;

  ProdutCheckoutEJB:主要用來(lái)描述客戶向企業(yè)購(gòu)買(mǎi)產(chǎn)品后,企業(yè)的產(chǎn)品出庫(kù)的相關(guān)信息的實(shí)體Bean;

  ProductStorageEJB:主要用來(lái)企業(yè)向銷(xiāo)售廠家購(gòu)買(mǎi)產(chǎn)品后,產(chǎn)品入庫(kù)的相關(guān)信息的實(shí)體Bean。

  會(huì)話Bean設(shè)計(jì)

  會(huì)話Bean(Session Bean)主要完成一些邏輯處理,包括以下會(huì)話Bean :

  FacadeEJB:主要用來(lái)封裝所有實(shí)體Bean;

  StatProductEJB:主要是用來(lái)統(tǒng)計(jì)庫(kù)存產(chǎn)品的會(huì)話Bean;

  StatCustomerEJB:主要是用來(lái)統(tǒng)計(jì)客戶信息的會(huì)話Bean。


  程序示例


  下面,筆者以CustomerEJB為例,簡(jiǎn)述程序的開(kāi)發(fā)過(guò)程:

  編寫(xiě)Home接口

  Home接口是用來(lái)創(chuàng)建、定位和刪除對(duì)象的,每個(gè)實(shí)體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;

  ……

  }

  編寫(xiě)Remote接口

  遠(yuǎn)程接口定義了客戶端和Bean交互使用的商務(wù)方法。下面的代碼顯示了Customer接口的定義。

  import java.rmi.;

  import javax.ejb.;

  public interface Customer extends EJBObject {

  String getCustomerName() throws RemoteException;

  void setCustomerName(String customerName) throws RemoteException;

  ……

  }

  編寫(xiě)B(tài)ean類(lèi)

  開(kāi)發(fā)任何Bean都要以它的遠(yuǎn)程接口作向?qū)А_h(yuǎn)程接口中定義的商務(wù)方法必須復(fù)制到Bean類(lèi)中。在一個(gè)CMP中,Bean類(lèi)必須有與Home接口中的創(chuàng)建方法對(duì)應(yīng)的方法.最后還必須實(shí)現(xiàn)javax.ejb.EntityBean接口中定義的回調(diào)方法。下面是CustomerBean類(lèi)的代碼示例:

  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 {

   }

   …… //其他回調(diào)方法

   public String getCustomerName(){

   return customerName;

   }

   …… //其他商務(wù)方法

  }

  在會(huì)話Bean中包裝實(shí)體

  在FacadeEJB中包裝實(shí)體Bean,以便客戶端調(diào)用。

  下面代碼演示了如何在會(huì)話Bean的一個(gè)商務(wù)方法中包裝實(shí)體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頁(yè)面中調(diào)用整個(gè)Customer的數(shù)據(jù)資料即可。完成其他的設(shè)計(jì)工作后,一個(gè)用EJB技術(shù)開(kāi)發(fā)的CRM系統(tǒng)就初具規(guī)模了。