<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jier的博客

    轉: EJB2.0雨夜教程之一

    EJB2.0雨夜教程之一

    EJB雨夜原創講解

    初識EJB

    EJB是什么呢?
    EJB是一個J2EE體系中的組件.再簡單的說它是一個能夠遠程調用的javaBean.
    它同普通的javaBean有兩點不同.
    第一點,就是遠程調用.
    第二點,就是事務的功能,我們在EJB中聲明的事務會通過容器幫助我們來處理.
    支持EJB的SERVER有以下幾個:
    Weblogic
    Webspere
    Appserver
    Jboss

    我選用的是weblogic+JBuilder9開發.

    回過來我們繼續說這個EJB的原理.
    它是分布式的.這個的意思其實很簡單不需要想太復雜.
    就是我們把事情不是交給一個人去處理.而是把事情劃分一下交給多個人處理,
    而多個人處理之后我們讓這個分配的人來把最后得到的結合處理.

    EJB我們首先要明確它是放在服務器端的組件.
    一共有三種EJB
    1,SessionBean 復雜處理業務邏輯的.
    2,EntityBean  處理數據
    3,MessageBean 消息Bean異步,耦合的處理.

    那么誰能調用EJB呢?
    也或者說EJB被誰調用呢?
    我們說它就是放在server的一個能夠遠程調用的javaBean.
    所以它可以被Java的語言調用servlet,jsp等都ok的說.
    而且它還可以被C++語言調用.很強大吧.
    EJB的最基本的出發點就是推動Java在服務器端的編程能力.
    所以呢它的功能就我個人來看太強悍了..= =

    這個遠程調用是通過什么呢.
    Java是通過RMI-JRMP(java遠程方法調用)協議來調用.EJB就是通過這個來實現的.
    C++是通過Corba-iiop協議來調用的.這個協議支持兩端不同語言的調用.
    Corba是公共對象請求代理服務
    iiop是網絡內部對象協議.

    下面我們來簡單說一下這個分布式的調用。
    客戶端發送一個請求給服務器
    首先是傳給stub代理類它發送參數給skeleton委托類然后這個類調用我們的實現類取得結果再遠路返回。
    這樣一個分布處理就結束了。
    后面會具體的結合代碼分析。
    先記住這個大致的結構就好。

    我們寫一個EJB需要做那些工作呢?
    1,寫一個接口繼承EJBObject        這個類作為遠程接口
    2,寫一個接口繼承EJBHome          這個類里有一個方法是create()它返回接口類型。
    3,寫一個Bean繼承SessionBean,        這個類里包含一個create()方法和一個業務方法。
    4,寫一個ejb-jar.xml              這個xml是把上面的三個文件組合起來
    5,寫一個weblogic-ejb-jar.xml   這個xml是連接查找source的作用
                                     (不同的server會是不同的。這里選用的是weblogic)

    上面的兩個xml文件需要放在META-INF目錄下。
    而以上這些類都需要打包在一個jar文件中然后在server部署。
    這樣就完成了EJB的部署
    例如:
    我們寫個簡單的計算吧。
    (先聲明下吧本教程的說明都是我自己的理解,
    也許并不是一些文檔上的描述那么正規但是很方便理解的。
    如果有實在無法茍同的地方大家多多包含。這是為了便于理解的講解)
    AddCount.java這個就是我們繼承EJBObject的類.

    import javax.ejb.*;
    import java.rmi.*;

    public interface AddCount extends EJBObject
    {
            public int addCount(int a,int b) throws RemoteException;
    }
    接口的作用.在這里強調一下吧.所有實現這個接口的類都會是這個接口的類型.
    同時都包含接口的方法的實現.
    這個接口中的方法也就是在以后會實現的方法.我們這里要做的是一個加法的運算.


    AddCountHome.java這個是繼承EJBHome的類.它里面包含的這個create()返回的是AddCount類型對象.


    import javax.ejb.*;
    import java.rmi.*;

    public interface AddCountHome extends EJBHome
    {
            public AddCount create() throws RemoteException,CreateException;
    }





    下面這個是我們的Bean.這個類繼承了SessionBean
    import javax.ejb.*;

    public class AddCountBean implements SessionBean
    {
            public void ejbCreate()
            {
            }
            public void setSessionContext(SessionContext ctx)
                           throws EJBException,
                                  java.rmi.RemoteException
            {
            }
            public void ejbRemove()
                   throws EJBException,
                          java.rmi.RemoteException
            {
            }

            public void ejbActivate()
                     throws EJBException,
                            java.rmi.RemoteException
            {
            }
            public void ejbPassivate()
                      throws EJBException,
                             java.rmi.RemoteException
            {
            }
            public int addCount(double a,double b)
            {
                    return a+b;
            }
    }
    這個里面我們實現了業務的方法addCount(){a+b;}
    同時需要指出一下它的其他方法(這些僅僅簡單指出后面的教程有詳細說明)
    首先是ejbCreate()這個方法實際上是對我們的遠程接口的實現類的初始化.
    setSessionContext(SessionContext ctx)設置context.容器是在這個方法之后產生的實例.
    ejbRemove()毫無疑問是一個實例結束移除.
    ejbActivate()激活方法.它的作用是激活鈍化.
    ejbPassivate()鈍化方法.當實例的內容長時間不進行處理的時候就會鈍化.也就是閑置的意思.
    以上這幾個是SessionBean的基本方法.希望大家可以自己慢慢理解.
    之后也會反復說到這些的.




    下面我們寫xml文件
    首先是ejb-jar.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar>
        <enterprise-beans>
            <session>
                <display-name>first</display-name>
                <ejb-name>add</ejb-name>

                <home>AddCountHome</home>
                <remote>AddCount</remote>
                <ejb-class>AddCountBean</ejb-class>

                <session-type>Stateless</session-type>
                <transaction-type>Container</transaction-type>     
            </session>
        </enterprise-beans>
        <assembly-descriptor>
            <container-transaction>
                <method>
                    <ejb-name>add</ejb-name>
                    <method-name>*</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>
            </container-transaction>
            
        </assembly-descriptor>
    </ejb-jar>

    下面這個是weblogic-ejb-jar.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN' 'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'>
    <weblogic-ejb-jar>
        <weblogic-enterprise-bean>
            <ejb-name>
                    add  
                    </ejb-name>
            
            <jndi-name>rainnight</jndi-name>

        </weblogic-enterprise-bean>
    </weblogic-ejb-jar>


    我們接下來寫測試類

    import java.util.*;
    import java.naming.*;
    import java.rim.*;
    public class AddTest{
            public static void main(String bb[])throws Exception{
                    Hashtable hash = new Hashtable();
                    hash.put(Context.INITIAL_COUNTEXT_FACTORY,
                                    "weblogic.jndi.WLInitialContextFactory");
                    hash.put(Context.PROVIDER_URL,
                                    "t3://localhost:7001");
                    Object obj = context.lookup("rainnight");
                    AddCountHome home = (AddCountHome)PortableRemoteObject(obj,AddCountHome.class);
                    AddCount local = home.create();
                    System.out.println(local.add(1,1));
            }
    }

    測試類的hash是初始化我們的weblogic的xml信息.
    這里的t3://localhost:7001是weblogic的特殊協議指向的是ip位置.
    然后lookup("rainnight")查找jndi,而實際上也就是通過這個jndi找到我們的ejb組件.
    通過得到的對象我們對比一下是不是Home類型.
    然后我們執行home.create()產生AddCount的實例
    最后調用方法就ok了.


    下面是如何執行這個的方法.
    第一步,jdk,weblogic.需要快些下載安裝啦..
    第二步,配置環境變量.基本的java的環境變量如何配置我就不說了.
           這里需要特別指出要把java目錄下的lib中的tools.jar加載到我們的class_path中.
           然后我們再把weblogic的目錄下的server目錄下的lib中的weblogic.jar找到也加載進來.
           這樣我們編譯需要的東西就ok了.
    第三步,編譯java類.
    第四步,打包.jar cvf AddCount.jar *.class META-INF/*.xml
    第五步,java weblogic.appc AddCount.jar
    第六步,部署到weblogic中.
    第七步,運行Test類.

    posted on 2007-09-29 16:41 夏雪 閱讀(2393) 評論(2)  編輯  收藏

    Feedback

    # re: 轉: EJB2.0雨夜教程之一 2009-06-03 00:05 玄國良

    謝謝!通俗易懂。入門教程越簡單越好。更深入的了解就在動手做的過程中在學習,在深入了解。  回復  更多評論   

    # re: 轉: EJB2.0雨夜教程之一 2010-07-31 15:02 過克

    不錯,很容易理解。  回復  更多評論   



    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 成年免费a级毛片| 亚洲高清无在码在线电影不卡 | 久久久久久久岛国免费播放| 国产乱弄免费视频| 18国产精品白浆在线观看免费| 亚洲妇熟XXXX妇色黄| 国产在线观看无码免费视频| 亚洲欧洲日产专区| 在线观看91精品国产不卡免费| 两个人看的www免费| 免费观看四虎精品国产永久| 边摸边吃奶边做爽免费视频99| 人体大胆做受免费视频| 亚洲精品国产精品乱码不卞| 男女啪啪免费体验区| AV在线播放日韩亚洲欧| a国产成人免费视频| 亚洲成人网在线观看| 日本视频免费在线| 人妖系列免费网站观看| 亚洲国产精品第一区二区| 免费精品国产日韩热久久| 色偷偷噜噜噜亚洲男人| 亚洲精品国产精品乱码视色| 99热在线观看免费| 亚洲人成亚洲人成在线观看| 91精品啪在线观看国产线免费| 33333在线亚洲| 亚洲男人天堂2020| 亚洲视频免费播放| 亚洲av无码片vr一区二区三区| 国产亚洲精品久久久久秋霞| 亚洲色偷偷色噜噜狠狠99网| 亚洲日韩VA无码中文字幕| 无码囯产精品一区二区免费| 亚洲爆乳无码专区www| 亚洲精品午夜无码电影网| 无码专区永久免费AV网站| 国产免费区在线观看十分钟 | 日本免费一二区在线电影| 中文字幕不卡免费视频|