Primeiro, consegui no commit número #93 deixar a parte 1 de 3 do referido plugin (vou descrever a arquitetura dele em outro post) funcionando.
Em outras palavras, já tenho um servico EJB Stateful que provê acesso a múltiplos clientes e invocações repetidas ao repositório do EA. Também, usando o padrão Factory com um cache de mapas, consigo manipular múltiplos repositórios do EA de forma transparente; e com o uso da anotação @PreDestroy, garanto que não ocorra vazamento de recursos em caso de queda de sessões de clientes. De quebra, usando o padrão Delegate entre a camada EJB e a classe Wrapper, consigo usar o Wrapper para manipular o repositório do EA localmente (ex. sem uso de container JavaEE), se for o caso.
Segundo, e isso levou esta noite toda, consegui seguir o passo-a-passo do pessoal da Atlassian para montar um ambiente de desenvolvimento com o Atlassian SDK para o meu Eclipse.
Com isso, posso fazer a parte 2 de 3 do plugin, que visa a conexão dos elementos do EA via protocolo SOAP (é um protocolo mesmo?) com as issues no Jira.
Depois de muito sofrer com o Maven (detesto ele!), tendo que baixar os Jars da JTA e JNDI por fora, e transformar o projeto em um projeto Eclipse (isso foi fácil, com mvn eclipse:eclipse; mas demorou 27 minutos!), montei o projeto e rodei os demos. Bingo!
Minha primeira issue Jira via SOAP
Com os demos rodando, criei uma classe tosca, e alterei a URL do Jira demo para apontar para o nosso Jira. Depois, regerei as classses Java via o WSDL e, voilá.
Abaixo, o screenshot da issue JB-552, criada em nosso ambiente, e logo após a classe de teste:
/** * Copyright 2010 3L TECNOLOGIA * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.atlassian.jira_soapclient; import java.net.MalformedURLException; import java.net.URL; import com.atlassian.jira.rpc.soap.client.JiraSoapService; import com.atlassian.jira.rpc.soap.client.RemoteAuthenticationException; import com.atlassian.jira.rpc.soap.client.RemoteException; import com.atlassian.jira.rpc.soap.client.RemoteIssue; import com.atlassian.jira.rpc.soap.client.RemotePermissionException; import com.atlassian.jira.rpc.soap.client.RemoteValidationException; /** * @author mmrack * @since 08/01/2010 01:09:47 * */ public class LM2JiraSOAPClient { private JiraSoapService jiraSoapService; private String authToken; public LM2JiraSOAPClient(String user, String password) throws Exception { authToken = connectTo( "http://jboss.lm2.com.br/jira/rpc/soap/jirasoapservice-v2", user, password); } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { LM2JiraSOAPClient jiraClient = new LM2JiraSOAPClient("mmrack", "mypassword"); String iKey = jiraClient.createIssue("JB", "1", "LM2JiraSOAPClient Issue", ":)"); System.out.println(iKey); } private String createIssue(String pkey, String type, String summary, String description) throws Exception { String iKey; RemoteIssue issue = new RemoteIssue(); issue.setProject(pkey); issue.setType(type); issue.setSummary(summary); issue.setDescription(description); RemoteIssue returnedIssue = jiraSoapService.createIssue(authToken, issue); return returnedIssue.getKey(); } private String connectTo(String url, String user, String password) throws Exception { SOAPSession soapSession = new SOAPSession(new URL(url)); soapSession.connect(user, password); this.jiraSoapService = soapSession.getJiraSoapService(); return soapSession.getAuthenticationToken(); } }
Próximos passos
Estou trabalhando com o P. nesse projeto fora de horário, e ele deve dar ênfase na parte da interface do usuário, que espero fazer em Grails.
Quanto à parte 3 de 3 do plugin, esta envolve Model Driven Architecture (MDA) e, por isso, devo iniciar um projeto logo (já faz mais de ano que digo isso!) com o F., lá na PUCRS.
Enquanto as partes 1 e 2 do plugin visam ser totalmente Open Source, essa parte 3 visa dar um retorno financeiro para nós e, assim, o objetivo é fazer algo bem estruturado, que possa operar de forma fragmentada ou integrada, visando tando desenvolvedores standalone, quando softwarehouses de porte, onde projetos grandes carecem de sincronia de informações.
Bye.
0 comentários:
Postar um comentário