Servlet acessando serviço RMI: java.security.AccessControlE

Olá pessoal. Estou implementando um servlet que deve conectar a um serviço RMI. Estou tendo problemas de controle de acesso entre o servlet (cliente) e o servidor RMI:

java.security.AccessControlException: access denied (java.lang.RuntimePermission setContextClassLoader)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269)
at java.security.AccessController.checkPermission(AccessController.java:401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:524)
at java.lang.Thread.setContextClassLoader(Thread.java:1212)

Sei que este problema deve-se a falta do java.policy. O problema está justamente aí. Compactei o .war com todo o serviço (inclusive o java.policy com permissão para conexão). No tutorial de RMI do site da SUN, a referência ao arquivo java.policy é feito em linha de comando passando-se como uma propriedade, assim:

-Djava.security.policy=java.policy

Como faço para que o Tomcat use o java.policy que tenho para este contexto (onde o servlet acessa RMI) especificamente? Grato T+

Como tu referenciou a este RMI, poste o código.
:okok:

Olá, a chamada é feita a este método:

public StringBuffer getResponse(SVCInitElement svcInitElement)
throws MalformedURLException, RemoteException, NotBoundException {

if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}

GMLCPositionRequest gmlc = buildGMLCPositionRequest(svcInitElement);
EOTD eotd = (EOTD) Naming.lookup(EOTD.SERVICE_NAME);
return eotd.locale(gmlc);

}

Esta implementação está muito parecida com o exemplo da Sun. Quando rodei um cliente de teste o programa funcionou. Mas aí executei a linha de comando fornecendo a ele como parâmetro a referência ao arquivo java.policy que ele deveria utilizar. Meu problema é fazer o Tomcat associar isto ao contexto do meu servlet. Outro detalhe é que o Tomcat roda como serviço do Windows, não sei se isto ajuda. Valeu T+

Se alguém souver de alguma referência de como fazer um servlet invocar métodos RMI eu agraderia muito :grin:

mas vai ser da mesma maneira como qualquer outra aplicação java invocaria :roll:

Entendo… o problema em si não é a invocação e sim associar um arquivo java.police ao contexto da aplicação ou ao Tomcat. Pois sem isso ele não comunica e gera erro de segurança.