Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Java remote method invocation
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Example== The following classes implement a simple client-server program using RMI that displays a message. ; <code>RmiServerIntf</code> interface : defines the interface that is used by the client and implemented by the server. This extends the {{Javadoc:SE|module=java.rmi|package=java.rmi|java/rmi|Remote}} interface, which serves to identify an implementing class as one with remotely-invokable methods. <syntaxhighlight lang=java> import java.rmi.Remote; import java.rmi.RemoteException; public interface RmiServerIntf extends Remote { String getMessage() throws RemoteException; } </syntaxhighlight> ; <code>RmiServer</code> class : listens to RMI requests and implements the interface which is used by the client to invoke remote methods. <syntaxhighlight lang=java> import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.registry.*; public class RmiServer extends UnicastRemoteObject implements RmiServerIntf { public static final String MESSAGE = "Hello World"; public RmiServer() throws RemoteException { super(0); // required to avoid the 'rmic' step, see below } public String getMessage() { return MESSAGE; } public static void main(String[] args) throws Exception { System.out.println("RMI server started"); 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."); } //Instantiate RmiServer RmiServer server = new RmiServer(); // Bind this object instance to the name "RmiServer" Naming.rebind("//localhost/RmiServer", server); System.out.println("PeerServer bound in registry"); } } </syntaxhighlight> ; <code>RmiClient</code> class : this is the client which gets the reference (a proxy) to the remote object living on the server and invokes its method to get a message. If the server object implemented java.io.Serializable instead of java.rmi.Remote, it would be serialized and passed to the client as a value.<ref>{{cite web |last1=Wilson |first1=M. Jeff |date=2000-11-10 |df=mdy |url=https://www.infoworld.com/article/2076234/get-smart-with-proxies-and-rmi.html |title=Get smart with proxies and RMI |work=[[JavaWorld]] |access-date=2020-07-18}}</ref> <syntaxhighlight lang=java> import java.rmi.Naming; public class RmiClient { public static void main(String[] args) throws Exception { RmiServerIntf server = (RmiServerIntf)Naming.lookup("//localhost/RmiServer"); System.out.println(server.getMessage()); } } </syntaxhighlight> Before running this example, we need to make a 'stub' file for the interface we used. For this task we have the RMI compiler - 'rmic' *Note: we make a stub file from the '*.class' file with the implementation of the remote interface, not from the '*.java' file. rmic RmiServer Note that since version 5.0 of J2SE, support for dynamically generated stub files has been added, and rmic is only provided for backwards compatibility with earlier runtimes,<ref>{{cite web|title=Java RMI Release Notes|url=http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/relnotes.html|publisher=Oracle|access-date=9 May 2012}}</ref> or for programs that don't provide an explicit port number (or zero) when exporting remote objects, which is required for generated stubs to be possible, as described in the Javadoc for {{Javadoc:SE|module=java.rmi|java/rmi/server|UnicastRemoteObject}}. See the comment in the constructor above.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)