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

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 } } }

scala Hello World

The code below prints Hello World! Hello.scala file (a name of file doesn't matter) object HelloWorld { def main(args: Array[String]) { println("Hello World!") } } Key word object is used to create a singleton object. To run this script use scala interpretor (check scala command line tools ).

Unix - useful command line tools

This post lists unix command line tools which are very helpful during a work with these systems. alias create alias for a command // use aliast to a command alias ls='ls -ltr' awk // split text into tokens using '.' separator echo testFile.txt | awk -F'.' '{print$2}' // prints 'txt' chmod set access privileges to a file // owner rwx, group r-x, others --- chmod 750 fileName.txt Meaning of numbers: owner, group, others (respectively) 4 - read 2 - write 1 - execute find search for files // search for all files in a current directory and display lines with a 'stringToFind' find . -name "*.*" | xargs grep 'stringToFind' // search for a file and skipp all info about errors find . -name 'testFile.txt' 2> /dev/null grep use regexp to display lines from a file // display all lines without a # sign grep ^[^#] testFile.txt // display all lines with a # sign grep ^# testFile.txt gzip compress and decompre...