starting problems with rmi

as beeing a little new to rmi i tried an helloworld example. the problem is that i get the following exception:

java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
at java.security.AccessController.checkPermission(AccessController.java:427)
HelloImpl err: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at java.net.Socket.connect(Socket.java:501)
at java.net.Socket.connect(Socket.java:457)
at java.net.Socket.(Socket.java:365)
at java.net.Socket.(Socket.java:178)
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:569)
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:306)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:160)
at HelloImpl.main(HelloImpl.java:32)

i think theres a problem with the security manager, but i followed the instructions of the official tutorial. the source:


public class HelloImpl extends UnicastRemoteObject implements Hello {
 
    public HelloImpl() throws RemoteException 
    {
        super();
    }
 
    public String sayHello() 
      {
        return "Hello World!";
    }
 
    public static void main(String args[]) 
    {
 
            // Create and install a security manager
            if (System.getSecurityManager() == null) 
            {
                System.setSecurityManager(new RMISecurityManager());
            }
      
            try 
            {
                HelloImpl obj = new HelloImpl();
      
                // Bind this object instance to the name "HelloServer"
                Naming.rebind("//localhost/HelloServer", obj);
      
                System.out.println("HelloServer bound in registry");
            } 
            catch (Exception e) 
            {
                System.out.println("HelloImpl err: " + e.getMessage());
                e.printStackTrace();
            }
    }
}
 
 
 
public class HelloApplet extends Applet
{
 
    String message = "blank";
 
    // "obj" is the identifier that we'll use to refer
    // to the remote object that implements the "Hello"
    // interface
    Hello obj = null;
 
    public void init()
    {
        try
        {
            obj = (Hello) Naming.lookup("//" + getCodeBase().getHost()
                    + "/HelloServer");
            message = obj.sayHello();
        } catch (Exception e)
        {
            System.out.println("HelloApplet exception: " + e.getMessage());
            e.printStackTrace();
        }
    }
 
    public void paint(Graphics g)
    {
        g.drawString(message, 25, 50);
    }
}

which OS ?

win xp

Typically any security exceptionn of this kind mean your security config file (java.security by default I believe) is not set up right.

The default one has very few permissions, you likely need to add a line. Luckily the security exceptions almost always give you all the info you need. Look at the exception and the format in the file and what needs to be added should be fairly obvious.

Thsi shoudl have been in the tutorial somewhere… did you read it all or just skim and copy code? :slight_smile: