锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲不卡AV影片在线播放,在线看亚洲十八禁网站,亚洲视频精品在线观看http://www.tkk7.com/hardson/category/13132.htmlzh-cnFri, 03 Aug 2007 01:04:53 GMTFri, 03 Aug 2007 01:04:53 GMT60EJB宸ヤ綔鍘熺悊瀛︿範絎旇錛堣漿杞斤級http://www.tkk7.com/hardson/articles/130024.htmlhardsonhardsonFri, 13 Jul 2007 03:17:00 GMThttp://www.tkk7.com/hardson/articles/130024.htmlhttp://www.tkk7.com/hardson/comments/130024.htmlhttp://www.tkk7.com/hardson/articles/130024.html#Feedback0http://www.tkk7.com/hardson/comments/commentRss/130024.htmlhttp://www.tkk7.com/hardson/services/trackbacks/130024.htmlEJB宸ヤ綔鍘熺悊瀛︿範絎旇
涓漢鎰熻璇ユ枃绔犲啓寰楃浉褰撹緇嗭紝鎺ㄨ崘澶у闃呰

1 RMI宸ヤ綔鍘熺悊
2 websphere瀹炵幇
3 weblogic瀹炵幇
4 鐞嗚В浣撲細

1錛歊MI宸ヤ綔鍘熺悊


       RMI鐨勬湰璐ㄥ氨鏄疄鐜板湪涓嶅悓JVM涔嬮棿鐨勮皟鐢?瀹冪殑瀹炵幇鏂規(guī)硶灝辨槸鍦ㄤ袱涓狫VM涓悇寮涓涓猄tub鍜孲keleton錛屼簩鑰呴氳繃socket閫氫俊鏉ュ疄鐜板弬鏁板拰榪斿洖鍊肩殑浼犻掋?

       鏈夊叧RMI鐨勪緥瀛愪唬鐮佺綉涓婂彲浠ユ壘鍒頒笉灝戯紝浣嗙粷澶ч儴鍒嗛兘鏄氳繃extend the interface java.rmi.Remote瀹炵幇錛屽凡緇忓皝瑁呯殑寰堝畬鍠勪簡錛屼笉鍏嶄嬌浜烘湁闆鵑噷鐪嬭姳鐨勬劅瑙夈備笅闈㈢殑渚嬪瓙鏄垜鍦ㄣ奅nterprise JavaBeans銆嬮噷鐪嬪埌鐨勶紝铏界劧寰堢矖緋欙紝浣嗗緢鐩磋錛屽埄浜庡緢蹇簡瑙e畠鐨勫伐浣滃師鐞嗐?

1. 瀹氫箟涓涓狿erson鐨勬帴鍙o紝鍏朵腑鏈変袱涓猙usiness method, getAge() 鍜実etName()

浠g爜:

public interface Person {
     public int getAge() throws Throwable;
     public String getName() throws Throwable;
}

2. Person鐨勫疄鐜癙ersonServer綾?
浠g爜:

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鏈哄櫒涓婅皟鐢╣etAge()鍜実etName()榪欎袱涓猙usiness

method錛岄偅涔堝氨寰楃紪鍐欑浉搴旂殑Stub(Client绔?鍜孲keleton(Server绔?紼嬪簭銆傝繖鏄疭tub鐨勫疄鐜幫細
浠g爜:

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();
     }
}


娉ㄦ剰錛孭erson_Stub鍜孭ersonServer涓鏍鳳紝閮絠mplements

Person銆傚畠浠兘瀹炵幇浜唃etAge()鍜実etName()涓や釜business

method錛屼笉鍚岀殑鏄疨ersonServer鏄湡鐨勫疄鐜幫紝Person_Stub鏄緩绔媠ocket榪炴帴錛屽茍鍚慡keleton鍙戣姹傦紝鐒跺悗閫氳繃

Skeleton璋冪敤PersonServer鐨勬柟娉曪紝鏈鍚庢帴鏀惰繑鍥炵殑緇撴灉銆?

4. Skeleton瀹炵幇
浠g爜:

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銆傚茍鏍規(guī)嵁鍙戦佽繃鏉ョ殑

key鍘昏皟鐢ㄧ浉搴旂殑business method銆?

5. 鏈鍚庝竴涓紝Client鐨勫疄鐜?
浠g爜:

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鐨勬湰璐ㄦ槸錛屽畠瑕佺煡閬揚erson鎺ュ彛鐨勫畾涔夛紝騫跺疄渚嬩竴涓狿erson_Stub錛岄氳繃Stub鏉ヨ皟鐢╞usiness method錛?/p>

鑷充簬Stub鎬庝箞鍘誨拰Server娌熼氾紝Client灝變笉鐢ㄧ浜嗐?

娉ㄦ剰瀹冪殑鍐欐硶錛?
Person person = new Person_Stub();
鑰屼笉鏄?
Person_Stub person = new Person_Stub();

涓轟粈涔堬紵鍥犱負瑕侀潰鍚戞帴鍙g紪紼嬪槢錛屽懙鍛點?/p>

//RMI瀹炶川涓婂氨鏄敓鎴?涓被stub錛宻keleton鏉ヨ繘琛屽弬鏁板拰榪斿洖鍊肩殑浼犻掞紝閲囩敤鍊間紶閫掓柟寮?/font>

//綾諱技浜庝互鍓嶅啓鐨勮亰澶╁紼嬪簭錛岃浼犻掔殑瀵硅薄搴斿疄鐜癹ava.io.Serializable鎺ュ彛

