Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf ·...

24
Remote Method Invocation (RMI) November 1, 2009 Sumário RMI Conceito Implementação Exemplos Java RMI Características Objectos Remotos e Interfaces Remotas Implementação de Java RMI Argumentos e serialização Transferência de código Localização de objectos remotos Segurança Tempo de vida dum objecto remoto Passos no desenvolvimento de aplicações Transferência de código

Transcript of Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf ·...

Page 1: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Remote Method Invocation (RMI)

November 1 2009

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

RMI e RPC

I RPC significou um passo muito grande em direcccedilatildeo agravetransparecircncia de distribuiccedilatildeo na programaccedilatildeo

I a maior parte do coacutedigo que mostra a natureza distribuiacutedada aplicaccedilatildeo pode ser

I gerada automaticamente pex por rpcgenI ldquoisoladardquo da parte restante do coacutedigo

I o coacutedigo (texto) a desenvolver pelo programadorpraticamente natildeo depende da distribuiccedilatildeo e oprogramador pode quase ignoraacute-la

I embora esta praacutetica seja questionaacutevelI Com a adopccedilatildeo generalizada da programaccedilatildeo baseada

em objectos estender RPCs a objectos era inevitaacutevelRMI (Remote Method Invocation) eacute RPC baseada emobjectos

Programaccedilatildeo Distribuiacuteda Baseada em ObjectosI O conceito de objecto eacute especialmente adaptado para

aplicaccedilotildees distribuiacutedasI Um objecto agrega os dados e as operaccedilotildees que operam

sobre esses dadosI Objectos podem residir em diferentes computadores

ligados por uma redeI A interaccedilatildeo entre objectos eacute feita atraveacutes de invocaccedilatildeo

remota de meacutetodos (remote method invocation) ie RPCpara objectos

MetodosDados

Objecto

MetodosDados

Objecto

MetodosDados

Objecto

MetodosDados

Objecto

Computador 2Computador 1

Invocaccedilatildeo Local vs Invocaccedilatildeo Remota

Local MI

Remote MI

process

object

host

I Um caso particular da invocaccedilatildeo remota envolve objectosem processos diferentes do mesmo computador

I Note-se que cada objecto reside apenas num processoie o estado dos objectos natildeo eacute distribuiacutedo

Transparecircncia do Cliente e Proxy-Objects

I A invocaccedilatildeo dum meacutetodo num objecto remoto deveraacute serfeita de modo semelhante agrave invocaccedilatildeo dum meacutetodo numobjecto local

I Com RPCs o truque eacute invocar uma funccedilatildeo local ndash o clientstub ndash a qual se encarrega da comunicaccedilatildeo entreprocessos

I Com RMI o truque eacute invocar o meacutetodo sobre um objectolocal ndash o proxy objectndash o qual natildeo executa o meacutetodo masencarrega-se de o passar ao objecto remoto

Transparecircncia do Lado do Servidor e Skeletons

I A transparecircncia do lado do servidor eacute conseguida comrecurso ao conceito de skeleton

I O skeleton eacute um objecto queI extrai (unmarshals) os argumentos da mensagem recebida

e invoca o meacutetodo apropriado do objecto invocado (local)I constroacutei a mensagem resposta com os resultados da

invocaccedilatildeo do meacutetodo e envia-la

RMI Arquitectura de Implementaccedilatildeo

Server machine

Object

Client machine

Proxy

Sameinterfaceas object

Interface

State

MethodClientinvokesa method

Network

Skeletoninvokessame methodat object

Marshalled invocationis passed across network

Client OS Server OS

Server

Skeleton

Client

I Alternativamente a funcionalidade do skeleton pode serimplementada pela classe do objecto remoto

RMI - Exemplos

CORBA RMI Heterogeneidade eacute a caracteriacutestica distintivaI O objecto e o cliente podem ser implementados

usando linguagens diferentesI Para o efeito CORBA define uma Interface Definition

Language (IDL) funcionalmente anaacuteloga a RPCLI CORBA suporta inclusivamente linguagens

natildeo-baseadas em objectos como C ou Cobol

Java RMI Dependente da linguagem

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Java RMI Caracteriacutesticas (12)

I ldquoIntegradardquo na linguagem JavaI mais faacutecil de usar ndash natildeo haacute necessidade de usar

linguagens de especificaccedilatildeo de interfaces pex InterfaceDefinition Language (IDL) em CORBA

I Invocaccedilatildeo de meacutetodos remotos usa a mesma sintaxe quea invocaccedilatildeo de meacutetodos locais mas

I Distribuiccedilatildeo dos objectos eacute exibida intencionalmenteI a invocaccedilatildeo dum meacutetodo remoto pode assinalar uma

excepccedilatildeo RemoteExceptionI para que os meacutetodos dum objecto possam ser invocados

remotamente a classe correspondente deveraacute implementaruma interface remota

Java RMI Caracteriacutesticas (22)

I Benificia da mobilidade deI coacutedigo (classes)I objectos

entre computadores suportada por JavaI Distributed Garbage Collection

I um objecto ldquodesaparecerdquo automaticamente quando natildeopode ser acedido

Objectos Remotos e Interfaces Remotas

I Objectos remotos satildeo objectos cujos meacutetodos podem serinvocados duma JVM diferente daquela onde residem

I Um objecto remoto tem que implementar uma interfaceremota ie o seu tipo eacute um subtipo da interface Remote

I Permite que o compilador de Java gere o coacutedigonecessaacuterio para realizar a comunicaccedilatildeo entre objectos emJVMs distintas

I A natildeo-localidade dum objecto remoto eacute exposta aosprogramadores dos ldquoclientesrdquo

I Todos os meacutetodos da interface Remote tecircm que assinalarRemoteExceptions

I Um objecto remoto pode incluir meacutetodos natildeo invocaacuteveisremotamente

I Soacute meacutetodos declarados em interfaces remotas podem serinvocados remotamente

Remote Interface Exemplo

I A interface remota dum ldquoservidor de ecordquo pode serimport javarmiRemoteimport javarmiRemoteException

public interface Echo extends Remote String echo(String str) throws RemoteException

I Esta interface suporta um uacutenico meacutetodo remoto echo oqual retorna a string que lhe eacute passada como argumento

I O meacutetodo echo dum objecto que implemente estainterface pode ser invocado remotamente

I Ie pode ser invocado por um objecto a executar numamaacutequina virtual de Java (JVM) diferente

Acesso a Objectos Remotos

I Para usar um objecto remoto um cliente tem queconhecer a interface remota desse objecto

I ie os meacutetodos desse objecto que podem ser invocadosremotamente

I A sintaxe de invocaccedilatildeo de meacutetodos remotos eacute semelhanteagrave de invocaccedilatildeo de meacutetodos locaisEcho montanha = lookup montanhaString ecotry

