亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ejb 工作原理.txt

?? EJB 工作原理,有圖片,有文字,是一個很清楚,很容易理解的,很直接,很簡單的文檔,下載下來看吧!
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
前兩天在這個版塊的精華區里翻到了Robbin關于EJB的調用原理的分析,受益非淺,但感覺用純文字來表達效果似乎不夠直觀,而且對RMI的闡述也略嫌少了些。這里我根據自己的一點體會,在Robbin帖子的基礎上再來說說這個話題,供大家參考。 

首先,我想先說說RMI的工作原理,因為EJB畢竟是基于RMI的嘛。廢話就不多講了,RMI的本質就是實現在不同JVM之間的調用,工作原理圖如下: 

 

它的實現方法就是在兩個JVM中各開一個Stub和Skeleton,二者通過socket通信來實現參數和返回值的傳遞。 

有關RMI的例子代碼網上可以找到不少,但絕大部分都是通過extend the interface java.rmi.Remote實現,已經封裝的很完善了,不免使人有霧里看花的感覺。下面的例子是我在《Enterprise JavaBeans》里看到的,雖然很粗糙,但很直觀,利于很快了解它的工作原理。 

1. 定義一個Person的接口,其中有兩個business method, getAge() 和getName() 


Java代碼 
1.public interface Person {   
2.    public int getAge(); throws Throwable;   
3.    public String getName(); throws Throwable;   
4.}  
public interface Person {
    public int getAge(); throws Throwable;
    public String getName(); throws Throwable;
}


2. Person的實現PersonServer類 

Java代碼 
1.public class PersonServer implements Person {   
2.    int age;   
3.    String name;   
4.  
5.    public PersonServer(String name, int age); {   
6.        this.age = age;   
7.        this.name = name;   
8.    }   
9.  
10.    public int getAge(); {   
11.        return age;   
12.    }   
13.  
14.    public String getName(); {   
15.        return name;   
16.    }   
17.}  
public class PersonServer implements Person {
    int age;
    String name;

    public PersonServer(String name, int age); {
        this.age = age;
        this.name = name;
    }

    public int getAge(); {
        return age;
    }

    public String getName(); {
        return name;
    }
}


3. 好,我們現在要在Client機器上調用getAge()和getName()這兩個business method,那么就得編寫相應的Stub(Client端)和Skeleton(Server端)程序。這是Stub的實現: 

Java代碼 
1.import java.io.ObjectOutputStream;   
2.import java.io.ObjectInputStream;   
3.import java.net.Socket;   
4.  
5.public class Person_Stub implements Person {   
6.    Socket socket;   
7.  
8.    public Person_Stub(); throws Throwable {   
9.        // connect to skeleton   
10.        socket = new Socket("computer_name", 9000);;   
11.    }   
12.  
13.    public int getAge(); throws Throwable {   
14.        // pass method name to skeleton   
15.        ObjectOutputStream outStream =   
16.            new ObjectOutputStream(socket.getOutputStream(););;   
17.        outStream.writeObject("age");;   
18.        outStream.flush();;   
19.  
20.        ObjectInputStream inStream =   
21.            new ObjectInputStream(socket.getInputStream(););;   
22.        return inStream.readInt();;   
23.    }   
24.  
25.    public String getName(); throws Throwable {   
26.        // pass method name to skeleton   
27.        ObjectOutputStream outStream =   
28.            new ObjectOutputStream(socket.getOutputStream(););;   
29.        outStream.writeObject("name");;   
30.        outStream.flush();;   
31.  
32.        ObjectInputStream inStream =   
33.            new ObjectInputStream(socket.getInputStream(););;   
34.        return (String);inStream.readObject();;   
35.    }   
36.}  
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;

public class Person_Stub implements Person {
    Socket socket;

    public Person_Stub(); throws Throwable {
        // connect to skeleton
        socket = new Socket("computer_name", 9000);;
    }

    public int getAge(); throws Throwable {
        // pass method name to skeleton
        ObjectOutputStream outStream =
            new ObjectOutputStream(socket.getOutputStream(););;
        outStream.writeObject("age");;
        outStream.flush();;

        ObjectInputStream inStream =
            new ObjectInputStream(socket.getInputStream(););;
        return inStream.readInt();;
    }