2錛歸ebsphere瀹炵幇


EJB綾諱竴瑙?nbsp;   
榪欓噷緇撳悎WebSphere鏉ヨ璁插悇涓被鐨勮皟鐢ㄥ叧緋誨惂銆?

鍋囧畾鎴戜滑瑕佸垱寤轟竴涓鍙朥ser淇℃伅鐨凷essionBean錛岄渶瑕佹垜浠啓鐨勬湁3涓枃浠訛細
1. UserServiceHome.java
Home鎺ュ彛

2. UserService.java
Remote鎺ュ彛

3. UserServiceBean.java
Bean瀹炵幇

WSAD鏈緇堜細鐢熸垚10涓猚lass銆傚叾瀹?涓槸浠涔堝憿錛熸垜浠竴涓竴涓暟榪囨潵錛?

4. _UserServiceHome_Stub.java
榪欎釜褰撶劧灝辨槸Home鎺ュ彛鍦–lient绔?鍔ㄦ佸姞杞?鐨凷tub綾諱簡錛屽畠implements UserServiceHome銆?

5. _EJSRemoteStatelessUserServiceHome_a940aa04_Tie.java
Home鎺ュ彛鍦⊿erver绔殑Skeleton綾伙紝"a940aa04"搴旇鏄殢鏈虹敓鎴愮殑錛屾墍鏈夊叾浠栫殑鐩稿叧class鍚嶉噷閮戒細鏈夎繖涓爣蹇?/p>

涓詫紝Tie鏄疌orba瀵筍keleton鐨勫彨娉曘?

6. EJSRemoteStatelessUserServiceHome_a940aa04.java
Home鎺ュ彛鍦⊿erver绔殑瀹炵幇錛屽綋鐒訛紝瀹冧篃implements UserServiceHome銆?

7. EJSStatelessUserServiceHomeBean_a940aa04.java
鐢?6璋冪敤錛宑reate _UserService_Stub銆?涓轟粈涔?6涓嶈兘鐩存帴create _UserService_Stub鍛紵鍚庨潰鍐嶈銆?

8. _UserService_Stub.java
Remote鎺ュ彛鍦–lient绔?鍔ㄦ佸姞杞?鐨凷tub綾匯傚畠implements UserService銆?

9. _EJSRemoteStatelessUserService_a940aa04_Tie.java
Remote鎺ュ彛鍦⊿erver绔殑Skeleton綾匯?

10. EJSRemoteStatelessUserService_a940aa04.java
Remote鎺ュ彛鍦⊿erver绔殑瀹炵幇錛屽綋鐒訛紝瀹冧篃implements UserService銆傚茍涓旓紝瀹冭礋璐h皟鐢║serServiceBean鈥斺?/p>

涔熷氨鏄垜浠墍鍐欑殑Bean瀹炵幇綾燴斺旈噷闈㈢殑business method銆?

閭d箞錛屽悇涓被涔嬮棿鐨勮皟鐢ㄥ叧緋誨埌搴曟槸鎬庝箞鏍風殑鍛紵綆鍗曠殑璇達紝灝辨槸涓ゆRMI寰幆銆?

    
   

絎竴涓猂MI寰幆    
鍏堟潵鐪嬬湅Client绔殑紼嬪簭鏄庝箞鍐欑殑錛?

浠g爜:

try {
     InitialContext ctx = new InitialContext();

     //絎竴姝?
     UserServiceHome home =
         (UserServiceHome) PortableRemoteObject.narrow(
             ctx.lookup(JNDIString),
             UserServiceHome.class);

     //home: _UserServiceHome_Stub
     System.out.println(home.toString());

     //絎簩姝?
     UserService object = home.create();

     //ojbect: _UserService_Stub
     System.out.println(object.toString());

     //絎笁姝?
     int userId = 1;
     UserInfo ui = object.getUserInfo(userId);
}


鍦ㄧ涓姝ヤ箣鍚庯紝鎴戜滑寰楀埌浜嗕竴涓猆serServiceHome(interface)瀹氫箟鐨勫璞ome錛岄偅涔堬紝home鍒板簳鏄摢涓猚lass鐨?/p>

instance鍛紵鐢╠ebug鐪嬩竴涓嬶紝鐭ラ亾浜唄ome鍘熸潵灝辨槸_UserServiceHome_Stub鐨勫疄渚嬨?

浠庣浜屾寮濮嬶紝灝辨槸鎴戜滑鐨勫叧娉ㄦ墍鍦紝铏界劧鍙湁綆鍗曠殑涓琛屼唬鐮侊紝
UserService object = home.create();
浣嗘槸浠栬儗鍚庣殑緋葷粺鏄庝箞榪愬仛鐨勫憿錛熸垜浠繘鍏ヤ唬鐮佹潵鐪嬪惂錛?

1. 璋冪敤home.create()
浠g爜:

UserServiceHome home;
UserService obj = home.create();


2. 瀹為檯鏄皟鐢╛UserServiceHome_Stub.create()錛屽湪榪欎釜鏂規(guī)硶閲岄潰錛孲tub鍚慡keleton鍙戦佷簡涓涓猚reate鐨勫瓧涓?/p>

錛?
浠g爜:

org.omg.CORBA.portable.OutputStream out = _request("create", true);
in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);


3. Server绔殑Skeleton鎺ユ敹Stub鍙戞潵鐨剅equest錛屽茍璋冪敤鐩稿簲鐨勬柟娉曪細
浠g爜:

