Você está na página 1de 21

Sistemas Distribuidos

• Demasiado complicado, para o


comum dos programadores...

Sistemas Distribuídos
Hoje em dia…
• O paradigma de desenvolvimento
dominante é Orientado aos Objectos
(OOP)

Sistemas Distribuídos
Modelo de RPCs/RMIs
• Modelo de programação que se
aproxime dos programas tradicionais
(centralizados).
• Chamada de procedimentos.
• Invocação de métodos.

Sistemas Distribuídos
Middleware
• Software que fornece um modelo de
programação acima dos blocos básicos de
construção de processos e mensagens.
• Permite aos desenvolvedores concentrar-se na
lógica da aplicação em vez de detalhes da
distribuição (programação na camada de
aplicação).

Sistemas Distribuídos
RPC/RMI Middleware of
common use
• Common Object Request Broker
Architecture (CORBA): Object Management
Group (OMG), many providers
• Distributed Component Object Model
(DCOM): Microsoft
• Remote Procedure Call: Two major
specifcations: Sun’s and DCE (inc. Microsoft)
• Remote Method Invocation – RMI: CORBA
is a form of RMI, Java RMI (from Sun)
• Simple Object Access Protocol (SOAP):
Many providers inc. Microsoft and Sun
Sistemas Distribuídos
Objectivos de se usar
Middleware
• Programming Model Transparency: You don’t
have to know that you are using remote objects
• Location Transparency: You don’t have to
know where the objects reside
• Transport Transparency: Middleware
supporting abstractions are independent of the
underlying transport mechanisms
• Hardware Transparency: You don’t have to
care about the architecture of the diferent
machines were your program is running
• Language Transparency: You don’t have to
worry about in which language the objects were
really written Sistemas Distribuídos
Object Model…

Sistemas Distribuídos
Remote and Local
Invocations
• Existem dois pontos importantes a
perceber:
– O atraso na chamada de método é
diferente
– A semantica de erros tambem é
diferente

Sistemas Distribuídos
Remote Object and its
Interface
• Cada processo contém objectos, alguns dos quais
podem receber invocações remotas, outros
apenas invocações locais
• Aqueles que podem
receber invocações remotas são chamados
objectos remotos
• Objectos precisam saber a referência do objecto
remoto de um objecto em outro processo, a fm
de chamar seus métodos…
• Como eles conseguem saber a referencia do
objecto remoto?
– A interface remota especifca quais métodos podem ser
invocados remotamente
Sistemas Distribuídos
Before and object can be used,
the Binder Service (Registry) must
be consulted
• Serviço que mantém uma tabela contendo
mapeamentos de nomes textuais ou a
referência de cada objecto remoto: In Java
RMI - RMI Registry and Sun RPC:
portmapper

Sistemas Distribuídos
Let’s Get Practical
with Java RMI

Sistemas Distribuídos
Building a Java RMI server
object
• Defnimos uma interface de objectos
remotos normalmente e ela deve ser
extendida a java.rmi.Remote
• Em todos os metodos devemos
prever excepcoes
java.rmi.RemoteException

Sistemas Distribuídos
Building a Java RMI server
object
• A implementacao da class de
objectos remotos deve ser extendida
a
java.rmi.server.UnicastRemoteO
bject e implementado a interface de
objectos remotos acima descrito
• NOTA: Todas classes objectos que
viajam pela rede devem ser
serializaveis, ou seja, devem ser
implementadas com io.Serializable
Sistemas Distribuídos
Compiling and running
• Before you run the program you have
to:
– Compile it: javac *.java
– Gerar os stubs e skeletons para a
classe de objectos remotos: rmic
classeInplements
– Setup a policy fle (security.policy):

Sistemas Distribuídos
Compiling and running
(2)
• For running the server
– Initiate Java’s Registry service: start
rmiregistry
– Run the server: java Server

• For running the client


– java Client

• Note: Make sure that the client has


access to the Sistemas Distribuídos
The Registry
• O nome de objectos remotos incluem
as seguintes informacoes:
– O endereco “Internet” da maquina que
esta executando o RMI Registry, com o
qual o objecto remoto esta sendo
registado
– O porto pelo qual o RMI Registry esta
escutando (default port 1099)
– O nome local do objecto remoto com o
RMI Registry
– Exemplo: Sistemas Distribuídos
The Registry (2)
• Nao precisamos arrancar o registry independente
se usarmos a instrucao:
LocateRegistry.createRegistry(PORT);

• Important methods of Registry


– // Returns an array of the names bound in this
registry
• String[] Registry.list();
– // Returns the reference bound to the specifed
name
• Remote lookup(String objectName);
– // Replaces the binding for the specifed name
Sistemas Distribuídos
• void rebind(String objectName, Remote object);
Security in RMI
• Se nao expecifcarmos o
SecurityManager, nao teremos
acesso a informcacao passada pela
rede
• Typically, the RMISecurityManager is
used:
System.getProperties().put("java.security.policy",
"security.policy");
System.setSecurityManager(new
RMISecurityManager());

Sistemas Distribuídos
More details on RMI
• Parameters are either passed by
value or reference
– Pass by value
• Atomic types (int, double, etc.)
• Serializable classes
– Pass by reference
• Any remote object (i.e. coming from
Remote)

Sistemas Distribuídos
• [Coulouris2001]
– Capítulo 5 (todo…!!!)
– Secção 6.5

Sistemas Distribuídos

Você também pode gostar