    public String getName(); throws Throwable {
        // pass method name to skeleton
        ObjectOutputStream outStream =
            new ObjectOutputStream(socket.getOutputStream(););;
        outStream.writeObject("name");;
        outStream.flush();;

        ObjectInputStream inStream =
            new ObjectInputStream(socket.getInputStream(););;
        return (String);inStream.readObject();;
    }
}


注意,Person_Stub和PersonServer一樣,都implements Person。它們都實現了getAge()和getName()兩個business method,不同的是PersonServer是真的實現,Person_Stub是建立socket連接,并向Skeleton發請求,然后通過Skeleton調用PersonServer的方法,最后接收返回的結果。 

4. Skeleton實現 

Java代碼 
1.import java.io.ObjectOutputStream;   
2.import java.io.ObjectInputStream;   
3.import java.net.Socket;   
4.import java.net.ServerSocket;   
5.  
6.public class Person_Skeleton extends Thread {   
7.    PersonServer myServer;   
8.  
9.    public Person_Skeleton(PersonServer server); {   
10.        // get reference of object server   
11.        this.myServer = server;   
12.    }   
13.  
14.    public void run(); {   
15.        try {   
16.            // new socket at port 9000   
17.            ServerSocket serverSocket = new ServerSocket(9000);;   
18.            // accept stub's request   
19.            Socket socket = serverSocket.accept();;   
20.  
21.            while (socket != null); {   
22.                // get stub's request   
23.                ObjectInputStream inStream =   
24.                    new ObjectInputStream(socket.getInputStream(););;   
25.                String method = (String);inStream.readObject();;   
26.  
27.                // check method name   
28.                if (method.equals("age");); {   
29.                    // execute object server's business method   
30.                    int age = myServer.getAge();;   
31.                    ObjectOutputStream outStream =   
32.                        new ObjectOutputStream(socket.getOutputStream(););;   
33.  
34.                    // return result to stub   
35.                    outStream.writeInt(age);;   
36.                    outStream.flush();;   
37.                }   
38.  
39.                if(method.equals("name");); {   
40.                    // execute object server's business method   
41.                    String name = myServer.getName();;   
42.                    ObjectOutputStream outStream =   
43.                        new ObjectOutputStream(socket.getOutputStream(););;   
44.  
45.                    // return result to stub   
46.                    outStream.writeObject(name);;   
47.                    outStream.flush();;   
48.                }   
49.            }   
50.        } catch(Throwable t); {   
51.            t.printStackTrace();;   
52.            System.exit(0);;   
53.        }   
54.    }   
55.  
56.    public static void main(String args []); {   
57.        // new object server   
58.        PersonServer person = new PersonServer("Richard", 34);;   
59.  
60.        Person_Skeleton skel = new Person_Skeleton(person);;   
61.        skel.start();;   
62.    }   
63.}  
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.net.ServerSocket;

public class Person_Skeleton extends Thread {
    PersonServer myServer;

    public Person_Skeleton(PersonServer server); {
        // get reference of object server
        this.myServer = server;
    }

    public void run(); {
        try {
            // new socket at port 9000
            ServerSocket serverSocket = new ServerSocket(9000);;
            // accept stub's request
            Socket socket = serverSocket.accept();;

            while (socket != null); {
                // get stub's request
                ObjectInputStream inStream =
                    new ObjectInputStream(socket.getInputStream(););;
                String method = (String);inStream.readObject();;

                // check method name
                if (method.equals("age");); {
                    // execute object server's business method
                    int age = myServer.getAge();;
                    ObjectOutputStream outStream =
                        new ObjectOutputStream(socket.getOutputStream(););;

                    // return result to stub
                    outStream.writeInt(age);;
                    outStream.flush();;
                }

                if(method.equals("name");); {
                    // execute object server's business method
                    String name = myServer.getName();;
                    ObjectOutputStream outStream =
                        new ObjectOutputStream(socket.getOutputStream(););;

                    // return result to stub
                    outStream.writeObject(name);;
                    outStream.flush();;
                }
            }
        } catch(Throwable t); {
            t.printStackTrace();;
            System.exit(0);;
        }
    }

    public static void main(String args []); {
        // new object server
        PersonServer person = new PersonServer("Richard", 34);;

        Person_Skeleton skel = new Person_Skeleton(person);;
        skel.start();;
    }
}


Skeleton類 extends from Thread,它長駐在后臺運行,隨時接收client發過來的request。并根據發送過來的key去調用相應的business method。 

5. 最后一個,Client的實現 

