Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator03 [2015/11/06 07:32]
Andrei Roșu-Cojocaru [Clase și Interfețe la distanță]
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 221: Line 223:
 import java.rmi.server.UnicastRemoteObject;​ import java.rmi.server.UnicastRemoteObject;​
  
-import ro.pub.cs.aipi.lab03.businesslogic.BookManager; +import ro.pub.cs.aipi.lab03.businesslogic.*Manager; 
-import ro.pub.cs.aipi.lab03.businesslogic.BookManagerInterface;​ +import ro.pub.cs.aipi.lab03.businesslogic.*ManagerInterface;
-import ro.pub.cs.aipi.lab03.businesslogic.BookPresentationManager;​ +
-import ro.pub.cs.aipi.lab03.businesslogic.BookPresentationManagerInterface;​ +
-import ro.pub.cs.aipi.lab03.businesslogic.WriterManager;​ +
-import ro.pub.cs.aipi.lab03.businesslogic.WriterManagerInterface;+
 import ro.pub.cs.aipi.lab03.general.Constants;​ import ro.pub.cs.aipi.lab03.general.Constants;​
  
Line 234: 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 299: Line 296:
  
 Lansarea în execuţie a serverului se face prin comanda: Lansarea în execuţie a serverului se face prin comanda:
-  * Linux <​code ​bash> +  * Linux <​code>​ 
-student@aipi2015:​~$ java -classpath .:​libs/​bookstore-common.jar:​libs/​bookstore-bookmanager.jar:libs/​bookstore-bookpresentationmanager.jar:​libs/​bookstore-writermanager.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-bookmanager.jar file:///<​absolute_path>/​03-BookStore-RMI-Server/​libs/​bookstore-bookpresentationmanager.jar file:///<​absolute_path>/​03-BookStore-RMI-Server/​libs/​bookstore-writermanager.jar" -Djava.rmi.server.hostname=localhost -Djava.security.policy=configuration/​policy ro.pub.cs.aipi.lab03.main.BookStore+student@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>​
-C:​\Users\Aipi2015>​ java -classpath .;​libs/​bookstore-common.jar;​libs/​bookstore-bookmanager.jar;libs/​bookstore-bookpresentationmanager.jar;​libs/​bookstore-writermanager.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-bookmanager.jar file:///<​absolute_path>/​03-BookStore-RMI-Server/​libs/​bookstore-bookpresentationmanager.jar file:///<​absolute_path>/​03-BookStore-RMI-Server/​libs/​bookstore-writermanager.jar" -Djava.rmi.server.hostname=localhost -Djava.security.policy=configuration/​policy ro.pub.cs.aipi.lab03.main.BookStore+  * Windows <​code>​ 
 +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 330: Line 330:
 import ro.pub.cs.aipi.lab03.general.Constants;​ import ro.pub.cs.aipi.lab03.general.Constants;​
 import ro.pub.cs.aipi.lab03.general.Utilities;​ import ro.pub.cs.aipi.lab03.general.Utilities;​
-import ro.pub.cs.aipi.lab03.result.ResultType1;​ +import ro.pub.cs.aipi.lab03.result.*Information;
-import ro.pub.cs.aipi.lab03.result.ResultType2;+
  
 public class *ManagerClient { public class *ManagerClient {
Line 356: Line 355:
         switch (option) {         switch (option) {
           case Constants.OPTION_1:​           case Constants.OPTION_1:​
-            Utilities.displayResults(service.method1(), ​ResultType1.class);+            Utilities.displayResults(service.method1(), ​*Information.class);
             break;             break;
           case Constants.OPTION_2:​           case Constants.OPTION_2:​
-            Utilities.displayResults(service.method2(), ​ResultType2.class);+            Utilities.displayResults(service.method2(), ​*Information.class);
             break;             break;
           // ...           // ...
Line 392: Line 391:
 student@aipi2015:​~$ java -classpath .:​libs/​bookstore-common.jar:​libs/​bookstore-*manager.jar -Djava.rmi.server.codebase="​file:///<​absolute_path>/​03-BookStore-RMI-Client-*Manager/​libs/​bookstore-common.jar file:///<​absolute_path>/​03-BookStore-RMI-Client-*Manager/​libs/​bookstore-*manager.jar"​ -Djava.security.policy=configuration/​policy ro.pub.cs.aipi.lab03.main.*ManagerClient student@aipi2015:​~$ java -classpath .:​libs/​bookstore-common.jar:​libs/​bookstore-*manager.jar -Djava.rmi.server.codebase="​file:///<​absolute_path>/​03-BookStore-RMI-Client-*Manager/​libs/​bookstore-common.jar file:///<​absolute_path>/​03-BookStore-RMI-Client-*Manager/​libs/​bookstore-*manager.jar"​ -Djava.security.policy=configuration/​policy ro.pub.cs.aipi.lab03.main.*ManagerClient
 </​code>​ </​code>​
- * Windows <​code>​+  ​* Windows <​code>​
 C:​\Users\Aipi2015>​ java -classpath .;​libs/​bookstore-common.jar;​libs/​bookstore-*manager.jar -Djava.rmi.server.codebase="​file:///<​absolute_path>/​03-BookStore-RMI-Client-*Manager/​libs/​bookstore-common.jar file:///<​absolute_path>/​03-BookStore-RMI-Client-*Manager/​libs/​bookstore-*manager.jar"​ -Djava.rmi.server.hostname=localhost -Djava.security.policy=configuration/​policy ro.pub.cs.aipi.lab03.main.*ManagerClient C:​\Users\Aipi2015>​ java -classpath .;​libs/​bookstore-common.jar;​libs/​bookstore-*manager.jar -Djava.rmi.server.codebase="​file:///<​absolute_path>/​03-BookStore-RMI-Client-*Manager/​libs/​bookstore-common.jar file:///<​absolute_path>/​03-BookStore-RMI-Client-*Manager/​libs/​bookstore-*manager.jar"​ -Djava.rmi.server.hostname=localhost -Djava.security.policy=configuration/​policy ro.pub.cs.aipi.lab03.main.*ManagerClient
 </​code>​ </​code>​
Line 516: 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 524: 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 621: 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]]
laboratoare/laborator03.1446787942.txt.gz · Last modified: 2015/11/06 07:32 by Andrei Roșu-Cojocaru
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0