EJB 企業級應用的架構(1)





EJB(Enterprise JavaBean企業級的JavaBean)






企業級應用的架構






Host/Terminal(主機/終端,終端不具備處理能力,數據由主機處理)


C/S(Client/Server客戶端/服務器端)


Multi-layered(多層架構)






EJB的功能


1,遠程調用 RMI


2,負載均衡,將訪問均衡到各個服務器中


3,透明的故障修復


4,集羣(多臺相同的系統服務器,有代理服務器均衡到後臺的服務器)


5,後臺集成


6,事務(全局/局部)全局事務(分佈式事務)局部事務(在同一數據庫聯接內的事務)


7,動態的重部署(在不停止原系統的情況下,部署新的系統)


8,系統管理


9,多線程處理


10,面向消息的中間件(異步的調用編程)


11,管理對象的生命週期


12,資源池


13,安全


14,緩存






EJB的應用(主要用於處理商業邏輯),EJB是一個標準,是開發和部署服務器端的組建的標準。


SOA(面向服務的架構)和EJB的關係


服務,一組組件所提供的功能。


SOAP(簡單對象訪問協議)


WSDL(web服務描述語言)(Web Services)






寫一個EJB的步驟


1,配置EJB的運行環境


2,寫商業接口


3,寫Bean類,實現商業接口(Bean類不能同時實現遠程接口和本地接口)


4,編譯文件


5,提供部屬文件,EJB3.0中使用了註釋不用寫標準部署描述(ejb-jar.xml),系統調優用的廠商部署描述是需要寫的。


6,打jar包,部署到服務器中






EJB3.0使用了JAVA SE 5.0 中的註釋新特性,只要在方法上寫EJB規範的註釋,就可以不用來寫標準的部署表述,ejb-jar.xml這個要放到jar文件的mate-inf文件夾裏。


<?xml version="1.0" encoding="UTF-8"?>


<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" metadata-complete="true" version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">


 <enterprise-beans>


  <session>


    <display-name>HelloBean</display-name>


    <ejb-name>HelloBean</ejb-name>


    <business-remote>test.HelloRemote</business-remote>


    <ejb-class>test.HelloBean</ejb-class>


    <session-type>Stateless</session-type>


    <transaction-type>Container</transaction-type>


    <security-identity>


        <use-caller-identity/>


    </security-identity>


  </session>


 </enterprise-beans>


</ejb-jar>






寫EJB客戶端的步驟


1,運行客戶端前要加上在SUN的服務器文件夾中的lib下的javaee.jar和appserv-rt.jar


2,配置系統的JNDI的環境


3,寫測試類,注意在測試類中也要有商業接口






在廠商的部署描述中可以配置EJB的實例池,可以一次創建多個EJB的實例。


EJB的類型


1,SessionBean(Statless/Statfull)


    無狀態的SessionBean是不會保存的信息的和狀態,無狀態的SessionBean是可以重用的,而不是被立刻銷燬


    有狀態的SessionBean只爲一個用戶來服務。


2,MDB(Message Driver Bean)消息驅動Bean,可以進行異步的編程


3,Entity Bean 訪問數據庫,已經被JPA(JAVA持久化API)替代。


4,JPA基於ORM方式來實現對數據庫的訪問






無狀態SessionBean






商業接口


@Remote


public interface HelloRemote {


    public String hello();


}






Bean類,Bean類即可以實現商業接口,也可以不實現,但是其中的方法簽名要和接口中相同,不過最好還是實現商業接口避免書寫錯誤


@Stateless


@Remote(test.HelloRemote.class)


public class HelloBean implements HelloRemote {


    public String hello() {


        return "Hello World";


    }


}






注意:EJB一定要先部署到服務器,EJB需要部署環境才能運行






EJB客戶端


public class Cilent {


    public static void main(String[] args) throws NamingException {






        System.setProperty("jndi.factory","com.sun.jndi.cosnaming.CNCtxFactory");


        System.setProperty("jndi.provider.url","corbaloc::localhost:3007/NameSpace");


        Context ctx=new InitialContext();


        HelloRemote hello=(HelloRemote)ctx.lookup("test.HelloRemote");


        System.out.println(hello.hello());


        System.out.println(hello.helloword("lichen"));


    }


    


}






注意:在寫客戶端時,要引入javaee.jar和appser-rt.jar還要引入已經編譯好的EJB的jar文件。
java cvf
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章