Java代碼 
1.public class PersonClient {   
2.    public static void main(String [] args); {   
3.        try {   
4.            Person person = new Person_Stub();;   
5.            int age = person.getAge();;   
6.            String name = person.getName();;   
7.            System.out.println(name + " is " + age + " years old");;   
8.        } catch(Throwable t); {   
9.            t.printStackTrace();;   
10.        }   
11.    }   
12.}  
public class PersonClient {
    public static void main(String [] args); {
        try {
            Person person = new Person_Stub();;
            int age = person.getAge();;
            String name = person.getName();;
            System.out.println(name + " is " + age + " years old");;
        } catch(Throwable t); {
            t.printStackTrace();;
        }
    }
}


Client的本質是,它要知道Person接口的定義,并實例一個Person_Stub,通過Stub來調用business method,至于Stub怎么去和Server溝通,Client就不用管了。 

注意它的寫法: 
Person person = new Person_Stub(); 
而不是 
Person_Stub person = new Person_Stub(); 

為什么?因為要面向接口編程嘛,呵呵。 

感謝您有耐心看到這里,關于RMI,我想說的就這么多了。但是好象還沒寫到EJB,本人就累了個半死,算了,我還是先去睡覺,明天再往下續吧。。。 

本人沒有用過Weblogic,這里就結合WebSphere來講講各個類的調用關系吧。 

假定我們要創建一個讀取User信息的SessionBean,需要我們寫的有3個文件: 
1. UserServiceHome.java 
Home接口 

2. UserService.java 
Remote接口 

3. UserServiceBean.java 
Bean實現 

WSAD最終會生成10個class。其它7個是什么呢?我們一個一個數過來: 

4. _UserServiceHome_Stub.java 
這個當然就是Home接口在Client端(動態加載)的Stub類了,它implements UserServiceHome。 

5. _EJSRemoteStatelessUserServiceHome_a940aa04_Tie.java 
Home接口在Server端的Skeleton類,"a940aa04"應該是隨機生成的,所有其他的相關class名里都會有這個標志串,Tie是Corba對Skeleton的叫法。 

