220 likes | 288 Views
Treinamento no GRADEp. Serviço OXManager OXManagerDemo. Autoria. Autor Fábio Reis Cecin Versão V1, Junho de 2005. Sumário da apresentação. 1 Visão geral – serviço OXManager 2 Exemplo: OXManagerDemo 3 OXManager : outras APIs. Visão geral. A abstração OX (Objeto eXehda)
E N D
Treinamento no GRADEp Serviço OXManager OXManagerDemo
Autoria • Autor • Fábio Reis Cecin • Versão • V1, Junho de 2005
Sumário da apresentação 1 Visão geral – serviço OXManager 2 Exemplo: OXManagerDemo 3 OXManager: outras APIs
Visão geral • A abstração OX (Objeto eXehda) • Instância de objeto criada por intermédio do serviço Executor; • À qual pode ser associada meta-informação em tempo de execução. • Meta-informação no OX é uma lista de atributos: • Lista: pares no formato <Nome, Valor>; • Nome: cadeia de caracteres ASCII que descreve o atributo; • Valor: qualquer valor, inclusive binário.
Visão geral • Serviço OXManager: • Armazena a meta-informação associada aos OXes; • Permite que os atributos de um OX sejam consultados e alterados a partir de qualquer nodo da grade. • OXHandle: • O suporte à meta-informação de OXes é implementado pelos OXHandles; • O OXManager possui métodos para criação, manipulação e remoção de OXHandles; • Quando criado, um OXHandle é associado a algum OX; • Através do OXHandle é possível manipular os meta-atributos do OX.
Visão geral • Tipos de OXHandle (transparente à aplicação): • MasterOXHandle (1/3) • Armazena a cópia-mestre dos meta-atributos de um OX (lista completa); • Tipicamente criado ao mesmo tempo que o seu OX associado, no mesmo nodo; • Em geral, acompanha o OX quando este migra para outro nodo, mas pode ser separado do OX (caso o hospedeiro atual do OX tenha pouca memória, etc); • O MasterOXHandle guarda no atributo location o local atual do OX na grade.
Visão geral • Tipos de OXHandle (transparente à aplicação): • HomeOXHandle (2/3) • Permanece fixo na “célula-home” do OX (célula onde o OX foi primeiramente instanciado); • Observação: a informação da “célula-home” de um OX está contida no seu ObjectID; • O HomeOXHandle pode ser consultado para se descobrir onde está o MasterOXHandle do OX, atualmente; • Isto é especificado no atributo owner (“dono”) do HomeOXHandle • Mantém um “cache” dos meta-atributos não-mutáveis do OX, por exemplo: • ObjectID: ID do OX; • ApplicationId: ID da aplicação à qual o OX está associado.
Visão geral • Tipos de OXHandle (transparente à aplicação): • ProxyOXHandle (3/3) • Objeto “procurador” que pode ser utilizado para acessar o MasterOXHandle ou o HomeOXHandle; • Armazena, no mínimo, o ObjectID do OX. “Consulta meta-atributos do OX associado ao handle” OXHandle OXHandle MasterOXHandle oid = xxx ApplicationId = 22 Meta-atributos = local atual = yyy ... OXHandle OX HomeOXHandle oid = xxx ApplicationId = 22 Owner = Hospedeiro 2 ProxyOXHandle oid = xxx Hospedeiro 1 “Célula home” Hospedeiro 2 Hospedeiro 3
Sumário da apresentação 1 Visão geral – serviço OXManager 2 Exemplo: OXManagerDemo 3 OXManager: outras APIs
OXManagerDemo • Exemplo: Aplicação OXManagerDemo • Demonstra o uso de meta-atributos de um OX • Local: /isam/isam-apps/oxmanagerdemo/ • Arquivos: • OXManagerDemo.java • Fonte da aplicação. • oxmanagerdemo.isam • Descritor de disparo da aplicação em formato XML do ISAM.
OXManagerDemo – imports OXManagerDemo.java: (trechos selecionados) // Importa ObjectId (identificador de OX), ObjectSeed (para // criação do OX), OXManager e OXHandle import org.isam.exehda.Exehda; import org.isam.exehda.ObjectId; import org.isam.exehda.services.ObjectSeed; import org.isam.exehda.services.OXManager; import org.isam.exehda.services.OXManager.OXHandle;
OXManagerDemo – Construtor public class OXManagerDemo { // construtor apenas imprime criação do objeto public OXManagerDemo() { System.out.println("<init>()"); } // idem, porém com parâmetro opcional public OXManagerDemo( String msg ) { System.out.println("<init>(msg=\""+msg+"\")"); }
OXManagerDemo – main() (1/3) // ponto de entrada da aplicação public static void main( String[] args ) { // obtém serviço ObjectSeed ObjectSeed objectSeed = (ObjectSeed) Exehda.getService(ObjectSeed.SERVICE_NAME); // cria um OX (e obtém oxID do mesmo) a partir // da instanciação da classe OXManagerDemo ObjectId oxID = objectSeed.newInstance(OXManagerDemo.class, null, null);
OXManagerDemo – main() (2/3) // obtém referência para o serviço OXManager OXManager oxman= (OXManager) Exehda.getService( OXManager.SERVICE_NAME ); // cria um OXHandle para o ID do OX que foi criado acima OXHandle oxh= oxman.createHandle( oxID ); // imprime OX e meta-atributos do OX (oid, owner, location) System.out.println(" key="+oxh.getKey()); System.out.println("After createHandle()"); System.out.println(oxh); System.out.println(" id="+oxh.getId() ); // ID do OX System.out.println(" key="+oxh.getKey()); System.out.println(" owner="+oxh.getOwner() ); // “dono” do MasterOXHandle System.out.println(" key="+oxh.getKey()); System.out.println("location="+oxh.getLocation() ); // local atual do OX System.out.println(" key="+oxh.getKey()); Próximo slide...
OXManager.createHandle() • O método createHandle() da interface OXManager cria um OXHandle apropriado para acessar meta-atributos de um OX: • Recebe como argumento o ObjectId do OX; • Retorna um OXHandle para o OX; • Tipos de OXHandle criados: • MasterOXHandle é criado se o nodo local é o “home” do OX e ainda não existe um MasterOXHandle para o OX; • HomeOXHandle é criado se o nodo local é o nodo “home” da célula e ainda não existe um HomeOXHandle para o OX; • Caso contrário, é criado um ProxyOXHandle. public interface OXManager { public OXManager.OXHandle createHandle(ObjectId oid); API
OXManagerDemo – main() (3/3) // ... voltando ao método “main()” da demo ... // libera a posse do OXManager local sobre o OXMasterHandle do OX oxman.grantOwnership( oxh ); // imprime novamente o OX e os valores atuais dos meta-atributos do // OX (ID, owner, location) ... System.out.println("After grantOwnership()"); System.out.println(oxh); System.out.println(" id="+oxh.getId() ); System.out.println(" owner="+oxh.getOwner() ); System.out.println("location="+oxh.getLocation() ); } // fim do main() e do demo Próximo slide...
OXManager.grantOwnership() • O método grantOwnership() da interface OXManager notifica o OXManager local de que o MasterOXHandle poderá ser movido: • Recebe como argumento um OXHandle (válido) para o OX em questão; • Pode ser um proxy, mestre, home, ... • Esta chamada é propagada até o HomeOXHandle do OX; • No HomeOXHandle fica indicado que o MasterOXHandle está livre para ser migrado • A migração do MasterOXHandle é solicitada pelo método requestOwnership() Próximo slide... public interface OXManager { public OXManager.OXHandle grantOwnership(OXManager.OXHandle h); API
OXManager.requestOwnership() • O método requestOwnership() da interface OXManager solicita que um MasterOXHandle de um OX migre para o nodo local: • Recebe como argumento um OXHandle (válido) para o OX em questão; • Esta chamada é propagada até o HomeOXHandle do OX; • No HomeOXHandle é verificado se o MasterOXHandle foi liberado por uma chamada prévia a grantOwnership(); • Em caso de permissão OK, o GRADEp irá migrar o MasterOXHandle para o nodo local. public interface OXManager { public OXManager.OXHandle requestOwnership(OXManager.OXHandle h); API
Sumário da apresentação 1 Visão geral – serviço OXManager 2 Exemplo: OXManagerDemo 3 OXManager: outras APIs
OXManager.updateAttributes() • O método updateAttributes() permite consultar e atualizar vários atributos de um OX (simultaneamente): • Parâmetros: • OXHandle: handle para o OX; • String[]: lista dos atributos; • Byte[]: operações para serem efetuadas sobre os respectivos atributos; • OXAttributeOps.READ: ler o atributo • OXAttributeOps.WRITE: escrever sobre o atributo • Retorna um OXHandle potencialmente atualizado com os novos atributos. public interface OXManager { public OXManager.OXHandlereleaseHandle( OXManager.OXHandle h, String[] a, Byte[] o); API
OXManager.releaseHandle() • O método releaseHandle() notifica o OXManager de que um OXHandle não é mais necessário: • Recebe o OXHandle em questão como parâmetro; • A semântica de se liberar um MasterOXHandle é a de que o OX deixa de existir (isto é, os meta-atributos); • É específico de uma implementação do GRADEp se a aplicação poderá liberar diretamente um MasterOXHandle ou se algum mecanismo automático é utilizado (exemplo: contagem de referências inter-nodo); • A liberação de um ProxyOXHandle deve resultar em uma propagação até o seu HomeOXHandle, de forma que o MasterOXHandle possa ser melhor posicionado. public interface OXManager { public voidreleaseHandle(OXHandle h); API
Treinamento no GRADEp Serviço OXManager OXManagerDemo