eco = montanhaecho(lsquolsquoUh Uhrsquorsquo) catch ( RemoteException e)

I Contudo os clientes tecircm que processar excepccedilotildees do tipoRemoteException

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 2: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

RMI e RPC

I RPC significou um passo muito grande em direcccedilatildeo agravetransparecircncia de distribuiccedilatildeo na programaccedilatildeo

I a maior parte do coacutedigo que mostra a natureza distribuiacutedada aplicaccedilatildeo pode ser

I gerada automaticamente pex por rpcgenI ldquoisoladardquo da parte restante do coacutedigo

I o coacutedigo (texto) a desenvolver pelo programadorpraticamente natildeo depende da distribuiccedilatildeo e oprogramador pode quase ignoraacute-la

I embora esta praacutetica seja questionaacutevelI Com a adopccedilatildeo generalizada da programaccedilatildeo baseada

em objectos estender RPCs a objectos era inevitaacutevelRMI (Remote Method Invocation) eacute RPC baseada emobjectos

Programaccedilatildeo Distribuiacuteda Baseada em ObjectosI O conceito de objecto eacute especialmente adaptado para

aplicaccedilotildees distribuiacutedasI Um objecto agrega os dados e as operaccedilotildees que operam

sobre esses dadosI Objectos podem residir em diferentes computadores

ligados por uma redeI A interaccedilatildeo entre objectos eacute feita atraveacutes de invocaccedilatildeo

remota de meacutetodos (remote method invocation) ie RPCpara objectos

MetodosDados

Objecto

MetodosDados

Objecto

MetodosDados

Objecto

MetodosDados

Objecto

Computador 2Computador 1

Invocaccedilatildeo Local vs Invocaccedilatildeo Remota

Local MI

Remote MI

process

object

host

I Um caso particular da invocaccedilatildeo remota envolve objectosem processos diferentes do mesmo computador

I Note-se que cada objecto reside apenas num processoie o estado dos objectos natildeo eacute distribuiacutedo

Transparecircncia do Cliente e Proxy-Objects

I A invocaccedilatildeo dum meacutetodo num objecto remoto deveraacute serfeita de modo semelhante agrave invocaccedilatildeo dum meacutetodo numobjecto local

I Com RPCs o truque eacute invocar uma funccedilatildeo local ndash o clientstub ndash a qual se encarrega da comunicaccedilatildeo entreprocessos

I Com RMI o truque eacute invocar o meacutetodo sobre um objectolocal ndash o proxy objectndash o qual natildeo executa o meacutetodo masencarrega-se de o passar ao objecto remoto

Transparecircncia do Lado do Servidor e Skeletons

I A transparecircncia do lado do servidor eacute conseguida comrecurso ao conceito de skeleton

I O skeleton eacute um objecto queI extrai (unmarshals) os argumentos da mensagem recebida

e invoca o meacutetodo apropriado do objecto invocado (local)I constroacutei a mensagem resposta com os resultados da

invocaccedilatildeo do meacutetodo e envia-la

RMI Arquitectura de Implementaccedilatildeo

Server machine

Object

Client machine

Proxy

Sameinterfaceas object

Interface

State

MethodClientinvokesa method

Network

Skeletoninvokessame methodat object

Marshalled invocationis passed across network

Client OS Server OS

Server

Skeleton

Client

I Alternativamente a funcionalidade do skeleton pode serimplementada pela classe do objecto remoto

RMI - Exemplos

CORBA RMI Heterogeneidade eacute a caracteriacutestica distintivaI O objecto e o cliente podem ser implementados

usando linguagens diferentesI Para o efeito CORBA define uma Interface Definition

Language (IDL) funcionalmente anaacuteloga a RPCLI CORBA suporta inclusivamente linguagens

natildeo-baseadas em objectos como C ou Cobol

Java RMI Dependente da linguagem

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Java RMI Caracteriacutesticas (12)

I ldquoIntegradardquo na linguagem JavaI mais faacutecil de usar ndash natildeo haacute necessidade de usar

linguagens de especificaccedilatildeo de interfaces pex InterfaceDefinition Language (IDL) em CORBA

I Invocaccedilatildeo de meacutetodos remotos usa a mesma sintaxe quea invocaccedilatildeo de meacutetodos locais mas

I Distribuiccedilatildeo dos objectos eacute exibida intencionalmenteI a invocaccedilatildeo dum meacutetodo remoto pode assinalar uma

excepccedilatildeo RemoteExceptionI para que os meacutetodos dum objecto possam ser invocados

remotamente a classe correspondente deveraacute implementaruma interface remota

Java RMI Caracteriacutesticas (22)

I Benificia da mobilidade deI coacutedigo (classes)I objectos

entre computadores suportada por JavaI Distributed Garbage Collection

I um objecto ldquodesaparecerdquo automaticamente quando natildeopode ser acedido

Objectos Remotos e Interfaces Remotas

I Objectos remotos satildeo objectos cujos meacutetodos podem serinvocados duma JVM diferente daquela onde residem

I Um objecto remoto tem que implementar uma interfaceremota ie o seu tipo eacute um subtipo da interface Remote

I Permite que o compilador de Java gere o coacutedigonecessaacuterio para realizar a comunicaccedilatildeo entre objectos emJVMs distintas

I A natildeo-localidade dum objecto remoto eacute exposta aosprogramadores dos ldquoclientesrdquo

I Todos os meacutetodos da interface Remote tecircm que assinalarRemoteExceptions

I Um objecto remoto pode incluir meacutetodos natildeo invocaacuteveisremotamente

I Soacute meacutetodos declarados em interfaces remotas podem serinvocados remotamente

Remote Interface Exemplo

I A interface remota dum ldquoservidor de ecordquo pode serimport javarmiRemoteimport javarmiRemoteException

public interface Echo extends Remote String echo(String str) throws RemoteException

I Esta interface suporta um uacutenico meacutetodo remoto echo oqual retorna a string que lhe eacute passada como argumento

I O meacutetodo echo dum objecto que implemente estainterface pode ser invocado remotamente

I Ie pode ser invocado por um objecto a executar numamaacutequina virtual de Java (JVM) diferente

Acesso a Objectos Remotos

I Para usar um objecto remoto um cliente tem queconhecer a interface remota desse objecto

I ie os meacutetodos desse objecto que podem ser invocadosremotamente

I A sintaxe de invocaccedilatildeo de meacutetodos remotos eacute semelhanteagrave de invocaccedilatildeo de meacutetodos locaisEcho montanha = lookup montanhaString ecotry

eco = montanhaecho(lsquolsquoUh Uhrsquorsquo) catch ( RemoteException e)

I Contudo os clientes tecircm que processar excepccedilotildees do tipoRemoteException

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 3: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Programaccedilatildeo Distribuiacuteda Baseada em ObjectosI O conceito de objecto eacute especialmente adaptado para

