User Tools

Site Tools


tanszek:oktatas:informacios_rendszerek_integralasa:java_rmi

Differences

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

Link to this comparison view

Next revision
Previous revision
tanszek:oktatas:informacios_rendszerek_integralasa:java_rmi [2015/03/03 11:37] – külső szerkesztés 127.0.0.1tanszek:oktatas:informacios_rendszerek_integralasa:java_rmi [2024/03/26 18:26] (current) knehez
Line 1: Line 1:
 ===== Egyszerű Java-RMI példa ===== ===== Egyszerű Java-RMI példa =====
 +
 +Először is, készítsünk egy interakciós diagramot, ami bemutatja, hogyan kommunikál egymással a **Client** és a **RObject** a **RegisterService**-en keresztül:
 +
 +<mermaid>
 +sequenceDiagram
 +    participant C as Client
 +    participant RS as RegisterService
 +    participant RO as RObject
 +    participant RMI as RMI Registry
 +
 +    RS->>RMI: Register RObject
 +    RMI-->>RS: RObject Registered
 +    C->>RMI: Lookup RObjectServer
 +    RMI-->>C: Return RObject
 +    C->>RO: primitiveArg(2012)
 +    RO-->>C: Acknowledge
 +    C->>RO: argumentByValue(2012)
 +    RO-->>C: Acknowledge
 +</mermaid>
 +
 +Ez a diagram szemlélteti a folyamat lépéseit: a RegisterService regisztrálja az RObject-et az RMI Registry-ben, a Client lekérdezi a távoli objektumot, majd használja annak funkcióit.
 +
 +Most pedig nézzük meg, hogyan néz ki ez a rendszer egy struktúra diagramon, ami bemutatja a komponensek és azok kapcsolatait:
 +
 +<mermaid>
 +graph TD
 +    subgraph "RMI Registry"
 +      RO[RObject Interface]
 +    end
 +
 +    subgraph "Server Side"
 +      ROS[RObjectImpl] -- Implements --> RO
 +    end
 +
 +    subgraph "Client Side"
 +      C[Client] -- Uses --> RO
 +    end
 +
 +    RegisterService -- Registers --> RO
 +    C -- Looks up --> RO
 +    C -- Calls methods on --> ROS
 +</mermaid>
 +
 +A struktúra diagram világosan ábrázolja a rendszer különböző részeit és azok közötti kapcsolatokat:
 +
 +A Server Side rész tartalmazza az **RObjectImpl** implementációt, amely megvalósítja az **RObject** interfészt. Az **RMI Registry** regisztrálja az interfészt, lehetővé téve, hogy a **Client Side**-on lévő **Client** megtalálja és használja azt.
 +A **Client** a távoli objektum (ROS) metódusait hívja meg, ami ábrázolja a két fő műveletet: egy primitív és egy érték szerinti paraméter átadást.
 +
 +**Megvalósítás:**
 +
 +Telepítsük a gradle-t innen: https://gradle.org/releases/
 +A //bin// könyvtárat adjuk hozzá a //PATH//-hoz.
 +
 +A teljes forráskód elérhető itt:
 +<code>
 +git clone https://github.com/knehez/isi.git
 +cd java_rmi
 +</code>
 +
 +Nyissunk két terminált, az egyikben:
 +
 +<code>
 +gradle runRegisterService
 +</code>
 +
 +A másikban:
 +<code>
 +gradle run
 +</code>
 +
 +A program részletesen:
  
 1.) Definiáljuk az RObject interfészeket, mindkettő implementálja a Remote interfészt 1.) Definiáljuk az RObject interfészeket, mindkettő implementálja a Remote interfészt
  
-  import java.rmi.*; +<sxh java> 
-   +package org.ait; 
-  public interface RObject extends Remote { +import java.rmi.*; 
-    // egyszerű paraméterátadás + 
-    void primitiveArg(int num) throws RemoteException; +public interface RObject extends Remote { 
-     +  // egyszerű paraméterátadás 
-    // érték szerinti paraméterátadás +  void primitiveArg(int num) throws RemoteException;
-    void argumentByValue(Integer num) throws RemoteException; +
-  }+
      
 +  // érték szerinti paraméterátadás
 +  void argumentByValue(Integer num) throws RemoteException;
 +}
 +</sxh>  
  
 2.) Implementáljuk a távoli objektumok kódját 2.) Implementáljuk a távoli objektumok kódját
  
