Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
laboratoare:laborator03 [2015/11/06 08:02] Andrei Roșu-Cojocaru |
laboratoare:laborator03 [2015/12/01 15:07] (current) Andrei Roșu-Cojocaru |
||
|---|---|---|---|
| Line 139: | Line 139: | ||
| import ro.pub.cs.aipi.lab03.result.*Information; | import ro.pub.cs.aipi.lab03.result.*Information; | ||
| - | public interface BookManagerInterface extends Remote { | + | public interface *ManagerInterface extends Remote { |
| public List<*Information> method1(int param) throws RemoteException; | public List<*Information> method1(int param) throws RemoteException; | ||
| public List<*Information> method2(String param) throws RemoteException; | public List<*Information> method2(String param) throws RemoteException; | ||
| } | } | ||
| </file> | </file> | ||
| + | |||
| + | <note tip>Prin noteția * se înțelege faptul că acest caracter poate fi înlocuit cu orice unitate de gestiune a unui serviciu, respectiv cu orice entitate persistentă.</note> | ||
| Prin extinderea interfeţei ''java.rmi.Remote'' se specifică faptul că metodele declarate de interfaţa ''Reservation'' vor putea fi apelate din altă maşină virtuală Java. Orice obiect care implementează interfaţa ''Reservation'' va putea fi considerat un obiect "la distanţă". | Prin extinderea interfeţei ''java.rmi.Remote'' se specifică faptul că metodele declarate de interfaţa ''Reservation'' vor putea fi apelate din altă maşină virtuală Java. Orice obiect care implementează interfaţa ''Reservation'' va putea fi considerat un obiect "la distanţă". | ||
| Line 230: | Line 232: | ||
| if (System.getSecurityManager() == null) { | if (System.getSecurityManager() == null) { | ||
| System.setSecurityManager(new SecurityManager()); | System.setSecurityManager(new SecurityManager()); | ||
| - | } | + | } |
| - | try { | + | try { |
| - | Registry registry = LocateRegistry.getRegistry(); | + | Registry registry = LocateRegistry.getRegistry(); |
| - | + | String *ManagerServiceName = Constants.*_MANAGER_SERVICE_NAME; | |
| - | String *ManagerServiceName = Constants.*_MANAGER_SERVICE_NAME; | + | *ManagerInterface *ManagerService = new *Manager(); |
| - | *ManagerInterface *ManagerService = new *Manager(); | + | *ManagerInterface *ManagerProxy = (*ManagerInterface)UnicastRemoteObject.exportObject(*ManagerService, 0); |
| - | *ManagerInterface *ManagerProxy = (*ManagerInterface)UnicastRemoteObject.exportObject(*ManagerService, 0); | + | registry.rebind(*ManagerServiceName, *ManagerProxy); |
| - | registry.rebind(*ManagerServiceName, *ManagerProxy); | + | System.out.format("[%s] successfully bounded%n", Constants.*_MANAGER_SERVICE_NAME); |
| - | System.out.format("[%s] successfully bounded%n", Constants.*_MANAGER_SERVICE_NAME); | + | } catch (Exception exception) { |
| - | } catch (Exception exception) { | + | |
| System.out.println("An exception has occurred: " + exception.getMessage()); | System.out.println("An exception has occurred: " + exception.getMessage()); | ||
| if (Constants.DEBUG) { | if (Constants.DEBUG) { | ||
| Line 301: | Line 302: | ||
| C:\Users\Aipi2015> java -classpath .;libs/bookstore-common.jar;libs/bookstore-*manager.jar;... -Djava.rmi.server.codebase="file:///<absolute_path>/03-BookStore-RMI-Server/libs/bookstore-common.jar file:///<absolute_path>/03-BookStore-RMI-Server/libs/bookstore-*manager.jar ..." -Djava.rmi.server.hostname=localhost -Djava.security.policy=configuration/policy ro.pub.cs.aipi.lab03.main.BookStore | C:\Users\Aipi2015> java -classpath .;libs/bookstore-common.jar;libs/bookstore-*manager.jar;... -Djava.rmi.server.codebase="file:///<absolute_path>/03-BookStore-RMI-Server/libs/bookstore-common.jar file:///<absolute_path>/03-BookStore-RMI-Server/libs/bookstore-*manager.jar ..." -Djava.rmi.server.hostname=localhost -Djava.security.policy=configuration/policy ro.pub.cs.aipi.lab03.main.BookStore | ||
| </code> | </code> | ||
| + | |||
| + | <note tip>Prin notația ... se înțelege faptul că în continuare pot urma și alte elemente de același tip.</note> | ||
| Proprietatea ''java.rmi.server.codebase'' specifică locaţia de unde pot fi încărcate definiţii pentru clasele provenind de la server. Dacă în locul unei arhive se specifică o ierarhie de directoare, aceasta trebuie încheiată prin caracterul ''’/’''. În situația în care sunt incluse mai multe fișiere, acestea trebuie să fie delimitate prin separatorul spațiu. Pentru fiecare resursă trebuie indicat și protocoul prin care aceasta este accesată (''file:%%///%%'' sau ''http:%%//%%''). | Proprietatea ''java.rmi.server.codebase'' specifică locaţia de unde pot fi încărcate definiţii pentru clasele provenind de la server. Dacă în locul unei arhive se specifică o ierarhie de directoare, aceasta trebuie încheiată prin caracterul ''’/’''. În situația în care sunt incluse mai multe fișiere, acestea trebuie să fie delimitate prin separatorul spațiu. Pentru fiecare resursă trebuie indicat și protocoul prin care aceasta este accesată (''file:%%///%%'' sau ''http:%%//%%''). | ||
| Line 512: | Line 515: | ||
| student@aipi2015:~$ ./startRmiRegistry.sh | student@aipi2015:~$ ./startRmiRegistry.sh | ||
| </code> | </code> | ||
| + | |||
| + | <note tip>În situația în care scriptul nu are drepturi de execuție, acestea vor fi acordate <code> | ||
| + | student@aipi2015:~$ chmod +x startRmiRegistry.sh | ||
| + | </code></note> | ||
| + | |||
| * Windows <code> | * Windows <code> | ||
| C:\Users\Aipi2015> startRmiRegistry.bat | C:\Users\Aipi2015> startRmiRegistry.bat | ||
| Line 520: | Line 528: | ||
| Precizarea căii către directorul ''bin'' al SDK-ului Java în variabila de mediu ''PATH'' se realizează astfel: | Precizarea căii către directorul ''bin'' al SDK-ului Java în variabila de mediu ''PATH'' se realizează astfel: | ||
| * Linux <code> | * Linux <code> | ||
| - | export PATH=$PATH:/usr/local/java/jdk1.8.0_60 | + | export PATH=$PATH:/usr/local/java/jdk1.8.0_60/bin |
| </code> | </code> | ||
| * Windows: //Computer Properties// → //Control Panel Home/Advanced System Properties// → //System Properties/Advanced/Environment Variables// → //System Variables / Path / Edit// <code bash> | * Windows: //Computer Properties// → //Control Panel Home/Advanced System Properties// → //System Properties/Advanced/Environment Variables// → //System Variables / Path / Edit// <code bash> | ||
| Line 617: | Line 625: | ||
| [[http://docs.oracle.com/javase/tutorial/rmi/index.html|The Java Tutorials - Trail: RMI]]\\ | [[http://docs.oracle.com/javase/tutorial/rmi/index.html|The Java Tutorials - Trail: RMI]]\\ | ||
| [[http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html|Remote Method Invocation Home]]\\ | [[http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html|Remote Method Invocation Home]]\\ | ||
| - | [[http://www.genady.net/rmi/v20/downloads.html|RMI Plug-in for Eclipse v2.0]] | + | [[http://www.genady.net/rmi/v20/downloads.html|RMI Plug-in for Eclipse v2.0]]\\ |
| + | [[http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/codebase.html|Dynamic Code Downloading using Java RMI]] | ||
| ===== Soluții ===== | ===== Soluții ===== | ||
| - | TODO | + | [[https://github.com/aipi2015/Laborator03/tree/master/solutions/eclipse|Proiect Eclipse]]\\ |
| + | [[https://github.com/aipi2015/Laborator03/tree/master/solutions/netbeans|Proiect NetBeans]] | ||