aplicaccedilotildees distribuiacutedasI Um objecto agrega os dados e as operaccedilotildees que operam

sobre esses dadosI Objectos podem residir em diferentes computadores

ligados por uma redeI A interaccedilatildeo entre objectos eacute feita atraveacutes de invocaccedilatildeo

remota de meacutetodos (remote method invocation) ie RPCpara objectos

MetodosDados

Objecto

MetodosDados

Objecto

MetodosDados

Objecto

MetodosDados

Objecto

Computador 2Computador 1

Invocaccedilatildeo Local vs Invocaccedilatildeo Remota

Local MI

Remote MI

process

object

host

I Um caso particular da invocaccedilatildeo remota envolve objectosem processos diferentes do mesmo computador

I Note-se que cada objecto reside apenas num processoie o estado dos objectos natildeo eacute distribuiacutedo

Transparecircncia do Cliente e Proxy-Objects

I A invocaccedilatildeo dum meacutetodo num objecto remoto deveraacute serfeita de modo semelhante agrave invocaccedilatildeo dum meacutetodo numobjecto local

I Com RPCs o truque eacute invocar uma funccedilatildeo local ndash o clientstub ndash a qual se encarrega da comunicaccedilatildeo entreprocessos

I Com RMI o truque eacute invocar o meacutetodo sobre um objectolocal ndash o proxy objectndash o qual natildeo executa o meacutetodo masencarrega-se de o passar ao objecto remoto

Transparecircncia do Lado do Servidor e Skeletons

I A transparecircncia do lado do servidor eacute conseguida comrecurso ao conceito de skeleton

I O skeleton eacute um objecto queI extrai (unmarshals) os argumentos da mensagem recebida

e invoca o meacutetodo apropriado do objecto invocado (local)I constroacutei a mensagem resposta com os resultados da

invocaccedilatildeo do meacutetodo e envia-la

RMI Arquitectura de Implementaccedilatildeo

Server machine

Object

Client machine

Proxy

Sameinterfaceas object

Interface

State

MethodClientinvokesa method

Network

Skeletoninvokessame methodat object

Marshalled invocationis passed across network

Client OS Server OS

Server

Skeleton

Client

I Alternativamente a funcionalidade do skeleton pode serimplementada pela classe do objecto remoto

RMI - Exemplos

CORBA RMI Heterogeneidade eacute a caracteriacutestica distintivaI O objecto e o cliente podem ser implementados

usando linguagens diferentesI Para o efeito CORBA define uma Interface Definition

Language (IDL) funcionalmente anaacuteloga a RPCLI CORBA suporta inclusivamente linguagens

natildeo-baseadas em objectos como C ou Cobol

Java RMI Dependente da linguagem

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Java RMI Caracteriacutesticas (12)

I ldquoIntegradardquo na linguagem JavaI mais faacutecil de usar ndash natildeo haacute necessidade de usar

linguagens de especificaccedilatildeo de interfaces pex InterfaceDefinition Language (IDL) em CORBA

I Invocaccedilatildeo de meacutetodos remotos usa a mesma sintaxe quea invocaccedilatildeo de meacutetodos locais mas

I Distribuiccedilatildeo dos objectos eacute exibida intencionalmenteI a invocaccedilatildeo dum meacutetodo remoto pode assinalar uma

excepccedilatildeo RemoteExceptionI para que os meacutetodos dum objecto possam ser invocados

remotamente a classe correspondente deveraacute implementaruma interface remota

Java RMI Caracteriacutesticas (22)

I Benificia da mobilidade deI coacutedigo (classes)I objectos

entre computadores suportada por JavaI Distributed Garbage Collection

I um objecto ldquodesaparecerdquo automaticamente quando natildeopode ser acedido

Objectos Remotos e Interfaces Remotas

I Objectos remotos satildeo objectos cujos meacutetodos podem serinvocados duma JVM diferente daquela onde residem

I Um objecto remoto tem que implementar uma interfaceremota ie o seu tipo eacute um subtipo da interface Remote

I Permite que o compilador de Java gere o coacutedigonecessaacuterio para realizar a comunicaccedilatildeo entre objectos emJVMs distintas

I A natildeo-localidade dum objecto remoto eacute exposta aosprogramadores dos ldquoclientesrdquo

I Todos os meacutetodos da interface Remote tecircm que assinalarRemoteExceptions

I Um objecto remoto pode incluir meacutetodos natildeo invocaacuteveisremotamente

I Soacute meacutetodos declarados em interfaces remotas podem serinvocados remotamente

Remote Interface Exemplo

I A interface remota dum ldquoservidor de ecordquo pode serimport javarmiRemoteimport javarmiRemoteException

public interface Echo extends Remote String echo(String str) throws RemoteException

I Esta interface suporta um uacutenico meacutetodo remoto echo oqual retorna a string que lhe eacute passada como argumento

I O meacutetodo echo dum objecto que implemente estainterface pode ser invocado remotamente

I Ie pode ser invocado por um objecto a executar numamaacutequina virtual de Java (JVM) diferente

Acesso a Objectos Remotos

I Para usar um objecto remoto um cliente tem queconhecer a interface remota desse objecto

I ie os meacutetodos desse objecto que podem ser invocadosremotamente

I A sintaxe de invocaccedilatildeo de meacutetodos remotos eacute semelhanteagrave de invocaccedilatildeo de meacutetodos locaisEcho montanha = lookup montanhaString ecotry

eco = montanhaecho(lsquolsquoUh Uhrsquorsquo) catch ( RemoteException e)

I Contudo os clientes tecircm que processar excepccedilotildees do tipoRemoteException

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 4: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Transparecircncia do Cliente e Proxy-Objects

I A invocaccedilatildeo dum meacutetodo num objecto remoto deveraacute serfeita de modo semelhante agrave invocaccedilatildeo dum meacutetodo numobjecto local

I Com RPCs o truque eacute invocar uma funccedilatildeo local ndash o clientstub ndash a qual se encarrega da comunicaccedilatildeo entreprocessos

I Com RMI o truque eacute invocar o meacutetodo sobre um objectolocal ndash o proxy objectndash o qual natildeo executa o meacutetodo masencarrega-se de o passar ao objecto remoto

Transparecircncia do Lado do Servidor e Skeletons

I A transparecircncia do lado do servidor eacute conseguida comrecurso ao conceito de skeleton

I O skeleton eacute um objecto queI extrai (unmarshals) os argumentos da mensagem recebida

e invoca o meacutetodo apropriado do objecto invocado (local)I constroacutei a mensagem resposta com os resultados da

invocaccedilatildeo do meacutetodo e envia-la

RMI Arquitectura de Implementaccedilatildeo

Server machine

Object

Client machine

Proxy

Sameinterfaceas object

Interface

State

