[thuvien it.org]java rmid

Upload: thanh-nguyen

Post on 30-Oct-2015

47 views

Category:

Documents


0 download

DESCRIPTION

java ^^!

TRANSCRIPT

  • Lp trnh i tng phn tn l mt trong nhng vn nng bng ca cng ngh phn tn phn mm ngy nay. Java l ngn ng i tin phong tronh vic gii quyt vn lp trnh phn tn. Chng ny s gii thiu vi bn khi nim v cch ci t cc i tng phn tn bng k thut RMI trong Java. y l k thut xuyn sut trong ton b kin trc java sau ny.Cc vn chnh s c cp n: Khi nim v lp trnh phn tn i tng v k thut RMI. Thit k ng dng phn tn RMI. Chuyn d liu v tham chiu i tng trn mng. Kt ni mng v vn tng la (firewall). Web Services/SOAP mt cng ngh v giao thc mi cho mi trng phn tn.GII THIU

  • Thng thng cc chng trnh ca chng ta c vit di dng th tc hoc hm v vic cc hm gi ln nhau, truyn tham s hay kt qu cho nhau ch xy ra my cc b. K thut RMI (Remote Method Invoke) mang ngha triu gi phng thc t xa l cch thc giao tip gia cc i tng trong Java c m lnh ci t nm trn cc my khc nhau c th triu gi ln nhau.M hnh triu gi cc i tng t xaRMI V LP TRNH PHN TN I TNG

  • Vic gi phng thc ca i tng t xa lun phc tp hn gi phng thc cc b. Cc i tng trn hai my khc nhau hot ng trn hai tin trnh khc nhau nn vic tham chiu n bin a ch hon ton khc nhau. Li gi phng thc t xa phi thng qua mng v c th b ngt ngang do mng gp s c. Cc tham s truyn cho i tng xa phi c ng gi v truyn qua mng n vi phng thc thc s.GI PHNGTHC T XA V CC VN PHT SINH

  • gii quyt vn trn, i tng trn hai my khc nhau khng gi trc tip m thng qua lp trung gian. Lp ny tn ti c hai pha Client v Server. Lp my Client gi l Stub, lp my Server gi l Skel (Skeletion).V d 1:VAI TR CA CC LP TRUNG GIAN ( STUB V SKELETION )

  • V d 2:Phng thc A truyn cho phng thc B hai s a,b. Phng thc B s cng hai s a,b cho ra kt qu c v tr v phng thc A. Qu trnh din ra nh sau:a,ba,bcca + b = cVAI TR CA CC LP TRUNG GIAN ( STUB V SKELETION )

  • Cc phng thc s dng trong chng trnh: bind(URLString, Object) thuc lp Naming. - URLString: Chui nh v c dng nh sau:rmi://hostName:port/ObjectName. Trong :rmi: l tn giao thc dng ng k. hostName, port: l a ch IP v s hiu cng ni my ch ni b ng k i tng rmi ang chy. ObjectName: l tn bt k gi nh t cho i tng. Cc chng trnh my khch s da vo tn ny truy tm tham chiu n i tng cn dng. - Object: Tn i tng. Phng thc bind() dng ng k mt tn gi nh cho i tng Object vi b qun l rmi. exportObject(Object) : nm trong lp UnicastRemoteObject. Phng thc ny lm cho my o Java nhn din c i tng Object. s dng c lp UnicastRemoteObject phi khai bo: import java.rmi.server.*;CI T NG DNG PHN TN RMI

  • lookup(rmi://hostName:port/ObjectName). Phng thc ny thuc lp Naming. i s l chui nh dng cho bit a ch my ch v tn ng k i tng.CI T NG DNG PHN TN RMI

  • Ci t chng trnh cng hai s nguyn.Hnh m t triu gi i tng RMI gia trnh khch v i tng ch xa.CI T NG DNG PHN TN RMI

  • // Calculator.java// Calculator.javanh du cho my o Java bit kh nng giao tip vi cc i tng xa ca CalculatorT lp giao tip Calculator i tng thc s c ci t nh sau:CI T NG DNG PHN TN RMI

  • // CalculatorServer.java Thng bo s hin din ca c cho my o Java

    ng k c vi b qun l RMI. Tn gi nh ca c l MyCalculator.

    CI T NG DNG PHN TN RMI

  • //CalculatorClient.javaTm MyCalculator trn a ch localhostCI T NG DNG PHN TN RMI

  • Din t c ch gi hm t xa ca cc i tng RMI mt cch tng qut.CI T NG DNG PHN TN RMI

  • 1. B ng k rmiregistry:C ch lm vic ca trnh khch v trnh ch trn my o java khi ng k v truy xut rmiregistry:B NG K (REGISTRY), CLASSPATH V CODE BASE

  • Ba my o ny c th xem l ba my tnh khc nhau nhng do chy trn cng mt my nn IP Address ging nhau l 127.0.0.1Thc t m hnh trn mun hot ng trn mng tht th ch c th tch ra lm hai ch khng th tch ra ba, v Java khng cho php rmiregistry chy trn my khc ni i tng rmi ang hot ng.B NG K (REGISTRY), CLASSPATH V CODE BASE

  • V d:Lc ny hm ng k vi rmiregistry c gi nh sau: Naming.bind(rmi://172.11.12/Mycalculator,c);V hm try tm i tng t my khch s c gi nh sau: Calculator = new(Calculator)Naming.lookup(rmi://172.11.12/Mycalculator,c);B NG K (REGISTRY), CLASSPATH V CODE BASE

  • 2. Bin Classpath v ty chn Codebase:2.1 Classpath:Khi chy chng trnh, Java da vo bin mi trng CLASSPATH truy tm cc tp tin .class. Nu CLASSPATH ch sai ng dn ti li xy ra: java.lang.ClassNotFoundException: ClassNameV d: Trong th mc C:\RMI cha hai th mc con: C:\RMI\SV gm cc tp tin sau: Calculator.class; CalculatorImpl.class; CalculatorServer.class;CalculatorImpl_Stub.class;CalculatorImpl_Skel.class C:\RMI\CL gm cc tp tin sau:Calculator.class; CalculatorClient.class; CalculatorImpl_Stub.class; B NG K (REGISTRY), CLASSPATH V CODE BASE

  • Khi Calculatorserver yu cu rmiregistry ng k tn i tng, rmiregistry s i truy tm lp trung gian CalculatorImpl_Stub. Trn my o rmiregistry ang chy nu CLASSPATH khng tr n ng dn C:\RMI\SV th nhn c thng bo li tr v trn my o ni Calculatorserver yu cu ng k i tng: java.lang.ClassNotFoundException:Calculatorimpl_Stub thay i gi tr cho CLASSPATH ta dng lnh: Set ClasspathV d: Set Classpath=.;C:\RMI\SVGi tr mc nh ca Classpath l tr n th mc cha hin hnh. Lc Classpath=.;Khi thay i gi tr cho Classpath mt my o s khng lm nh hng ti Classpath ca my o khc.B NG K (REGISTRY), CLASSPATH V CODE BASE

  • 2.2 Codebase:Tht s khi vit chng trnh t pha my khch, lp trnh vin lp trnh vin ch cn n lp giao tip Calculator.class. Lp trung gian CalculatorImpl_Stub.class khng c ngha i vi cc nh pht trin ng dng. N ch cn thit cho c ch RMI ca Java. Chnh v iu ny Java cung cp cho bn cch thc np t ng lp CalculatorImpl_Stub.class t xa thng qua ty chn Codebase khi ng k i tng vi rmiregistry trn my ch. my ch phi h tr thm dch v WebServer chy trn my ni rmiregistry ang chy. Sau chp tp tin CalculatorImpl_Stub.class vo th mc myclass ca trnh ch web server. Khi s dng ty chn Codebase th bin Classpath trn my o ni rmiregistry ang chy khng c tr n cng th mc cha CalculatorImpl_Stub.class. Nu khng rmiregistry s lun u tin ly lp CalculatorImpl_Stub.class t dng dn Classpath m b qua ty chn Codebase.C:\RMI> java Djava.rmi.server.codebase=http:172.16.11.12/myclass/calculatorServerB NG K (REGISTRY), CLASSPATH V CODE BASE

  • Khi my khch c yu cu rmiregistry tr v tham chiu ca i tng, nu my khch cha c lp Calculatorimpl_Stub.class, rmiregistry s hng dn my khch t ng np lp ny t a ch codebase: http://172.16.11.12/myclass/.C ch np t ng lp trung gian CalculatorImpl_Stub.class xung my khch.B NG K (REGISTRY), CLASSPATH V CODE BASE

  • B NG K (REGISTRY), CLASSPATH V CODE BASE

  • 2.3 Np tp tin t xa v chnh sch bo mt t pha my khch:Vi Java tt c cc thao tc kt ni v chp tp tin l t mt my khc v mt my u phi thng qua lp bo v gi l securityManager. to lp bo v ta dng lnh sau:System.setSecurityManager(new RMiSecurityManager());V d: M ngun ca chng trnh CalculatorClient trong trng hp t ng np lp CalculatorImpl_Stub.class t my ch c vit nh sau:B NG K (REGISTRY), CLASSPATH V CODE BASE

  • Thit lp lp phng v t xa import java.rmi.* public class CalculatorClient{ public static void main(String args[]){ try{ System.setSecuritymanager(new RMISecurityManager()); System.out.println(Finding object); Calculator c = Calculator)Naming.lookup( rmi://172.16.11.12/myCalculator); }catch(Exception e){System.out.println(e); } }} B NG K (REGISTRY), CLASSPATH V CODE BASE

  • Chuyn tham s theo tham tr v tham bin:i vi Java, trn my cc b hu ht cc bin kiu i tng u truyn theo tham chiu trong cc li gi hm. Nha l mt khi bin i tng c truyn vo phng thc nu bn trong phng thc thay i gi tr ca i tng th khi li gi phng thc chm dt gi tr ca i tng cng thay i theo. V d:CHUYN THAM S TRONG LI GI PHNG THC T XA

  • CHUYN THAM S TRONG LI GI PHNG THC T XA

  • Khi chy chng trnh value s c gi tr l 13. Tuy nhin cc kiu d kiu n gin nh: int, float, double, char, byte, longli c truyn theo tham tr. Gi tr ca tham s m hm hay phng thc x l ch l bn sao ca bin truyn r ngoi vo. V d: v d ny kt qu xut ra mn nnh l 12. Tm li, trong java i tng c truyn theo tham chiu cn cc kiu d liu n gin c truyn theo tham tr.CHUYN THAM S TRONG LI GI PHNG THC T XA

  • Vic truyn tham s qua mng theo c ch RMI li khc vi cch truyn tham s thng thng.Tt c cc kiu d liu n gin nh int,char u c truyn theo tham tr.Tt c cc d liu kiu i tng mun truyn qua mng u buc phi ci t mt trong hai giao tip Remote hoc Serializable. Cc i tng ci t giao tip Remote s c truyn theo tham chiu cn cc i tng c t giao tip Serializable s c tuyn theo tham tr.CHUYN THAM S TRONG LI GI PHNG THC T XA

  • anotherBall = V d v truyn tham s qua mng s dng giao tip Serializable:CHUYN THAM S TRONG LI GI PHNG THC T XAM phng v d:Weight = 12Weight = 12 + 15 = 27

  • V d v truyn tham s qua mng s dng giao tip Serializable:import java.io.*;

    public class Ball implements Serializable{ int weight=0;

    public Ball(int w){ weight=w; }

    public int getWeight(){ return weight; }

    public void setWeight(int w){ weight=w; }}// Ball.java. CHUYN THAM S TRONG LI GI PHNG THC T XAXy dng lp Ball.class c dng lm tham s chuyn qua mng gia trnh khch v trnh ch

  • import java.rmi.*;

    public interface PingServer extends Remote {

    public Ball ping(Ball b) throws RemoteException;

    }//PingServer.javaCHUYN THAM S TRONG LI GI PHNG THC T XAc t giao tip interface cho i tng trn my ch

  • import java.rmi.*;

    public class PingServerImpl implements PingServer{

    public Ball ping(Ball b) throws RemoteException{System.out.println(Client send a ball objectweight + b.getWeiht());b.setWeight(b.getWeight()+15);

    return b;

    }//PingServerImpl.javaCHUYN THAM S TRONG LI GI PHNG THC T XACi t chi tit cho i tng thng qua i lp PingServerImpl

  • import java.rmi.*;import java.rmi.server.*;

    public class Setup { public static void main(String args[]) throws Exception{ PingServer server=new PingServerImpl(); UnicastRemoteObject.exportObject(server);

    Naming.bind("rmi://localhost/pingobject",server);

    System.out.println("Waiting for client request ..."); }}//Setup.javaCHUYN THAM S TRONG LI GI PHNG THC T XAChng trnh Setup ci t i tng PingServerImpl trn my ch

  • import java.rmi.*;

    public class Client { public static void main(String args[]) throws Exception{

    Ball ball=new Ball(12);

    PingServer server=(PingServer)Naming.lookup( "rmi://localhost/pingobject"); System.out.println("Ball weight before send to server "+ball.getWeight()); Ball anotherBall=server.ping(ball); System.out.println("Ball weight after send to server "+ball.getWeight());

    System.out.println("Ball weight return by server "+anotherBall.getWeight());

    }}

    //Client.javaCHUYN THAM S TRONG LI GI PHNG THC T XAChng trnh Client gi phng thc ca i tng pingServer

  • CHUYN THAM S TRONG LI GI PHNG THC T XATrong trnh khch Client.java i tng ball trc v sau gi phng thc ping() vn gia nguyn gi tr l 12. Trong khi i tng ball a ln trnh ch c tng gi tr ln 15. Kt qu tr v t trnh ch l mt i tng anotherBall khc vi i tng ball c chuyn i t trnh khch anotherBall c gi tr l 12 + 15 = 27. Nh vy i tng ball c phng thc ping() chuyn i theo tham tr.Nu i tng ball qu ln vic ng gi ton b i tng chuyn i chuyn li trn mng s nh hng n tc thc thi ca chng trnh.By gi chng ta s xy dng chng trnh c th tham chiu v x l trc tip i tng nm trn my khch. Ngha l nu trnh ch c trnh khch truy xut t xa th trnh khch cng c gi t xa bi trnh ch. Bng cch ny trnh ch v trnh khch c th triu gi ln nhau. ( khng nh trc gi ta vn theo c ch th ng trnh khch gi phng thc ca trnh ch).

  • CHUYN THAM S TRONG LI GI PHNG THC T XAC ch gi ngc t xa ca trnh ch n trnh khch thng qua tham chiu gi l c ch callback.V d://AtClient.javaimport java.rmi.*;

    public interface AtClient extends Remote {

    public void callClientMethod(String message) throws RemoteException;}t t giao tip interface cho i tng AtClient.Gi phng thcGi phng thc

  • CHUYN THAM S TRONG LI GI PHNG THC T XA//AtServer.javaimport java.rmi.*;

    public interface AtServer extends Remote { public void registerClient(AtClient c) throws RemoteException;

    public void callServerMethod(String message) throws RemoteException;}

    t t giao tip interface cho i tng AtServer.Phng thc registerClient() dng tip nhn tham chiu n i tng AtClient. Phng thc callServerMethod() dng cung cp cc dch v cho trnh khch.

  • CHUYN THAM S TRONG LI GI PHNG THC T XA//AtClientImpl.javaimport java.rmi.*;

    public class AtClientImpl implements AtClient {

    public void callClientMethod(String message) throws RemoteException{ System.out.println(message); }}

    Ci t chi tit cho i tng AtClient thng qua lp AtClientImpl

  • CHUYN THAM S TRONG LI GI PHNG THC T XA//AtServerImpl.javaimport java.rmi.*;public class AtServerImpl implements AtServer {

    AtClient client; // lu gi tham chiu n i tng trn my khch public void registerClient(AtClient c) throws RemoteException{ client = c; } // c trnh khch triu gi ng k i tng AtClient vi trnh ch

    public void callServerMethod(String message) throws RemoteException{

    System.out.println(message);

    for (int i=1; i

  • CHUYN THAM S TRONG LI GI PHNG THC T XA// Setup.javaimport java.rmi.*;import java.rmi.server.*;

    public class Setup {

    public static void main(String args[]) throws Exception{ AtServer server=new AtServerImpl();

    UnicastRemoteObject.exportObject(server);

    Naming.bind("rmi://localhost/serverobject", server); System.out.println("Waiting for client request ..."); }}

  • CHUYN THAM S TRONG LI GI PHNG THC T XA//Client.javaimport java.rmi.*;import java.rmi.server.*;

    public class Client {

    public static void main(String args[]) throws Exception{ AtClient client=new AtClientImpl();

    UnicastRemoteObject.exportObject(client);

    AtServer server=(AtServer)Naming.lookup( "rmi://localhost/serverobject");

    server.registerClient(client); server.callServerMethod("Client Contact Server"); }}

  • CHUYN THAM S TRONG LI GI PHNG THC T XADo java cho php mt i tng c th ci t cng lc nhiu giao tip interface khch nhau nn i tng c th ci t cng lc hai giao tip Serializable v Remote. Khi nu khng dng UnicastRemoteObject.exportObject() ng k i tng cho my o Java th i tng s c truyn theo tham tr, ngc li i tng s c truyn theo tham chiu.

  • TUN T HA (SERIALZABLE)I TNGJava cung cp cho bn kh nng ghi ton b i tng xung mt tp tin. Sau bn c th em tp tin cha i tng i khp ni nu cn th khi phc i tng v trng thi ban u. i tng trong b nh c th quan h chng cht vi nhau nhng khi c ghi xung tp tin th bt buc phi tri phng i tng theo th t.Trong Java i tng mun c kh nng ghi v lu d liu thnh tp tin phi ci t giao tip java.io.Serializable. Nu i tng cn ghi cha bn trong nhiu i tng con khc th Java ly tt c cc i tng con ghi lun xung a.Di y l v d cho thy kh nng tun t ha ca mt i tng phc hp.

  • TUN T HA (SERIALZABLE)I TNGwriteObjectreadObjectMyObject.ser

  • TUN T HA (SERIALZABLE)I TNGLp i tng lu thnh tp trn a.

  • TUN T HA (SERIALZABLE)I TNGTo file lu i tngKhi to i tng trong b nh// Ghi i tng xung tp tin

  • TUN T HA (SERIALZABLE)I TNGM tp tin cha i tng

    c i tng t tp tin

  • tip n chng trnh trn my khch s yu cu dch v rmiregistry tr v tham chiu n i tng trn my ch:TM HIU RMI REGISTRY V CC CCH NG K I TNGTrc gi ta vn s dng b ng k rmiregistry nh mt dch v tm kim. Cc i tng ch mun c trnh khch truy tm c t xa th trc ht phi ng k vi rmiregistry. B mg k ny l mt chng trnh dch v chy hu trng (chng trnh rmiregistry.exe) m cm socket v lng nghe cc yu cu gi n cng mc nh 1099, bn c th ch nh mt cng khc vi cng 1099. V d: C:\j2sdk1.4.0\bin\rmiregistry.exe 9999lc ny rmiregistry s chy trn cng 9999, v i tng trn my ch s ng k vi rmiregistry theo cch sau:Myobject o = new Myobject();Naming.bind(rmi://localhost:9999/myObjectname,o);Myobject o = (Myobject)Naming.lookup(rmi://localhost:9999/myObjectname,o);

  • TM HIU RIM REGISTRY V CC CCH NG K I TNGMt dch v ng k c th tip nhn v qun l cng lc nhiu i tng ch khc nhau.ng k v yu cu rmiregistryLi gi n i tng

  • TM HIU RIM REGISTRY V CC CCH NG K I TNGTrong java cng cho php chng ta ly v danh sch cc i tng m rmiregistry ang nm gi . Di y l chng trnh tm hiu danh sch tn tn cc i tng do rmiregistry nm gi.//localhostKt ni vi b ng kLy v danh sch cc i tng

  • TM HIU RIM REGISTRY V CC CCH NG K I TNGTrong Java cho php bn t to b ng k m khng cn dng n chng trnh rmiregistry.exe. to b ng k v t ng k i tng chng ta gi phng thc tnh createRegistry() ca lp LocateRegistry. V d:

  • TM HIU RIM REGISTRY V CC CCH NG K I TNGTuy nhin cch ny ch c th p dng cho mt i tng. Nu mt i tng no to ra b ng k ri th bn khng gi c LocateRegistry.createRegistry() ln th hai trn cng mt cng ca my ch. V d: LocateRegistry.createRegistry(1234);.. Naming.bind(rmi://localhost:1234/myCal,cal);

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )1. M hnh xng ch tc i tng:Cho n by gi mi khi xy dng mt i tng ch chng ta u phi t tn cho i tng, ng k tn i tng cho rmiregistry. im bt tin l rmiregistry phi qun l qu nhiu tn i tng v khi vt chng trnh trn my khch chng ta cng phi nh tn ca cc i tng ny. tin li hn java cho php chng ta xy dng mt i tng duy nht v ng k i tng ny vi rmiregistry, nhin v ca n ch dng to ra cc i tng con khc. Mt i tng nh vy trong m hnh hng i tng gi l factory object.Di y l m hnh hot ng ca i tng Factory

  • Rmiregistry

    DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )My chFactory ObjectObject AObject BChng trnh khch54321AB

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )2. Ci t ng dng Factory:Gi s chng ta c i tng FactoryServerImpl dng to ra hai i tng con: NewsImpl dng ly v thng tin v TimerImpl dng ly ngy. Chng ta c m hnh sau:Rmiregistry

    My chFactoryServerImplNewsimplTimerImplClient54321AB

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )//Timer.java//TimerImpl.java

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )//News.java//NewsImpl.java

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )//FactoryService.java

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )//FactoryServiceImpl.java

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )//Setup.java

  • DNG MT I TNG SN SINH NHIU I TNG ( FACTORYOBJECT )//Client.java

  • K THUT GI I TNG XA BNG PHNG PHP NG ( DYNAMIC METHOD INVOKE )