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 ).

AIX and SOLARIS maintenance commands

AIX and SOLARIS uname unix name, check which unix is used uname // OS name uname -r // OS version uname -a // OS name, host, version df info about disk space df -v // percent of used blocks df -vk // 1024-byte blocks df -vm // MB blocks df -gm // GB blocks AIX topas statistics about the activity on the local system // all statistics topas // -w WLM - WorkLoad Management topas -w SOLARIS prstat identify which processes are consuming the CPU // -s cpu flag sorts by CPU usage (default), -n 5 flag restricts top five processes prstat -s cpu -n 5 // -a summary of a consumption of resources by an user prstat -s cpu -a prstat -s cpu -a -n 5 ps process status ps -eo pid,pmem,vsz,rss,comm | sort -rnk2 | head