J2EE Tutorial - Running RMI Example

J2EE Tutorial - Running RMI Example

Ads

J2EE Tutorial - Running RMI Example

     

greeter.java

import java.rmi.*;

public interface greeter extends Remote

{

   String  greetme(String s) throws RemoteException;

}

greeterimpl.java

import javax.rmi.PortableRemoteObject;

import javax.naming.*;

import java.rmi.*;

import java.rmi.server.*;

import greeter.*;

public class greeterimpl extends

   PortableRemoteObject implements greeter

{

  String s;

   public static void main(String args[])

   {

  try

  {

   Context initialNamingContext = new InitialContext(); 

//   System.setSecurityManager(new RMISecurityManager());

   greeterimpl  obj   =  new greeterimpl("sam");

   initialNamingContext.rebind("sam",obj);

   System.out.println("remote server ready!");

   System.out.println("sam is registered & waiting for call");

  }

  catch(Exception e1)

  {

  System.out.println("error"+e1);

  }

   }

   public greeterimpl(String a) throws RemoteException

   {

  s = " SUN'S RMI-IIOP(RMI-CORBA)  PROGRAM  WELCOMES .........";

   }

   public String  greetme(String   a) throws RemoteException

   {

   return s+ a;

   }

}

greeterclientservlet.java

import javax.servlet.*;

import java.io.*;

import javax.servlet.http.*;

import greeter.*;

import greeterimpl.*;

import _greeterimpl_Tie.*;

import java.rmi.*;

import java.rmi.server.*;

import javax.rmi.PortableRemoteObject;

import javax.naming.*;

import java.util.*;

public class greeterclientservlet  extends HttpServlet

{

  public void doPost(HttpServletRequest request,

  HttpServletResponse response)  throws 

   ServletException,IOException 

  {

   response.setContentType("text/html");

   PrintWriter out=response.getWriter();

  try

  {

  String   s1=request.getParameter("text1");

   Hashtable hash1 = new Hashtable();

  hash1.put("java.naming.factory.initial","com.sun.jndi.cosnaming.CNCtxFactory");

   hash1.put("java.naming.provider.url","iiop://localhost:900");

   Context context1 = new InitialContext(hash1);

  greeter  obj=

   (greeter)PortableRemoteObject.narrow(context1.lookup("sam"),greeter.class);

  String s = obj.greetme(s1);

  out.println("<html>");

  out.println("<body>");

  out.println(s);

  out.println("</body>");

  out.println("</html>");

  }

   catch(Exception e1)   {  out.println("error"+e1);   }

  }

}

greeterclientservlet.htm

<html>

<body>

<form method=post action="http://localhost:8080/servlet/greeterclientservlet">

ENTER NAME  <input type=text name="text1" size=20>

<br>

<input type=submit>

</form>

</body>

</html>

 

How to compile and run the RMI-IIOP program?

1) We require jndi package for running this program.

   We create a folder in c:\jdk1.3\bin\rmicorba.

2) We brought jndi folder into c:\jdk1.3\bin\rmicorba.

3) cd to c:\jdk1.3\bin\rmicorba.

4) set path=c:\windows;c:\windows\command;c:\jdk1.3\bin;

5) set classpath=c:\jdk1.3\bin\rmicorba

6) create greeter.java in this folder.

7)  compile  greeter.java  

8)  create and compile greeterimpl.java 

9)  MOST IMPORTANT STEP.

   >rmic  -iiop   greeterimpl

   (creates corba style stub and tie class files.)

10)  start tnameserv   //  ( this is transient name server)

  >tnameserv

11) Go to another window ,set path & classpath as before.

 start the server and register the remote object. (this line must be typed most carefully without break!) (continuously).

>java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory

-Djava.naming.provider.url=iiop://localhost  helloimpl

( -Djava means we are supplying runtime properties)

12) If every thing is done correctly , you will find the following

message in the console.

   'remote server ready!'

   'sam is registered and waiting for call'

13) Now compile greeterclientservlet.java

  We have to set classpath=%classpath%;c:\jsdk2.0\src

14) After compiling copy all the classfiles in c:\jdk1.3\bin\rmicorba folder to

   c:\tomcat\webapps\root\web-inf\classes   folder

15) copy greeterclientservlet.htm to c:\tomcat\webapps\root   directory.

16) Start the tomcat server as already seen.

17) type the URL as 'http://localhost:8080/greeterclientservlet.htm"

  in the browser.

18) We get  the form. Type your name ( say 'Thomas')  and submit.

19) We will get the greeting :

   " SUN'S RMI-IIOP(RMI-CORBA)  PROGRAM  WELCOMES ...Thomas"

20) Thus we have invoked the remote object's method in Corba style.

21)  So far so good. But how about the automatic generation of IDL for non-java end? This is the best part of RMI--IIOP,

   See step 9 listed above. We used the -iiop  flag  while invoking rmic  compiler.

   If we use  -idl flag instead, we get the idl file automatically generated.

   We can then distribute this idl file to other corba customers.

You would have noticed that , we have changed the order in which distributed order technologies in the j2ee basket were mentioned. Instaed of taking up JAVA-IDL after RMI, we took up RMI-IIOP. This way, we can easily compare RMI & RMI-IIOP.

   Just to complete the picture, we will now see the JAVA-IDL version of the same program and then on to the meat of J2EE (IE) EJB.

