Você está na página 1de 4

Exerccio Programa 1

Java Remote Method Invocation (RMI)

Prof. Dr. Daniel Cordeiro


Escola de Artes, Cincias e Humanidades
Universidade de So Paulo

Entrega: 22 de abril de 2017

Descrio Geral
Vamos construir uma verso enxuta de um sistema de informaes sobre pe-
as ou componentes (parts) usando Remote Method Invocation (RMI) de Java.
O sistema ser distribudo por mltiplos servidores, cada qual implementando
um repositrio de informaes sobre peas. Cada pea ser representada por
um objeto cuja interface Part. Cada servidor implementar um objeto Par-
tRepository, que essencialmente uma coleo de Parts.
As interfaces Part e PartRepository devem ser definidas por vocs e so
parte da implementao do EP.

Part Cada objeto Part encapsula as seguintes informaes:

o cdigo da pea, um identificador automaticamente gerado pelo sistema


na ocasio da insero das informaes sobre a pea;

o nome da pea;

a descrio da pea;

a lista de subcomponentes da pea.

Uma pea pode ser uma agregao de subcomponentes ou pode ser uma
pea primitiva (no composta por subpeas). Sua lista de subcomponentes con-
tm pares (subPart, quant), onde subPart referencia um subcomponente da

1
2

pea, e quant indica quantas unidades do subcomponente aparecem na pea.


Uma pea primitiva tem sua lista de componentes vazia.
Os subcomponentes de um objeto Part agregado so tambm objetos Part.
Esses objetos no so necessariamente implementados pelo mesmo servidor
que implementa a pea agregada. Eles podem estar distribudos por mltiplos
servidores.

PartRepository Os objetos PartRepository devem implementar reposit-


rios de peas, isso , servidores para o acesso conjuntos de peas. Em particu-
lar, voc deve ser capaz de inserir uma nova Part ao repositrio, recuperar uma
Part pelo seu cdigo e obter uma lista de todas as Parts que esto armazenadas
em um dado repositrio.
Neste EP, apenas os servidores implementados por PartRepository devem
ser registrados e recuperados do servio de nomes do Java RMI.

Instrues
Cada equipe de projeto escrever um programa servidor e um programa cli-
ente.

O Servidor
O programa servidor implementar as interfaces PartRepository e Part. Escreva-
o tendo em mente que podero ocorrer vrias execues simultneas do pro-
grama servidor: cada processo servidor (uma execuo do programa servidor)
implementar um objeto PartRepository, mais a correspondente coleo de
objetos Part. Isto significa que o programa servidor deve receber como ar-
gumentos, na linha de comando, certos parametros que devem variar de um
processo servidor para outro (o nome do servidor, por exemplo).

O Cliente
O programa cliente ser usado para exercitar o sistema. Ele deve permitir que
o usurio:

estabelea uma conexo com um (processo) servidor;

interaja com o repositrio implementado pelo servidor:

examinando o nome do repositrio e o numero de peas nele conti-


das,
3

listando as peas no repositrio,


buscando uma pea (por cdigo de pea) no repositrio,
adicionando ao repositrio novas peas (primitivas ou agregadas);
tendo uma referncia a uma pea, referncia essa previamente obtida
como resultado de uma busca num repositrio, interaja com a pea:
examinando o nome e a descrio da pea,
obtendo o (nome do) repositrio que a contm,
verificando se a pea primitiva ou agregada,
obtendo o nmero de subcomponentes diretos e primitivos da pea,
listando suas subpeas.

Fique vontade para definir como seu programa cliente vai fazer a interface
com os usurios. O nico requisito que a interface com o usurio permita que
o sistema seja exercitado da forma descrita acima. Em particular, o programa
cliente deve possibilitar que um usurio crie (de modo razoavelmente conve-
niente) peas agregadas cujas subpeas estejam distribudas por vrios repo-
sitrios. Provavelmente o mais fcil escrever um cliente com uma interface
tipo linha de comando. Uma possibilidade um cliente linha de comando que
mantenha trs variveis:

o repositrio corrente, uma referncia ao repositrio com o qual toda


interao ocorre;
a pea corrente, uma referncia pea com a qual toda interaao ocorre;
a lista de subpeas corrente, usada exclusivamente quando uma nova
pea adicionada ao repositrio corrente.

Tal cliente apresentaria um prompt e ficaria esperando comandos do usu-


rio. Ele aceitaria comandos como:

bind Faz o cliente se conectar a outro servidor e muda o repositrio corrente.


Este comando recebe o nome de um repositrio e obtm do servio de
nomes uma referncia para esse repositrio, que passa a ser o repositrio
corrente.
listp Lista as peas do repositrio corrente.
getp Busca uma pea por cdigo. A busca efetuada no repositrio corrente.
Se encontrada, a pea passa a ser a nova pea corrente.
4

showp Mostra atributos da pea corrente.


clearlist Esvazia a lista de subpeas corrente.
addsubpart Adiciona lista de subpeas corrente n unidades da pea corrente.
addp Adiciona uma pea ao repositrio corrente. A lista de subpeas corrente
usada como lista de subcomponentes diretos da nova pea. ( s para
isto que existe a lista de subpeas corrente.)
quit Encerra a execuo do cliente.

A lista acima tem a finalidade de ilustrar como um cliente linha de co-


mando poderia funcionar. Tome-a como uma sugesto (incompleta, por sinal),
que pode ser seguida ou no. Se voc tiver gs para escrever um cliente com
uma interface com o usurio mais elaborada e amigvel (GUI), v em frente!

Instrues
As instrues abaixo devem ser seguidas risca:

1. O EP deve ser feito em equipes de 2 ou 3 pessoas.


2. Dvidas em relao ao EP devem ser discutidas no frum do e-Disciplinas:
https://edisciplinas.usp.br/mod/forum/view.php?id=1454135. To-
dos so fortemente encorajados a participar das discusses e ajudar seus
colegas.
3. Entregue junto com o EP um relatrio detalhado descrevendo a soluo
implementada e alguns exemplos de uso da interface do EP. Por exemplo,
se voc implementar um prompt de comando, cada exemplo consistiria
de um sesso com os comandos necessrios e suas respectivas sadas.
Os cenrios sero testados durante, portanto assegure-se que eles esto
completos e autoexplicativos.
4. Cuidado ao seguir tutoriais desatualizados na Internet. O arcabouo que
implementa o Java RMI sofreu vrias modificaes ao longo dos anos. Sua
capacidade de encontrar informaes confiveis e atualizadas ser levada
em considerao na atribuio da nota.

Esse EP uma adaptao para Java RMI do EP1 proposto pelo prof. Francisco
Reverbel (IME/USP) para seu curso com CORBA.
1
http://www.ime.usp.br/~reverbel/SOD-03/proj_corba.html