How do I get my Session Bean to issue an RMI call successfully?
I am trying to contact a simple RMI method that runs on an RMI server
(rmiregistry) from code in my Session Bean. Up to now without success.
1. With the naive approach
System.setSecurityManager(new RMISecurityManager());
RemoteObject remo = (RemoteObject) Naming.lookup(toLookup);
I get a (java.net.SocketPermission xxx.xxx.xxx.xxx:xxxx
connect,resolve)
To overcome this, I have changed
- {java.home}/lib/security/java.policy
- and I have tried it the with the command line arguments
-Djava.security.manager -Djava.security.policy==my.policy
when I start orion.jar.
This policy file contained just
grant {
// Allow everything for now
permission java.security.AllPermission;
permission com.evermind.server.AdministrationPermission;
permission java.net.SocketPermission "*:1024-65535",
"listen,accept,connect,resolve";
};
However, this didn't change Orions behaviour.
The approach with
// create and fill a Hashtable "environment", then call
InitialContext context = new InitialContext (environment);
didn't work either.
2. Suspecting that the Orion server interferes with the normal policy
concept, I tried to change the rmi.xml file.
The mere adding of a line like
<server host="localhost" username="admin" password="admin" />
to rmi.xml leads to the server not starting up. It does not say "Orion
1.0.3 initialized" and it does not react (in the case rmiregistry runs;
if not an Exception is thrown indicating the connection is refused).
This is clearly a bug: If the server can't cope with a situation it
should at least leave a message and not just be stuck silently. This is
true if you start Orion just as it ships with just the rmi.xml changed.
So the question is: How can I contact an RMI server from within an EJB?
If you don't know that, perhaps you can answer this one: How can I
permit SocketPermission (and other permissions?) to the code in my EJB?
Thanks in advance