There are 4 files as follows:

   1) greeter.idl

   2) greeterserver.java

   3) greeterservlet.java

   4) greeterservlet.htm

 We begin with greeter.idl , which is the interface file written in OMG-IDL.

Let us edit this file in say, c:\idl   folder.

Set path for the dos window

c:\idl>set path=c:\windows\command;c:\jdk1.3\bin

Also set classpath:

c:\idl>set classpath=c:\idl

Create greeter.idl as given below.

greeter.idl

interface greeter

{

  string greetme(in string s);

};

 

We now use the idl compiler in jdk1.3 as follows:

c:\idl>idlj  -fall  greeter.idl

This command creates a number of java source files as follows:

  1) greeter.java

  2) _greeterImplBase.java

  3) _greeterStub.java

  4) greeterHelper.java

  5) greeterHolder.java

  6) greeterOperations.java

   These files are created in the same folder as greeter.idl because we have not specified 'module' in the idl file. This is a simple method.

Now, create greeterserver.java in the same folder as follows: 

greeterserver.java

import org.omg.CORBA.*;

import org.omg.CosNaming.*;

import java.io.*;

public class greeterserver

 {

  public static void main(String[] args)

   {

  try

   {

  ORB orb = ORB.init(args,null);

  greeterservant ref = new greeterservant();

  orb.connect(ref);

  org.omg.CORBA.Object   objRef =orb.resolve_initial_references("NameService");

  NamingContext  ncRef = NamingContextHelper.narrow(objRef);

  NameComponent  nc = new NameComponent("greeter","");

  NameComponent  path[] = {nc};

  ncRef.rebind(path,ref);

   System.out.println("server ready...waiting for client");

  java.lang.Object  sync = new java.lang.Object();

  synchronized(sync)

  {

  sync.wait();

  }

   }

   catch(Exception e1)

  {

   System.out.println("  "+e1);

  }

  }//main

  }//class

  //-------------

  class greeterservant extends _greeterImplBase

  {

   public String greetme(String s)

  {

   return "How are you....?"+s;

  }

  }

   Compile all the java files as follows:

   c:\idl>javac *.java

  This compiles all the java files in the folder.

   We now create the servlet file which is the client for the corba program.

greeterservlet.java

import org.omg.CORBA.*;

import org.omg.CosNaming.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

public class greeterservlet  extends HttpServlet

 {

  greeter   server;

  public void init(ServletConfig config) throws ServletException

  {

  super.init(config);

   try

   {

  ORB orb = ORB.init((String[])null,null);

  org.omg.CORBA.Object objRef =

   orb.resolve_initial_references("NameService");

  NamingContext ncRef = NamingContextHelper.narrow(objRef);

  NameComponent nc = new NameComponent("greeter","");

  NameComponent path[] = {nc};

  server = greeterHelper.narrow(ncRef.resolve(path));

  System.out.println("servlet init ok!");   

   } catch(Exception e1){System.out.println(""+e1);}

   }   //init

  public void doPost(HttpServletRequest request,HttpServletResponse response)   throws ServletException,IOException

  {

  response.setContentType("text/html");

  PrintWriter out=response.getWriter(); 

  String a =request.getParameter("text1");  // name

  System.out.println(a);

  String s1=server.greetme(a);

  out.println(s1); 

   }

 }   //--servlet   over-----

 

 To compile the servlet file, we should set classpath as follows:

  c:\idl>set classpath=%classpath%;c:\jsdk2.0\src;

   c:\idl>javac greeterservlet.java

 This command compiles the servlet.

 

 The following html file invokes the servlet.

<html>

<body>

<form method=post action="http://localhost:8080/servlet/greeterservlet">

<input type=text name='text1'>

<input type=submit>

</form>

</body>

</html>

Now, we copy greeterservlet.htm to c:\tomcat\webapps\root

   Then we copy all the class files in c:\idl folder to:

   c:\tomcat\webapps\root\web-inf\classes   folder.

   We are now ready to test our corba program.

Start Tomcat as before.

  Start the browser and type the URL as:

  "http://localhost:8080/greeterservlet.htm"

   We get a form with a textbox. Fill up your name,say Thomas and

submit.

  We will get :

  "How are you...?Thomas".

  We have completed the first leg of our long journey.

In the second part, we will take up EJB , XML etc. In the  previous instalment , we familiarized ourselves with Servlet, JSP, JavaMail, JDBC, RMI, RMI-IIOP and IDL. as, these were preliminaries to grapple with EJB.  Now , it is  time to takeup EJB.

Advertisements

Ads
Share on Google+Share on Google+

J2EE Tutorial - Running RMI Example

Posted on: December 15, 2008 If you enjoyed this post then why not add us on Google+? Add us to your Circles

Advertisements

Ads
 

Discuss: J2EE Tutorial - Running RMI Example   View All Comments

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments:1
johen
April 9, 2012
question

I have this error in netbeans errorjava.rmi.StubNotFoundException: Stub class not found: rmi1.greeterimpl_Stub; nested exception is: java.lang.ClassNotFoundException: rmi1.greeterimpl_Stub there is solution pluses send what can i do

Ads

 

Ads