_EJSRemoteStatelessUserServiceHome_a940aa04_Tie._invoke() {
     ......
     switch (method.length()) {
         case 6:
             if (method.equals("create")) {
                 return create(in, reply);
             }
         ......
     }
}


浠g爜:

_EJSRemoteStatelessUserServiceHome_a940aa04_Tie.create() {
     EJSRemoteStatelessUserServiceHome_a940aa04 target = null;
     result = target.create();
     org.omg.CORBA.portable.OutputStream out = reply.createReply();
     Util.writeRemoteObject(out,result);
     return out;
}


4. Skeleton璋冪敤鐨勬槸UserServiceHome鐨凷erver绔疄鐜扮被鐨刢reate鏂規(guī)硶
浠g爜:

EJSRemoteStatelessUserServiceHome_a940aa04.create() {
     UserService _EJS_result;
     _EJS_result = EJSStatelessUserServiceHomeBean_a940aa04.create();
}


5. #4鍙堣皟鐢‥JSStatelessUserServiceHomeBean_a940aa04.create()
浠g爜:

     UserService result = super.createWrapper(new BeanId(this, null));


鑷蟲錛屾垜浠粓浜庣粨鏉熶簡絎竴涓猂MI寰幆錛屽茍寰楀埌浜哛emote鎺ュ彛UserService鐨凷tub綾籣UserService_Stub錛屽氨鏄?5

閲岄潰鐨剅esult銆?

榪欓噷鏈変竴涓棶棰橈紝涓轟粈涔?4涓嶇洿鎺reate _UserService_Stub錛岃屽張杞簡涓閬?5鐨勬墜鍛紵鍥犱負#4 extends from

EJSWrapper錛屽畠娌℃湁鑳藉姏create Stub錛屽洜姝ゅ繀欏誨熷姪#5錛寃hich extends from EJSHome錛岃繖鏍鋒墠鍙互鐢熸垚涓涓?/p>

Stub銆傚鏋滀笉鏄負浜嗙敓鎴愯繖涓猄tub錛屽簲璇ュ彲浠ヤ笉璧?5榪欎竴姝ャ?
   
    

絎簩涓猂MI寰幆    
OK, now we got the object which is instanceOf _UserService_Stub, and implements UserService

鐜板湪鎴戜滑鐨凜lient绔蛋鍒扮涓夋浜嗭細
UserInfo ui = object.getUserInfo(userId);

緇х畫鐪嬩唬鐮侊紝寮濮嬬浜屼釜RMI寰幆錛?

1. 璋冪敤object.getUserInfo()
浠g爜:

UserService object;
object.getUserInfo(userId);


2. 瀹為檯鏄皟鐢╛UserService_Stub.getUserInfo(int

arg0)錛屽湪榪欎釜鏂規(guī)硶閲岄潰錛孲tub鍚慡keleton鍙戦佷簡涓涓猤etUserInfo鐨勫瓧涓插拰arg0榪欎釜鍙傛暟錛?

浠g爜:

org.omg.CORBA.portable.OutputStream out = _request("getUserInfo", true);
out.write_long(arg0);
in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);


3. Server绔殑Skeleton鎺ユ敹Stub鍙戞潵鐨剅equest錛屽茍璋冪敤鐩稿簲鐨勬柟娉曪細
浠g爜:

_EJSRemoteStatelessUserService_a940aa04_Tie._invoke() {
     switch (method.charAt(5))
     {
         case 83:
             if (method.equals("getUserInfo")) {
                 return getUserInfo(in, reply);
             }
         ......
     }
}

_EJSRemoteStatelessUserService_a940aa04_Tie.getUserInfo() {
     EJSRemoteStatelessUserService_a940aa04 target = null;
     int arg0 = in.read_long();
     UserDTO result = target.getUserInfo(arg0);
     org.omg.CORBA_2_3.portable.OutputStream out = reply.createReply();
     out.write_value(result,UserDTO.class);
     return out;
}


4. Skeleton璋冪敤鐨勬槸UserService鐨凷erver绔疄鐜扮被鐨刧etUserInfo鏂規(guī)硶
浠g爜:

EJSRemoteStatelessUserService_a940aa04.getUserInfo() {
     UserServiceBean _EJS_beanRef = container.preInvoke(this, 0, _EJS_s);
     _EJS_result = _EJS_beanRef.getUserInfo(id);
}


鏈鍚庣殑鏈鍚庯紝#4緇堜簬璋冪敤浜嗘垜浠啓鐨刄serServiceBean閲岀殑getUserInfo鏂規(guī)硶錛岃繖鎵嶆槸鎴戜滑鐪熸鎯寵鍘誨仛鐨勪簨鎯?/p>

銆?

鑷蟲錛岀浜屼釜RMI寰幆涔熺粓浜庣粨鏉熶簡銆?
   
    