MethodClientinvokesa method

Network

Skeletoninvokessame methodat object

Marshalled invocationis passed across network

Client OS Server OS

Server

Skeleton

Client

I Alternativamente a funcionalidade do skeleton pode serimplementada pela classe do objecto remoto

RMI - Exemplos

CORBA RMI Heterogeneidade eacute a caracteriacutestica distintivaI O objecto e o cliente podem ser implementados

usando linguagens diferentesI Para o efeito CORBA define uma Interface Definition

Language (IDL) funcionalmente anaacuteloga a RPCLI CORBA suporta inclusivamente linguagens

natildeo-baseadas em objectos como C ou Cobol

Java RMI Dependente da linguagem

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Java RMI Caracteriacutesticas (12)

I ldquoIntegradardquo na linguagem JavaI mais faacutecil de usar ndash natildeo haacute necessidade de usar

linguagens de especificaccedilatildeo de interfaces pex InterfaceDefinition Language (IDL) em CORBA

I Invocaccedilatildeo de meacutetodos remotos usa a mesma sintaxe quea invocaccedilatildeo de meacutetodos locais mas

I Distribuiccedilatildeo dos objectos eacute exibida intencionalmenteI a invocaccedilatildeo dum meacutetodo remoto pode assinalar uma

excepccedilatildeo RemoteExceptionI para que os meacutetodos dum objecto possam ser invocados

remotamente a classe correspondente deveraacute implementaruma interface remota

Java RMI Caracteriacutesticas (22)

I Benificia da mobilidade deI coacutedigo (classes)I objectos

entre computadores suportada por JavaI Distributed Garbage Collection

I um objecto ldquodesaparecerdquo automaticamente quando natildeopode ser acedido

Objectos Remotos e Interfaces Remotas

I Objectos remotos satildeo objectos cujos meacutetodos podem serinvocados duma JVM diferente daquela onde residem

I Um objecto remoto tem que implementar uma interfaceremota ie o seu tipo eacute um subtipo da interface Remote

I Permite que o compilador de Java gere o coacutedigonecessaacuterio para realizar a comunicaccedilatildeo entre objectos emJVMs distintas

I A natildeo-localidade dum objecto remoto eacute exposta aosprogramadores dos ldquoclientesrdquo

I Todos os meacutetodos da interface Remote tecircm que assinalarRemoteExceptions

I Um objecto remoto pode incluir meacutetodos natildeo invocaacuteveisremotamente

I Soacute meacutetodos declarados em interfaces remotas podem serinvocados remotamente

Remote Interface Exemplo

I A interface remota dum ldquoservidor de ecordquo pode serimport javarmiRemoteimport javarmiRemoteException

public interface Echo extends Remote String echo(String str) throws RemoteException

I Esta interface suporta um uacutenico meacutetodo remoto echo oqual retorna a string que lhe eacute passada como argumento

I O meacutetodo echo dum objecto que implemente estainterface pode ser invocado remotamente

I Ie pode ser invocado por um objecto a executar numamaacutequina virtual de Java (JVM) diferente

Acesso a Objectos Remotos

I Para usar um objecto remoto um cliente tem queconhecer a interface remota desse objecto

I ie os meacutetodos desse objecto que podem ser invocadosremotamente

I A sintaxe de invocaccedilatildeo de meacutetodos remotos eacute semelhanteagrave de invocaccedilatildeo de meacutetodos locaisEcho montanha = lookup montanhaString ecotry

eco = montanhaecho(lsquolsquoUh Uhrsquorsquo) catch ( RemoteException e)

I Contudo os clientes tecircm que processar excepccedilotildees do tipoRemoteException

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 5: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

RMI Arquitectura de Implementaccedilatildeo

Server machine

Object

Client machine

Proxy

Sameinterfaceas object

Interface

State

MethodClientinvokesa method

Network

Skeletoninvokessame methodat object

Marshalled invocationis passed across network

Client OS Server OS

Server

Skeleton

Client

I Alternativamente a funcionalidade do skeleton pode serimplementada pela classe do objecto remoto

RMI - Exemplos

CORBA RMI Heterogeneidade eacute a caracteriacutestica distintivaI O objecto e o cliente podem ser implementados

usando linguagens diferentesI Para o efeito CORBA define uma Interface Definition

Language (IDL) funcionalmente anaacuteloga a RPCLI CORBA suporta inclusivamente linguagens

natildeo-baseadas em objectos como C ou Cobol

Java RMI Dependente da linguagem

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Java RMI Caracteriacutesticas (12)

I ldquoIntegradardquo na linguagem JavaI mais faacutecil de usar ndash natildeo haacute necessidade de usar

linguagens de especificaccedilatildeo de interfaces pex InterfaceDefinition Language (IDL) em CORBA

I Invocaccedilatildeo de meacutetodos remotos usa a mesma sintaxe quea invocaccedilatildeo de meacutetodos locais mas

I Distribuiccedilatildeo dos objectos eacute exibida intencionalmenteI a invocaccedilatildeo dum meacutetodo remoto pode assinalar uma

excepccedilatildeo RemoteExceptionI para que os meacutetodos dum objecto possam ser invocados

remotamente a classe correspondente deveraacute implementaruma interface remota

Java RMI Caracteriacutesticas (22)

I Benificia da mobilidade deI coacutedigo (classes)I objectos

entre computadores suportada por JavaI Distributed Garbage Collection

I um objecto ldquodesaparecerdquo automaticamente quando natildeopode ser acedido

Objectos Remotos e Interfaces Remotas

I Objectos remotos satildeo objectos cujos meacutetodos podem serinvocados duma JVM diferente daquela onde residem

I Um objecto remoto tem que implementar uma interfaceremota ie o seu tipo eacute um subtipo da interface Remote

I Permite que o compilador de Java gere o coacutedigonecessaacuterio para realizar a comunicaccedilatildeo entre objectos emJVMs distintas

I A natildeo-localidade dum objecto remoto eacute exposta aosprogramadores dos ldquoclientesrdquo

I Todos os meacutetodos da interface Remote tecircm que assinalarRemoteExceptions

I Um objecto remoto pode incluir meacutetodos natildeo invocaacuteveisremotamente

I Soacute meacutetodos declarados em interfaces remotas podem serinvocados remotamente

Remote Interface Exemplo

I A interface remota dum ldquoservidor de ecordquo pode serimport javarmiRemoteimport javarmiRemoteException

public interface Echo extends Remote String echo(String str) throws RemoteException

I Esta interface suporta um uacutenico meacutetodo remoto echo oqual retorna a string que lhe eacute passada como argumento

I O meacutetodo echo dum objecto que implemente estainterface pode ser invocado remotamente

I Ie pode ser invocado por um objecto a executar numamaacutequina virtual de Java (JVM) diferente

Acesso a Objectos Remotos

