J2ee是企業級的計算平臺,它爲分佈式和基於組件的軟件開發提供了一個「操做系統」 javascript
Ant是什麼工具?? html
EJB: java
什麼是EJB? web
是一種server端組件結構,簡化了開發分佈式企業級程序的過程 算法
類比:應用server是一個CD播放器,而組件是一張cd,因爲有了cd標準,不論什麼cd播放器都能播放cd 數據庫
EJB分爲兩個部分: 編程
一、 規範 api
列出了組件與應用server之間相互約定的規則 緩存
二、 一組java接口 安全
組件和server都應該
Java bean 與ejb的差異?
Javabean僅僅是一個含有get/set的java類,javabean是不能部署的
EJB中的角色分工:6種分工
一、 bean供應商:編寫組件
二、 應用系統組裝商:整個系統的架構師,組織組件協同工做
三、 EJB系統部署員:瞭解各類執行環境,知道怎麼樣在server中部署bean
四、 系統管理員:維護和監控已經部署好的系統
五、 容器和server提供商:如weblogic、websphere等等
六、 工具供應商:Jbuilder、wsad、Juint、ant等等
2 EJB基礎
EJB技術是基於RMI和JNDI的,學習以前應瞭解這兩項技術
一個企業級BEAN是一個可以在分佈式環境中部署的server端軟件組件,一個EJB多是由一個或者多個java對象組成,Bean用戶沒必要關係組件的組成,它們僅僅和組件的接口打交道。
2.1 企業Bean
Bean類型:
一、 會話Bean
模擬商務過程對象,就像動詞同樣,運行動做
二、 實體Bean
模擬商務數據對象,就像名詞同樣,如產品、訂單等等數據庫對象
三、 消息驅動Bean
與會話Bean類似,也是表明動做,僅僅能經過消息來調用它們
2.2 分佈式對象:EJB基礎
2.3 分佈式對象和中間件
2.4 企業級Bean的組成部分
2.4.1 Enterprise Bean
所有的Ejb類都必須實現的接口是:javax.ejb.EnterpriseBean
所有的會話bean都必須實現javax.ejb.SessionBean接口
所有的實體bean都必須實現javax.ejb.EntityBean接口
所有的消息驅動bean都必須實現javax.ejb.MessageDriveBean接口
2.4.2 EJB對象
◆遠程接口(Remote接口):
EJB對象必須clone bean類的每個公開的商務方法,bean供應商編寫了一個特殊的接口,該接口複製相應的bean類的所有公開的商務方法,該接口稱爲遠程接口(Remote接口)
所有的Remote接口必須來源於javax.ejb.EJBObject
client不能直接調用EJB,client調用的是EJB對象,而不是調用Bean,是client-》EJB對象-》EJB
什麼是EJB對象?
EJB對象把所有的client請求都傳遞給bean,是一種代理對象,具備網絡功能,EJB對象把client和Bean鏈接在一塊兒
2.4.3 Home對象
client是經過EJB對象調用Bean的,那麼,client是怎樣調用獲得EJB對象的引用的呢?
就是經過Home對象來引用EJB對象的
是EJB對象的製造生成庫
功能:
生成EJB對象
查找現存的EJB對象
刪除EJB對象
Home接口:
Home對象、EJB對象、Bean實例之間的關係??
2.4.4 本地接口
由於Home接口生成Bean的速度是很慢的
可以經過本地對象高速、高效的調用企業級Bean,而不是經過EJB對象調用,本地對象實現本地接口,而不是遠程接口
EJB對象:請求攔截器
遠程接口:請求攔截器上的接口
Home對象:製造生成庫
Home接口:製造生成庫接口
2.4.5 部署描寫敘述
必須在部署文件裏聲明組件對中間件服務的要求,好比,使用部署描寫敘述來聲明:
一、 Bean的管理和生命週期要求:指明EJB容器應該怎麼管理這些Bean
二、 持久性要求:是本身處理持久性仍是託付容器處理持久性問題
三、 事務處理要求:
四、 安全性要求:
EJB的部署描寫敘述是一個XML文件,Bean的提供商負責描寫敘述部署文件
2.4.6 供應商特有文件
2.4.7 EJB-JAR文件
Bean類、Home接口、Remote接口以及部署文件一旦生成,就可以打包成EJB-JAR文件了
3 編寫第一個Bean
3.1 怎樣開發EJB組件
開發一個EJB組件,通常遵循例如如下步驟:
一、 編寫Bean的java文件、組件接口、home接口、EJB class文件
二、 編寫部署描寫敘述附
三、 編寫java文件到.CLASS文件裏
四、 使用工具生成ejb-jar文件
五、 公佈ejb-jar文件
六、 配置EJBserver,可能需要調整數據庫鏈接、緩衝池等等
七、 開啓EJBserver
八、 測試
3.1.1 Remote接口
Remote接口複製咱們要暴露的每一個業務方法,注意兩點:
一、 該接口繼承自javax.ejb.EJBObject,必須實現EJBObject接口所要求的幾個方法,如:remove等等
二、 必須編寫實際的業務代碼
產生hello.java文件,繼承自javax.ejb.EJBOjbect
3.1.2 本地接口
本地client將會使用本地接口而不是remote接口,本地接口和remote接口有微小的差異
產生HelloLocal.java文件,繼承自javax.ejb.EJBLocalObject
3.1.2 Home接口
Home接口擁有Create和Destroy EJB對象的方法。由Home對象運行Home接口
Home接口注意下面幾點:
一、 Create方法通常用於對EJB對象的引用,Create方法也通常用於初始化Bean
要傳遞建立Bean時的參數,需要覆蓋Home接口的create方法,並且要與Bean相應
產生HelloHome.java文件,繼承自javax.ejb.EJBHome
3.1.3 Local Home 接口
Local Home接口比Home接口有更高的性能
產生HelloLocalHome.java文件,繼承自javax.ejb.EJBLocalHome
3.1.4 Bean類
產生HelloBean.java文件,實現javax.ejb.SessionBean接口
EJBContext:通向容器的途徑
容器經過setSessionContext方法將bean和context對象關聯起來
3.1.5 部署描寫敘述附
部署描寫敘述附是一個xml文件
部署描寫敘述文件是對前面描寫敘述的Remote接口、本地接口、Home接口、LocalHome接口、Bean類的總體描寫敘述!!
3.1.6 EJB-JAR文件
打包以上所有文件
3.1.7 部署Bean
部署步驟:
一、 覈對EJB-JAR文件
二、 用EJB容器提供的工具生成EJB對象和Home對象
三、 用EJB容器提供的工具生成不論什麼必須的RMI存根和骨架
3.1.8 怎樣調用Bean
現在開始討論client的代碼,通常都使用基於RMI的client,使用JAVA命名和JNDI在網絡中查找對象
代碼的特色例如如下:
一、 查找Home對象
EJB的位置透明:
經過文件夾服務,應用程序代碼不依賴於特定的機器名字和物理位置,使得編寫的代碼可以移植。
什麼是JNDI?
JNDI提供標準接口用於定位用戶、機器、網絡、對象等,好比,可以使用JNDI定位內部網絡中的打印機,也可以定位JAVA對象及鏈接數據庫。在EJB中,JNDI用於查找Home對象
JNDI怎樣定位Home對象?
client使用別名來確認所想要的Home對象
JNDI有兩個屬性必須設置:
一、 上下文生成庫的名字
二、 提供者的URL地址
二、 使用Home對象建立EJB對象
三、 調用EJB對象的商務方法
四、 從內存中清除EJB對象
4 Session Bean
Session Bean與Entity Bean的一個顯著的差異是:Session Bean的生命週期比較短
4.1 Session的子類型
4.1.1 狀態會話Bean
一個商務過程包括很是多步驟而且持續很是久時,需要使用有狀態的Session Bean,在每個方法之間都要保存一種狀態(有事務的概念)
4.1.2 無狀態會話Bean
一個商務過程僅僅需要一次請求對話,一個方法調用完畢以後,該bean可能被銷燬。
爲了獲得更高的性能你應該選擇無狀態會話Bean
4.2 狀態Bean的特徵
4.2.1狀態Session Bean的調度原則:
內存中僅僅有幾個有限的Bean實例,EJB容器採用LRU算法鈍化策略
4.2.2對話狀態聽從的原則:
當EJB容器鈍化Bean對象時,使用對象序列化將對象轉換成比特流,寫入硬盤
容器必須保留在鈍化和激活過程當中成員變量先前的值
4.2.3 激活/鈍化回調方法:
瞭解Bean鈍化和激活的過程當中發生了什麼??
使用ejbPassivate方法鈍化,該方法告知bean,它所保留的對話狀態即將被交換出去,並且讓Bean釋放一些如數據庫鏈接、套接字等。
鈍化的時機:
client調用bean對象時,內存中不存在該對象,且EJB容器的緩存區已滿,此時,EJB容器在處理請求以前必須鈍化一個Bean
激活:
調用ejbActivate,序列號的對象的狀態被讀會內存
4.2 一個簡單的狀態會話Bean
4.2 會話Bean的生命週期圖表
5 實體Bean
5.1持久的概念
5.1.1 Java對象序列號
將對象持久化到物理存儲空間中去
5.1.2 對象-關係映射(ORMAP)
眼下通常手工完畢ORMAP
5.1.3 對象數據庫
Java自己作爲對象被完整的存儲,沒有ormap映射層
對象查詢語言:OQL
眼下對象數據庫的應用並不普遍
5.2 什麼是實體Bean
實體Bean:
內存中一個實體的持久數據的Java表現形式
實體Bean類包括的文件:
包含遠程接口、Home接口、企業Bean、部署描寫敘述符等等
與其它Bean的區別:
一、 實體Bean類映射一個數據庫模式中的實體定義
二、 實體Bean類有主鍵類
5.3 實體Bean的特徵
特徵:
一、 實體Bean是永久存在的
二、 實體Bean實例是一個相應到數據庫中的視圖
更新實體Bean的同一時候數據庫會本身主動被更新
EJB容器經過調用Bean的ejbload和ejbstore方法在java對象和數據庫之間來回的傳送數據
三、 幾個實體Bean可能表明同一底層數據
四、 實體Bean可能收集再利用
五、 保存實體Bean的兩種方法
BMP:Bean管理持久,組件開發人員必須編寫代碼將內存中的字段轉換成數據庫中的字段,實體Bean可以經過JDBC運行Insert/Delete語句
CMP:容器管理持久,可以經過容器完畢持久化操做,容器爲您生成數據庫訪問的代碼,容器本身主動生成Insert/Delete方法。
六、 實體的建立和刪除
6 編寫Bean管理的實體Bean
編寫Bean管理的實體Bean時,您必須本身編寫數據訪問邏輯
6.1實體Bean編程基礎
查詢已存在的實體Bean:ejbFind()
(在J2EE1.4SDK中怎麼沒有ejbFind這種方法呢??)
該方法用於在存儲空間中查詢一個已存在的實體Bean
7 編寫容器管理的實體Bean
8 消息驅動Bean
這一章咱們將會學習messaging,是一種輕量級的通信方式,它在不少場景下比RMI更合適
將會討論:
一、 對messaging的簡單介紹,包含異步的預覽和麪向消息的中間件
二、 JMS的大綱,消息驅動的Bean是依靠JMS
三、 消息驅動Bean的特性
四、 消息驅動Bean與實體Bean和SessionBean的比較
五、 怎樣開發消息驅動的Bean
8.1 爲何要使用消息驅動的Bean
在前面的章節中學習了怎樣去編寫會話Bean和實體Bean,他們都是使用RMI,RMI是一種傳統的、重量級的調用組件的方式
RMI有例如如下幾點不足:
一、 性能:
RMIclient必須等待server的執行
二、 可靠性
當client調用時,server必須執行,假設server癱瘓或者網絡癱瘓,client將不會執行
三、 支持多發送和接收者
RMI限制client和server單點會話,server和client之間不能多點廣播
Messaging是一個server和client的中間人,它從消息提供商接收消息,而後爲客戶廣播消息
異步程序:
性能方面:Messagingclient運行一個請求時不會被掛起
MOM:message-oriented middleware,面向消息的中間件
8.1.1 JMS(Java 消息服務)
JMS有兩部分:
一、 API,需要編寫發送和接收消息的的代碼
二、 SPI,服務提供商接口
JMS承諾僅僅需學習JMS API一次,而後在不一樣的MOM中重用你的代碼
怎樣保證消息被髮送了呢?
MOM中間件把消息存放在文件或者數據庫中,直到client收到消息,若client沒有對應,消息將被重發
8.1.2 消息機制的域
幾種方式:
1、公佈和訂閱方式
2、點到點方式
3、請求應答方式
8.1.3 Java消息服務API
JMS消息服務API比RMI更加複雜,需要熟悉很是多中不一樣的接口才幹編程
JMS編程模型:
一、 定位JMS驅動程序
需要訪問特定的JMS產品的驅動程序,此驅動程序稱爲鏈接工廠
二、 建立JMS鏈接
可以用鏈接工廠來得到鏈接
三、 建立JMS會話
JMS會話是鏈接和發送時可以使用的輔助對象
四、 定位JMS目的地
JMS目的地是發送消息或者接收消息所通過的通道
五、 建立JMS發生者或者JMS使用者
可以使用目的地和會話來生成發生者和使用者
六、 發送和接收消息
七、
API見javax.jms包
8.1.4 JMS與EJB的集成
什麼是消息驅動的Bean?
消息驅動的Bean就是能接收JMS的特殊的EJB組件,消息驅動的Bean使用隊列或者主題的消息
JMS是用來發送消息到消息驅動Bean的API
消息驅動Bean的特定:
一、 消息驅動Bean沒有主接口、本地主接口、遠程接口
二、 消息驅動Bean僅能接收來自JMS目的地的消息,僅有一種onMessage()方法
三、 消息驅動Bean不具備不論什麼返回值
四、 消息驅動Bean不發送異常給客戶
五、 消息驅動Bean是無狀態的
六、 消息驅動Bean是可持久的
8.1.5開發消息驅動Bean
消息驅動的Bean是實現兩個接口的類,這兩個接口是:
一、 javax.jms.messageListener
實現onMessage()方法
二、 javax.ejb.MessageDriveBean
實現ejbCreate方法
開發消息驅動Bean比開發會話Bean和實體Bean要簡單