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

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

Tecgraf PUC-Rio fevereiro de 2011 Aplicação Java cliente do OpenDreams Openbus.

Apresentações semelhantes


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

1 Tecgraf PUC-Rio fevereiro de 2011 Aplicação Java cliente do OpenDreams Openbus

2 Sobre o exemplo Mostraremos um exemplo de uma aplicação cliente que usa o OpenDreams publicado no Openbus pelos sistemas CSBase. Para tal, vamos assumir que existe um CSGrid (ou outro sistema CSBase) executando e que tenha publicado em um barramento OpenBus o serviço OpenDreams. Componente de serviço IOpenDreams

3 Passo 1: Obtendo as libs do OpenDreams A última versão das bibliotecas java do Serviço OpenDreams pode ser obtida em: https://jira.tecgraf.puc-rio.br/confluence/display/OpenDreams. Essa biblioteca já possui as classes compiladas das interfaces IDL do OpenDreams, bem como as classes e fábricas que implementam em Java os valuetypes definidos nessa interface. A última versão da lib java do OpenDreams é: opendreams-1.4.1.jar

4 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 –iniciar uma sessão no OpenDreams –definir um jobtemplate para submissão de um job –submterer a execução de um job –aguardar o término do job

5 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(OpenDreamsJobTemplateHelper.id(), new OpenDreamsJobTemplateFactory()); orb.register_value_factory(JobInfoHelper.id(), new JobInfoFactory());

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

7 Obtendo uma sessão String projectName = props.getProperty("dataservice.project.name"); Session session = session = opendreams.getSession(projectName); session.init(""); Uma sessão do OpenDreams é identificada pelo usuário dono da credencial e pelo projeto do CSBase no qual essa sessão atua para acesso aos dados

8 Criando um JobTemplate OpenDreamsJobTemplate jt = (OpenDreamsJobTemplate) session.createJobTemplate(); jt.remoteCommand = "execAlgo"; jt.args = new String[] { "-name", "Teste da SimpleDemoOpenDreams", "-version”, "1.0.0" }; jt.jobDescription = "Teste da Demo Simples do OpenDreams pela Julia"; jt.jobParameters = new String[][] { { "qtde", "3" }, { "duracao", "2" } }; jt.outputPath = "saida.out"; jt.email = new String[] { "mjulia@tecgraf.puc-rio.br" }; O valuetype OpenDreamsJobTemplate precisa estar registrado no ORB com a sua respectiva fábrica

9 Submetendo um job para execução String jobName = session.runJob(jt); O JobTemplate é colocado na fila de escalonamento para execução O valor retornado pelo método runJob é um nome que identifica o job no serviço OpenDreams Após a submissão, o JobTemplate pode ser removido da sessão session.deleteJobTemplate(jt);

10 Aguardando o término da execução JobInfo jobInfo = session._wait(jobName, Session.TIMEOUT_WAIT_FOREVER); System.out.println("** Resultado: hasExited = " + jobInfo.hasExited + ": exitStatus = " + jobInfo.exitStatus); O valuetype JobInfo precisa estar registrado no ORB com a sua respectiva fábrica No caso de ser necessário outras informações sobre o término do job, o valuetype OpenDreamsJobInfo fornece dados adicionais OpenDreamsJobInfo jobInfo = (OpenDreamsJobInfo) session._wait(jobName, Session.TIMEOUT_WAIT_FOREVER); System.out.println("** Tipo de finalizacao: " + jobInfo.finalizationType);

11 Finalizando a sessão session.exit(); Ao finalizar a sessão, os jobtemplates criados naquela sessão são removidos e não podem ser mais utilizados

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 fevereiro de 2011 Aplicação Java cliente do OpenDreams Openbus."

Apresentações semelhantes


Anúncios Google