I Para usar um objecto remoto um cliente tem queconhecer a interface remota desse objecto

I ie os meacutetodos desse objecto que podem ser invocadosremotamente

I A sintaxe de invocaccedilatildeo de meacutetodos remotos eacute semelhanteagrave de invocaccedilatildeo de meacutetodos locaisEcho montanha = lookup montanhaString ecotry

eco = montanhaecho(lsquolsquoUh Uhrsquorsquo) catch ( RemoteException e)

I Contudo os clientes tecircm que processar excepccedilotildees do tipoRemoteException

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 6: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Java RMI Caracteriacutesticas (12)

I ldquoIntegradardquo na linguagem JavaI mais faacutecil de usar ndash natildeo haacute necessidade de usar

linguagens de especificaccedilatildeo de interfaces pex InterfaceDefinition Language (IDL) em CORBA

I Invocaccedilatildeo de meacutetodos remotos usa a mesma sintaxe quea invocaccedilatildeo de meacutetodos locais mas

I Distribuiccedilatildeo dos objectos eacute exibida intencionalmenteI a invocaccedilatildeo dum meacutetodo remoto pode assinalar uma

excepccedilatildeo RemoteExceptionI para que os meacutetodos dum objecto possam ser invocados

remotamente a classe correspondente deveraacute implementaruma interface remota

Java RMI Caracteriacutesticas (22)

I Benificia da mobilidade deI coacutedigo (classes)I objectos

entre computadores suportada por JavaI Distributed Garbage Collection

I um objecto ldquodesaparecerdquo automaticamente quando natildeopode ser acedido

Objectos Remotos e Interfaces Remotas

I Objectos remotos satildeo objectos cujos meacutetodos podem serinvocados duma JVM diferente daquela onde residem

I Um objecto remoto tem que implementar uma interfaceremota ie o seu tipo eacute um subtipo da interface Remote

I Permite que o compilador de Java gere o coacutedigonecessaacuterio para realizar a comunicaccedilatildeo entre objectos emJVMs distintas

I A natildeo-localidade dum objecto remoto eacute exposta aosprogramadores dos ldquoclientesrdquo

I Todos os meacutetodos da interface Remote tecircm que assinalarRemoteExceptions

I Um objecto remoto pode incluir meacutetodos natildeo invocaacuteveisremotamente

I Soacute meacutetodos declarados em interfaces remotas podem serinvocados remotamente

Remote Interface Exemplo

I A interface remota dum ldquoservidor de ecordquo pode serimport javarmiRemoteimport javarmiRemoteException

public interface Echo extends Remote String echo(String str) throws RemoteException

I Esta interface suporta um uacutenico meacutetodo remoto echo oqual retorna a string que lhe eacute passada como argumento

I O meacutetodo echo dum objecto que implemente estainterface pode ser invocado remotamente

I Ie pode ser invocado por um objecto a executar numamaacutequina virtual de Java (JVM) diferente

Acesso a Objectos Remotos

I Para usar um objecto remoto um cliente tem queconhecer a interface remota desse objecto

I ie os meacutetodos desse objecto que podem ser invocadosremotamente

I A sintaxe de invocaccedilatildeo de meacutetodos remotos eacute semelhanteagrave de invocaccedilatildeo de meacutetodos locaisEcho montanha = lookup montanhaString ecotry

eco = montanhaecho(lsquolsquoUh Uhrsquorsquo) catch ( RemoteException e)

I Contudo os clientes tecircm que processar excepccedilotildees do tipoRemoteException

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 7: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Java RMI Caracteriacutesticas (22)

I Benificia da mobilidade deI coacutedigo (classes)I objectos

entre computadores suportada por JavaI Distributed Garbage Collection

I um objecto ldquodesaparecerdquo automaticamente quando natildeopode ser acedido

Objectos Remotos e Interfaces Remotas

I Objectos remotos satildeo objectos cujos meacutetodos podem serinvocados duma JVM diferente daquela onde residem

I Um objecto remoto tem que implementar uma interfaceremota ie o seu tipo eacute um subtipo da interface Remote

I Permite que o compilador de Java gere o coacutedigonecessaacuterio para realizar a comunicaccedilatildeo entre objectos emJVMs distintas

I A natildeo-localidade dum objecto remoto eacute exposta aosprogramadores dos ldquoclientesrdquo

I Todos os meacutetodos da interface Remote tecircm que assinalarRemoteExceptions

I Um objecto remoto pode incluir meacutetodos natildeo invocaacuteveisremotamente

I Soacute meacutetodos declarados em interfaces remotas podem serinvocados remotamente

Remote Interface Exemplo

I A interface remota dum ldquoservidor de ecordquo pode serimport javarmiRemoteimport javarmiRemoteException

public interface Echo extends Remote String echo(String str) throws RemoteException

I Esta interface suporta um uacutenico meacutetodo remoto echo oqual retorna a string que lhe eacute passada como argumento

I O meacutetodo echo dum objecto que implemente estainterface pode ser invocado remotamente

I Ie pode ser invocado por um objecto a executar numamaacutequina virtual de Java (JVM) diferente

Acesso a Objectos Remotos

I Para usar um objecto remoto um cliente tem queconhecer a interface remota desse objecto

I ie os meacutetodos desse objecto que podem ser invocadosremotamente

I A sintaxe de invocaccedilatildeo de meacutetodos remotos eacute semelhanteagrave de invocaccedilatildeo de meacutetodos locaisEcho montanha = lookup montanhaString ecotry

eco = montanhaecho(lsquolsquoUh Uhrsquorsquo) catch ( RemoteException e)

I Contudo os clientes tecircm que processar excepccedilotildees do tipoRemoteException

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 8: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Remote Interface Exemplo

I A interface remota dum ldquoservidor de ecordquo pode serimport javarmiRemoteimport javarmiRemoteException

public interface Echo extends Remote String echo(String str) throws RemoteException

I Esta interface suporta um uacutenico meacutetodo remoto echo oqual retorna a string que lhe eacute passada como argumento

I O meacutetodo echo dum objecto que implemente estainterface pode ser invocado remotamente

I Ie pode ser invocado por um objecto a executar numamaacutequina virtual de Java (JVM) diferente

Acesso a Objectos Remotos

I Para usar um objecto remoto um cliente tem queconhecer a interface remota desse objecto

I ie os meacutetodos desse objecto que podem ser invocadosremotamente

I A sintaxe de invocaccedilatildeo de meacutetodos remotos eacute semelhanteagrave de invocaccedilatildeo de meacutetodos locaisEcho montanha = lookup montanhaString ecotry

eco = montanhaecho(lsquolsquoUh Uhrsquorsquo) catch ( RemoteException e)

I Contudo os clientes tecircm que processar excepccedilotildees do tipoRemoteException

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 9: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Exemplo Implementaccedilatildeo da interface Echo

