Skip to main content

RMI Server and Client implementation

1. Interface
  • interface extends Remote class
  • every method throws RemoteException
package com.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Date;

public interface RmiInterface extends Remote {

 Date getDate() throws RemoteException;
}
2. RMI server implementation
  • class extends UnicastRemoteObject
  • class implements custom RmiInterface
  • class creates RMI registry and binds it to localhost and specified port
package com.rmi.server;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;

import com.rmi.RmiInterface;

public class RMIServer extends UnicastRemoteObject implements RmiInterface {

 protected RMIServer() throws RemoteException, AlreadyBoundException,
   UnknownHostException {
     
  String registryHost = InetAddress.getLocalHost().toString();
  String registryName = "serverRMI";
  int registryPort = 1234;
  
  System.out.println("Starting RMI server on host: " + registryHost
    + ", port: " + registryPort + " with name: " + registryName);
  
  Registry registry = LocateRegistry.createRegistry(registryPort);
  registry.bind(registryName, this);
 }

 @Override
 public Date getDate() {
  return new Date();
 }

 public static void main(String[] args) throws RemoteException,
   UnknownHostException, AlreadyBoundException {
  RMIServer server = new RMIServer();
 }
}
3. RMI client implementation
  • class gets RMI registry
  • class invokes RMI server method
package com.rmi.client;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Date;

import com.rmi.RmiInterface;

public class RMIClient {

 public static void main(String[] args) throws RemoteException,
   NotBoundException {
   
  String registryHost = "127.0.0.1";
  String registryName = "serverRMI";
  int registryPort = 1234;
  
  Registry registry = LocateRegistry.getRegistry(registryHost,
    registryPort);
  RmiInterface rmiServer = (RmiInterface) registry.lookup(registryName);
  Date date = rmiServer.getDate();
  
  System.out.println("Date from RMI server: " + date);
 }
}

Comments

Popular posts from this blog

Convert Source to String

import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import javax.xml.transform.Source; import javax.xml.transform.sax.SAXSource; import org.xml.sax.InputSource; public class DataSourceTest { public static void main(String[] args) throws IOException { // created Source InputSource inputSource = new InputSource(new StringReader( " \n \n \n ")); Source source = new SAXSource(inputSource); // read Source SAXSource saxSource = (SAXSource) source; InputSource inputSourceReader = saxSource.getInputSource(); Reader reader = inputSourceReader.getCharacterStream(); BufferedReader buffereRreader = new BufferedReader(reader); String read = null; while ((read = buffereRreader.readLine()) != null) { System.out.println(read); } } }

Deploying Axis2 web service as ROOT application on Tomcat

By default Axis2 services are available on http://host:8080/axis2/services/*. If you want to remove axis2/services part from the service endpoint and access your service by http://host:8080/serviceName/* 1. Overide default Axis2 servlet mapping services in web.xml file. AxisServlet /serviceName/* 2. Remove an application name value by deploying axis2 implementation (from war distribution axis2-1.X.X-war.zip ) as ROOT application. Info: War distribution contains application with above structure: axis2-web META-INF org WEB-INF     classes     conf     lib     modules     services         put here *.aar files to deploy WS     web.xml (manually created) web.xml file Apache-Axis2 AxisServlet Apache-Axis Servlet org.apache.axis2.transport.http.AxisServlet ...

ShutDownHook - the last breath of an application

ShutDownHook allows you to perform operations (e.g. close opened resources, remove temporary files and so on) just before virtual machine shuts down. A documentation says that JVM may shut down in two cases: program finishes execution normally when all threads finishes their work (except deamon-threads like garbage collector) virtual machine receives a termination signal (for example after sending kill signal under unix or ctrl + C key combination under windows) Below is an example which will start endless loop which do nothing. But an important thing in this code is a part where shutDownHook is added. When an termination signal will be send to JVM a code from a run() method will be executed just before JVM shuts down. public class ShutDownHook { public static void main(String[] args) { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { System.out.println("Close opened resources"); } }); while (true) { // do nothing } } }