INF01018 – Aula Pr´atica 2 – RMI – Remote Method - Inf

Propaganda
INF01018
– Aula Prática 2 –
RMI – Remote Method Invocation
Lucas Mello Schnorr, Alexandre Silva Carı́ssimi
{lmschnorr,asc}@inf.ufrgs.br
http://www.inf.ufrgs.br/∼lmschnorr/ad/
INF01018 – Sistemas Operacionais
Distribuı́dos e de Redes
Sala 102 – Prédio 67 – 14 Setembro 2006
1 / 18
Roteiro
1
Relembrando a Parte Teórica
2
Levando a teoria para Java RMI
3
Projeto do Programa
4
Roteiro da Implementação
5
Detalhes Importantes
6
Execução da Aplicação
7
Referências
2 / 18
Relembrando a Parte Teórica
Estrutura básica (Couloris)
Proxy, Dispatcher, Stubs, Módulos de
referência e de comunicação
Marshalling – Unmarshalling
3 / 18
Java RMI a partir da teoria
4 / 18
Projeto do Programa
5 / 18
Roteiro da Implementação – Server
1
2
3
4
CalculatorInterface
CalculatorImpl
Criação dos Stubs e Proxy com auxı́lio de rmic
CalculatorServer
6 / 18
Passo 1 – CalculatorInterface.java
0
1
2
3
4
5
6
7
8
9
10
11
12
public i n t e r f a c e C a l c u l a t o r I n t e r f a c e extends j a v a . r m i . Remote {
public long add ( long a , long b )
throws j a v a . r m i . RemoteException ;
public long sub ( long a , long b )
throws j a v a . r m i . RemoteException ;
public long mul ( long a , long b )
throws j a v a . r m i . RemoteException ;
public long div ( long a , long b )
throws j a v a . r m i . RemoteException ;
}
7 / 18
Passo 2 – CalculatorImpl.java
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class C a l c u l a t o r I m p l
extends j a v a . r m i . s e r v e r . UnicastRemoteObject
implements C a l c u l a t o r I n t e r f a c e {
public C a l c u l a t o r I m p l ( )
throws j a v a . r m i . RemoteException {
super ( ) ;
}
public long add ( long a , long b ) {
System . o u t . p r i n t l n ( a+ ” ∗ ” +b+ ” = ” +( a+b ) ) ;
return a + b ;
}
public long sub ( long a , long b ) {
System . o u t . p r i n t l n ( a+ ”−” +b+ ” = ” +( a−b ) ) ;
return a − b ;
}
/ ∗ . . . mul e d i v . . . ∗ /
8 / 18
Passo 3 – Stub e Proxy usando rmic
javac CalculatorInterface.java
javac CalculatorImpl.java
rmic CalculatorImpl
Será criado um arquivo CalculatorImpl Stub.class
Utilização automática pelo RMI do Java
Marshalling e Unmarshalling dos dados
Utilizada na execução do servidor e do cliente
9 / 18
Passo 4 – CalculatorServer.java
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class C a l c u l a t o r S e r v e r {
public C a l c u l a t o r S e r v e r ( ) throws E x c e p ti o n {
/ ∗ c r i a c a o do g e r e n c i a d o r de seguranca ∗ /
System . s e tS e c u r i ty M a n a g e r (new RMISecurityManager ( ) ) ;
/ ∗ c r i a c a o do o b j e t o C a l c u l a t o r I m p l ∗ /
C a l c u l a t o r I n t e r f a c e c a l c u l a t o r = new C a l c u l a t o r I m p l ( ) ;
/ ∗ associacao desse o b j e t o a um nome ∗ /
j a v a . r m i . Naming . r e b i n d
( ” r m i : / / carpa . i n f . u f r g s . b r : 1 0 9 9 / C a l c u l a t o r S e r v i c e ” ,
calculator ) ;
}
public s t a t i c void main ( S t r i n g args [ ] ) throws E x c e p ti o n {
new C a l c u l a t o r S e r v e r ( ) ;
}
}
10 / 18
Roteiro da Implementação – Client
1
CalculatorClient
11 / 18
Passo 1 – CalculatorClient.java
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class C a l c u l a t o r C l i e n t {
public s t a t i c void main ( S t r i n g [ ] args ) throws E x c e p ti o n {
System . s e tS e c u r i ty M a n a g e r ( new RMISecurityManager ( ) ) ;
CalculatorInterface c ;
/ ∗ e n c o n t r a r o o b j e t o remoto a p a r t i r do nome ∗ /
c = ( CalculatorInterface )
Naming . lookup
( ” r m i : / / carpa . i n f . u f r g s . b r / C a l c u l a t o r S e r v i c e ” ) ;
/ ∗ chamada de metodos do o b j e t o remoto ∗ /
System . o u t . p r i n t l n ( c . sub ( 4 , 3 ) ) ;
System . o u t . p r i n t l n ( c . add ( 4 , 5 ) ) ;
System . o u t . p r i n t l n ( c . mul ( 3 , 6 ) ) ;
System . o u t . p r i n t l n ( c . div ( 9 , 3 ) ) ;
12 / 18
Detalhes Importantes
Execução do cliente sem o Proxy
Execução do cliente sem o Proxy
schnorr@hurricane:∼/client$ java CalculatorClient
RemoteException
java.rmi.UnmarshalException: error unmarshalling
return; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl Stub
schnorr@hurricane:∼/client$
13 / 18
Detalhes Importantes
Execução do cliente sem o Proxy
Como o cliente encontra o Proxy
(CalculatorImpl Stub.class)
Copiar o arquivo da classe para o diretório onde o
cliente será executado
Especificar a localização da classe para a máquina
virtual no momento da execução do cliente
Propriedades do Java (Java Properties)
java.rmi.server.codebase=LOCALIZACAO DA CLASSE
A localização pode ser:
endereço (http://www.inf.ufrgs.br/∼lmschnorr/ad/classes/)
diretório (file:///home/usuarios/nomedousuario/classes/)
entre outros
Para usar:
java -Djava.rmi.server.codebase=http://www/∼lmschnorr/ad/classes/ CalculatorClient
14 / 18
Detalhes Importantes
Execução do cliente sem segurança
Execução do cliente sem segurança
schnorr@hurricane:∼/client$ java CalculatorClient
Exception in thread
”main”java.security.AccessControlException:
access denied (java.net.SocketPermission carpa.inf.ufrgs.br
resolve)
schnorr@hurricane:∼/client$
15 / 18
Detalhes Importantes
Execução do cliente sem segurança
8
9
public s t a t i c void main ( S t r i n g [ ] args ) throws E x c e p ti o n {
System . s e tS e c u r i ty M a n a g e r ( new RMISecurityManager ( ) ) ;
A classe RMISecurityManager precisa de um arquivo
com polı́ticas de segurança para a máquina virtual
Arquivo texto java.policy
0
1
2
3
grant {
p e r m i s s i o n j a v a . n e t . SocketPermission ” ∗:1024−65535 ” , ” connect , acce
p e r m i s s i o n j a v a . n e t . SocketPermission ” ∗:80 ” , ” connect ” ;
};
Propriedades do Java (Java Properties)
java -Djava.security.policy=java.policy CalculatorClient
16 / 18
Execução da Aplicação
Execução utilizando os terminals
17 / 18
Referências
jGuru: Remote Method Invocation (RMI)
http://java.sun.com/developer/onlineTraining/rmi/RMI.html
Dynamic code downloading using RMI
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/codebase.html
Java Remote Method Invocation: - Contents
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/spec/rmiTOC.html
Package java.rmi – Descrição das classes e métodos
http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/package-summary.html
The Java Tutorials – Trail: RMI: Table of Contents
http://java.sun.com/docs/books/tutorial/rmi/TOC.html
18 / 18
Download