Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data Services Server 2.5.0
Versões novas de produtos sempre são uma alegria, seja pelos recursos novos ou somente pela novidade que sempre alegra-nos, principalmente nós desenvolvedores. Mas juntamente com as novas versões (principalmente nos primeiros releases) vem também problemas, bugs ou incompatibilidade de versões- os problemas mais comuns.
E para não pararmos no tempo, vendo que as novidades do WSO2 Data Services Server 2.5.0 seriam muito bem vindas para nós, resolvemos realizar testes para verificar a possibilidade de atualizarmos nossa versão da 2.2.1 para a 2.5.0, e surgiu aquela alegria quando vimos que não teríamos problemas de incompatibilidade como ocorreu nos testes de migração da 2.0 para WSO2 Data Services Server 2.2.1.
Mas como nem tudo são rosas, um velho bug conhecido nosso na versão 2.0 e discutido no fórum - de não aceitar valores null, tinha sido corrigido na versão 2.2.1; mas resolveu dar as caras na versão 2.5.0. E por necessitarmos das novidades dessa versão, tivemos que correr atrás e corrigir o problema, já corrigido anteriormente.
Como já conhecemos a estrutura, fomos direto ao site do projeto para realizar o download do fonte do WSO2 Data Services Server e fomos atrás do arquivo problemático (SQLQuery.java). Mas para nossa surpresa, o arquivo não estava mais lá, foi centralizado no projeto WSO2 Carbon.
Então com o arquivo de código-fonte do WSO2 Carbon 3.0.0 devidamente baixado, vamos colocar a mão na massa.
Baixando e descompactando o fonte
wget http://dist.wso2.org/products/carbon/3.0.0/wso2carbon-3.0.0-src.zip unzip wso2carbon-3.0.0-src.zip
Baixando e aplicando o patch
wget /wp-content/uploads/2010/06/wso2-dataservices-accept-null.txt cd wso2carbon-3.0.0-src patch -p1 wso2-dataservices-accept-null.patch
E a mensagem recebida aqui será algo como:
patching file components/data-services/org.wso2.carbon.dataservices.core/3.0.0/src/main/java/org/wso2/carbon/dataservices/dispatch/query/SQLQuery.java
Compilando o componente
Levando em consideração que você tenha as dependências necessárias, vai ser um passo bem demorado. Vai fazer download de alguns pacotes, compilar, testar e gerar uma nova versão do componente, com a correção.
cd components/data-services mvn install
Corrigindo o Data Services Server
Agora que temos o componente corrigido e devidamente compilado, vamos copiá-lo para a instância do WSO2 Data Services Server (levando em consideração que minha instalação fica em ~/Applications/wso2/wso2dataservices-2.5.0).
cp org.wso2.carbon.dataservices.core/3.0.0/target/org.wso2.carbon.dataservices.core-3.0.0.jar ~/Applications/wso2/wso2dataservices-2.5.0/wso2dataservices-2.5.0/repository/components/plugins/org.wso2.carbon.dataservices.core-3.0.0.jar cp org.wso2.carbon.dataservices.ui/3.0.0/target/org.wso2.carbon.dataservices.ui-3.0.0.jar ~/Applications/wso2/wso2dataservices-2.5.0/wso2dataservices-2.5.0/repository/components/plugins/org.wso2.carbon.dataservices.ui-3.0.0.jar
Conclusão
Com o patch criado, testado e aplicado. Abrimos um pedido de correção no JIRA do WSO2, para que eles possam corrigir na próxima release (provavelmente a 2.5.1). Caso você não tenha disponibilidade (de tempo ou paciência), pode baixar os componente do WSO2 Data Services Server corrigido (bastando apenas descompactá-los).
E tenho que falar, viva o código aberto e o software livre! (;
Utilizando o Array Type do WSO2 Data Services Server 2.5.x
Uma das novidades do WSO2 Data Services Server 2.5.x, já listada anteriormente, é que agora poderemos trabalhar com Array Types. Essa opção não existia anteriormente e as únicas maneiras que tínhamos para contornar, digamos que não eram muito legais. Por exemplo: invocar várias vezes o método ou concatenar as várias entradas em um campo string e posteriormente (em uma procedure ou algo do gênero) realizar o parser.
Ambas tem seus problemas, muitas requisições invocando várias vezes ou dificuldade de implementação (dependendo do banco de dados) para o caso de realizar o parser na procedure; mas, de uma forma ou outra, resolviam o problema. Só que com a implementação de Array Type resolvemos esse problema de maneira simples, eficiente e elegante!
Colocando a mão na massa
Digamos que temos um serviço onde nosso cliente quer listar vários produtos, nosso cliente tem todos os códigos dos produtos e quer o restante dos dados. Antigamente passaríamos para ele um método productById que recebe um id, algo como abaixo:
Mas agora tudo foi facilitado, vamos a "mágica"! Para alteração do método que aceite a entrada de um Array Type, serão necessários apenas dois passos.
Passo 1: editando a query
Teremos que trocar a query que antigamente aceitava apenas um parâmetro como entrada "id = :id" e colocaremos uma que aceita "N" parâmetros "id in (:id)". Então na tela de edição da query do WSO2 Data Services Server, basta trocarmos, como fiz abaixo:
Passo 2: editando o tipo da entrada
E o segundo passo, editando os Input Mappings, basta trocarmos o tipo scalar para array, novamente, como fiz abaixo:
O resultado
E agora vamos a parte legal: o resultado!
Conclusão
Essa implementação facilitou muito e melhorou a qualidade de nossos serviços. Ainda não foi lançada a versão final, apenas algumas releases candidates, que podem ser acompanhadas pelo repositório de builders do WSO2 Carbon 3.0.0.
Deixo aqui o download dos arquivos utilizados para implementar o Array Type nesse exemplo, contém os arquivos abaixo:
- Data Service antes da implementação do Array Type
- Data Service depois da implementação do Array Type
- Script de criação do banco de dados utilizado (MySQL)
Novidades nos lançamentos (nov/2009) da plataforma WSO2
Como avisei aqui e no twitter semana passada, o pessoal do WSO2 lançou algumas atualizações nos projetos da plataforma WSO2 Carbon. Mas somente agora, com o lançamento oficial, é que podemos descobrir o que foi atualizado.
Segue um resumão (baseado nas notas de lançamento) com o que foi atualizado em cada um dos projetos.
WSO2 Web Services Application Server (v3.1.2)
- Correções em vários softwares que fazem parte dele: Apache Axis2, Apache Rampart, Apache Sandesha2, WSO2 Carbon e alguns outros projetos;
- Correção da limpeza de memória após reiniciar o servidor.
Versão original (inglês): aqui.
WSO2 Enterprise Service Bus (v2.1.2)
- Diversas melhorias e correções desde a versão 2.1.0 lançada em julho de 2009.
Versão original (inglês): aqui.
WSO2 Governance Registry (v3.0.2)
- Melhoria no suporte a transação;
- Suporte ao WebSphere, WebLogic e JBoss;
- Baseado na suíte WSO2 Carbon;
- Suporte a clusterização;
- Correção de vários bugs.
Versão original (inglês): aqui.
WSO2 Business Process Server (v1.1.0)
- Nova camada de integração WSO2 Carbon para o Apache ODE;
- Utilizando Apache ODE 2.0-beta (baseado no trunk) como engine BPEL;
- Suporte experimental para clusterização;
- Suporte para consumo de serviços seguros (usando WS-Security);
- Utilizando OpenJPA para camada de acesso a dados ODE;
- Recuperação de atividades utilizando o management console;
- Atualização online (hot update) do pacote BPEL facilitam o versionamento;
- Suporte a manipulação de dados utilizando E4X nos processos BPEL.
Aqui deixo um adendo, baseado em alguns testes superficiais que fiz, posso dizer que não é indicado colocar essa versão em produção. Como disseram nas notas de lançamento, muita coisa está incompleta ainda e achei alguns probleminhas. Mas é interessante tentarmos colocar os processos BPEL e realizar testes para reportarmos os problemas e ajudarmos na correção dos mesmos para a versão 1.1.1 (que espero que chegue logo).
Isso é até compreensível, já que se trata de uma nova versão e não apenas correções de bugs como as outras. (:
Versão original com cada item comentado (inglês): aqui.
WSO2 Identity Server (v2.0.2)
- Correções em vários softwares que fazem parte dele: Apache Axis2, Apache Rampart, Apache Sandesha2, WSO2 Carbon e alguns outros projetos.
Versão original (inglês): aqui.
WSO2 Mashup Server (v2.0.1)
- Interface visual para gerenciar as tarefas agendadas;
- Baseado no WSO2 Carbon SOA Framework que irá facilitar habilitação de funções a um clique, como o gerenciamento de Data Services nas futuras versões do Mashup Server.
Versão original (inglês): aqui.







