tanszek:oktatas:informacios_rendszerek_integralasa:java_rmi
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
tanszek:oktatas:informacios_rendszerek_integralasa:java_rmi [2015/03/03 11:37] – külső szerkesztés 127.0.0.1 | tanszek: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: | ||
+ | |||
+ | < | ||
+ | sequenceDiagram | ||
+ | participant C as Client | ||
+ | participant RS as RegisterService | ||
+ | participant RO as RObject | ||
+ | participant RMI as RMI Registry | ||
+ | |||
+ | RS->> | ||
+ | RMI-->> | ||
+ | C->> | ||
+ | RMI-->> | ||
+ | C->> | ||
+ | RO-->> | ||
+ | C->> | ||
+ | RO-->> | ||
+ | </ | ||
+ | |||
+ | Ez a diagram szemlélteti a folyamat lépéseit: a RegisterService regisztrálja az RObject-et az RMI Registry-ben, | ||
+ | |||
+ | Most pedig nézzük meg, hogyan néz ki ez a rendszer egy struktúra diagramon, ami bemutatja a komponensek és azok kapcsolatait: | ||
+ | |||
+ | < | ||
+ | graph TD | ||
+ | subgraph "RMI Registry" | ||
+ | RO[RObject Interface] | ||
+ | end | ||
+ | |||
+ | subgraph " | ||
+ | ROS[RObjectImpl] -- Implements --> RO | ||
+ | end | ||
+ | |||
+ | subgraph " | ||
+ | C[Client] -- Uses --> RO | ||
+ | end | ||
+ | |||
+ | RegisterService -- Registers --> RO | ||
+ | C -- Looks up --> RO | ||
+ | C -- Calls methods on --> ROS | ||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | 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:// | ||
+ | A //bin// könyvtárat adjuk hozzá a // | ||
+ | |||
+ | A teljes forráskód elérhető itt: | ||
+ | < | ||
+ | git clone https:// | ||
+ | cd java_rmi | ||
+ | </ | ||
+ | |||
+ | Nyissunk két terminált, az egyikben: | ||
+ | |||
+ | < | ||
+ | gradle runRegisterService | ||
+ | </ | ||
+ | |||
+ | A másikban: | ||
+ | < | ||
+ | gradle run | ||
+ | </ | ||
+ | |||
+ | A program részletesen: | ||
1.) Definiáljuk az RObject interfészeket, | 1.) Definiáljuk az RObject interfészeket, | ||
- | | + | <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; | ||
+ | } | ||
+ | </ | ||
2.) Implementáljuk a távoli objektumok kódját | 2.) Implementáljuk a távoli objektumok kódját | ||
- | | + | <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 { | + | |
- | private static final long serialVersionUID = 6350331764929058681L; | + | public void primitiveArg(int num) throws RemoteException { |
- | public RObjectImpl() throws RemoteException { | + | |
- | } | + | } |
- | + | ||
- | | + | @Override |
- | public void primitiveArg(int num) throws RemoteException { | + | public void argumentByValue(Integer num) throws RemoteException { |
- | | + | |
- | } | + | } |
- | + | } | |
- | @Override | + | </ |
- | public void argumentByValue(Integer num) throws RemoteException { | + | |
- | | + | |
- | } | + | |
- | } | + | |
- | 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 |
> 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 | + | < |
- | + | package | |
- | import | + | |
- | import | + | import |
- | + | ||
- | | + | 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(); |
- | | + | Naming.rebind(" |
- | System.out.println(" | + | System.out.println(" |
- | } catch (Exception e) { | + | } catch (Exception e) { |
- | | + | e.printStackTrace(); |
- | } | + | } |
} | } | ||
- | | + | } |
+ | </ | ||
+ | |||
+ | Indítsuk el a RegisterService-t, | ||
5.) Használjuk a távoli objektumot | 5.) Használjuk a távoli objektumot | ||
- | | + | 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 | + | |
- | | + | 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(" | |
- | // 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(); |
+ | ; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
tanszek/oktatas/informacios_rendszerek_integralasa/java_rmi.1425382620.txt.gz · Last modified: 2015/03/03 11:37 by 127.0.0.1