Laboratório de RMI - Remote Method Invocation
- Execucão de progamas com RMI
- Definir interface entre servidor (objeto remoto) e
cliente
- módulo que estende interface java.rmi.Remote
- Programar no servidor os métodos que implementam
o serviço
- módulo que estende UnicastRemoteObject
e implementa a Interface Remota. O servidor cadastra o
serviço no servidor rmiregistry através do método
Naming.bind( ... ).
- Programar no cliente a chamada aos métodos remotos
- o programa cliente deve obter o código do stub
junto ao rmiregistry para poder executar os métodos remotos.
A obtenção de tal referência é feita através
do método Naming.lookup( ... ).
- Gerar modulos servidor e cliente
- shell compila.bat
- javac -classpath .;./classes -d ./classes
*.java
- Exemplo-1:
javac -classpath .;./classes -d ./classes *.java
- Gerar stub com rmic (o skeleton não é
gerado com parametro -v1.2) - shell compila.bat
- rmic -v1.2 -classpath . -d ./classes ClassName_Servidor
- Exemplo-1:
rmic -v1.2 -classpath . -d ./classes HelloServer
- Iniciar o rmiregistry - servico de registro de nome de
objetos e o servidor - shell rmi_server.bat
- cd ./classes; start rmiregistry [1099 - default]; cd
..
- Iniciar o Servidor - shell rmi_server.bat
- java -cp .;./classes ClassName_Servidor
- Exemplo-1:
javac -cp .;./classes HelloServer
- Iniciar o Cliente - 2 tipos de clientes dependendo do SecurityManager
- shell rmi_client.bat
- java -cp .;./classes ClassName_Cliente [ rmi://host.domain:port/ClassName_Server
]
- Exemplo-1:
java -Djava.security.policy=policy.all
-cp .;./classes HelloClient
[ rmi://localhost/helloServer
]
ou
- java -Djava.security.policy=policyFile -cp .;./classes ClassName_Cliente
[ rmi://host.domain:port/ClassName_Server
]
- Exemplo-1:
java
-cp .;./classes HelloClient1
- Exemplos de programas com RMI
- Execução de programas com RMI em plataformas
distintas
- Clients que usam o RMI devem instalar o Security Manager para controlar
o download dinamico de classes. RMISecurityManager. O arquivo
client.policy define as permissoes de acesso para a maquina do client
- Deployment - além dos passos definidos no item 1,
é preciso fazer algumas alterações para possibilitarmos
o download de classes entre maquinas. - shell
compila.bat
- Crie 3 diretorios: server, download e client abaixo
do diretório deployment irmão de classes
- Apos compilação copiar as classes compiladas para
esses diretórios, conforme abaixo:
- Exemplo-4:
copy .\classes\Product.class
.\deployment\server
-
copy .\classes\ProductImpl.class
.\deployment\server
-
copy .\classes\ProductImpl_Stub.class
.\deployment\server
-
copy .\classes\ProductServer.class
.\deployment\server
-
copy .\classes\Product.class
.\deployment\download
-
copy .\classes\ProductImpl_Stub.class
.\deployment\download
-
copy .\classes\Product.class
.\deployment\client
-
copy .\classes\ProductClient.class
.\deployment\client
-
copy .\classes\client.policy
.\deployment\client
- O download de classes pode ser feito via o WebServer ou via
protocolo file do HTTP. As permissoes do arquivo
client .policy são as seguintes:
- permission java.net.SocketPermission
"*:1024-65535", "connect,accept";
- permission java.net.SocketPermission
"localhost:80", "connect";
- Caso não tenhamos disponivel um WebServer testarmos o download
de classes usaremos a URL file com os seguintes informações:
- permission java.io.FilePermission "
D:\\Ismael\\MyDocuments\\Puc_TecGraf\\public_html\\Cursos\\2002_1\\tasb\\notas\\RMI\4-Product
", "read";
- Iniciar o rmiregistry fora do diretorio de qualquer classe
de forma que as classes sejam carregadas a partir do atributo "
java.rmi.server.codebase" - shell rmi_server.bat
- start rmiregistry [1099 - default]
- Iniciar o Servidor - shell rmi_server.bat
- start java -Djava.rmi.server.codebase=file:
//D:\\Ismael\\MyDocuments\\Puc_TecGraf\\public_html\\Cursos\\2002_1\\tasb\\notas\\RMI\4-Product
-cp .;./classes ClassName_Servidor
- Exemplo-4:
start javac -cp .;./classes ProductServer
- Exercícios:
- Exercicio 1: Complemente a aplicação
Banco
para funcionar remotamente.
Home-Cursos
Última atualização:05/05/02,
ismael