-  import java.rmi.RemoteException; +<sxh java> 
-  import java.rmi.server.UnicastRemoteObject;+package org.ait; 
 +import java.rmi.RemoteException; 
 +import java.rmi.server.UnicastRemoteObject; 
 + 
 +public class RObjectImpl extends UnicastRemoteObject implements RObject { 
 +      private static final long serialVersionUID = 6350331764929058681L; 
 +      public RObjectImpl() throws RemoteException { 
 +      } 
      
-  public class RObjectImpl extends UnicastRemoteObject implements RObject { +      @Override 
-        private static final long serialVersionUID = 6350331764929058681L; +      public void primitiveArg(int num) throws RemoteException { 
-        public RObjectImpl() throws RemoteException { +         System.out.println(num); 
-        }  +      
-     + 
-        @Override +      @Override 
-        public void primitiveArg(int num) throws RemoteException { +      public void argumentByValue(Integer num) throws RemoteException { 
-           System.out.println(num); +         System.out.println(num); 
-        +      
-   +} 
-        @Override +</sxh>
-        public void argumentByValue(Integer num) throws RemoteException { +
-           System.out.println(num); +
-        +
-  }+
  
-3.) Indítsuk el az RMI registry-t. Ez egy Java JDK komponens, elindítani a létrehozott projekt /bin könyvtárából kell.+3.) Indítsuk el az RMI registry-t. Ez egy Java JDK komponens, elindítani a létrehozott projekt **/bin** könyvtárából kell.
  
   > rmiregistry.exe      > rmiregistry.exe   
Line 41: Line 117:
 4.) Hozzuk létre egy példányát a távoli objektumnak és kössük hozzá a registry-hez 4.) Hozzuk létre egy példányát a távoli objektumnak és kössük hozzá a registry-hez
  
-  import java.rmi.Naming; +<sxh java> 
-   +package org.ait; 
-  import org.ait.RObject+ 
-  import org.ait.RObjectImpl+import java.rmi.Naming
-   + 
-   +public class RegisterService {
-  public class RegisterService {+
  /**  /**
  * @param args  * @param args
Line 53: Line 128:
  public static void main(String[] args) {  public static void main(String[] args) {
  try {  try {
-   RObject robj = new RObjectImpl(); + RObject robj = new RObjectImpl(); 
-   Naming.rebind("rmi://localhost:1099/RObjectServer", robj); + Naming.rebind("rmi://localhost:1099/RObjectServer", robj); 
-                          System.out.println("Registered..."); + System.out.println("Registered..."); 
- } catch (Exception e) { + } catch (Exception e) { 
-   e.printStackTrace(); + e.printStackTrace(); 
- }+ }
  }  }
-  }+} 
 +</sxh> 
 + 
 +Indítsuk el a RegisterService-t, ha fut a rmiregistry, csak akkor fog tudni regisztrálni.
  
 5.) Használjuk a távoli objektumot 5.) Használjuk a távoli objektumot
  
-  import java.rmi.Naming; +Indítsuk el az alábbi kódot. 
-   + 
-  public class Client { +<sxh java> 
-      public static void main(String[] args) { +package org.ait; 
-          try { + 
-              // Távoli objektum lekérése a registry-ből +import java.rmi.Naming; 
-              RObject robj = (RObject) Naming + 
-                      .lookup("rmi://localhost:1099/RObjectServer"); +public class Client { 
-   + public static void main(String[] args) { 
-              // Egyszerű argumentum + try { 
-              robj.primitiveArg(2012); + // Távoli objektum lekérése a registry-ből 
-   + RObject robj = (RObject) Naming.lookup("rmi://localhost:1099/RObjectServer"); 
-              // Serilaizált argumentum + 
-              robj.argumentByValue(new Integer(2012)); + // Egyszerű argumentum 
-   + robj.primitiveArg(2012); 
-          } catch (Exception e) { + 
-              e.printStackTrace(); + // Serilaizált argumentum 
-              + robj.argumentByValue(new Integer(2012)); 
-          + 
-      + } catch (Exception e) { 
-  }+ e.printStackTrace(); 
 +
 +
 +
 +} 
 +</sxh>
  
  
tanszek/oktatas/informacios_rendszerek_integralasa/java_rmi.1425382620.txt.gz · Last modified: 2015/03/03 11:37 by 127.0.0.1