国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

EJB應用開發的設計實例深入分析

2019-11-18 12:33:07
字體:
來源:轉載
供稿:網友

  EJB技術是Sun公司發明的,從發明至今已經發布了3個版本的EJB規范,1.0,1.1,2.0。EJB 2.1版已經發布了被提義的最終草案
  
  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來訪問本身。
  
  分布式組件和負荷在傳統的TP monitors的基于過程的應用程序相比,其優點在于,它提供了更好的重用性和靈活性,因為它們可以將不同種類的商業對象集成起來,但這樣的組件很難編寫,同時缺少TP monitors所提供的健壯的基礎框架。假如能夠將兩者的優勢結合起來,便構成EJB出現的緣由。
  
  EJB服務器給distributed components提供了類似TP monitors的環境。EJB服務器中,類似TP monitors環境的給出減少了開發的復雜度、distributed components的給出使得開發者的開發效率大大提高。
  
  EJB客戶通過JNDI、java RMI-IIOP來訪問。這種客戶可能是Java應用程序、jsp(Servlets)、其他的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
  (要與前面的相匹配!)
  
  其中,在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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 工布江达县| 崇阳县| 河津市| 朔州市| 宽城| 宁国市| 北流市| 三穗县| 大洼县| 绥宁县| 沽源县| 南溪县| 海城市| 磴口县| 余庆县| 博乐市| 金门县| 观塘区| 安乡县| 张家口市| 三河市| 大丰市| 塔河县| 绍兴县| 仁化县| 冕宁县| 正蓝旗| 囊谦县| 乌鲁木齐市| 泰来县| 车致| 喀什市| 仲巴县| 高要市| 苏尼特左旗| 观塘区| 彭山县| 习水县| 卢氏县| 长治县| 桃园县|