EJB 與 JAVA BEAN 的區別?
答: Java Bean 是可復用的組件,對 Java Bean 并沒有嚴格的規范,理論上講,任何一個 Java 類都可以是一個 Bean 。但通常情況下,由于 Java Bean 是被容器所創建(如 Tomcat) 的,所以 Java Bean 應具有一個無參的構造器,另外,通常 Java Bean 還要實現 Serializable 接口用于實現 Bean 的持久性。 Java Bean 是不能被跨進程訪問的。 Enterprise Java Bean 是分布式組件。它是基于 Java 的遠程方法調用( RMI )技術的,所以 EJB 可以被遠程訪問(跨進程、跨計算機)。但 EJB 必須被布署在諸如 Webspere 、 WebLogic 這樣的容器中, EJB 客戶從不直接訪問真正的 EJB 組件,而是通過其容器訪問。 EJB 容器是 EJB 組件的代理, EJB 組件由容器所創建和管理。客戶通過容器來訪問真正的 EJB 組件。
EJB 是基于哪些技術實現的?并說出 SessionBean 和 EntityBean 的區別, StatefulBean 和 StatelessBean 的區別。
答: EJB 包括 Session?Bean 、 Entity?Bean 、 Message?Driven?Bean ,基于 JNDI 、 RMI 、 JAT 等技術實現。
從功能上講:
SessionBean 被用來完成一些服務器端的業務操作,例如訪問數據庫、調用其他 EJB 組件。
EntityBean 被用來代表應用系統中用到的數據。
對于客戶機, SessionBean 是一種非持久性對象,它實現某些在服務器上運行的業務邏輯。
Session?Bean? 還可以再細分為 ?Stateful?Session?Bean? 與 ?Stateless?Session?Bean? ,這兩種的 ?Session?Bean 都可以將系統邏輯放在 ?method 之中執行,不同的是 Stateful?Session?Bean? 可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一個相對應的 ?Stateful?Session?Bean? 的實體。 Stateless?Session?Bean? 雖然也是邏輯組件,但是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 ?Stateless?Session?Bean? 的時候, EJB?Container? 并不會找尋特定的 ?Stateless?Session?Bean? 的實體來執行這個 ?method 。換言之,很可能數個使用者在執行某個 ?Stateless?Session?Bean? 的 ?methods? 時,會是同一個 ?Bean? 的 ?Instance? 在執行。從內存方面來看, ?Stateful?Session?Bean? 與 ?Stateless?Session?Bean? 比較, ?Stateful?Session?Bean? 會消耗 ?J2EE?Server? 較多的內存,然而 ?Stateful?Session?Bean? 的優勢卻在于他可以維持使用者的狀態。
對于客戶機, EntityBean 是一種持久性對象,可分為 Bean 管理的持續性( BMP )和容器管理的持續性( CMP )兩種 。它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體。
從生命周期上分:
SessionBean : Stateless?Session?Bean? 的生命周期是由容器決定的,當客戶機發出請求要建立一個 Bean 的實例時, EJB 容器不一定要創建一個新的 Bean 的實例供客戶機調用,而是隨便找一個現有的實例提供給客戶機。當客戶機第一次調用一個 Stateful?Session?Bean? 時,容器必須立即在服務器中創建一個新的 Bean 實例,并關聯到客戶機上,以后此客戶機調用 Stateful?Session?Bean? 的方法時容器會把調用分派到與此客戶機相關聯的 Bean 實例。
EntityBean : Entity?Beans 能存活相對較長的時間,并且狀態是持續的。只要數據庫中的數據存在, Entity?beans 就一直存活。而不是按照應用程序或者服務進程來說的。即使 EJB 容器崩潰了, Entity?beans 也是存活的。 Entity?Beans 生命周期能夠被容器或者 ?Beans 自己管理。
EJB 通過以下技術管理實務:對象管理組織( OMG )的對象實務服務( OTS ), Sun?Microsystems 的 Transaction?Service ( JTS )、 Java?Transaction?API ( JTA ),開發組( X/Open )的 XA 接口。
EJB 的角色和三個對象 以及remote 接口和 home 接口主要作用
答: 一個完整的基于 EJB 的分布式計算結構由六個角色組成,這六個角色可以由不同的開發商提供,每個角色所作的工作必須遵循 Sun 公司提供的 EJB 規范,以保證彼此之間的兼容性。這六個角色分別是 EJB 組件開發者( Enterprise?Bean?Provider ) ? 、應用組合者( Application?Assembler )、部署者( Deployer )、 EJB? 服務器提供者( EJB?Server?Provider )、 EJB? 容器提供者( EJB?Container?Provider )、系統管理員( System?Administrator )
三個對象是 Remote ( Local )接口、 Home ( LocalHome )接口, Bean 類
remote 接口定義了業務方法,用于 EJB 客戶端調用業務方法。
home 接口是 EJB 工廠用于創建和移除查找 EJB 實例
EJB 容器提供的服務
答: 主要提供聲明周期管理、代碼產生、持續性管理、安全、事務管理、鎖和并發行管理等服務。
EJB 規范規定 EJB 中禁止的操作有哪些? ?
? 答: 1. 不能操作線程和線程 API( 線程 API 指非線程對象的方法如 notify,wait 等 ) , 2. 不能操作 awt , 3. 不能實現服務器功能, 4. 不能對靜態屬生存取, 5. 不能使用 IO 操作直接存取文件系統, 6. 不能加載本地庫 . , 7. 不能將 this 作為變量和返回, 8. 不能循環調用。
bean? 實例的生命周期
答: 對于 Stateless?Session?Bean 、 Entity?Bean 、 Message?Driven?Bean 一般存在緩沖池管理,而對于 Entity?Bean 和 Statefull?Session?Bean 存在 Cache 管理,通常包含創建實例,設置上下文、創建 EJB?Object ( create )、業務方法調用、 remove 等過程,對于存在緩沖池管理的 Bean ,在 create 之后實例并不從內存清除,而是采用緩沖池調度機制不斷重用實例,而對于存在 Cache 管理的 Bean 則通過激活和去激活機制保持 Bean 的狀態并限制內存中實例數量。
EJB 的激活機制
答: 以 Stateful?Session?Bean? 為例:其 Cache 大小決定了內存中可以同時存在的 Bean 實例的數量,根據 MRU 或 NRU 算法,實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個 EJB 實例業務方法時,如果對應 EJB?Object 發現自己沒有綁定對應的 Bean 實例則從其去激活 Bean 存儲中(通過序列化機制存儲實例)回復(激活)此實例。狀態變遷前會調用對應的 ejbActive 和 ejbPassivate 方法。
客服端調用 EJB 對象的幾個基本步驟
答: 設置 JNDI 服務工廠以及 JNDI 服務地址系統屬性,查找 Home 接口,從 Home 接口調用 Create 方法創建 Remote 接口,通過 Remote 接口調用其業務方法。
應用服務器
應用服務器有那些?
答: BEA?WebLogic?Server , IBM?WebSphere?Application?Server , Oracle9i?Application?Server , jBoss , Tomcat
如何給 weblogic 指定大小的內存 ??
答: 在啟動 Weblogic 的腳本中(位于所在 Domain 對應服務器目錄下的 startServerName ),增加 set?MEM_ARGS=-Xms32m?-Xmx200m ,可以調整最小內存為 32M ,最大 200M。
EJB 需直接實現它的業務接口或 Home 接口嗎,請簡述理由。
答:遠程接口和 Home 接口不需要直接實現,他們的實現代碼是由服務器產生的,程序運行中對應實現類會作為對應接口類型的實例被使用。
如何設定的 weblogic 的熱啟動模式 ( 開發模式 ) 與產品發布模式 ?
答: 可以在管理控制臺中修改對應服務器的啟動模式為開發或產品模式之一。或者修改服務的啟動文件或者 commenv 文件,增加 set?PRODUCTION_MODE=true 。
如何啟動時不需輸入用戶名與密碼 ?
答: 修改服務啟動文件,增加 ?WLS_USER 和 WLS_PW 項。也可以在 boot.properties 文件中增加加密過的用戶名和密碼 .
weblogic 管理制臺中對一個應用域 ( 或者說是一個網站 ,Domain) 進行 jms 及 ejb 或連接池等相關信息進行配置后 , 實際保存在什么文件中 ?
答: 保存在此 Domain 的 config.xml 文件中,它是服務器的核心配置文件。
說說 weblogic 中一個 Domain 的缺省目錄結構 ? 比如要將一個簡單的 helloWorld.jsp 放入何目錄下 , 然的在瀏覽器上就可打入 http:// 主機 : 端口號 //helloword.jsp 就可以看到運行結果了 ? ? 又比如這其中用到了一個自己寫的 javaBean 該如何辦 ?
答: Domain 目錄服務器目錄 applications ,將應用目錄放在此目錄下將可以作為應用訪問,如果是 Web 應用,應用目錄需要滿足 Web 應用目錄要求, jsp 文件可以直接放在應用目錄中, Javabean 需要放在應用目錄的 WEB-INF 目錄的 classes 目錄中,設置服務器的缺省應用將可以實現在瀏覽器上無需輸入應用名。
在 weblogic 中發布 ejb 需涉及到哪些配置文件
答: 不同類型的 EJB 涉及的配置文件不同,都涉及到的配置文件包括 ejb-jar.xml,weblogic-ejb-jar.xmlCMP 實體 Bean 一般還需要 weblogic-cmp-rdbms-jar.xml?
86 、如何在 weblogic 中進行 ssl 配置與客戶端的認證配置或說說 j2ee( 標準 ) 進行 ssl 的配置
缺省安裝中使用 DemoIdentity.jks 和 DemoTrust.jks??KeyStore 實現 SSL ,需要配置服務器使用 Enable?SSL ,配置其端口,在產品模式下需要從 CA 獲取私有密鑰和數字證書,創建 identity 和 trust?keystore ,裝載獲得的密鑰和數字證書。可以配置此 SSL 連接是單向還是雙向的。
如何查看在 weblogic 中已經發布的 EJB?
答: 可以使用管理控制臺,在它的 Deployment 中可以查看所有已發布的 EJB
說說在 weblogic 中開發消息 Bean 時的 persistent 與 non-persisten 的差別
persistent 方式的 MDB 可以保證消息傳遞的可靠性 , 也就是如果 EJB 容器出現問題而 JMS 服務器依然會將消息在此 MDB 可用的時候發送過來,而 non - persistent 方式的消息將被丟棄。