import javarmiimport javarmiserverUnicastRemoteObject

public class Echo_Impl extends UnicastRemoteObjectimplements Echo

public Echo_Impl() throws RemoteException

super() Actually this is not needed

public String echo(String str) return str

Java RMI e a JVM

I A JVM natildeo conhece objectos remotosI A JVM soacute suporta a invocaccedilatildeo de meacutetodos sobre objectos

locaisI Java RMI eacute uma camada de SW sobre a JVM natildeo faz

parte delaI Java RMI implementa RMI usando os mecanismos do

costumeI stubs do lado do clienteI skeletons do lado do servidor

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 10: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Java RMI Stubs

I Em Java RMI o stub dum objecto remoto eacute um objectolocal (em relaccedilatildeo ao cliente) que representa esse objectoremoto

I Daiacute a designaccedilatildeo comum de proxy objectI Uma referecircncia remota eacute de facto uma referecircncia para o

stub correspondente O stub dum objecto remotoI implementa a sua interface remotaI conteacutem o seu ldquoendereccedilordquo

I Essencialmente as tarefas executadas pelo stub satildeo1 ldquomarshallingrdquo dos argumentos do meacutetodo2 envio do pedido de execuccedilatildeo do meacutetodo atraveacutes da ldquorederdquo3 recepccedilatildeo da resposta4 ldquounmarshallingrdquo do resultado da invocaccedilatildeo

Java RMI Servers (12)

I Na primeira versatildeo de Java RMI a funcionalidade do ladodo objecto remoto foi repartida por 2 tipos de objectos

I objectos do tipo RemoteServer ndash executam oprocessamento que eacute independente da interface remota

I pex esperar pela recepccedilatildeo de pedidos de invocaccedilatildeoI objectos do tipo skeleton ndash executam o processamento

que depende da interface remotaI unmarshalling dos argumentosI invocaccedilatildeo do meacutetodo do objecto remotoI marshalling dos resultados

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 11: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Java RMI Servers (22)

I A partir de Java 12 objectos do tipo skeleton deixaram deser necessaacuterios

I objectos do tipo RemoteServer passaram a ser capazesde fazer tambeacutem as tarefas dos skeleton

I Java RMI oferece a classe UnicastRemoteObject aqual estende RemoteServer e oferece funcionalidademiacutenima para aplicaccedilotildees baseadas em RMI

I O objecto termina quando o processo que o criou terminaI Usa TCP na comunicaccedilatildeo com os clientes

Argumentos de Meacutetodos Remotos

I Os argumentos de ou o valor retornado por um meacutetodoremoto podem ser

1 tipos simples Por exemplo boolean char byte shortint long float ou double

2 objectos remotos ie que implementam a interfaceRemote

3 objectos locais serializaacuteveis ie que implementam ainterface Serializable (incluindo Strings e arrays)

I No caso de objectos locais RMI passa uma coacutepia doobjecto

I como o objecto eacute serializaacutevel tal eacute possiacutevelI note-se que Java RMI natildeo ldquoactualizardquo o objecto passado

caso o meacutetodo remoto o tenha modificadoI Atenccedilatildeo Uma referecircncia para um objecto remoto eacute de

facto uma referecircncia para o objecto proxy respectivo

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 12: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Objectos Remotos vs Objectos Serializaacuteveis

Local objectO1

Copy of O1

Remote objectO2

Localreference L1

New localreference

Remotereference R1

Remoteinvocation withL1 and R1 asparameters

Copy of R1 to O2

Machine A Machine B

Machine C

Client code withRMI to server at C(proxy)

Server code(method implementation)

I Na praacutetica eacute como se objecto remoto O2 fosse passadopor referecircncia enquanto que o objecto local (serializaacutevel)O1 eacute passado por valor

I Semacircnticas diferentes transparecircncia ldquoturvardquo

Serializaccedilatildeo em Java (12)I Java RMI usa o mecanismo de serializaccedilatildeo de Java para

passar os argumentos e o valor retornadoI Em Java serializaccedilatildeo dum objecto consiste na conversatildeo

desse objecto numa sequecircncia de bytes de modo apermitir

I o seu armazenamento no disco para posteriorreincarnaccedilatildeo

I ou a sua migraccedilatildeo para uma outra JVMI A reconstituiccedilatildeo dum objecto a partir da sua

representaccedilatildeo serializada designa-se por deserializaccedilatildeoI Para que um objecto seja serializaacutevel deveraacute implementar

a interface javaioSerializableI A JVM implementa um procedimento de serializaccedilatildeo por

omissatildeo que pode ser usado pela grande maioria dosobjectos

I desde que a definiccedilatildeo da sua classe declare queimplementa a interface javaioSerializable

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 13: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Serializaccedilatildeo em Java (22)

I Se um objecto tiver campos que satildeo referecircncias paraoutros objectos estes uacuteltimos deveratildeo ser serializaacuteveispara que o primeiro tambeacutem o seja

I para serializar o primeiro objecto haacute que serializar osoutros

I cada objecto soacute eacute serializado uma vez mesmo que sejareferenciado muacuteltiplas vezes

I Por razotildees de eficiecircncia os meacutetodos duma classe natildeo satildeoincluiacutedos na sequecircncia de bytes criada pela serializaccedilatildeo

I a JVM inclui apenas um identificador da classe a que oobjecto pertence

Class Downloading em Java e RMI

Problema Como eacute que um meacutetodo remoto pode invocar omeacutetodo dum objecto natildeo remoto que lhe eacute passado comoargumento

I Os meacutetodos dum objecto natildeo fazem parte da suarepresentaccedilatildeo serializada

Soluccedilatildeo Usando as facilidades de transferecircncia de coacutedigo emJava

I Note-se que esta transferecircncia pode natildeo sernecessaacuteria se a classe estiver disponiacutevel localmente

A capacidade de transferecircncia de classes atraveacutes da redepode tambeacutem ser usada pelo cliente para carregar o proxyobject

I natildeo haacute necessidade de manter todas as classes emtodos os computadores

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 14: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Localizaccedilatildeo dum Objecto

I O acesso a um objecto remoto eacute feito usando uma referecircnciapara um proxy desse objecto

montanhaecho()

Problema como eacute que se obteacutem uma referecircncia remota ie para oproxy dum objecto remoto

I Tecnicamente atraveacutes do valor de retorno dum meacutetodo

Soluccedilatildeo semelhante ao portmapper de RPC

I Java RMI oferece um serviccedilo de nomes baacutesico ormiregistry

I O rmiregistry eacute um programa e tem que executar noscomputadores que disponibilizam objectos remotos

I O ldquoservidorrdquo regista o objecto com um nome (binds) normiregistry local

I O ldquoclienterdquo solicita uma referecircncia para um objecto remotoao rmiregistry no computador onde o objecto reside

