Rmi Registry rebind problem

hi
I have used the Registry.rebind method in my program. The problem I am facing is like this;
when I use the rebind method as 'registry.rebind("Server",this);' it is working fine; but when I use
String name="Server";
'registry.rebind(name,this);' it is giving the following error: java.rmi.NotBoundException: Server.
Any suggestions?
thnx
Som

have you try
final static String name = "Server";

Similar Messages

  • Java.rmi.AccessException: Registry.Registry.rebind disallowed

    I am getting the following error while creating a client socket. I am not exactly sure what is causing the problem.
    This is happening on windows 2k3 sp2 French dual stack machine.
    java.rmi.AccessException: Registry.Registry.rebind disallowed; origin /fe80:0:0:0:219:b9ff:fe00:d81d is non-local host:java.rmi.AccessException: Registry.Registry.rebind disallowed; origin /fe80:0:0:0:219:b9ff:fe00:d81d is non-local host
    And also I observed the server socket is something different to the normal one ..
    ServerSocket[addr=::/0:0:0:0:0:0:0:0,port=0,localport=11501
    Normally it will be 0.0.0.0/0.0.0.0. I don't know why it is different....
    Any pointers why I am getting that exception and the server socket is =::/0:0:0:0:0:0:0:0?
    Edited by: shash10 on Jun 9, 2008 12:07 AM
    Edited by: shash10 on Jun 9, 2008 12:36 AM

    I am getting the following error while creating a client socket.No, you're getting it while calling Registry.rebind(), because you're doing that from a client that isn't on the same host as the Registry, and that's illegal, as the exception text says. Nothing to do with IPv6 actually.

  • Is the RMI registry "process-atomic"?

    Hi,
    Sorry if this is a really stupid question, and I have really tried to find this out on my own.
    When I say "process" I mean Process, as opposed to Thread.
    What I mean is, if one Process calls Registry.bind( String, Remote ), can we be sure that another Process which does the same thing one nanosecond later will get an AlreadyBoundException if it calls with the same String?
    The context is that up to now I have been starting the RMI Server (only for logging at the mo, these are my first steps) explicitly in a Process. But now I want to move to "lazy" startup of the RMI registry and of the Server... so I would go LoggerInterface.log( bindingName, message ), and if the name "bindingName" is not presently in the registry it will create a new Server, and log the message using it.
    More specifically, this is about me trying to automate OpenOffice apps using Java... and it occurs to me that 2 events could indeed happen almost simultaneously, so in fact even explicitly starting up the Server in each handler module might encounter "Process concurrency" problems ... so I need to have an answer to this.
    I hope the answer is yes... otherwise I'm going to be a bit flummoxed about how to ensure one doesn't start up one Server Process from one calling Process, and another Server Process from another calling Process.
    Thanks

    I mean to use rebind() instead of the lookup()/bind() pair. It is atomic.... I understand it is atomic, but my point is that between checking whether you need to rebind (because the bound stub is invalid) and actually doing the rebind there will be an interval. If you systematically use rebind, without a prior check to make sure your Remote is actually attached to an existing Process, every call will cause a new Server Process to be created and then rebound, one after another. Which would be a mess.
    I'm going to spend a bit of time looking at your two references... thanks for them.
    I have thought of a possible solution involving a sort of lock, but I'm not sure if it works.
    1. create a "DummyInterface" extending Remote:
    public interface DummyInterface extends Remote {
    }2. in the Process + Thread which actually sets up the Registry, bind a DummyInterface
    Registry reg = null;
    try {
      reg = LocateRegistry.createRegistry( 1099 );
    } catch (RemoteException e) {
      return; // is this right? see below...
    DummyInterface dummyStub = new DummyInterface(){};
    try {
      dummyStub = (DummyInterface) UnicastRemoteObject.exportObject( dummyStub, 0);
    } catch (RemoteException e) {
      // TODO sthg
      e.printStackTrace();
    try {
      reg.bind( "DummyLockForLoggerServer", dummyStub );
    } catch (AlreadyBoundException e) {
      // every Thread in every Process (except the first such) to call "bind" will get here
      return;
    } catch (Exception e) {
      // TODO sthg
      e.printStackTrace();
    }3.     the first Process + Thread which wants to set up the LoggerServer will have first to unbind the DummyLock.
    try {
       reg.unbind( "DummyLockForLoggerServer" );
    } catch (AccessException e) {
       // TODO sthg
       e.printStackTrace();
    } catch (RemoteException e) {
       // TODO sthg
       e.printStackTrace();
    } catch (NotBoundException e) {
      // every Thread in every Process (except the first such) to call "unbind" will get here
      return;
    // only one Thread in one Process will ever succeed in getting here
    // start the LoggerServer
    String qualifiedClassName = ".... rmi.LoggerServer";
    String[] a_commandArgs = { "java", qualifiedClassName, "logName" };
    Process process = null;
    try {
      process = Utils.runSubprocess(a_commandArgs, null, ProcessSettings.getJavaRootDir());
    } catch (IOException e) {
       // TODO sthg
       e.printStackTrace();
    }... however there seem to be one or two questions about this:
    - does reg = LocateRegistry.createRegistry( 1099 ); throw a RemoteException if the Registry is already bound? I don't know and intend to do a few experiments to find this out for myself. But in any event only one Process+Thread can ever bind the dummy lock
    - there might be a race condition nonetheless to do with the interval between creating the Registry and binding the dummy lock... during this interval the Registry is established, and the dummylock is not yet set up... but I think this does no harm, as a Process trying to start the LoggerServer during this time will get the "NotBoundException" and simply return (and the calling thread will then sleep for a bit before trying again).

  • Registry.rebind disallowed; origin /11.0.10.31 is non-local host.

    Hello everyone.
    I have a problem.
    I have a server that I register in the RMI registry. Client from a remote machine get the server (as a remote object) and calls his method for the generation of another object on the parameters passed. The server creates this object and tries to register it in the RMI registry, and this raises an exception Registry.Registry.rebind disallowed; origin /11.0.10.31 is non-local host.
    What could be the problem and how to solve it?
    Thanks.

    Ah, this is the problem. It's a bit difficult to explain but if you create an in-JVM Registry and then call rebind() on the result while executing a remote method on behalf of a client, your are doing a local method invocation on the Registry instance so the client host appears to be the calling client rather than yourself. Change the rebind() call to use Naming.rebind() and the problem will go away.

  • RMI registry inside tomcat

    Hello,
    I'm wondering if any of you have previous experiences in the following situation.
    I have a linux server with tomcat 5.0.28 that is supposed to act as an RMI end point for clients connecting with the aforementioned RMI to do some persisting stuff. Now I figured that the easiest way is to create a servlet that creates the RMI registry and binds my server objects (so that's in the servlet's init(), with 1 load-on-startup, the servlet doesn't do anything else, at least yet).
    Now problems arise: my linux server is logging "context is read-only" when trying to bind the objects to RMI. Testing on my windows laptop doesn't show the same error for some reason (although it doesn't work properly either). This is apparently normal, as the contexts are supposed to be read-only.
    Thing is, I wouldn't want to run a separate rmiregistry on the server, if possible to do it with a simple servlet. But is this the easiest way?
    Thank you in advance,
    yours truly, in sickness and in health,
    Jussi

    'Context is read-only' is not a Registry error
    message. You are trying to bind to something else.
    Show us some code.Well, I'm not doing a lot of binding, so I'm assuming it's this part:
                   DDBServer stub = (DDBServer)UnicastRemoteObject.exportObject(this, 0);
                   Registry registry = LocateRegistry.getRegistry();
                   registry.rebind("DDBServer", stub);The error message is:
    2007-04-18 14:06:40 NamingContextListener[Catalina/localhost/DDBServer]: Creation of the naming context failed: javax.naming.NamingException: Context is read only

  • Some basic questions about rmi registry  context  "bind" and "lookup"

    We have more processing to do than can be accomplished with a single computer. To solve the problem I've implemented a distributed computing solution using RMI. (The first time I saw RMI was about 2 weeks ago, so please bear with me!)
    The implementation is a proof of concept not a fully fleshed out system. I have one "Workunit Distributor" computer and any number of "Data Processor" computers all on the same lan segment. "Workunit Distributor" and "Data Processor" computers are both RMI client and server to each other. The "Data Processor" computers are given the ip address and name of the "Data Distributor" on the commandline when they start. They communicate their willingness to receive and process a workunit to the ""Workunit Distributor" via a RMI call. Work units are sent to available "DataProcessors" and results are eventually returned to the "WorkunitDistributor" (minutes or hours later). The model program works quite well, and appears to be capable of doing the processing we need to get done.
    But now that it seems viable, I've been asked to make it a little more scalable, flexible and self configuring. In particular, instead of one "Workunit Distributor", any number of "Workunit Distributors" should be allowed to show up or disappear from the lan at any time and the system should continue to function. I've worked out a good scheme for how this can be done, but I have a couple of questions about the RMI registry (registries?). I'm trying to keep from implementing some functionality that may already be available as a library or subsystem.
    With my current model design, each computer binds to its own registry with a unique name. For instance:
    CRDataProcessorImpl crdpi = new CRDataProcessorImpl(svr);
    Context crDataProcessingContext = new InitialContext();
    crDataProcessingContext.bind("rmi:"+hostName, crdpi);
    Currently the "Data Processors" get the info they need for a Context lookup() of the one and only "Workunit Distributor" from the commandline. And the info the "Workunit Distributor" needs to do a Context lookup() of a "DataProcessor" is passed to it from each "DataProcessor" via a RMI call.
    But in the newer (yet to be implemented) scheme where any and all "Workunit Distributors" show up and disappear whenever they feel like, the naming bootstrapping scheme described above won't work.
    I can imagine a few ways of solving this problem. For instance, having "Workunit Distributors" multicast their contact information on the lan and have a worker thread on each "Data Processor" keep track of the naming information that was multicast. Another alternative (more organized, but more complex) might be to have a dedicated host with a "well known" address and port that "Workunit Distributors" and "Data Processors" could all go to, to register or look up at an application level. Sort of a "domain name service" for RMI. But both these schemes look like a lot of work to implement , debug and maintain.
    The BEST thing would be if there was one plain vanilla RMI registry that was usable by all RMI enabled computers instead of having each computer have its own local name registry. In volume 2 of the Core Java2 book it says that every registry must be local. I'm only hoping there's been progress since the book was published and now a central rmi registry is available.
    If you have any ideas about this I'd like to hear what you know.
    Thanks in advance for any advice.
    Lenny Wintfeld
    ps - I don't believe web services, as full featured as it is, is a useful alternative. I'm moving 100's (in the future possibly 1000's) of megabytes back an forth for processing.

    The local bind/rebind/unbind restriction is still there and it will always be there.
    I would look at
    (a) RMI/IIOP, where you use COSNaming as a registry, which doesn't have that registriction, and which also has location-independent object identifiers
    (b) Jini.

  • Rmi and rebind

    hi
    I need some explanation about the folowing error:
    java.io.IOException: Malformed URL: /*My classpath : his value is not important and it's a suite of file:/<directory> element*/
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:242)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:217)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:351)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at java.rmi.Naming.rebind(Naming.java:158)
    The registry is created by LocateRegistry.createRegistry(port).
    In fact, I wonder why RMI look for classes in my classpath.I set the java.rmi.server.codebase properly.
    Thanks for any help or any pointer.
    Guiguch.

    What exactly is the error and WHEN is it? Is it a client trying to connect to a server? I dont even know what the MalformedURL exception is saying. It seems to have your own exception in there.
    Be clear about your problem and you will get the help you need.

  • Can anybody help me to understand this RMI registry service code?

    RMI is so difficult to me. please let me know following code what it means.
    If this class is instantiated with 50000 port number,
    Does RMI Registry Service get started with 50000 port number in place of rmiregistry commands?
    And I don't have to execute rmiregistry command?
    thanks in advance.
    import java.rmi.AccessException;
    import java.rmi.AlreadyBoundException;
    import java.rmi.NotBoundException;
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    import java.rmi.registry.Registry;
    import java.rmi.server.ObjID;
    import java.rmi.server.RemoteServer;
    import java.util.Enumeration;
    import java.util.Hashtable;
    import sun.rmi.server.UnicastServerRef;
    import sun.rmi.transport.LiveRef;
    * Registry implementation.
    * @version 1.0
    public class RegistryImpl extends RemoteServer implements Registry {
         private static final long serialVersionUID = -7162736590129110751;
         private Hashtable bindings;
        private static ObjID id = new ObjID(0);
         * @param i port number
         * @throws RemoteException
        public RegistryImpl(int i) throws RemoteException {
            bindings = new Hashtable(101);
            LiveRef liveref = new LiveRef(id, i);
            setup(new UnicastServerRef(liveref));
        private void setup(UnicastServerRef unicastserverref) throws RemoteException {
            super.ref = unicastserverref;
            unicastserverref.exportObject(this, null, true);
         * Lookup a remote object.
         * @param name Name of the remote object.
         * @return Remote object of the specified name.
        public Remote lookup(String name) throws RemoteException, NotBoundException {
    //        Logger.debug("NamingService", "lookup: " + name);
            Remote obj;
            synchronized(bindings) {
                obj = (Remote)bindings.get(name);
                if(obj == null)
                    throw new NotBoundException(name);
            return obj;
         * Binds the specified name to a remote object.
         * @param name A URL-formatted name for the remote object.
         * @param obj A reference for the remote object (usually a stub).
        public void bind(String name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException {
    //        Logger.debug("NamingService", "bind: " + name);
            checkAccess("Registry.bind");
            synchronized(bindings) {
                if(bindings.containsKey(name))
                    throw new AlreadyBoundException(name);
                bindings.put(name, obj);
         * Destroys the binding for the specified name that is associated with a remote object.
         * @param name A URL-formatted name for the remote object.
        public void unbind(String name) throws RemoteException, NotBoundException, AccessException {
    //        Logger.debug("NamingService", "unbind: " + name);
            checkAccess("Registry.unbind");
            synchronized(bindings) {
                if(!bindings.containsKey(name))
                    throw new NotBoundException(name);
                bindings.remove(name);
         * Rebinds the specified name to a new remote object. Any existing binding
         * for the name is replaced.
         * @param name A URL-formatted name for the remote object.
         * @param obj A reference for the remote object (usually a stub).
        public void rebind(String name, Remote obj) throws RemoteException, AccessException {
    //        Logger.debug("NamingService", "rebind: " + name);
            checkAccess("Registry.rebind");
            bindings.put(name, obj);
         * Returns an array of the names bound in the registry.
         * @return An array of the names bound in the registry.
        public String[] list() throws RemoteException {
            String[] names;
            synchronized(bindings) {
                int i = bindings.size();
                names = new String;
    Enumeration e = bindings.keys();
    while(--i >= 0)
    names[i] = (String)e.nextElement();
    return names;
    * TO-DO
    public static void checkAccess(String s) throws AccessException {
    // check if s is in the list of agents.
    if(true)
    else
    throw new AccessException("");
    public static ObjID getID() {
    return id;

    You don't have any need to understand this code. The complication is due to the registry needing a fixed objectID.
    You just need to know the methods of java.rmi.registry.LocateRegistry class. This allows you to start an RMI Registry inside your JVM and give it any TCP port number you like.

  • Simple question about java.rmi.registry.Registry

    Hi,
    where the object java.rmi.registry.Registry takes a URL to rmiregistry when perform bind method.
    thanks.

    Ok, will try to explain.
    I have a server that I register in the RMI registry. Client from a remote machine get the server (as a remote object) and calls his method for the generation of another object on the parameters passed. The server creates this object and tries to register it in the RMI registry, and this raises an exception Registry.Registry.rebind disallowed; origin /11.0.10.31 is non-local host.
    11.0.10.31 is a IP - address of the client

  • RMI: Unknown source problem with connection & security

    When I try to run the RMI server code, after I have granted all permissions in my policy, after compiling through RMIC generating my stub and skeleton classes, and finally after running the RMI registry, I receive an error. The error that I have been getting is pasted below. I have searched through several java forums trying to find an answer and have not found one. If you recognized this error, please let me know if you have suggestions. Thanks.
    TestRmiServer exception: access denied (java.net.SocketPermission 192.168.0.152:
    1099 connect,resolve) //note: I'm using the default RMI port
    java.security.AccessControlException: access denied (java.net.SocketPermission 1
    92.168.0.152:1099 connect,resolve)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkConnect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
    ource)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
    ource)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
    at sun.rmi.server.UnicastRef.newCall(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at java.rmi.Naming.rebind(Unknown Source)
    at irad.nmi.services.util.testRmi.TestRmiServer.main(TestRmiServer.java:
    64)
    Anyway, a response would be welcome. Thanks.

    look at thread :
    http://forum.java.sun.com/thread.jspa?threadID=597299&tstart=0
    most likely you did not specify the -Djava.security.policy property properly.

  • Bind to RMI registry on remote host

    Is it possible to bing to a RMI registry on remote host. I get a Access exception when I try it. Is there is any work around for this?
    Any help will be greatly appreciated.
    Thanks
    R

    :Like I say, JINI uses a different model to RMI, and you can probably have a look at the forum for that here.
    but a way around it is to create a server which listens for requests, accepts a remote object and a remote object name, and binds those into the registry on which its running - remember that the restriction only applies to registering objects, not to looking them up, so, once the object is registered on the remote host, it can be retrieved quite easily.
    This of course leaves the problem of exception ahandling aside, but I trust the problems there are obvious

  • RMI Server Offline Problem

    Hello all, I am e newbie in the world of RMI programming. I have developed an application that can control two devices over the internet. The code files are given below :
    Parallel.java
    import java.rmi.*;
    public interface Parallel extends Remote
         void relayDriver(byte k) throws RemoteException;
         byte currentStatus() throws RemoteException;
    ParallelImpl.java
    import parport.ParallelPort;
    import java.rmi.*;
    import java.rmi.server.*;
    public class ParallelImpl extends UnicastRemoteObject implements Parallel
         private Byte ctrlValue;
         ParallelPort lpt1 = new ParallelPort(0x378); // 0x378 is normally the base address for the LPT1 port
         public ParallelImpl(byte a) throws RemoteException
              ctrlValue = a;
              lpt1.write(ctrlValue);
              System.out.println("Device Actuation Code "+ctrlValue);
         public void relayDriver(byte k) throws RemoteException
              ctrlValue = k;
              System.out.println("Device Actuation Code "+ctrlValue);
              lpt1.write(ctrlValue);
         public byte currentStatus() throws RemoteException
    return ctrlValue;
    ParallelClient.Java
    import java.io.*;
    import java.rmi.*;
    import java.rmi.server.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class ParallelClient extends JApplet implements ActionListener
         Byte g;
         String url = "rmi://169.254.196.149/";
         private Container container;
         private javax.swing.JTextArea resultArea;
         public void init()
              container = getContentPane();
              container.setLayout( new BorderLayout() );
              resultArea = new javax.swing.JTextArea();
              JRadioButton buttonZero = new JRadioButton("No Device
    On");
         buttonZero.setMnemonic(KeyEvent.VK_A);
         buttonZero.setActionCommand("0");
         buttonZero.setSelected(true);
         JRadioButton buttonOne = new JRadioButton("Device 1 On
    Only");
         buttonOne.setMnemonic(KeyEvent.VK_B);
         buttonOne.setActionCommand("1");
         JRadioButton buttonTwo = new JRadioButton("Device 2 On
    Only");
         buttonTwo.setMnemonic(KeyEvent.VK_C);
         buttonTwo.setActionCommand("2");
         JRadioButton buttonThree = new JRadioButton("Device 1
    and 2 Both On");
         buttonThree.setMnemonic(KeyEvent.VK_D);
         buttonThree.setActionCommand("3");
         //Group the radio buttons.
         ButtonGroup group = new ButtonGroup();
         group.add(buttonZero);
         group.add(buttonOne);
         group.add(buttonTwo);
         group.add(buttonThree);
         //Register a listener for the radio buttons.
         buttonZero.addActionListener(this);
         buttonOne.addActionListener(this);
         buttonTwo.addActionListener(this);
         buttonThree.addActionListener(this);
              JPanel radioPanel = new JPanel(new GridLayout(0, 1));
         radioPanel.add(buttonZero);
         radioPanel.add(buttonOne);
         radioPanel.add(buttonTwo);
         radioPanel.add(buttonThree);
         container.add(radioPanel, BorderLayout.LINE_START);
              container.add(resultArea, BorderLayout.SOUTH);
         public void actionPerformed(ActionEvent e)
              try
                   Parallel r1 = (Parallel)Naming.lookup(url +
    "inival");
                   if(r1.currentStatus()==0)
                             resultArea.setText("Previous
    Status: No Devices Online....");
                        else if(r1.currentStatus()==1)
                             resultArea.setText("Previous
    Status: Device 1 Online. Device 2 Offline.");
                        else if(r1.currentStatus()==2)
                             resultArea.setText("Previous
    Status: Device 2 Online. Device 1 Offline.");
                        else
                             resultArea.setText("Previous
    Status: Device 1 & 2 both are Online.");
                   g = Byte.parseByte(e.getActionCommand());
                   r1.relayDriver(g);
                   if(r1.currentStatus()==0)
                             resultArea.setText("Current
    Status: No Devices Online....");
                        else if(r1.currentStatus()==1)
                             resultArea.setText("Current
    Status: Device 1 Online. Device 2 Offline.");
                        else if(r1.currentStatus()==2)
                             resultArea.setText("Current
    Status: Device 2 Online. Device 1 Offline.");
                        else
                             resultArea.setText("Current
    Status: Device 1 & 2 both are Online.");
              catch(Exception et)
                   resultArea.setText("Server OffLine");
    ParallelServer.java
    import java.io.*;
    import java.rmi.*;
    import java.rmi.server.*;
    public class ParallelServer
         public static void main(String args[])
              try
                   System.out.println("Constructing Server Implementations ....");
                   ParallelImpl p1 = new ParallelImpl((byte)0);
                   System.out.println("Binding Server Implementation to registry ....");
                   Naming.rebind("inival",p1);
                   System.out.println("Waiting for invocations from Client ....");     
              catch(Exception e)
                   System.out.println("Server is Offline or Line has broken. Error : "+ e);
    The corresponding stub files, class files have been loaded on the internet. http://rcviproject.110mb.com/
    On the server machine the rmi registry is on and the ParallelServer program is also running. But when the applet at the URL is actuated then it shows 'server offline'. Why is this happening? Please help.

    That did not print anything. The server when started by the following commands :
    start rmiregistry
    start java ParallelServer
    continues to run at Waiting for invocation from client ...... no error msg is shown.
    do i need tomcat on the server machine in addition to this ?

  • Error in re-creating RMI registry when reloading Tomcat server.

    Hi,
    I use LocateRegistry.createRegistry() in a servlet which is load-on-startup. I've unexport the registered remote object in the HttpServlet.destroy().
    But when I reload the tomcat server, such an exception ocurrs:
    java.rmi.server.ExportException: internal error: ObjID already in use
            at sun.rmi.transport.ObjectTable.putTarget(ObjectTable.java:168)
            at sun.rmi.transport.Transport.exportObject(Transport.java:69)
            at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:190)
            at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:382)
            at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:116)
            at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:145)
            at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:92)
            at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:78)
            at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:164)
            at RmiUtils.rebindLocal(RmiUtils.java:86)Here is the binding code in RmiUtils.rebindLocal:
            try {
                Naming.rebind(url, rmiImpl);
            } catch (RemoteException ce) {
                if (!ru.isLocalhost()) {
                    ce.printStackTrace();
                    // cannot cache
                    return;
                } else {
                    // try to create the registry in local machine if not created
                    try {
                        LocateRegistry.createRegistry(ru.getPort());
                        Naming.rebind(url, rmiImpl);
                    } catch (RemoteException e) {
                        System.err.println("Failure in create Registry on port "
                                + ru.getPort() + ", maybe it's been created already!");
                        e.printStackTrace();// handle exception
            }Can anybody help?
    Thanks.

    Hi
    I havent code for quite a while.
    I would think that this wont work.
    The registry is created on startup (possibly init method in ur servlet) but it is never destroyed.
    You are better off starting the registry externally to ur servlet engine, and then use do a bind/rebind on startup, unbind on destroy.
    Hope this helps.

  • Binding to RMI registry on remote host

    Is it possible to bing to a RMI registry on remote host. I get a Access exception when I try it. Is there is any work around for this?
    Any help will be greatly appreciated.
    Thanks
    R

    This is the same problem I ran into. Unfortunately there is no way around this. I had to abondon using RMI registry and instead I changed my program to use the tnameserv/orbd stand-alone naming services in a typical JNDI fashion. This tutorial has some examples, good luck:
    http://java.sun.com/j2se/1.4.1/docs/guide/rmi-iiop/tutorial.html

  • RMI newbie connection problem

    One machine (WindowsXP). Hello world test app. RMIRegistry is running. I start my server and get
    HelloImp1 err: Connection refused to host: ron; nested exception is:
         java.net.ConnectException: Connection refused: connect
    java.rmi.ConnectException: Connection refused to host: ron; nested exception is:
         java.net.ConnectException: Connection refused: connect
         at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:567)
         at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
         at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
         at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:313)
         at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
         at java.rmi.Naming.rebind(Naming.java:160)
         at rmitest.ServerImpl.main(ServerImpl.java:30)
    Caused by: java.net.ConnectException: Connection refused: connect
         at java.net.PlainSocketImpl.socketConnect(Native Method)
         at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
         at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
         at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
         at java.net.Socket.connect(Socket.java:426)
         at java.net.Socket.connect(Socket.java:376)
         at java.net.Socket.<init>(Socket.java:291)
         at java.net.Socket.<init>(Socket.java:119)
         at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
         at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
         at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:562)
         ... 6 more
    Process terminated with exit code 0
    My policy file (which it is read because it gacks on syntax errors) is
    grant {
         permission java.security.AllPermission;
    import rmitest.Server;
    import java.rmi.*;
    import java.rmi.server.UnicastRemoteObject;
    public class ServerImpl extends UnicastRemoteObject implements Server
         private String name;
         public ServerImpl( String s ) throws RemoteException
              super();
              name = s;
         public String sayHello() throws RemoteException
              return "Hello World!";
         public static void main( String args[] )
              System.setSecurityManager( new RMISecurityManager() );
              try
                   ServerImpl obj = new ServerImpl( "HelloServer" );
                   // Naming.rebind("//myhost/HelloServer", obj);
                   Naming.rebind( "rmi://ron:1099/HelloServer", obj );
                   System.out.println( "HelloServer bound in registry" );
              catch ( Exception e )
                   System.out.println( "HelloImp1 err: " + e.getMessage() );
                   e.printStackTrace();
    Help!

    Hi,
    Just try to rebind just the name of the interface to the server instance.
    Naming.rebind("Hello",obj);
    |->name of the interface.
    --P

Maybe you are looking for