Jump to content

Java RMI

- - - - -

  • Please log in to reply
1 reply to this topic

#1
Apprentice123

Apprentice123

    Programming Expert

  • Members
  • PipPipPipPipPipPip
  • 430 posts
I did the following program:

Interface.java

public interface Interface extends java.rmi.Remote

{

        public String Hello(String str) throws java.rmi.RemoteException;

}



Implementation.java

import java.rmi.*;

import java.rmi.server.*;

import java.io.*;

import java.lang.*;


public class Implementation extends UnicastRemoteObject implements Interface

{

	public Implementation(String str) throws RemoteException

	{

		super();

		try

		{

			Naming.rebind(str,this);

		}

		catch(Exception e)

		{

			System.out.println("Error "+e);

		}

	}

	

	public String Hello(String str)

	{

		return ("Hello "+str);

	}

}


Server.java

import java.net.*;

import java.rmi.*;

import java.rmi.server.*;

import java.rmi.registry.*;


public class Server

{

	public static void main(String []argv)

	{

		System.setSecurityManager(new RMISecurityManager());

		try

		{

			Implementation impl = new Implementation("Implementation");

			System.out.println("Server Waiting for Client");

		}

		catch(Exception e)

		{

			System.out.println("Error "+e);

		}

	}

}


Client.java

import java.net.*;

import java.rmi.*;

import java.rmi.server.*;

import java.rmi.registry.*;

import java.io.*;

import java.lang.*;


public class Client

{

	public static void main(String []argv)

	{

		System.setSecurityManager(new RMISecurityManager());

				

		try

		{

			Implementation impl = (Implementation)

                        Naming.lookup("rmi://localhost/Implementation");

			

                        String str;

			BufferedReader br=new BufferedReader(new           InputStreamReader(System.in));

                        System.out.print("Enter name : ");

                        str=br.readLine();                         

                        System.out.println(impl.Hello(str));

                        }

		catch(Exception e)

		{

			System.out.println("Error "+e);

		}

	}

}


I compile this:

D:\RMI\Prog1>javac *.java
D:\RMI\Prog1>rmic Implementation
D:\RMI\Prog1>start rmiregistry
D:\RMI\Prog1>start java -classpath . -Djava.security.policy=java.policy Server
D:\RMI\Prog1>java -classpath . -Djava.security.policy=java.policy Client 127.0.0.1

When compiling Server, the following message appears:


Error java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)

Server Waiting for Client


And when compiling Client, appears:

Error java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)


Why do these errors appear?

#2
wim DC

wim DC

    Writes binary right handed and hex left handed

  • Members
  • PipPipPipPipPipPipPipPipPip
  • 2,084 posts
  • Programming Language:Java, JavaScript, PL/SQL
  • Learning:Java
Because your security manager tells java not to allow 127.0.0.1 (=localhost) to connect and resolve.
Create a file with this content:

grant

{

    permission java.net.SocketPermission "127.0.0.1:1099", "connect, accept, resolve";

};

Name doesn't matter (security.policy would be a good name tho :P)

Then start the server with an extra JVM parameter:

-Djava.security.policy="C:\Users\You\Documents\java\CodeCallHelp\src\Rmi\security.policy"


Edit: Oh yea, I run RMI at port 1099, maybe different for you.




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users