O rmiregistry e a Interface Registry

I O rmiregistry eacute uma aplicaccedilatildeo que implementa ainterface Registryvoid rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

I Se incorrectamente usado o rmiregistry pode impediro uso de classes ldquoimportadasrdquo

If you do start the rmiregistry and it can find your stubclasses in CLASSPATH it will not remember that theloaded stub class can be loaded from your serverrsquos codebase[] do Tutorial on-line da Sun sobre RMI

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 15: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

A classe Naming

I Permite aceder a objectos que implementam RegistryI Suporta os seguintes meacutetodos

void rebind(String name Remote obj)void bind(String name Remote obj)void unbind(String name Remote obj)Remote lookup(String name)String []list()

ondename eacute um URL sem o meacutetodo de acesso

computerNameportobjectNamesendo computerNameport a ldquolocalizaccedilatildeordquo do

rmiregistryI bind() difere de rebind() na medida em que assinala

uma excepccedilatildeo se name jaacute tiver sido registadoI O rmregistry natildeo eacute um servidor global

I O cliente tem que saber onde se encontra o objecto

Exemplo Registo e Localizaccedilatildeo do ObjectoI O servidor tem que registar o objecto remoto

Echo montanhatry

montanha = new Echo_Impl()Namingrebind(lsquolsquoalpesrsquorsquo montanha)

catch ( RemoteException e)

I O cliente tem que o localizar (em i01co2213)Echo montanhatry

montanha = Naminglookup(lsquolsquoi01co2213alpesrsquorsquo)

catch ( RemoteException e) Naminglookup() is RMI

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 16: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

RMI e Seguranccedila

Problema Java RMI pode exigir a transferecircncia de coacutedigo(classes) de maacutequinas remotas

I este coacutedigo eacute uma potencial ameaccedila agrave seguranccedilaSoluccedilatildeo Usar um Security Manager

I um objecto que controla o acesso aos recursos locais

I Java 10 suportava um modecirclo de seguranccedila do tiposandbox

I Coacutedigo local natildeo tinha restriccedilotildees para aleacutem das impostaspelo SO

I Coacutedigo importado soacute podia aceder aos recursos (limitados)disponiacuteveis na sandbox

I A partir de Java 12 pode-se sujeitar todo o coacutedigoindependentemente de ser ou natildeo local a controlo deacesso sendo este determinado pela security policy emvigor

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 17: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Poliacutetica de Seguranccedila (Security Policy) e Permissotildees

I A poliacutetica de seguranccedila define as permissotildees de coacutedigocom base na sua origem sendo configuraacutevel quer peloutilizador quer pelo administrador

I Cada permissatildeo especifica o tipo de acesso permitido aum determinado recurso tal como

I Lecircr ou escrever um ficheiro ou directoacuterioI Estabelecer uma conexatildeo para um determinado endereccedilo

IP e portoI Algumas operaccedilotildees sobre a proacutepria JVM requerem

permissotildeesI Substituir o ClassLoaderI Substituir o SecurityManagerI Alterar a poliacutetica de seguranccedila

Permissotildees

I Internamente permissotildees satildeo objectos PexI javaioFilePermission

I Uma permissatildeo tipicamente temNome que identifica o recurso a que se aplicaLista de acccedilotildees que especifica as operaccedilotildees permitidas

permissatildeo nome lista de acccedilotildeesjavaioFilePermission ldquousrlib-rdquo ldquoread executerdquojavanetSocketPermission ldquoabccom54321rdquo ldquoconnectrdquojavasecuritySecurityPermission ldquosetPolicyrdquojavalangRuntimePermission ldquocreateClassLoaderrdquojavalangRuntimePermission ldquosetSecurityManagerrdquo

I Uma poliacutetica de seguranccedila eacute um conjunto de permissotildeesque determinam que operaccedilotildees um segmento de coacutedigopode executar

I Naturalmente a poliacutetica de seguranccedila eacute representada porum objecto (javasecurityPolicy)

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 18: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Inicializaccedilatildeo do javasecurityPolicy

I Na implementaccedilatildeo referecircncia este objecto pode serinicializado a partir de vaacuterios ficheiros de configuraccedilatildeo Poromissatildeo usa

I Um ficheiro de configuraccedilatildeo para todo o sistema$javahomelibsecurityjavapolicy

I Um ficheiro de configuraccedilatildeo por utilizador~javapolicy

I O ficheiro de configuraccedilatildeo das propriedades de seguranccedilapermite especificar ainda outros ficheiros de configuraccedilatildeo

$javahomelibsecurityjavasecurity

I O ficheiro com a poliacutetica de seguranccedila pode ainda serespecificado quando da invocaccedilatildeo da JVM

java -Djavasecuritypolicy=somefile I Se a propriedade policyallowSystemProperty o

permitir ndash pode ser activada no ficheiro de configuraccedilatildeodas propriedades de seguranccedila

Sintaxe dos Ficheiros de Poliacuteticas

I Consiste numa lista de elementos (entries)keystore eacute opcional (natildeo usaremos pelo menos para

jaacute)grant clausuacutela usada para especificar as permissotildees de

coacutedigo de acordo com algumas propriedades(consideraremos apenas a sua origem)

I Tem o seguinte formato (de facto omite regras)

grant [codebase ltURLgt] permission ltclass_namegt lttargetgt [ ltactiongt]

onde

codebase especifica a origem do coacutedigo

permission especifica uma permissatildeo podendo umelemento grant incluir vaacuterias permissotildees

I Pode ocorrer uma ou mais vezes

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 19: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Sintaxe dos Ficheiros de Poliacuteticas Exemplos

grant permission javanetSocketPermission 1024-

connectacceptpermission javanetSocketPermission abccom

connectacceptpermission javaioFilePermission

homeannpublic_htmlclasses- readpermission javaioFilePermission

homejonespublic_htmlclasses- read

grant codeBase httppaginasfeuppt~ei77777classes permission javasecurityAllPermission

I policytool eacute uma aplicaccedilatildeo que faz parte do J2SDKque oferece um GUI para auxiliar a ediccedilatildeo de ficheiros depoliacuteticas

Security Manager (12)

I O Security Manager eacute um objecto que garante ocumprimento da poliacutetica de seguranccedila

I Consiste apenas num conjunto de meacutetodos tais comopublic void checkPermission(Permission perm)

throws SecurityException

public void checkCreateClassLoader( )throws SecurityException

I Normalmente um thread soacute pode executar uma operaccedilatildeose todos os meacutetodos activos que invocou tiverempermissatildeo para a executar

I Tipicamente essa decisatildeo eacute baseada na origem do coacutedigoI Estes meacutetodos satildeo invocados por outros objectos quando

executam certas operaccedilotildeesI O Security Manager eacute um Reference Monitor

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 20: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Security Manager (22)

