A máquina virtual Java opera com o carregamento dinâmico de classes, ou seja, bytecodes são carregados pela máquina virtual Java à medida que são solicitados pela aplicação.
Em uma aplicação operando localmente, o carregador de classes da
máquina virtual procura por essas classes nos (sub-)diretórios
especificados a partir da variável do sistema CLASSPATH
.
Se encontrada, a classe é carregada para a máquina virtual e a
operação continua. Caso contrário, a exceção
ClassNotFoundException
é gerada.
O carregamento do código de uma classe para a máquina virtual Java é realizado pelo class loader, que em si é uma classe Java que provê essa funcionalidade. O class loader deve obedecer a uma política de segurança estabelecida para aquela máquina virtual. O estabelecimento de uma política de segurança deve obedecer a um modelo de segurança específico. Um modelo padrão é utilizado, mas alternativas podem ser criadas.
Para enforçar essas políticas alternativas de segurança, um
SecurityManager
deve ser criado. Applets, por
default, utilizam um SecurityManager
estabelecido pelo navegador em cujo contexto estão executando. Outras
aplicações devem criar explicitamente esse objeto. Por exemplo, para
criar um SecurityManager padrão para RMI, a seguinte linha de
código deveria ser incluída antes de executar qualquer operação
envolvendo classes remotas:
System.setSecurityManager(new RMISecurityManager());
Se o cliente RMI estiver em um applet, então não é necessário
criar um SecurityManager
, uma vez que o próprio navegador
estabelece a política de segurança para applets.
©
Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP