This page allows you to examine the variables generated by the Edit Filter for an individual change.

Variables generated for this change

VariableValue
Name of the user account (user_name)
'145.92.26.239'
Page ID (page_id)
43284
Page namespace (page_namespace)
0
Page title without namespace (page_title)
'Java remote method invocation'
Full page title (page_prefixedtitle)
'Java remote method invocation'
Action (action)
'edit'
Edit summary/reason (summary)
'fixed'
Whether or not the edit is marked as minor (no longer in use) (minor_edit)
false
Old page wikitext, before the edit (old_wikitext)
'[[Image:RMI-Stubs-Skeletons.JPG|thumb|right|400px|A typical implementation model of Java-RMI using [[Class stub|stub]] and [[Class skeleton|skeleton]] objects. Java 2 SDK, Standard Edition, v1.2 removed the need for a skeleton.]] The '''Java Remote Method Invocation''' [[Application Programming Interface]] (API), or '''Java RMI''', is a [[Java (programming language)|Java]] application programming interface that performs the object-oriented equivalent of [[remote procedure call]]s (RPC). # The original implementation depends on [[Java Virtual Machine]] (JVM) class representation mechanisms and it thus only supports making calls from one JVM to another. The protocol underlying this Java-only implementation is known as Java Remote Method Protocol ([[JRMP]]). # In order to support code running in a non-JVM context, a [[Common Object Request Broker Architecture|CORBA]] version was later developed. Usage of the term '''RMI''' may denote solely the programming interface or may signify both the API and [[JRMP]], whereas the term [[RMI-IIOP]] (read: RMI over [[IIOP]]) denotes the RMI interface delegating most of the functionality to the supporting [[CORBA]] implementation. The programmers of the original RMI API generalized the code somewhat to support different implementations, such as a [[Hypertext Transfer Protocol|HTTP]] transport. Additionally, the ability to pass arguments "by value" was added to CORBA in order to support the RMI interface. Still, the RMI-IIOP and JRMP implementations do not have fully identical interfaces. RMI functionality comes in the package {{Javadoc:SE|package=java.rmi|java/rmi}}, while most of Sun's implementation is located in the <code>sun.rmi</code> package. Note that with Java versions before Java 5.0 developers had to compile RMI stubs in a separate compilation step using <code>'''rmic'''</code>. Version 5.0 of Java and beyond no longer require this step. [[Jini]] offers a more advanced version of RMI in Java. It functions similarly but provides more advanced searching capabilities and mechanisms for distributed object applications.<ref>Taylor, Ian J. From P2P to Web Services and Grids - Peers in a Client/Server World. Springer, 2005 </ref> ==Example== The following classes implement a simple client-server program using RMI that displays a message. '''<code>RmiServer </code> class'''&mdash;Listens to RMI requests and implements the interface which is used by the client to invoke remote methods. <source lang=java> import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; import java.rmi.server.UnicastRemoteObject; import java.rmi.registry.*; public class RmiServer extends UnicastRemoteObject implements RmiServerIntf { static public final String MESSAGE = "Hello world"; public RmiServer() throws RemoteException { super(); } public String getMessage() { return MESSAGE; } public static void main(String args[]) { System.out.println("RMI server started"); // Create and install a security manager if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); System.out.println("Security manager installed."); } else System.out.println("Security manager already exists."); try //special exception handler for registry creation { LocateRegistry.createRegistry(1099); System.out.println("java RMI registry created."); } catch (RemoteException e) { //do nothing, error means registry already exists System.out.println("java RMI registry already exists."); } try { //Instantiate RmiServer RmiServer obj = new RmiServer(); // Bind this object instance to the name "RmiServer" Naming.rebind("//localhost/RmiServer", obj); System.out.println("PeerServer bound in registry"); } catch (Exception e) { System.err.println("RMI server exception:"); e.printStackTrace(); } } } </source> '''<code>RmiServerIntf </code> class'''&mdash;Defines the interface that is used by the client and implemented by the server. <source lang=java> import java.rmi.Remote; import java.rmi.RemoteException; public interface RmiServerIntf extends Remote { public String getMessage() throws RemoteException; } </source> '''<code>RmiClient </code> class'''&mdash;This is the client which gets the reference to the remote object and invokes its method to get a message. <source lang=java> import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; public class RmiClient { // "obj" is the reference of the remote object RmiServerIntf obj = null; public String getMessage() { try { obj = (RmiServerIntf)Naming.lookup("//localhost/RmiServer"); return obj.getMessage(); } catch (Exception e) { System.err.println("RmiClient exception: " + e.getMessage()); e.printStackTrace(); return e.getMessage(); } } public static void main(String args[]) { // Create and install a security manager if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } RmiClient cli = new RmiClient(); System.out.println(cli.getMessage()); } } </source> Before running this subj, we need to make 'Stub' file of interface we used. For this task we have RMI compiller - 'rmic' *Note: we make stub file from *.class with implementation remote interface, not '*.java'* <source lang=dos> rmic RmiServer </source> '''<code>server.policy</code>'''&mdash;This file is required on the server to allow TCP/IP communication for the remote registry and for the RMI server. <source lang=java> grant { permission java.net.SocketPermission "127.0.0.1:*", "connect,resolve"; permission java.net.SocketPermission "127.0.0.1:*", "accept"; }; </source> The server.policy file should be used using the D switch of Java RTE, e.g.: <source lang=dos> java.exe -Djava.security.policy=server.policy RmiServer </source> '''<code>client.policy</code>'''&mdash;This file is required on the client to connect to RMI Server using TCP/IP. <source lang=java> grant { permission java.net.SocketPermission "127.0.0.1:*", "connect,resolve"; }; </source> '''<code>no.policy</code>'''&mdash;Also if you have a troubles with connecting, try this file for server or client. <source lang=java> grant { permission java.security.AllPermission; }; </source> ==See also== * [[Cajo project|Cajo]] * [[Serialization#Java|Serialization]] * [[Jini]] ==References== {{reflist}} ==External links== * [http://java.sun.com/docs/books/tutorial/rmi/index.html The Java RMI tutorial] - a good starting point to learn RMI. Also check the [http://java.sun.com/j2se/1.5.0/docs/guide/rmi/hello/hello-world.html Hello World in RMI] * [http://java.sun.com/developer/onlineTraining/rmi/RMI.html the Java RMI online training] - Very good for training JavaRMI and as reference * [http://java.sun.com/j2se/1.5.0/docs/guide/rmi/index.html The RMI page in the JDK docs] * {{Javadoc:SE|package=java.rmi|java/rmi}} (Sun's Java API Reference for the RMI package) * [http://forum.java.sun.com/forum.jspa?forumID=58 The RMI forum on java.sun.com] * {{cite paper | author= Wollrath, Ann | coauthors= Riggs, Roger; Waldo, Jim | title= A Distributed Object Model for the Java System | version= | pages= | publisher= | date= | doi= | url=http://pdos.csail.mit.edu/6.824/papers/waldo-rmi.pdf | format= PDF | accessdate= 2009-02-11}} [[Category:Java platform|RMI]] [[Category:Remote procedure call]] [[ar:تقنية استدعاء الطرائق البعادي]] [[cs:Java remote method invocation]] [[de:Remote Method Invocation]] [[es:Java Remote Method Invocation]] [[fr:Remote method invocation (Java)]] [[ko:자바 원격 함수 호출]] [[it:Remote Method Invocation]] [[lt:RMI]] [[nl:Remote method invocation]] [[ja:Java RMI]] [[pl:RMI]] [[pt:RMI]] [[ru:RMI]] [[sv:Remote Method Invocation]] [[zh:Java RMI]]'
New page wikitext, after the edit (new_wikitext)
'== <sup><big>'''YOU SUCK!'''</big></sup> =='
Whether or not the change was made through a Tor exit node (tor_exit_node)
0
Unix timestamp of change (timestamp)
1285155907