I O SecurityManager natildeo eacute instalado por omissatildeoI A instalaccedilatildeo do SecurityManager pode ser feita

I Pelo interpretador (JVM)java -Djavasecuritymanager

I Pelo coacutedigoSystemsetSecurityManager(new SecurityManager())

I A poliacutetica imposta pelo SecurityManager pode serconfigurada atraveacutes dos ficheiros de especificaccedilatildeo daSecurityPolicy

I O coacutedigo do sistema invoca os meacutetodos checkXXX doSecurityManager se este estiver instalado

I Estes meacutetodos por sua vez invocam o meacutetodocheckPermission() do AccessController

Access Controller

I A partir de Java 12 ojavasecurityAccessController eacute a classe quede facto garante o cumprimento da poliacutetica de seguranccedila

I Por concepccedilatildeo eacute mais faacutecil flexiacutevel que oSecurityManager e estaacute sempre instalado (soacute static)

I Implementa uma poliacutetica razoavelmente restritiva que podeser usada na maioria dos casos

I Naturalmente pode invocar-se directamente da aplicaccedilatildeoos meacutetodos do AccessControllerFilePermission perm = new FilePermission(tmptestFile read)AccessControllercheckPermission(perm)

I Se a poliacutetica de seguranccedila implementada peloAccessController natildeo focircr adequada pode seradaptada criando subclasses dojavalangSecurityManager

I Estas subclasses devem invocar os meacutetodos doAccessController sempre que tal faccedila sentido

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 21: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

javarmiRMISecurityManager

I javarmiRMISecurityManager eacute uma sua subclassedo javalangSecurityManager

I Implementa exactamente os mesmos meacutetodosI O RMISecurityManager deve ser usado com RMI

sempre que haacute necessidade de transferir coacutedigo dumcomputador remoto

I O RMI class loader recusa-se a carregar qualquer classese natildeo houver um Security Manager

I O RMISecurityManager pode ser instalado de 2 modos

I Atraveacutes do coacutedigoSystemsetSecurityManager(new RMISecurityManager())

I Atraveacutes da linha de comandojava -Djavasecuritymanager=javarmiRMISecurityManager

Arquitectura de Seguranccedila em Java

I O Security Manager natildeo eacute a histoacuteria toda

Classrepository

Classverifier

Loadedclassobject

Java interpreter

Java program

Requestclass

Select appropriate loader

Loader forremoteclasses

Loader forlocal

classes

Classrepository

Remote siteLocal site

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 22: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Tempo de Vida dum Objecto Remoto

I A vida dum objecto chega ao fim quando deixa de serreferenciado

I sem qualquer referecircncia para o objecto natildeo eacute possiacutevelaceder-lhe

I Para objectos locaisI o garbage collector da JVM automaticamente detecta

quando um objecto deixa de ser referenciado e liberta osrecursos

I quando a JVM termina todos os objectos locais terminamI Para objectos remotos

I as diferentes JVMs executam um algoritmo distribuiacutedo parafazer garbage collection

I quando uma JVM termina objectos remotos por elacriados podem natildeo terminar Por exemplo

I o RMIregistry manteacutem uma referecircncia para todos osobjectos nele registados

Passos no Desenvolvimento com Java RMI1 Concepccedilatildeo e implementaccedilatildeo de servidor e clientes

I Definiccedilatildeo da interface remota ie dos meacutetodos que podemser invocados remotamente

I Implementaccedilatildeo de objectos remotos os quais devemimplementar a interface remota definida

I Implementaccedilatildeo de clientes2 Compilaccedilatildeo do coacutedigo e geraccedilatildeo de stubs

I a compilaccedilatildeo do coacutedigo eacute feita usando javacI os stubs a usar pelo cliente podem ser gerados usando ormic a partir do ficheiro class da implementaccedilatildeo

rmic Echo_Impl

Nota A partir de Java 50 Java RMI suporta a geraccedilatildeodinacircmica de stubs

3 Disponibilizaccedilatildeo do coacutedigo por exemplo num servidorHTTP

I classes que precisem ser carregadas (downloaded)incluindo os stubs devem ser disponibilizadas num servidorHTTP

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 23: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

RMI e Uploaded Code

I Aplicaccedilotildees (clientes ou servidores) que podem transferircoacutedigo deveratildeo instalar um Security Manager import javarmipublic class Echo_Client public static void main(String[] args)

if(argslength = 2) Systemoutprintln(Usage java Echo_Client +

srv_hostname obj_name)return

SystemsetSecurityManager(new RMISecurityManager())try

I Se o coacutedigo do stub pode ser uploaded haacute que inicializar apropriedade javarmiservercodebase na aplicaccedilatildeoservidora pexjava -Djavarmiservercodebase=httpweb~pfsecho_server

I Atenccedilatildeo ao rmiregistry

Arquitectura de Java RMI

RMI Client

Web server

RMIregistry

RMI server

1 register object

3 return object reference

2 lookup object

4 request stub class

5 return stub class

6 remote invocation

7 return result

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional
Page 24: Remote Method Invocation (RMI) - web.fe.up.ptweb.fe.up.pt/~pfs/aulas/sd2009/at/78rmi_handout.pdf · CORBA RMI Heterogeneidade é a característica distintiva. ... Exemplo I A interface

Sumaacuterio

RMIConceitoImplementaccedilatildeoExemplos

Java RMICaracteriacutesticasObjectos Remotos e Interfaces RemotasImplementaccedilatildeo de Java RMIArgumentos e serializaccedilatildeoTransferecircncia de coacutedigoLocalizaccedilatildeo de objectos remotosSeguranccedilaTempo de vida dum objecto remotoPassos no desenvolvimento de aplicaccedilotildeesTransferecircncia de coacutedigo

Leitura Adicional

I Capiacutetulo 10 de Tanenbaum e van Steen DistributedSystems 2nd Ed

I Secccedilatildeo 101 Architecture excepto Subsecccedilatildeo 1013I Secccedilatildeo 103 Communication excepto Subsecccedilatildeo 1035

I Java RMI Specification da SunI Java Security Overview da Sun Secccedilotildees 1 2 e 8I Security Policy in Java SE 6 da SunI Permissions in Java SE 6 da Sun

  • RMI
    • Conceito
    • Implementaccedilatildeo
    • Exemplos
      • Java RMI
        • Caracteriacutesticas
        • Objectos Remotos e Interfaces Remotas
        • Implementaccedilatildeo de Java RMI
        • Argumentos e serializaccedilatildeo
        • Transferecircncia de coacutedigo
        • Localizaccedilatildeo de objectos remotos
        • Seguranccedila
        • Tempo de vida dum objecto remoto
        • Passos no desenvolvimento de aplicaccedilotildees
        • Transferecircncia de coacutedigo
          • Leitura Adicional