Tecgraf PUC-Rio setembro de 2013 Desenvolvendo uma aplicação CORBA utilizando Java.
Tecgraf PUC-Rio maio de 2011 Data Service. Motivação Aplicações científicas tem como...
Transcript of Tecgraf PUC-Rio maio de 2011 Data Service. Motivação Aplicações científicas tem como...
Tecgraf PUC-Rio
maio de 2011
Data Service
Motivação
• Aplicações científicas tem como característica a elevada complexidade de seus dados e dos algoritmos que os manipulam• representação complexa• grande volume de dados
• Necessidade de compartilhamento de dados entre as aplicações
Data Service
• Oferece um conjunto de funcionalidades para acesso e manipulação dos dados armazenados em Provedores de Dados (data sources).
• Flexível para atender às diferentes características dos servidores de dados e às diferentes necessidades dos clientes.
• Aplicações se integram de maneira uniforme a diferentes provedores de dados, com apenas uma implementação
Princípios básicos
• Representação dos dados de forma estruturada• os dados podem ser representados da forma mais adequada
para as aplicações• navegação x armazenamento
• Diferentes visões sobre os dados• um mesmo dado pode oferecer diferentes visões
• Navegação hierárquica• a navegação é feita de forma hierárquica
• Navegação por descritores (meta-informações)• a navegação não é feita sobre o próprio dado, mas sobre uma
hierarquia de descritores
O Serviço de Dados
• Define os tipos e as facetas para navegação hierárquica pelos dados oferecidos.
module tecgraf {
module openbus { /** * \brief Módulo do Serviço de Dados Estruturados. */
module data_service {
...
}; // data_service }; // openbus}; // tecgraf
Descritores dos Dados
• A navegação pelos dados é feita usando descritores que possuem meta-informação sobre os dados• descrição dos dados representados• indica quais as visões o dado representado oferece• a aplicação usa apenas a visão que lhe interessa• possui uma chave que identifica univocamente o
dado representado• É utilizada no descritor e nas visões como identificador• Pode ser persistida
Descritores dos Dados
• A navegação hierárquica é feita sobre descritores dos dados.
• O descritor deve ter informações suficientes para que um determinado dado seja identificado.
valuetype DataDescription { /** A chave unívoca do dado. */ public DataKey fKey; /** O nome simbólico do dado. */ public string fName; /** As visões oferecidas pelo dado. */ public StringSeq fViews; /** Metadados (opcionais) do dado. */ public MetadataSeq fMetadata;};
Descritores dos Dados
• A chave fKey é criada pelo serviço
• Identificador unívoco
• Identifica, além do dado em si, o serviço do qual o dado se originou.
valuetype DataDescription { /** A chave unívoca do dado. */ public DataKey fKey; /** O nome simbólico do dado. */ public string fName; /** As visões oferecidas pelo dado. */ public StringSeq fViews; /** Metadados (opcionais) do dado. */ public MetadataSeq fMetadata;};
typedef sequence<octet> OctetSeq;typedef OctetSeq DataKey;
Descritores dos Dados
• O campo fName possui um nome simbólico para o dado.
valuetype DataDescription { /** A chave unívoca do dado. */ public DataKey fKey; /** O nome simbólico do dado. */ public string fName; /** As visões oferecidas pelo dado. */ public StringSeq fViews; /** Metadados (opcionais) do dado. */ public MetadataSeq fMetadata;};
Descritores dos Dados
• O campo fViews possui a lista das visões que o dado possui.
• Tipicamente utiliza-se o repository ID como identificador da visão.
valuetype DataDescription { /** A chave unívoca do dado. */ public DataKey fKey; /** O nome simbólico do dado. */ public string fName; /** As visões oferecidas pelo dado. */ public StringSeq fViews; /** Metadados (opcionais) do dado. */ public MetadataSeq fMetadata;};
Descritores dos Dados
• O campo fMetadata permite qualquer informação adicional
• Par nome e valor onde o valor pode ser de qualquer tipo básico (any).
valuetype DataDescription { /** A chave unívoca do dado. */ public DataKey fKey; /** O nome simbólico do dado. */ public string fName; /** As visões oferecidas pelo dado. */ public StringSeq fViews; /** Metadados (opcionais) do dado. */ public MetadataSeq fMetadata;};
struct Metadata { string fName; /**< \brief O nome. */ any fValue; /**< \brief O valor. */};typedef sequence<Metadata> MetadataSeq;
Visão do Dado
• É um conjunto de atributos e operações que apresentam o dado de acordo com um domínio ou uma necessidade específica.
• Os servidores de dados implementam suas próprias visões.
• Uma visão é sobre um dado em particular.
• Do ponto de vista do cliente, a visão é o dado.abstract interface DataView { /** Obtém o identificador unívoco do dado. */ DataKey getKey() /** Obtém o nome da interface. Deve-se utilizar o * "Repository ID" como retorno. */ string getInterfaceName();};
Visão do Dado
• O DataService já define uma visão para dados não estruturados.
• Com essa visão é possível transferir dados locais para o data source através de socket
/** Visão não-estruturada de um dado para a transferência de seu conteúdo através de um socket. */valuetype UnstructuredData supports DataView { public DataKey fKey; /* O identificador unívoco do dado. */ public string fHost; /* O nome do host de origem do dado. */ public unsigned long fPort; /* A porta do host de origem */ public OctetSeq fAccessKey; /* A chave de acesso ao dado. */ public boolean fWritable; /* Se é possível alterar o dado */};
Exemplo de transferência de dado usando a visão não estruturada
A biblioteca FTC implementa abstrações para transferência de dados por socket.
byte[] data = ...; UnstructuredData view = (UnstructuredData) dataService.getDataView(fileKey, UnstructuredDataHelper.id()); DataKey dataKey = new DataKey(view.fKey); RemoteFileChannel rfc = new RemoteFileChannelImpl( dataKey.getDataId().getBytes(Utils.CHARSET_ENCODING), view.fWritable, view.fHost, view.fPort, view.fAccessKey); rfc.open(false); rfc.write(data); rfc.close();
Facetas definidas pelo Serviço de Dados
• IHierarchicalNavigationDataService• responsável pela navegação pelos dados
• IHierarchicalManagementDataService• responsável pela criação, atualização e remoção de dados,
no próprio data source.
• IHierarchicalTransferDataService• responsável pela transferência de dados entre data sources
diferentes.
• IHierarchicalDataService• interface de conveniência que herda todas as
funcionalidades das outras três
IHierarchicalNavigationDataService
IHierarchicalNavigationDataService
• O método getRoots obtém os descritores dos dados que representam as raízes da hierarquia.
• É utilizado pelas aplicações que utilizam o serviço para iniciar a navegação nos dados.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• DataAccessDenied caso o usuário não tenha permissão de acesso.
DataDescriptionSeq getRoots() raises (ServiceFailure, DataAccessDenied);
IHierarchicalNavigationDataService
• O método getChildren obtém os descritores dos dados descendentes de um determinado dado.
• O parâmetro de entrada é a chave do dado que se deseja os descendentes.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão de acesso
DataDescriptionSeq getChildren(in DataKey fKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, DataAccessDenied);
IHierarchicalNavigationDataService
• O método getParent obtém o descritor dos ascendente de um determinado dado.
• O parâmetro de entrada é a chave do dado que se deseja o ascendente.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão de acesso
DataDescription getParent(in DataKey fKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, DataAccessDenied
IHierarchicalNavigationDataService
DataDescription getDataDescription(in DataKey fKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, DataAccessDenied);
• O método getDataDescription obtém o descritor de um determinado dado.
• O parâmetro de entrada é a chave do dado que se deseja o descritor.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão de acesso
IHierarchicalNavigationDataService
DataView getDataView(in DataKey fKey, in string fViewInterface) raises (ServiceFailure, InvalidDataKey, DataNotFound, UnknownViewInterface, DataAccessDenied);
• O método getDataView obtém uma visão de um dado.
• Os parâmetros de entrada são a chave do dado e o nome da visão desejada.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• UnknownViewInterface uma visão desconhecida foi solicitada
• DataAccessDenied caso o usuário não tenha permissão
IHierarchicalNavigationDataService
DataViewSeq getDataViewSeq(in DataKeySeq fKeys, in string fViewInterface) raises (ServiceFailure, InvalidDataKey, DataNotFound, UnknownViewInterface, DataAccessDenied);
• O método getDataViewSeq obtém um conjunto de visões para um conjunto de dados. As visões retornadas implementam a mesma interface.
• Os parâmetros são as chaves dos dados e o nome da visão
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• UnknownViewInterface uma visão desconhecida foi solicitada
• DataAccessDenied caso o usuário não tenha permissão
IHierarchicalManagementDataService
IHierarchicalManagementDataService
• O método createData cria um dado a partir de informações contidas em um descritor protótipo.
• Nem todos os campos precisam estar presentes na descrição do dado (ex: o campo dataKey)
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• InvalidPrototype caso o protótipo seja inválido
• DataAccessDenied caso o usuário não tenha permissão
DataKey createData(in DataKey fPrototype, in DataDescription fParentKey) raises (ServiceFailure, InvalidDataKey, DataNotFound, InvalidPrototype, DataAccessDenied)
IHierarchicalManagementDataService
• O método copyData copia um dado para uma determinada localização.
• Recebe como parâmetros a chave do dado de origem e a chave do dado (pai) onde o novo dado (filho) será criado.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• UnknownViews o dado não possua visões para o novo dado.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão
DataKey copyData(in DataKey fSourceKey, in DataKey fParentKey) raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound, DataAccessDenied);
IHierarchicalManagementDataService
• O método moveData move um dado para uma determinada localização.
• Recebe como parâmetros a chave do dado de origem e a chave do dado (pai) onde o novo dado (filho) será criado.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• UnknownViews o dado não possua visões para o novo dado.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão
void moveData(in DataKey fKey, in DataKey fNewParentKey) raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound, DataAccessDenied);
IHierarchicalManagementDataService
• O método updateData atualiza um dado a partir do conteúdo de um outro dado qualquer.
• Recebe como parâmetros a chave do dado que se deseja atualizar e a chave do dado de origem.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• UnknownViews o dado não possua visões para o novo dado.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão
void updateData(in DataKey fKey, in DataKey fSourceKey) raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound, DataAccessDenied);
IHierarchicalManagementDataService
• O método deleteData remove um dado.
• Recebe como parâmetro a chave do dado que se deseja remover.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão
void deleteData(in DataKey fKey) raises (ServiceFailure, InvalidDataKey, DataNotFound,DataAccessDenied);
IHierarchicalTransferDataService
IHierarchicalTransferDataService
• O método copyDataFrom copia um dado proveniente de outro data source para uma determinada localização.
• Recebe como parâmetros a chave do dado de origem e a chave do dado (pai) onde o novo dado (filho) será criado.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• UnknownViews o dado não possua visões para o novo dado.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão
DataKey copyDataFrom(in DataKey fSourceKey, in DataKey fParentKey) raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound, DataAccessDenied)
IHierarchicalTransferDataService
• O método updateDataFrom atualiza um dado a partir do conteúdo de um dado proveniente de outro data source.
• Recebe como parâmetros a chave do dado que se deseja atualizar e a chave do dado de origem.
• Pode lançar as exceções:• ServiceFailure caso ocorra uma falha na operação.
• UnknownViews o dado não possua visões para o novo dado.
• InvalidDataKey caso a chave do dado não seja válida.
• DataNotFound caso o dado não seja encontrado.
• DataAccessDenied caso o usuário não tenha permissão
void updateDataFrom(in DataKey fKey, in DataKey fSourceKey) raises (ServiceFailure, UnknownViews, InvalidDataKey, DataNotFound, DataAccessDenied);