j'ai un problème avec la mise en place d'un security managerRMI, en effet
je voudrais qu'un client faisant partie d'une application distribuée via
RMI puisse télécharger les classes qu'il n'a pas en local.
pour pouvoir utiliser ce mécanisme de l'API RMI, on doit d'abord mettre en
place un security manager. jusque la tout va bien :)
mais lorsque j'affecte le security manager, alors l'appli plante, et je
recoit une exception de cette sorte :
Hit uncaught exception java.security.AccessControlException
java.security.AccessControlException: access denied
(java.net.SocketPermission bidouille resolve)
at
java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
at
java.security.AccessController.checkPermission(AccessController.java:401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1042)
at java.net.InetAddress.getAllByName0(InetAddress.java:937)
at java.net.InetAddress.getAllByName0(InetAddress.java:918)
at java.net.InetAddress.getAllByName(InetAddress.java:912)
at java.net.InetAddress.getByName(InetAddress.java:832)
at java.net.InetSocketAddress.<init>(InetSocketAddress.java:109)
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)
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.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:84)
at CalculatorClient.<init>(CalculatorClient.java:9)
at CalculatorClient.main(CalculatorClient.java:58)
(désolé pour la longeur :))
sinon, si je ne mets pas de security manager, tout fonctionne (a condition
de mettre les bonnes classes en local de l'appli bien sur :)
bon apparement ca plante parceque je ne spécifie pas l'autorisation à faire
un 'resolve' sur cette adresse, mais comment faire alors ? j'ai cherché pas
mal dans la doc java, et galère .....:)
voici un apercu de mon code :
public class CalculatorClient{
CalculatorClient() {
System.setSecurityManager(new RMISecurityManager());
try {
Calculator c = (Calculator)
Naming.lookup("rmi://bidouille/CalculatorService"); <-- c de là que vient
l'exception
System.out.println(c.sub(4, 3));
*****
***
**
*
}
public static void main(String[] args) {
new CalculatorClient();
}
}
Quelqu'un a-t-il deja eu ce genre de problèmes ? si oui, comment spécifier
au security manager que l'on accepte le 'resolve' sur l'@ de l'hote ?
pour info :
mon "serveur" RMI est lancé au préalable (classe implémentant Calculator),
et sur le port par défaut (1099).
je travaille sous JBuilder 9 EE
merci d'avance ! cordialement,
Vincent.
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/