Solved

RMI callbacks

Posted on 1998-08-20
6
300 Views
Last Modified: 2013-12-29
We are using RMI to call a remote application's methods from an applet. We know that the reverse (ie. calling an applet's method from an application ) is also possible but we are not able to do it. Can u give us a step by step method with all the details (directory - name of server etc. ) and also suggest why it is not currently possible)
0
Comment
Question by:shyamala
6 Comments
 
LVL 4

Expert Comment

by:evijay
ID: 1222166
applet must extend a remote interface, should be signed, register with the rmi registry with naming.bind, should not create rmi security manager. all the classes (stubs and skeletons) must be accessible to both application and applet (classpath and code base).



0
 
LVL 2

Expert Comment

by:threshold
ID: 1222167
RmiRegistry is an .exe Application.
It could be run in the Client, but it's not a good solution.
And, It's not a good idea to open ServerSocket on Applet.
0
 

Accepted Solution

by:
knollc earned 150 total points
ID: 1222168
Actually, you do not need to sign an applet to allow callbacks.  Its very simple:  You already have an applet which does a lookup to find a remote server.  So, the next thing you should do is have your APPLET implement a remote interface which the SERVER object understands (ie. the remote interface is in the classpath).  Then, your applet can call a remote object and pass as a parameter 'this' (meaning the applet itself) which will be the remote interface you have implemented in the applet.  So, here's how it looks:

public interface remote_appletInterface extends Remote
{
  myFirstFunction() throws RemoteException;
  myNextFunction() throws RemoteException;
}

public class MyApplet extends Applet implements remote_appletInterface
{  
  // applet code here for looking up remote server
  // next we need to implement the remote_appletInterface
  myFirstFunction();
  myNextFunction();
}

public server implements remote_Server
{
   // you already have code to allow the applet call the server methods
  // the next function allows a remote applet to register itself with the server for callbacks
  function notifyServer(remote_appletInterface remoteApplet)
  {
    // store the remote_appletInterface in a vector or a local var for later use.  
    // you may call the functions myFirstFunction() and myNextFunction() on the applet
    // because the applet implements this interface. So:
    remoteApplet.myFirstFunction();  // this is a callback!
  }

FINALLY:  somewhere in the applet (perhaps the start or init)

public void init()
{
   // look up the server
  remoteServer.notifyServer(this);  // by sending a remote interface to the server (namely, the applet), the server can then make calllbacks.
}

REMEMBER:  The rmic will be run on the applet class file to generate the stub and skel files that the SERVER will need to communicate back to the applet.  Make sure these files are accessable to the server and applet.  (the applet needs them to recieve calls from the server and the server needs them to make calls to the client).  

Hope this helps!

-Chris
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:shyamala
ID: 1222169
Mr. Knolloc, Thanx for ur interest. I tried out your solution but I am getting Applet security exception. Can u give a more detailed answer, with the exact folder names in which the program resides (it is ok if it is hard coded) and all the other details
0
 

Expert Comment

by:knollc
ID: 1222170
Sure.  According to netscape, you will get an applet security exception if the proxy/stub is found in the local machine's classpath.  You may have received an exception saying that you can not connect to <remote ip address> from <local class path>.  The reason is that the class loader in netscape found the proxy on your local machine, and the proxy is trying to connect to the web server.  Well, the proxy can only connect to the machine it was downloaded from (in this case, local), so you will get a security exception when you attepmpt the callback.  I also had this problem, but because of other activities I coudln't complete my tests.  I recommend you make sure all traces of the stub_ skel_ classes are removed from the local system and have them ONLY reside on the web server.  Then try the test.

Also, you only need rmiRegistry running on the web server (if that is where your server object is running, which, in the case of an applet call back, is required because the applet will only be able to connect to objects on the web server it was downloaed from).  I'll crack open the books and try to get my demo working and send you anything I am able to come up with.

-Chris

0
 

Expert Comment

by:knollc
ID: 1222171
Here's some specifics and an example:

remote_Applet.class : interface to the applet
mainApplet.class : the applet that implements the remote_Applet interface.

remote_Server.class : interface to the server class
mainServer.class : the server object that implements the remote_Server interface

mainApplet_stub/skel : the proxy/stubs generated by calling rmic on mainApplet.class
mainServer_stub/skel: the proxy/stubs generated by calling rmic on the mainServer.class

Here's where the files should go:
remote_Applet.class  : in web server applet directory AND in classpath of server object (the server object needs it to make callbacks.)
mainApplet.class : in weber server applet directory
remote_Server.class : in web server applet directory AND in classpath of server object (the applet needs it to connect to the remote object)
mainServer.class : in the server classpath
mainServer_stub/skel : in web server applet directory AND in classpath of server object
mainApplet_stub/skel: in web server applet directory AND classpath of server object

Notice how both the applet and server objects need to have all the stub/skel classes in their classpaths.  this is because the stub/skel is doing the work of making the connection to each other and 'marshalling' the data being transfered from client to server.  if there was no callbacks being performed, only the server would need the skel and client need the stub in their classpaths.

I hope this helps a little bit.  I'll dig up some of my old work and try out some things and let you know if I get it to work!

-Chris

0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
servlet  URL Rewriting 1 42
oracle 11g 23 107
Opening PDF on button click and fill new document 2 47
How to convert from xls to xlsx using java 7 55
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question