A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Tecgraf PUC-Rio maio de 2011 Aplicação Java cliente do DataService Openbus.

Apresentações semelhantes


Apresentação em tema: "Tecgraf PUC-Rio maio de 2011 Aplicação Java cliente do DataService Openbus."— Transcrição da apresentação:

1 Tecgraf PUC-Rio maio de 2011 Aplicação Java cliente do DataService Openbus

2 Sobre o exemplo Mostraremos um exemplo de uma aplicação cliente que usa o DataService publicado pelo Serviço de Projetos dos sistemas CSBase. Para tal, vamos assumir que existe um CSGrid (ou outro sistema CSBase) executando e que tenha publicado em um barramento OpenBus o DataService. O serviço de Projetos CSBase implementa um componente de serviço IHierarchicalDataService

3 Passo 1: Obtendo as libs do DataService A última versão das bibliotecas java do Serviço de Dados pode ser obtida em: https://jira.tecgraf.puc- rio.br/confluence/pages/viewpage.action?pageId= 27067037https://jira.tecgraf.puc- rio.br/confluence/pages/viewpage.action?pageId= 27067037 A biblioteca com os tipos usados no serviço de dados dos data sources (ex: repositório de projetos do CSGrid) devem ser requisitadas ao administrador do próprio sistema.

4 Libs do DataService Core: openbus-data_service-api-1.0.1.jar openbus-data_service-idl-jacorb-1.0.1.jar openbus-data_service-valuetype-1.0.1.jar Serviço de Projetos CSBase: openbus-data_service-project-idl-jacorb-1.0.1.jar openbus-data_service-project-valuetype-1.0.1.jar

5 Passo 2: Implementando o Cliente O programa cliente se encarrega de: –inicializar o Openbus e registrar as fábricas dos value types utilizados –fazer a autenticação no barramento –exibir a estrutura de pastas e arquivos que compôem um projeto CSBase –copiar o conteúdo de um arquivo local para uma pasta de um projeto CSBase –ler um arquivo remoto

6 Registro das fábricas dos valuetypes import tecgraf.openbus.data_service.DataDescriptionFactory; import tecgraf.openbus.data_service.DataDescriptionHelper; import tecgraf.openbus.project.ProjectItemDescriptionHelper; import tecgraf.openbus.data_service.project.ProjectItemDescriptionFactory; import tecgraf.openbus.data_service.UnstructuredDataFactory; import tecgraf.openbus.data_service.UnstructuredDataHelper;... Openbus bus = Openbus.getInstance(); ORB orb = (ORB) bus.getORB(); orb.register_value_factory(DataDescriptionHelper.id(), new DataDescriptionFactory()); orb.register_value_factory(ProjectItemDescriptionHelper.id(), new ProjectItemDescriptionFactory()); orb.register_value_factory(UnstructuredDataHelper.id(), new UnstructuredDataFactory());

7 Procurando o serviço ProjectDataService String componentName = props.getProperty("dataservice.component.name”); String componentVersion = props.getProperty("dataservice.component.version”); String componentId = componentName + ":" + componentVersion; Property property = new Property("component_id", new String[] { componentId }); String facetName = "ProjectDataService"; ServiceOffer[] servicesOffers = registryService.findByCriteria( new String[] {facetName}, new Property[] { property }); if (servicesOffers.length == 0) { throw new ProjectServiceClientException("Não foi encontrado um serviço " + facetName + " com identificador: " + componentId); } if (servicesOffers.length > 1) { throw new ProjectServiceClientException( "Foi encontrado mais de um serviço " + facetName + " com identificador: " + componentId); } ServiceOffer serviceOffer = servicesOffers[0]; IComponent component = serviceOffer.member; IHierarchicalDataService dataService = IHierarchicalDataServiceHelper.narrow(component.getFacet(IHierarchicalDataServiceHelper.id())); Outra forma de procurar pelo componente é usando a propriedade registered_by com o nome da entidade que publicou o componente f

8 Obtendo o descritor da raiz do projeto String projectName = props.getProperty("dataservice.project.name"); DataDescription[] rootDescList = dataService.getRoots(); if (rootDescList.length < 1) { throw new ProjectServiceClientException("O usuário não possui projetos"); } for (int i = 0; i < rootDescList.length; i++) { DataDescription rootDesc = rootDescList[i]; if (!(rootDesc instanceof ProjectItemDescription)) { throw new ProjectServiceClientException("Descritor inválido:" + rootDesc.toString()); } if (rootDesc.fName.equals(projectName)) { return rootDesc; } O valuetype ProjectItemDescription precisa estar registrado no ORB com a sua respectiva fábrica

9 Exibindo a árvore de dados do projeto private void showFolder(int count, DataDescription desc) throws ProjectServiceClientException { try { StringBuffer ident = new StringBuffer(); for (int i = 0; i < count; i++) { ident.append(' '); } DataDescription[] children = dataService.getChildren(desc.fKey); for (DataDescription child : children) { String childName = child.fName; ProjectItemDescription childDesc = (ProjectItemDescription) dataService.getDataDescription(child.fKey); if (childDesc.fIsContainer) { System.out.println(ident + "+ Diretorio: " + childName); showFolder(count + 3, child); } else { System.out.println(ident + "- Arquivo: " + childName); } catch (Exception e) { throw new ProjectServiceClientException( "Erro na exibição do conteúdo da pasta" + desc.fName, e); }

10 Para criar um arquivo Precisamos instanciar um ProjectItemDescriptionImpl /** * Constrói uma descrição de um item de projeto. * @param key A chave unívoca do item de projeto. * @param name O nome do item de projeto. * @param views As visões oferecidas para o item de projeto. * @param metadata Os metadados do item de projeto. * @param owner O dono do item. * @param description Um texto explicativo. * @param path O caminho. * @param type O tipo. * @param size O tamanho. * @param isContainer Indica se o item pode conter outros itens. * @param canRead Indica se o item pode ser lido. * @param canWrite Indica se o item pode ser alterado. * @param creationDate A data de criação. * @param modificationDate A data de última modificação. */ public ProjectItemDescriptionImpl(byte[] key, String name, Set views, List metadata, String owner, String description, String path, String type, long size, boolean isContainer, boolean canRead, boolean canWrite, long creationDate, long modificationDate) {... }

11 Escrevendo um arquivo usando o FTC public DataDescription createRemoteFile(String fileName, byte[] data, DataDescription desc) throws ProjectServiceClientException { try { long currentDate = Calendar.getInstance().getTimeInMillis(); ProjectItemDescription prototype = new ProjectItemDescriptionImpl(fileName, new HashSet (), new ArrayList (), userLogin, null, null, "TEXT", 0, false, true, true, currentDate, currentDate); byte[] fileKey = dataService.createData(desc.fKey, prototype); 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(); return dataService.getDataDescription(fileKey); } catch (Exception e) { throw new ProjectServiceClientException( "Erro na criação de um arquivo na pasta", e); }

12 Lendo um arquivo usando o FTC public byte[] readRemoteFile(DataDescription desc) throws ProjectServiceClientException { try { UnstructuredData view = (UnstructuredData) dataService.getDataView(desc.fKey, 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(true); int fileSize = (int) rfc.getSize(); byte[] buffer = new byte[fileSize]; if (fileSize != 0) { rfc.read(buffer); } rfc.close(); return buffer; } catch (Exception e) { throw new ProjectServiceClientException( "Erro na leitura de um dado da pasta", e); }


Carregar ppt "Tecgraf PUC-Rio maio de 2011 Aplicação Java cliente do DataService Openbus."

Apresentações semelhantes


Anúncios Google