6. EJSRemoteStatelessUserServiceHome_a940aa04.java 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91老师片黄在线观看| 奇米一区二区三区av| 精品成a人在线观看| 在线观看91av| 欧美一区二区三区免费观看视频| 色哟哟亚洲精品| 91久久香蕉国产日韩欧美9色| 波多野结衣精品在线| 99久久综合精品| 91在线云播放| 一本大道久久a久久精品综合| 99国产精品国产精品久久| 成人美女在线观看| 99久久国产综合精品女不卡| 91热门视频在线观看| 色婷婷久久久久swag精品| 成人午夜在线播放| 精品va天堂亚洲国产| 91免费看视频| 在线精品视频一区二区三四| 欧美亚洲高清一区二区三区不卡| 欧美亚洲图片小说| 欧美日韩www| 欧美成人在线直播| 国产欧美一区二区精品仙草咪 | 久久精品亚洲麻豆av一区二区| 日韩精品在线看片z| 久久久www免费人成精品| 国产精品嫩草99a| 亚洲资源在线观看| 三级影片在线观看欧美日韩一区二区| 日产国产欧美视频一区精品| 久久99热国产| 色噜噜狠狠一区二区三区果冻| 99久久精品国产一区二区三区| 国产日韩精品一区二区三区在线| 欧美高清视频一二三区 | 国产91丝袜在线18| 色婷婷av一区二区三区软件| 88在线观看91蜜桃国自产| 久久毛片高清国产| 亚洲午夜在线视频| 国产精品亚洲а∨天堂免在线| 99久久99久久久精品齐齐| 欧美伦理视频网站| 国产日产欧产精品推荐色| 亚洲一级二级在线| 国产一区在线观看视频| 欧美日韩中文精品| 中文字幕精品综合| 免费的成人av| 欧洲亚洲精品在线| 国产精品无码永久免费888| 免费看日韩a级影片| 色综合一区二区| 欧美经典三级视频一区二区三区| 天堂成人国产精品一区| 91麻豆swag| 国产精品麻豆视频| 激情深爱一区二区| 欧美一区二区精品| 亚洲成a人片综合在线| 大桥未久av一区二区三区中文| 欧美一级免费大片| 亚洲va韩国va欧美va精品 | 一区二区三区日韩欧美| 懂色av一区二区三区免费看| 日韩久久免费av| 午夜精品久久久久影视| 91视频在线看| 国产精品福利av| 国产精品亚洲一区二区三区妖精| 日韩欧美中文字幕制服| 亚洲一区二区三区四区五区中文| 色综合久久99| 亚洲男帅同性gay1069| 波多野结衣亚洲| 国产精品久久久一本精品| 国产福利精品导航| 国产午夜亚洲精品不卡| 国产一区二区三区高清播放| 精品免费国产一区二区三区四区| 日韩精品亚洲一区| 日韩久久久久久| 国产一区久久久| 中文字幕免费观看一区| 成人中文字幕合集| 中文字幕中文字幕一区二区| av电影在线观看一区| 亚洲色图视频网| 在线观看亚洲精品| 亚洲成av人**亚洲成av**| 欧美日韩中文一区| 老司机免费视频一区二区三区| 欧美日韩国产美| 午夜精品福利在线| 日韩一区二区三区四区| 精品一区二区三区视频| 中文字幕免费在线观看视频一区| 91片在线免费观看| 视频一区二区国产| 久久久久久久精| 99精品欧美一区二区三区小说| 亚洲精品自拍动漫在线| 欧美日韩国产综合视频在线观看| 欧美aaaaaa午夜精品| 久久久久国色av免费看影院| 成人aaaa免费全部观看| 亚洲一区二区在线免费看| 91精品久久久久久久99蜜桃 | 2020国产精品自拍| 99久久国产综合精品女不卡| 日韩中文字幕亚洲一区二区va在线| 日韩免费观看高清完整版| 国产成人精品网址| 亚洲sss视频在线视频| 久久久久综合网| 欧美撒尿777hd撒尿| 国产精品538一区二区在线| 亚洲嫩草精品久久| 国产亚洲精品bt天堂精选| 欧美在线观看禁18| 丁香婷婷综合色啪| 日韩国产精品久久| 亚洲另类色综合网站| 久久久蜜桃精品| 欧美一区二区免费观在线| 99精品黄色片免费大全| 精品系列免费在线观看| 亚洲国产欧美另类丝袜| 国产精品美女一区二区在线观看| 91.com视频| 精品视频1区2区| 91免费视频网| 成人久久18免费网站麻豆| 精品一区二区三区久久| 日韩av中文字幕一区二区| 玉米视频成人免费看| 国产精品成人一区二区艾草 | 中文字幕av在线一区二区三区| 欧美系列一区二区| 99国产精品久久久久久久久久久| 精品一区二区免费看| 亚洲bt欧美bt精品777| 亚洲欧美色一区| ●精品国产综合乱码久久久久| 欧美精品一区男女天堂| 51精品秘密在线观看| 色综合久久综合网97色综合| 成人国产在线观看| 国产精品一区三区| 激情综合网av| 久久99热国产| 国产一区二区三区在线看麻豆| 久久国产精品99久久久久久老狼| 日韩制服丝袜av| 日本视频一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 国产另类ts人妖一区二区| 久久电影网站中文字幕| 美女性感视频久久| 免费成人深夜小野草| 日本麻豆一区二区三区视频| 日本91福利区| 久久福利资源站| 国产美女娇喘av呻吟久久| 国产精品88888| 9人人澡人人爽人人精品| 成人av网在线| 日本久久电影网| 欧美性大战久久久久久久| 在线91免费看| 精品国产乱码久久久久久牛牛| 久久精品亚洲国产奇米99| 国产精品人人做人人爽人人添| 亚洲欧洲日韩女同| 一区二区三区不卡视频| 日韩高清中文字幕一区| 韩国v欧美v亚洲v日本v| av在线这里只有精品| 在线观看91视频| 337p粉嫩大胆噜噜噜噜噜91av| 国产亚洲欧美日韩俺去了| 一区二区三区日韩精品| 日韩黄色小视频| 成人亚洲精品久久久久软件| 色一区在线观看| 日韩视频123| 国产精品久久久久久久久动漫| 亚洲国产精品精华液网站| 狠狠狠色丁香婷婷综合激情 | 欧美日韩一区二区在线观看 | 国产精品欧美一区二区三区| 一区二区在线观看不卡| 奇米影视一区二区三区小说| 成人毛片在线观看| 欧美一区二区三区在线| 亚洲天堂免费看| 极品尤物av久久免费看| 在线视频综合导航|