璋冪敤嫻佺▼鍥?nbsp;   
鍥為【涓涓嬩笂闈㈢殑鍒嗘瀽錛屽彲浠ュ緢娓呮櫚鐨勭湅鍒頒袱嬈MI寰幆鐨勮繃紼嬶紝涓嬪浘(瑙侀摼鎺?鎻忚堪浜嗘暣涓祦紼嬶細

http://www.pbase.com/image/27229257

榛勮壊鐨?錛?錛?0鏄▼搴忓憳瑕佸啓鐨勶紝鍏朵綑鏄郴緇熺敓鎴愮殑銆?

#1鏄疕ome interface, #2鍜?4閮絠mplements 浜嗗畠銆?
#6鏄疪emote interface, #7鍜?9閮絠mplements 浜嗗畠銆?
#10鏄疊ean瀹炵幇銆?


3錛歸eblogic瀹炵幇
涓涓繙紼嬪璞¤嚦灝戣鍖呮嫭4涓猚lass鏂囦歡錛氳繙紼嬪璞★紱榪滅▼瀵硅薄鐨勬帴鍙o紱瀹炵幇榪滅▼鎺ュ彛鐨勫璞$殑stub錛涘璞$殑ske

leton榪?涓猚lass鏂囦歡銆?/p>

鍦‥JB涓垯鑷沖皯瑕佸寘鎷?0涓猚lass錛?/p>

Bean綾伙紝鐗瑰畾App Server鐨凚ean瀹炵幇綾?/p>

Bean鐨剅emote鎺ュ彛錛岀壒瀹欰pp Server鐨剅emote鎺ュ彛瀹炵幇綾伙紝鐗瑰畾App

Server鐨剅emote鎺ュ彛鐨勫疄鐜扮被鐨剆tub綾誨拰skeleton綾?/p>

Bean鐨刪ome鎺ュ彛錛岀壒瀹欰pp Server鐨刪ome鎺ュ彛瀹炵幇綾伙紝鐗瑰畾App

Server鐨刪ome鎺ュ彛鐨勫疄鐜扮被鐨剆tub綾誨拰skeleton綾?/p>

鍜孯MI涓嶅悓鐨勬槸錛孍JB涓繖10涓猚lass鐪熸闇瑕佺敤鎴風紪鍐欑殑鍙湁3涓紝鍒嗗埆鏄疊ean綾誨拰瀹冪殑remote鎺ュ彛錛宧ome鎺ュ彛

錛岃嚦浜庡叾瀹冪殑7涓猚lass鍒板簳鏄庝箞鐢熸垚錛岃鎵撳寘鍦ㄤ粈涔堝湴鏂癸紝鎴栬呮槸鍚﹂渶瑕佹洿澶氱殑綾繪枃浠訛紝浼氭牴鎹笉鍚岀殑App

Server琛ㄧ幇鍑烘瘮杈冨ぇ鐨勫樊寮傦紝涓嶈兘涓姒傝岃銆?/p>

鎷縒eblogic鐨勬潵璇村惂錛學(xué)eblogic鐨凚ean瀹炵幇綾伙紝浠ュ強涓や釜鎺ュ彛鐨刉eblogic鐨勫疄鐜扮被鏄湪ejbc鐨勬椂鍊欒鎵撳寘鍒癊JB

鐨刯ar鍖呴噷闈㈢殑錛岃繖3涓猚lass鏂囦歡鍙互鐪嬪埌銆傝宧ome鎺ュ彛鍜宺emote鎺ュ彛鐨刉eblogic鐨勫疄鐜扮被鐨剆tub綾誨拰skeleton

綾繪槸鍦‥JB琚儴緗插埌Weblogic鐨勬椂鍊欙紝鐢盬eblogic鍔ㄦ佺敓鎴恠tub綾誨拰Skeleton綾葷殑瀛楄妭鐮侊紝鍥犳鐪嬩笉鍒拌繖4涓被

鏂囦歡銆?/p>

瀵逛簬涓嬈″鎴風榪滅▼璋冪敤EJB錛岃緇忚繃涓や釜榪滅▼瀵硅薄鐨勫嬈MI寰幆銆傞鍏堟槸閫氳繃JNDI鏌ユ壘Home鎺ュ彛錛岃幏寰桯ome

鎺ュ彛鐨勫疄鐜扮被錛岃繖涓繃紼嬪叾瀹炵浉褰撳鏉傦紝棣栧厛鏄壘鍒癏ome鎺ュ彛鐨刉eblogic瀹炵幇綾伙紝鐒跺悗鍒涘緩涓涓狧ome鎺ュ彛鐨刉eb

logic瀹炵幇綾葷殑stub綾葷殑瀵硅薄瀹炰緥錛屽皢瀹冨簭鍒楀寲浼犻佺粰瀹㈡埛绔紙娉ㄦ剰stub綾葷殑瀹炰緥鏄湪絎?嬈MI寰幆涓紝鐢辨湇鍔?/p>

鍣ㄥ姩鎬佸彂閫佺粰瀹㈡埛绔殑錛屽洜姝や笉闇瑕佸鎴風淇濆瓨Home鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑stub綾伙級錛屾渶鍚庡鎴風鑾峰緱璇tu

b綾葷殑瀵硅薄瀹炰緥錛堟櫘閫氱殑RMI闇瑕佸湪瀹㈡埛绔繚瀛榮tub綾伙紝鑰孍JB涓嶉渶瑕侊紝鍥犱負鏈嶅姟鍣ㄤ細鎶妔tub綾葷殑瀵硅薄瀹炰緥鍙戦佺粰

瀹㈡埛绔級銆?/p>

瀹㈡埛绔嬁鍒版湇鍔″櫒緇欏畠鐨凥ome鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑stub綾誨璞″疄渚嬩互鍚庯紝璋冪敤stub綾葷殑create鏂規(guī)硶錛?鍦ㄤ唬

鐮佷笂灝辨槸home.create()錛屼絾鏄悗鍙拌鍋氬緢澶氫簨鎯?,浜庢槸緇忚繃絎?嬈MI寰幆錛屽湪鏈嶅姟鍣ㄧ錛孒ome鎺ュ彛鐨刉eblogic

瀹炵幇綾葷殑skeleton綾繪敹鍒皊tub綾葷殑璋冪敤淇℃伅鍚庯紝鐢卞畠鍐嶅幓璋冪敤Home鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑create鏂規(guī)硶銆?/p>

鍦ㄦ湇鍔$錛孒ome鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑create鏂規(guī)硶鍐嶅幓璋冪敤Bean綾葷殑Weblogic瀹炵幇綾葷殑ejbCreate鏂規(guī)硶錛屽湪鏈?/p>

鍔$鍒涘緩鎴栬呭垎閰嶄竴涓狤JB瀹炰緥錛岀劧鍚庡皢榪欎釜EJB瀹炰緥鐨勮繙紼嬫帴鍙g殑Weblogic瀹炵幇綾葷殑stub綾誨璞″疄渚嬪簭鍒楀寲鍙?/p>

閫佺粰瀹㈡埛绔?/p>

瀹㈡埛绔敹鍒皉emote鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑stub綾葷殑瀵硅薄瀹炰緥錛屽璇ュ璞″疄渚嬬殑鏂規(guī)硶璋冪敤錛堝湪瀹㈡埛绔唬鐮佷腑瀹?/p>

闄呬笂灝辨槸瀵箁emote鎺ュ彛鐨勮皟鐢級錛屽皢浼犻佺粰鏈嶅姟鍣ㄧremote鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑skeleton綾誨璞★紝鑰宻kele

ton綾誨璞″啀璋冪敤鐩稿簲鐨剅emote鎺ュ彛鐨刉eblogic瀹炵幇綾伙紝鐒跺悗remote鎺ュ彛鐨刉eblogic瀹炵幇綾誨啀鍘昏皟鐢˙ean綾葷殑We

blogic瀹炵幇綾伙紝濡傛灝卞畬鎴愪竴嬈JB瀵硅薄鐨勮繙紼嬭皟鐢ㄣ?/p>

鐪嬩簡涓閬嶅笘瀛愶紝鎰熻榪樻槸娌℃湁璇村お娓呮錛屾棦鐒跺啓浜嗗笘瀛愶紝灝辨兂褰誨簳鎶婂畠璇存竻妤氥?/p>

鍏堟嬁鏅歊MI鏉ヨ錛屾湁4涓猚lass錛屽垎鍒槸榪滅▼瀵硅薄錛屽璞$殑鎺ュ彛錛屽璞$殑stub綾誨拰skeleton綾匯傝屽璞℃湰韜拰瀵?/p>

璞$殑stub綾誨悓鏃墮兘瀹炵幇浜嗘帴鍙g被銆傝屾垜浠湪瀹㈡埛绔唬鐮佽皟鐢ㄨ繙紼嬪璞$殑鏃跺欙紝铏界劧鍦ㄤ唬鐮佷腑鎿嶇旱鎺ュ彛錛屽疄璐ㄤ笂

鏄湪鎿嶇旱stub綾伙紝渚嬪錛?/p>

鎺ュ彛綾伙細Hello

榪滅▼瀵硅薄錛欻ello_Server

stub綾伙細Hello_Stub

skeleton綾伙細Hello_Skeleton

瀹㈡埛绔唬鐮佽榪欐牱鍐欙細

Hello h = new Hello_Stub();
h.getString();

鎴戜滑涓嶄細榪欐牱鍐欙細

Hello_Stub h = new Hello_Stub();
h.getString();

鍥犱負浣跨敤鎺ュ彛閫傜敤鎬ф洿騫匡紝灝辯畻鏇存崲浜嗘帴鍙e疄鐜扮被錛屼篃涓嶉渶瑕佹洿鏀逛唬鐮併傚洜姝ゅ鎴風闇瑕丠ello.class鍜孒ello_

Stub.class榪欎袱涓枃浠躲備絾鏄浜嶦JB鏉ヨ錛屽氨涓嶉渶瑕丠ello_Stub.class錛屽洜涓烘湇鍔″櫒浼氬彂閫佺粰瀹冿紝浣嗘槸Hello.

class鏂囦歡瀹㈡埛绔槸鐪佷笉浜嗙殑錛屽繀欏繪湁銆傝〃闈笂鎴戜滑鐨勫鎴風浠g爜鍦ㄦ搷綰礖ello錛屼絾鍒繕璁頒簡Hello鍙槸涓涓帴鍙?/p>

錛屾娊璞$殑錛屽疄璐ㄤ笂鏄湪鎿嶇旱Hello_Stub銆?/p>

鎷縒eblogic涓婄殑EJB涓句緥瀛愶紝10涓猚lass鍒嗗埆鏄細

Bean綾伙細HelloBean 錛堢敤鎴風紪鍐欙級
Bean綾葷殑Weblogic瀹炵幇綾伙細HelloBean_Impl 錛圗JBC鐢熸垚錛?br> Home鎺ュ彛錛欻elloHome 錛堢敤鎴風紪鍐欙級
Home鎺ュ彛鐨刉eblogic瀹炵幇綾?((Hello Bean))_HomeImpl錛圗JBC鐢熸垚錛?br> Home鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑stub綾?((Hello Bean))_HomeImpl_WLStub錛堥儴緗茬殑鏃跺欏姩鎬佺敓鎴愬瓧鑺傜爜錛?br> Home鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑skeleton綾?((Hello Bean))_HomeImpl_WLSkeleton錛堥儴緗茬殑鏃跺欏姩鎬佺敓鎴愬瓧鑺傜爜

錛?br> Remote鎺ュ彛錛?Hello 錛堢敤鎴風紪鍐欙級
Remote鎺ュ彛鐨刉eblogic瀹炵幇綾?((Hello Bean))_EOImpl錛圗JBC鐢熸垚錛?br> Remote鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑stub綾?((Hello Bean))_EOImpl_WLStub錛堥儴緗茬殑鏃跺欏姩鎬佺敓鎴愬瓧鑺傜爜錛?br> Remote鎺ュ彛鐨刉eblogic瀹炵幇綾葷殑skeleton綾?((Hello Bean))_EOImpl_WLSkeleton錛堥儴緗茬殑鏃跺欏姩鎬佺敓鎴愬瓧鑺傜爜

錛?/p>

瀹㈡埛绔彧闇瑕丠ello.class鍜孒elloHome.class榪欎袱涓枃浠躲?/p>

((Hello Home)) home = (Home) ((Portable Remote Object)).narrow(ctx.lookup("Hello"), ((Hello

Home)).class);

榪欎竴琛屼唬鐮佹槸浠嶫NDI鑾峰緱Home鎺ュ彛錛屼絾鏄璁頒綇錛佹帴鍙f槸鎶借薄鐨勶紝閭d箞home榪欎釜瀵硅薄鍒板簳鏄粈涔堢被鐨勫璞″疄渚?/p>

鍛紵寰堢畝鍗曪紝鐢╰oString()杈撳嚭鐪嬩竴涓嬪氨鏄庣櫧浜嗭紝涓嬮潰涓琛屾槸杈撳嚭緇撴灉錛?/p>

((Hello Bean))_HomeImpl_WLStub@18c458

榪欒〃鏄巋ome榪欎釜閫氳繃浠庢湇鍔″櫒鐨凧NDI鏍戜笂鏌ユ壘鑾峰緱鐨勫璞″疄闄呬笂鏄疕elloBean_HomeImpl_WLStub綾葷殑涓涓疄渚嬨?/p>

鎺ヤ笅鏉ュ鎴風浠g爜錛?/p>

Hello h = home.create()

鍚屾牱Hello鍙槸涓涓娊璞$殑鎺ュ彛錛岄偅涔坔瀵硅薄鏄粈涔堜笢瑗垮憿錛熸墦鍗頒竴涓嬶細

((Hello Bean))_EOImpl_WLStub@8fa0d1

鍘熸潵鏄疕elloBean_EOImpl_WLStub鐨勪竴涓璞″疄渚嬨?/p>

鐢ㄨ繖涓緥瀛愭潵綆榪頒竴閬岴JB璋冪敤榪囩▼錛?/p>

棣栧厛瀹㈡埛绔疛NDI鏌ヨ錛屾湇鍔$JNDI鏍戜笂Hello榪欎釜鍚嶅瓧瀹為檯涓婄粦瀹氱殑瀵硅薄鏄疕elloBean_HomeImpl_WLStub錛屾墍浠?/p>

鏈嶅姟绔皢鍒涘緩HelloBean_HomeImpl_WLStub鐨勪竴涓璞″疄渚嬶紝搴忓垪鍖栬繑鍥炵粰瀹㈡埛绔?/p>

浜庢槸瀹㈡埛绔緱鍒癶ome瀵硅薄錛岃〃闈笂鏄緱鍒癏elloHome鎺ュ彛鐨勫疄渚嬶紝瀹為檯涓婃槸榪涜浜嗕竴嬈¤繙紼嬭皟鐢ㄥ緱鍒頒簡HelloBea

n_HomeImpl_WLStub綾葷殑瀵硅薄瀹炰緥錛屽埆蹇樿浜咹elloBean_HomeImpl_WLStub涔熷疄鐜頒簡HelloHome鎺ュ彛銆?/p>

鐒跺悗home.create()瀹炶川涓婂氨鏄疕elloBean_HomeImpl_WLStub.create()錛岃鏂規(guī)硶灝嗗彂閫佷俊鎭粰HelloBean_HomeIm

pl_WLSkeleton錛岃孒elloBean_HomeImpl_WLSkeleton鎺ュ彈鍒頒俊鎭悗錛屽啀鍘昏皟鐢℉elloBean_HomeImpl鐨刢reate鏂?/p>

娉曪紝鑷蟲瀹屾垚絎?嬈″畬鏁寸殑RMI寰幆銆?/p>

娉ㄦ剰鍦ㄨ繖嬈MI寰幆榪囩▼涓紝榪滅▼瀵硅薄鏄疕elloBean_HomeImpl錛岃繙紼嬪璞$殑鎺ュ彛鏄疕elloHome錛屽璞$殑stub鏄疕el

loBean_HomeImpl_WLStub錛屽璞$殑skeleton鏄疕elloBean_HomeImpl_WLSkeleton銆?/p>

鐒跺悗HelloBean_HomeImpl鍐嶅幓璋冪敤HelloBean_Impl鐨別jbCreate鏂規(guī)硶錛岃孒elloBean_Impl鐨別jbCreate鏂規(guī)硶灝嗚礋

璐e垱寤烘垨鑰呭垎閰嶄竴涓狟ean瀹炰緥錛屽茍涓斿垱寤轟竴涓狧elloBean_EOImpl_WLStub鐨勫璞″疄渚嬨?/p>

榪欎竴姝ユ瘮杈冩湁瓚g殑鏄紝鍦ㄥ墠涓姝MI寰幆涓紝榪滅▼瀵硅薄HelloBean_HomeImpl鍦ㄥ鎴風鏈変竴涓唬鐞嗙被HelloBean_Ho

meImpl_WLStub錛屼絾鍦ㄨ繖涓姝ワ紝HelloBean_HomeImpl鑷繁鍗村厖褰撲簡HelloBean_Impl鐨勪唬鐞嗙被錛屽彧涓嶈繃HelloBean_

HomeImpl涓嶅湪瀹㈡埛绔紝鑰屾槸鍦ㄦ湇鍔$錛屽洜姝や笉榪涜RMI銆?/p>

鐒跺悗HelloBean_EOImpl_WLStub鐨勫璞″疄渚嬪簭鍒楀寲榪斿洖緇欏鎴風錛岃繖涓姝ヤ篃寰堟湁瓚o紝涓婃RMI榪囩▼錛屼富瑙掓槸Hello

Bean_HomeImpl鍜屽畠鐨勪唬鐞嗙被HelloBean_HomeImpl_WLStub錛屼絾榪欒繖涓嬈℃崲鎴愪簡HelloBean_EOImpl鍜屽畠鐨勪唬鐞嗙被H

elloBean_EOImpl_WLStub鏉ョ帺浜嗐?/p>

Hello h = home.create();h.helloWorld();

鍋囪Hello鎺ュ彛鏈変竴涓猦elloWorld榪滅▼鏂規(guī)硶錛岄偅涔堣〃闈笂鏄湪璋冪敤Hello鎺ュ彛鐨刪elloWorld鏂規(guī)硶錛屽疄闄呬笂鏄湪璋?/p>

鐢℉elloBean_EOImpl_WLStub鐨刪elloWorld鏂規(guī)硶銆?/p>

鐒跺悗HelloBean_EOImpl_WLStub鐨刪elloWorld鏂規(guī)硶灝嗗彂閫佷俊鎭粰鏈嶅姟鍣ㄤ笂鐨凥elloBean_EOImpl_WLSkeleton錛岃孒

elloBean_EOImpl_WLSkeleton鏀跺埌淇℃伅浠ュ悗錛屽啀鍘昏皟鐢℉elloBean_EOImpl鐨刪elloWorld鏂規(guī)硶銆傝嚦姝わ紝瀹屾垚絎?嬈?/p>

瀹屾暣鐨凴MI寰幆榪囩▼銆?/p>

鍦ㄥ垰鎵岺elloBean_EOImpl鏄綔涓鴻繙紼嬪璞¤璋冪敤鐨勶紝瀹冪殑浠g悊綾繪槸HelloBean_EOImpl_WLStub錛屼絾鐜板湪HelloBea

n_EOImpl瑕佷綔涓篐elloBean_Impl鐨勪唬鐞嗙被浜嗐傜幇鍦℉elloBean_EOImpl鍘昏皟鐢℉elloBean_Impl鐨刪elloWorld鏂規(guī)硶

銆傛敞鎰忥紒HelloBean_Impl緇ф壙浜咹elloBean錛岃孒elloBean涓殑helloWorld鏂規(guī)硶鏄垜浠翰鑷紪鍐欑殑浠g爜錛岀幇鍦ㄧ粓

浜庤皟鐢ㄥ埌浜嗘垜浠紪鍐欑殑浠g爜浜嗭紒

鑷蟲錛屼竴嬈JB璋冪敤榪囩▼緇堜簬瀹屾垚銆傚湪鏁翠釜榪囩▼涓紝鏈嶅姟绔富瑕佽璋冪敤鐨勭被鏄疕elloBean_Impl錛?Hello

Bean?_HomeImpl錛孒elloBean_HomeImpl_WLSkeleton錛孒elloBean_EOImpl錛孒elloBean_EOImpl_WLSkeleton銆傚

鎴風涓昏璋冪敤鐨勭被鏄疕elloBean_HomeImpl_WLStub錛孒elloBean_EOImpl_WLStub錛岃繖涓や釜綾誨湪瀹㈡埛绔唬鐮佷腑騫朵笉

浼氱洿鎺ュ嚭鐜幫紝鍑虹幇鍦ㄤ唬鐮佷腑鐨勭被鏄粬浠殑鎺ュ彛HelloHome鍜孒ello錛屽洜姝ゅ鎴風闇瑕佽繖涓や釜鎺ュ彛鏂囦歡錛岃孲tub鏄?/p>

鏈嶅姟鍣ㄤ紶閫佺粰浠栦滑鐨勩?/p>

4 鐞嗚В浣撲細
綆鍗曡錛屽氨鏄負浜嗛傚簲鍒嗗竷寮忓紑鍙戠殑闇瑕併?

棣栧厛錛屽洖鍒版垜鏈鍚庣粰鍑虹殑嫻佺▼鍥俱?
http://www.pbase.com/nobo123/image/27229257

Client绔渶鍘熷鐨勫啿鍔紝鑲畾鏄兘鐩存帴璋冪敤#10.UserServiceBean灝辯埥浜嗐傞偅涔堢涓涓棶棰樻潵浜嗭紝
Client鍜孲erver涓嶅湪涓涓狫VM閲屻?

榪欏ソ鍔烇紝鎴戜滑涓嶆槸鏈塕MI鍚楋紝濂斤紝榪欎釜闂灝辮繖涔堣В鍐充簡錛?
1. UserServiceBeanInterface.getUserInfo()
2. UserServiceBeanStub
3. UserServiceBeanSkeleton
4. UserServiceBean

鐢ㄧ潃鐢ㄧ潃錛岀浜屼釜闂鏉ヤ簡錛?
UserServiceBean鍙湁浜虹敤錛屾病浜虹鐞嗭紝transaction logic, security logic, bean instance pooling logic

榪欎簺涓嶅緱涓嶈冭檻鐨勯棶棰樻誕鍑烘按闈簡銆?

OK錛屾垜浠兂鍒扮敤涓涓猟elegate錛孍JBObject錛屾潵榪涜鎵鏈夎繖浜沴ogic鐨勭鐞嗐俢lient鍜孍JBObject鎵撲氦閬擄紝EJBObj

ect璋冪敤UserServiceBean銆?

娉ㄦ剰錛岃繖涓狤JBObject涔熸槸涓涓狪nterface錛?6.UserService榪欎釜interface姝f槸浠庡畠extends鑰屾潵銆傚茍涓擡JBObje

ct鎵綆$悊鐨勮繖浜沴ogic錛屾鏄疉ppServer鐨勪竴閮ㄥ垎銆?

鐜板湪鐨勬祦紼嬪彉涓轟簡錛?
EJBObject
1. UserService.getUserInfo()
2. UserServiceStub
3. UserServiceSkeleton
4. UserServiceImp
5. UserServiceBean

榪欏凡緇忓拰鏁村箙鍥鵑噷鐨?6, #7, #8, #9, #10涓涓瀵瑰簲浜嗐?

鐜板湪鑳芥弧瓚蟲垜浠殑闇姹備簡鍚楋紵涓嶏紝絎笁涓棶棰樺張鏉ヤ簡錛?
鏃㈢劧鏄垎甯冨紡寮鍙戯紝閭d箞鎴戝綋鐒舵病鐞嗙敱鍙敤涓涓猄pecified Server錛屾垜鍙兘闇瑕佺敤鍒板ソ鍑犱釜涓嶅悓鐨凷erver錛岃?/p>

涓擡JBObject涔熼渶瑕佺鐞嗗憖

OK錛屼負浜嗛傚簲浣犵殑闇瑕侊紝鎴戜滑榪樺緱鍔犲啀涓涓狧omeObject錛岄鍏堝畠鏉ュ喅瀹氱敤鍝釜Server(褰撶劧錛屾槸鐢變綘鐢↗NDI

String璁懼畾鐨?錛屽叾嬈★紝瀹冩潵綆$悊EJBObject銆?

娉ㄦ剰錛岃繖涓狤JBHome涔熸槸涓涓狪nterface錛?1.UserServiceHome榪欎釜interface姝f槸浠庡畠extends鑰屾潵銆傚茍涓擡JBHo

me綆$悊EJBObject鐨刲ogic錛屼篃鏄疉ppServer鐨勪竴閮ㄥ垎銆?

鐜板湪鐨勮皟鐢ㄦ搴忔槸
1. EJBHome.create()
2. EJBHomeStub
3. EJBHomeSkeleton
4. EJBHomeImp(EJSWrapper)
5. EJSHome

寰楀埌EJBObject

6. UserService.getUserInfo()
7. UserServiceStub
8. UserServiceSkeleton
9. UserServiceImp
10. UserServiceBean

鐜板湪宸茬粡瀹屽叏鍜屾祦紼嬪浘鐨勮皟鐢ㄩ『搴忎竴鑷翠簡銆?

//EJB鐨勫熀紜鏄疪MI IIOP,鍘熺悊騫朵笉鏄緢闅撅紝鍏抽敭鏄疄鐜拌搗鏉ユ瘮杈冪粫錛屼竴涓畝鍗曠殑鍔熻兘瑕佺敤10涓紙鎴栨洿澶氾級綾繪潵瀹炵幇錛屼絾姣忎竴涓兘涓嶆槸澶氫綑鐨勩?/strong>

//EJB鐨勮繖縐嶆ā寮忥紙鎴栬RMI錛夊畬鍏ㄥ睆钄戒簡搴曞眰鐨勭綉緇滐紝騫跺緢濂界殑瀹炵幇浜嗗涓氬姟浠g爜鐨勪繚鎶ゃ?/strong>



hardson 2007-07-13 11:17 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 在线观看亚洲免费视频| 无码国产精品一区二区免费模式 | 美丽的姑娘免费观看在线播放| 亚洲视频在线免费看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲人成亚洲人成在线观看| 国产人成免费视频网站| 日韩精品无码免费视频| 日韩亚洲Av人人夜夜澡人人爽 | 成人免费大片免费观看网站| 美美女高清毛片视频黄的一免费| 亚洲精品二区国产综合野狼| 亚洲成在人线aⅴ免费毛片| 一个人免费观看www视频| 亚洲另类古典武侠| 亚洲精品偷拍视频免费观看| 57pao一国产成永久免费| 一级毛片高清免费播放| 亚洲国产成人精品无码一区二区| 亚洲一区二区三区免费| 无人在线观看完整免费版视频| 中国videos性高清免费| 亚洲国产精品无码久久久秋霞1 | 亚洲乱码中文字幕久久孕妇黑人| 国产成人免费爽爽爽视频| a毛片在线看片免费| 日韩国产精品亚洲а∨天堂免| 亚洲AV无码一区二区二三区软件 | baoyu122.永久免费视频| 国产午夜亚洲精品不卡电影| 亚洲无成人网77777| 亚洲精品狼友在线播放| 免费国产在线观看不卡| 免费福利网站在线观看| 99久久人妻精品免费一区| 亚洲精品视频免费| 国产亚洲综合一区二区三区| 亚洲一区二区三区在线网站 | 羞羞视频在线观看免费| 亚洲自偷自偷在线成人网站传媒| 亚洲天堂中文字幕|