Delay in  lookup of Remote object.

Hi,
I am using RMI for my client - server communication. My server is a Solaris machine and client is a Windows XP PC and I am using jre1.5.
While I am doing a lookup of a Remote object from the client side
using Naming.lookup , I see a delay of 1 to 1.5 min for this lookup.I have put the entry of hostname and ipAddress of my sloaris m/ch in the etc/host file in my PC.
Kindly help me as why such a delay is occuring.
Regards,
Sundar.

the lookup service:
1. administratively destroyed the looup service or
2 ... delay is due to a timeout value set in the TCP layer itself, not in RMI. ...
that may be a cause

Similar Messages

  • Registry.lookup() return Remote object from different ip address

    I've got this error using
    Registry reg = LocateRegistry.getRegistry(serverName, Registry.REGISTRY_PORT);
    service = (ILogin) reg.lookup("service");and when I use debugger I've got this
    RegistryImpl_Stub[UnicastRef [liveRef: [endpoint:[10.240.161.66:1099](remote),objID:[0:0:0, 0]]]]
    Proxy[ILogin,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[10.240.161.54:2074](remote),objID:[-4308ea07:116adade605:-7fff, 9133145996543447416]]]]]Why the Registry return a service from different IP address ?
    I've run this code for several times and it works. But today it cannot connect to the RMIServer.
    Any idea ?

    Thanks, i found my missing prppertis is
    // optional. Defaults to localhost. Only needed if web server is running
    // on a different host than the appserver
    props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
    // optional. Defaults to 3700. Only needed if target orb port is not 3700.
    props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
    to set the port and host back

  • Lookup the remote object in Java EE 5

    How the session bean is looked up In java EE 5. what i heard that no need to use explict JNDI loop up what we did for j2ee 1.4. Can you please tell me how this is happening in java EE 5.
    Thanks

    You may have better luck asking this question in the Enterprise JavaBeans forum:
    http://forum.java.sun.com/forum.jspa?forumID=13
    or the Java EE SDK forum:
    http://forum.java.sun.com/forum.jspa?forumID=136
    This forum is for general questions concerning Java Enterprise System
    (http://ww.sun.com/software/javaenterprisesystem)
    Joe

  • Do I have to use lookup() to get a reference of remote object?

    Hello,
    I appreciate the help from you guys in advance. My question is, do I have to use lookup() to get the reference to a remote object? Right now I want to pass the remote object itself which can be serialized via stream. I am not sure if this way works.
    Cheers!
    Steve

    some part code:
    client:
    lookup=UC_LookUp.StkTakeListingHdrLookup().getStkTake(usrInfo,tfStkTakeListNo.getText());
    UC_LookUp
    public static basewms.uc.interfaces.UC_ISCSStkTakeListingHdr_Remote StkTakeListingHdrLookup()
          if (look_up==null) look_up= new UC_LookUp();
          if(stktakelistinghdr == null)
          stktakelistinghdr = look_up.startLookUp("UCStkTakeListingHdr","192.168.10.98", 7000);
          while (stktakelistinghdr==null)
               try { Thread.sleep(1000); }catch(InterruptedException e) {}
          return (basewms.uc.interfaces.UC_ISCSStkTakeListingHdr_Remote)look_up.getRemote(stktakelistinghdr);

  • Jndi lookup of of object that has been bound remotely

    I want to register in weblogic server jndi tree some remote objects. A one standalone
    application binds these object in server jndi. Another standalone app try to lookup
    and executes some methods - everything works ok.
    The problem is : applications which works internally on server can't lookup these
    object. It's initial context doesn't contains such bindings. What's the difference
    between naming contexts
    inside and outside the server?
    Thank in advance,
    Vladimir.

    Hi JP3O,
    >> But that doesn't help because CurrentExcelWorksheetEventsInstance is not nothing even after all properties give errors. What is a better test or approach I can use?
    In my option, if you refer to the property of the Worksheet object which has been deleted, the error would be raised as expected. I think you could use the try catch statement to deal with this situation. Some key code like below:
    Dim oxl As Excel.Application
    Dim owb As Excel.Workbook
    Dim osheet As Excel.Worksheet
    Dim owbname As String
    oxl = New Excel.Application
    owb = oxl.Workbooks.Open("D:\Test\VSC#\03\Winform\VBWinform\Test.xlsx")
    osheet = owb.Worksheets("sheet1")
    Try
    osheet = owb.Worksheets.Add()
    owb.Close(False)
    owbname = owb.Name
    Catch comex As System.Runtime.InteropServices.COMException
    If comex.ErrorCode = -214682246 Or comex.Message.Contains("Object has been deleted") Then
    ' handle deleted object
    Else
    Throw comex
    End If
    End Try
    Best Regards,
    Edward
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

  • Remote object trying to return another remote object and a ClassCastExcepti

    I have a server running with a TreeModel (the tree model implements Remote). I also have the the TreeNodes all linked together on the server. Now, I can get to the TreeModel on the server and the root node of the remote tree model.
    treeModelStub = (treeModelIface)Naming.lookup(url+"remoteTM"); //works
    rootStub = (remoteTreeNodeIface)treeModelStub.getRoot(); //works. The call to getRoot returns Object
    But when I call
    remoteTreeNodeIface aChild = (remoteTreeNodeIface)rootStub.getChildAt(index) //Does not work. "Exception in thread "main" java.lang.ClassCastException
    at remoteTreeNode_Stub.getChildAt(Unknown Source)
    The remote tree node method getChildAt returns TreeNode because the class implements TreeNode:
    public class remoteTreeNode extends UnicastRemoteObject implements rdcaDataIface, Comparable, TreeNode {
    public TreeNode getChildAt(int idx) {
    System.out.println("DEBUG: class is "+this.getClass()); // class is remoteTreeNode
    return (remoteTreeNode)children.get(idx);
    The remote interface is defined as:
    public interface rdcaDataIface extends java.rmi.Remote {
    public TreeNode getChildAt(int idx) throws RemoteException;
    Any ideas why this does not work. Why can a remote object of type Object be returned just fine, but a TreeNode not be returned?
    Thank you for your help,
    Brent

    I have a server running with a TreeModel (the tree
    model implements Remote). I also have the the
    TreeNodes all linked together on the server. Now, I
    can get to the TreeModel on the server and the root
    node of the remote tree model.
    treeModelStub =
    (treeModelIface)Naming.lookup(url+"remoteTM");
    //works
    rootStub =
    (remoteTreeNodeIface)treeModelStub.getRoot();
    //works. The call to getRoot returns Object
    But when I call
    remoteTreeNodeIface aChild =
    (remoteTreeNodeIface)rootStub.getChildAt(index)******************************************
    can only be casted to rdcaDataIface. The returned object is an instanceof the rdcaDataIface_stub, which have nothing to do with TreeNode.
    //Does not work. "Exception in thread "main"
    java.lang.ClassCastException
    at remoteTreeNode_Stub.getChildAt(Unknown
    t(Unknown Source)
    The remote tree node method getChildAt returns
    TreeNode because the class implements TreeNode:
    public class remoteTreeNode extends
    UnicastRemoteObject implements rdcaDataIface,
    Comparable, TreeNode {
    public TreeNode getChildAt(int idx) {
    System.out.println("DEBUG: class is
    lass is "+this.getClass()); // class is
    remoteTreeNode
    return (remoteTreeNode)children.get(idx);
    The remote interface is defined as:
    public interface rdcaDataIface extends java.rmi.Remote
    public TreeNode getChildAt(int idx) throws
    ows RemoteException;
    Any ideas why this does not work. Why can a remote
    object of type Object be returned just fine, but a
    TreeNode not be returned?
    Thank you for your help,
    Brent

  • How does the remote object connect to the correct host

    i have had a small doubt on how the remote reference manages to find the correct host to call the subsequent methods after a sucessful lookup.
    given a rebind or bind to the registry, the registry only stores the alias and the remote reference, now imagine a client calling a lookup on the registry would only get the remote reference, and not in which machine the remote object is found.
    what i wanted to know is how does the client or atleast the remote reference returned by the registry correctly connects to the machine where the remote object is located. i dont think its stored in the stub bcos the stub is a complie time stuff.
    i would be pleased to have a comprehensive answer for this.

    The membership in the group communication framework is always accurate and upto date.Up to date to the moment when you check. Not up to date to the moment when you make the RMI call.
    i could basically chk if this ip is available in the membership list.Complete waste of time. It doesn't matter what you check ahead of time, you are still trying to predict the future.
    And you still have to deal with ConnectException etc from the actual remote method call. And the way you will deal with that in your situation is exactly the same as what you were going to do if your ahead-of-time check failed.
    So just catch the exception(s) and deal with the problem there.

  • Clustered Remote Object Bound To JNDI

    Hello,
              I'd like to know if Weblogic 5.1 (service pack 10) supports
              clusterable remote objects.
              What I am trying to do is to implement a remote object that extends
              UnicastRemoteObject interface and bind it to JNDI. When the client
              needs the services, it will lookup that object in JNDI and call its
              methods remotely.
              What happens to my test implementation is that it all works well when
              I run Weblogic locally, but if it is run on the remote server, it
              gives me the exception to the extend that the stub for my remote
              object is not found (although it is in the classpath). I understand
              that this is because I should be using weblogic.rmic instead of
              regular rmic, is that right?
              Thanks,
              Eugene Kononov.
              

    Hello,
              I'd like to know if Weblogic 5.1 (service pack 10) supports
              clusterable remote objects.
              What I am trying to do is to implement a remote object that extends
              UnicastRemoteObject interface and bind it to JNDI. When the client
              needs the services, it will lookup that object in JNDI and call its
              methods remotely.
              What happens to my test implementation is that it all works well when
              I run Weblogic locally, but if it is run on the remote server, it
              gives me the exception to the extend that the stub for my remote
              object is not found (although it is in the classpath). I understand
              that this is because I should be using weblogic.rmic instead of
              regular rmic, is that right?
              Thanks,
              Eugene Kononov.
              

  • ClassCastException at Remote object although remote interface is implemented

    Hi,
    I want to access a remote object via T3 (on WebLogic 10) but I am
    getting a ClassCastException in the client. The exception is thrown if
    the generic "Remote" object is casted into a concrete remote interface.
    The following works ok (client side, get remote object via JNDI):
    Hashtable hashTable = new Hashtable();
    hashTable.put(Context.INITIAL_CONTEXT_FACTORY,
    "weblogic.jndi.WLInitialContextFactory");
    hashTable.put(Context.PROVIDER_URL, "t3://localhost:7001);
    ic = new InitialContext(hashTable);
    Remote r = (Remote) ic.lookup("...jndi bind name...");
    But this cast fails:
    IMyRemoteIntf i = (IMintRemoteIntf) r;
    The ClassCastException has the classname of the class which implements
    the remote interface - the lookup should be ok therefore. With
    r.getClass().getInterfaces() I have verified that the remote object
    actually implements the appropriate interface. I suppose it is a class
    loader issue then and added some debug output.
    Class loader parent chain of IMyRemoteIntf:
    weblogic.utils.classloaders.ChangeAwareClassLoader@1715ee2
    -> weblogic.utils.classloaders.GenericClassLoader@123ade0
    -> weblogic.utils.classloaders.FilteringClassLoader@1312cf9
    -> weblogic.utils.classloaders.GenericClassLoader@159ea8e
    -> java.net.URLClassLoader@82d37
    -> sun.misc.Launcher$AppClassLoader@e39a3e
    -> sun.misc.Launcher$ExtClassLoader@a39137
    Class loader parent chain of IMyRemoteIntf as reported by r.getInterfaces():
    sun.misc.Launcher$AppClassLoader@e39a3e
    -> sun.misc.Launcher$ExtClassLoader@a39137
    IMyRemoteIntf is in a jar file in WEB-INF/lib of my web application. I
    tried prefer-web-inf-classes = true in weblogic.xml as well as
    prefer-application-packages in weblogic-application.xml (with the
    respective package of the interface).
    Any ideas? I don't know what more I can try. I can access the same
    server with this t3 URL just fine from outside of the WebLogic server.
    Regards
    Werner

    I meant an issue about multi-connections. Although the socket is shared by all of the connections, each connection in RMI might correspond to a separated thread, I guess. Since the socket is shared by all rmi clients, the RMI channel would be a blocking connection. I am not sure if the RMI in JDK1.4 or above also use the nonblocking new I/O technique. Thanks.

  • Exception: Cannot narrow remote object to ...

    Hi,
              in certain circumstances I get an Exception "Cannot narrow remote
              object to <some EJB-Home-Class>".
              My enviroment: weblogic 7.0, solaris, Java 1.3.1, J2EE-application
              (EJBs, Servlets, Database)
              In the init method of an start-up servlet I spawn some threads for a
              scheduler of the application. There are a scheduler core and some
              worker classes.
              The start-up servlet, all the other servlets and the schedulers
              classes are in an web-archive (war-file) in an ear-archiv. Furthermore
              there a some 3rd party archives in the ear-archive, a jndi.properties
              file etc. The manifest file of the war-archive contains a class-path,
              points to the 3rd party archives in the ear-archive.
              The schedulers workers code is simple:
              InitialContext jndiContext = ...getInitialContext();
              Object obj = jndiContext.lookup(<some EJB>);
              - EJBs home interface (for example):
              SyncOrderQueueHome home = (SyncOrderQueueHome)
              javax.rmi.PortableRemoteObject.narrow(obj,
              SyncOrderQueueHome.class);
              - EJBs remote interface:SyncOrderQueue sync = home.create();
              - call some business method
              sync.createOrderQueue();
              In the enviroment described above I get an " Exception: Cannot narrow
              remote object to <package>.SyncOrderQueueHome".
              On the other hand the scheduler and all the workers work fine as a
              standalone application (not in an app-server context) and in Oracles
              app-server (OC4J, v.9.0.3).
              I tried to understand, what for an object I get as the result of the
              JNDI lookup bevore the narrow method fails:
              - in the app-servers context:
              <package>.SyncOrderQueueEJB_4o6qkf_HomeImpl
              - outside the app-server:
              <package>.SyncOrderQueueEJB_4o6qkf_HomeImpl_WLStub
              What happened here? The common servlets use the same functionality and
              work fine. Why I get different objects? Where is the bug?
              Any ideas?
              Thomas
              

    I believe the problem is the threads you are starting are not using the
              context classloader of the current thread.
              -- Rob
              [email protected] wrote:
              > Hi,
              >
              > in certain circumstances I get an Exception "Cannot narrow remote
              > object to <some EJB-Home-Class>".
              >
              > My enviroment: weblogic 7.0, solaris, Java 1.3.1, J2EE-application
              > (EJBs, Servlets, Database)
              >
              > In the init method of an start-up servlet I spawn some threads for a
              > scheduler of the application. There are a scheduler core and some
              > worker classes.
              > The start-up servlet, all the other servlets and the schedulers
              > classes are in an web-archive (war-file) in an ear-archiv. Furthermore
              > there a some 3rd party archives in the ear-archive, a jndi.properties
              > file etc. The manifest file of the war-archive contains a class-path,
              > points to the 3rd party archives in the ear-archive.
              >
              > The schedulers workers code is simple:
              >
              > InitialContext jndiContext = ...getInitialContext();
              > Object obj = jndiContext.lookup(<some EJB>);
              >
              > - EJBs home interface (for example):
              > SyncOrderQueueHome home = (SyncOrderQueueHome)
              > javax.rmi.PortableRemoteObject.narrow(obj,
              > SyncOrderQueueHome.class);
              >
              > - EJBs remote interface:SyncOrderQueue sync = home.create();
              >
              > - call some business method
              > sync.createOrderQueue();
              > In the enviroment described above I get an " Exception: Cannot narrow
              > remote object to <package>.SyncOrderQueueHome".
              >
              > On the other hand the scheduler and all the workers work fine as a
              > standalone application (not in an app-server context) and in Oracles
              > app-server (OC4J, v.9.0.3).
              >
              > I tried to understand, what for an object I get as the result of the
              > JNDI lookup bevore the narrow method fails:
              > - in the app-servers context:
              > <package>.SyncOrderQueueEJB_4o6qkf_HomeImpl
              > - outside the app-server:
              > <package>.SyncOrderQueueEJB_4o6qkf_HomeImpl_WLStub
              >
              > What happened here? The common servlets use the same functionality and
              > work fine. Why I get different objects? Where is the bug?
              >
              > Any ideas?
              > Thomas
              

  • Interrupting a Thread in a Remote Object?

    HI,
    I am trying to get some thread synchronization to happen between a client and a remote RMI object. Essentially what I am trying to accomplish, is that if I interrupt a call on a blocking method in the remote object, I want the thread to throw the InterruptException. For example, the following code represents what I am trying to accomplish:
    package bca.test.rmi;
    import java.rmi.Naming;
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    public class InterruptThreadApp {
    RemoteBlockingObjectInt remote = null;
    public static void main(String[] args) throws Exception {
    //Create the remote object
    RemoteBlockingObject obj = new RemoteBlockingObject();
    //bind it to the registry
    Naming.rebind("rmi://localhost/blocking", obj);
    //start the client, or the thread which will access the blocking call remotely
    InterruptThreadApp app = new InterruptThreadApp();
    Thread blocking = null;
    //wait for the thread to start
    synchronized ( app ) {
    blocking = app.startClient();
    app.wait();
    Thread.sleep(2000);
    //now interrupt the thread (note: the remote object should be blocking in
    //the blockingMethod().. this should produce an InterruptException?
    blocking.interrupt();
    public Thread startClient() {
    Thread t = new Thread("Client") {
    public void run() {
    try {
    //get a handle to the stub
    remote = (RemoteBlockingObjectInt) Naming.lookup("rmi://localhost/blocking");
    //now make a call to the blocking method, but first wake up the client
    synchronized ( InterruptThreadApp.this ) {
    InterruptThreadApp.this.notify();
    //now make the blocking call
    remote.blockingMethod();
    catch (InterruptedException e) {
    System.out.println("WooHoo! This is what we want! But it never gets thrown :(");
    catch (Exception e) {
    e.printStackTrace();
    t.start();
    return t;
    package bca.test.rmi;
    import java.rmi.server.UnicastRemoteObject;
    import java.rmi.RemoteException;
    import java.rmi.Remote;
    public class RemoteBlockingObject extends UnicastRemoteObject implements RemoteBlockingObjectInt {
    Object obj = new Object();
    public RemoteBlockingObject() throws RemoteException {
    super();
    public void blockingMethod() throws RemoteException, InterruptedException {
    synchronized (obj) {
    System.out.println("About to block.. so we can be interrupted later");
    obj.wait();
    interface RemoteBlockingObjectInt extends Remote {
    public void blockingMethod() throws RemoteException, InterruptedException;
    When I make a call to "remote.blockingMethod()", it blocks in the remote object (buy just "wait" ing). I want to interrupt this thread, by issuing an Thread.interrupt(). When I do so (I call "blocking.interrupt()"), nothing happens... no exception is thrown.. it just silently fails.
    Ok, so I suppose that we can not interrupt a remote thread.. that is fine. But what if I want to interrupt the RMI thread making the remote call? I don't want it to block forever. How can I "cancel" the remote call?
    Ideally, I would like the remote.blockingMethod() call to throw an InterruptException when I issue an "interrupt()" on the blocking thread. Any suggestions on how I might accomplish this?
    Thanks,
    Bryan

    While you can interrupt the RMI call, you cannot stop the active processing. That is, you cannot force a thread to stop (see the Java API documentation on Thread.stop().)
    Since the Client RMI call is a waiting thread, you need another Client thread to do a secondary RMI call. The trick is to have the new RMI endpoint connection thread on the RMI Server interrupt the original RMI endpoint connection thread.
    The only way you can interrupt an RMI call is to have the endpoint connection thread that runs on the RMI Server be aware that the user may wish to interrupt it.
    The best means of interruption is for the endpoint connection thread to use "worker threads". The endpoint connection thread waits for the workers to finish and is interruptible by both the workers and other endpoint connection threads.
    Another means of interruption is for the endpoint connection thread to segment the task into units of work and check for an interruption between those units of work.
    There are two ways I've done RMI call interruption.
    One is for the Client to pass a unique id (UID -- that uniquely identifies the request) to the Server with the original call. When the Client wishes to interrupt the original call, using the separate thread, it does a new RMI call to the Server passing the UID.
    The new endpoint connection thread, using the UID, interrupts the original endpoint connection thread.
    The major problem with this is the unique id. It absolutely, positively must be unique. Otherwise you run the risk of Client_A purging Client_B's request.
    The second method requires callback. If your Client is behind a firewall then RMI callback is near impossible. In such a case you must come up with a way for the Server to call the Client that is secure (the firewall problem.)
    The Client must export a remote object and pass that remote object to the Server with the original call.
    The endpoint connection thread recognizes the remote object and does a call back to the Client passing information that uniquely identifies itself (UID). Since the Server generates the UID, it can guarantee uniqueness.
    The Client callback implementation runs as a separate thread since the Client is in fact an RMI Server itself (when it did the export.) The Client must save the UID. The Client must start a new thread for the interrupt procedure or inform a waiting thread that the Server called back.
    Just like method one, above, when the Client wishes to interrupt the original call, using the separate thread, it does a new RMI call to the Server passing the UID.
    The new endpoint connection thread, using the UID, interrupts the original endpoint connection thread. Simple.
    For an academic example using call back go over to Jini.org. They have an example called "Cancellation" at:
    http://starterkit-examples.jini.org/
    For a professional, open source implementation of both these methods go over to CoopSoft.com. The Tymeac (Java) projects support canceling both waiting and autonomous requests at:
    http://www.coopsoft.com/JavaProduct.html

  • Error passing a remote object in a rmi function call

    Hi,
    I've a problem passing an UnicastRemoteObject extended object in a rmi function call. I get the following error
    java.lang.IllegalArgumentException: argument type mismatch
    I've 2 Remote Objects: GalaxyRegistration and Station. I want to pass a Station Object as argument in a function from GalaxyRegistration. Does anyone know what the problem is?
    Here is the code:
    public class GalaxyRegistration
    extends UnicastRemoteObject
    implements GalaxyRegistrationInterface, Galaxy {
         public GalaxyRegistration() throws RemoteException {
         public void add(Station station) throws RemoteException {
              stations.addElement(station);
              System.out.println("Add Station " + station.getName());
    public class Station
    extends UnicastRemoteObject
    implements StationInterface {
         SystemInfo system;
         public Station(String name, String description, Coordinate position, Profile profile)
    throws RemoteException {
              system = new SystemInfo(name, description, position, profile);
    public class StationServer {
         Station station;
         public void run() {
              // create new Station
              System.out.println("Create new Station:");
              // register and bind new station
              try     {
                   station = new Station(name, descr, location, profile);
                   System.out.println("Station created ...");
                   GalaxyRegistrationInterface registry =
                             (GalaxyRegistrationInterface)
                             Naming.lookup
    ("//localhost/GalaxyRegistration");
                   System.out.println("Registry looked up ...");               
                   // >>>>>>>> NEXT LINE IS THE ERROR LINE <<<<<<<<<<<<<<     
                   registry.add(station);
              } catch(Exception e) {
                   System.out.println(e);
    }

    regardless of any other problems in your code, neither of the objects which you are subclassing from UnicastRemoteObject call the superclass constructor, which is a pretty basic flaw - in this case, it will lead to neither of these objects being exported properly.

  • Can I cache the Remote object

    I am using Stateless session bean. Can I cache the reference of the remote objects to this bean ?
    I read that some containers support the fearture of pre creating the EJB objects in the pool , during startup
    using some custom configuration ( like connection pool ). How is this performed ?`

    I am using Stateless session bean. Can I cache the
    reference of the remote objects to this bean ?No, but you can cache the HomeHandle of the Home interface references - that saves you the overhead of JNDI lookups, which are far more "expensive" time-wise than calling the create method to get the Remote implemenation.
    I read that some containers support the fearture of
    pre creating the EJB objects in the pool , during
    startup using some custom configuration ( like connection pool
    ). How is this performed ?Ask your vendor - it's vendor-specific.

  • Running one rmiregistry for multiple remote object servers

    Hi,
    I don't find any clear answer for this situation. I want that multiple objet servers (running in separated JVMs) share one rmiregistry placed on a dedicated server. Servers stays in a same network (no firewall at all). If this feature is covered, could you give me any example or link that describe the source code ?
    Thanks very well for yours answers.
    Manuel

    Thanks again for your help, and sorry for my weak usage of english language.
    I've tried to bind some remote objects from distinct 'physical' hosts (or computers) to a dedicated registry located on another host.
    To resume: I want to use one unique registry for multiple remote objects hosts.
    EJP you have posted : But they must all be running on the same host as the Registry.
    After reading again the official rmi tutorial, I found :
    For security reasons, an application can only bind, unbind, or rebind remote object references with a registry running on the same host. This restriction prevents a remote client from removing or overwriting any of the entries in a server's registry. A lookup, however, can be requested from any host, local or remote.
    This confirm that I wanted to do was not possible.
    To override this limitation, do you think it's possible to write a remote object located on the registry host, that propose a method used from other hosts to register their remote objects ? Something like that:
    // Interface
    public interface recordFromHost extends Remote {
        int recordObject(String name, Remote obj) throws RemoteException;
    // Implementation of interface
    public class recordFromHostImpl extends UnicastRemoteObject implements recordFromHost {
        public recordFromHostImpl () throws RemoteException {
            super();
        public int recordObject(String name, Remote obj) {
           int ret=0;
            try {
                Registry registry = LocateRegistry.getRegistry();
                registry.bind(name, obj);
            } catch (Exception e) {
                System.err.println("recordObject exception:");
                e.printStackTrace();
                ret = -1;
        return ret;
    // Server code on registry host
    public class Serveur {
    public static void main(String args[]) {
            // Security manager
            if (System.getSecurityManager() == null) {
                System.setSecurityManager(new SecurityManager());
            // Start of registry
            try{
                LocateRegistry.createRegistry(1099);
            }catch(RemoteException e){
                System.exit(1);
            try {
                String name = "recordFromHost";
                recordFromHost myObj = new recordFromHostImpl ();
                Registry registry = LocateRegistry.getRegistry();
                registry.bind(name, myObj);
            } catch (Exception e) {
                System.err.println("bind exception:");
                e.printStackTrace();
    // Code used from a server host to register his remote object in the distant registry
    Registry registry = LocateRegistry.getRegistry(registry host adress);
    recordFromHost  myRecord  = (recordFromHost) registry.lookup("recordFromHost");
    Create local remote object to register (remoteObject : interface, remoteObjectImpl : implementation)
    remoteObject myRemoteObject = new remoteObjectImpl();
    // register myRemoteObject
    myRecord.recordObject("myRemoteObject", myRemoteObject );
    ...Finally, a client who want to use myRemoteObject ask the registry for this object, and use it without limitation : the remote object host will not be the registry host.
    I hope that you understand what I mean :-)
    Manuel

  • Can't update remote object (RMI)

    I have made a class "A" that implements a remote interface "RI". I then rebind it to the rmiregistry:
    RI bob = new A();
    Naming.rebind("bob",bob);Class A has a few methods that I call that changes som private fields.
    After some time I start another class B that makes a look up:
    RI found  = (RI)Naming.lookup("//localhost/bob");But the private fields have not been changed in this looked up object.
    Is it necessary to call rebind each time I make a change to a remote object??

    If you'd stick to the same thread instead of starting a new one all over the place you'd find that I've already answered this question three days ago: http://forum.java.sun.com/thread.jspa?threadID=770735&messageID=4393030#4393030
    Can you stick to that thread please.

Maybe you are looking for