WSO2: SOA Workshop em São Paulo
No último fim de semana estivemos participando do Open PaaS Workshop: Understanding the Stratos Cloud Platform em São Paulo.
O workshop foi uma ótima oportunidade para conhecermos outras pessoas que utilizam a plataforma. E, também, saber que um pessoal do WSO2 veio ao Brasil realizar um quickstart em duas empresas, uma de Uberlândia e outra de São Paulo. Esses dois cases, são os primeiros cases privados que ficamos sabendo, publicamente. Estamos atrás de maiores detalhes sobre os projetos para escrevermos sobre eles.
Isso mostra que o WSO2 está em crescimento no Brasil. E o que só ajuda a confirmar esse crescimento, é a participação da concorrência no workshop e também outras empresas interessadas em utilizar o WSO2.
O workshop foi aberto pelo Diogenes Justo (Banco Indusval) que deu uma introdução, falou um pouco do projeto, as opções estudadas e como chegou até o WSO2. Foi mais um bate-papo com a galera, passando uma visão muito interessante sobre o projeto deles. Conversamos com ele para que nos passasse mais detalhes sobre o projeto e a experiência de trabalhar com a plataforma, logo teremos boas novidades e mais conteúdo para vocês, vindo de outra fonte!
Também tivemos o Chintana Wilamuna e o Nuwan Bandara falando sobre a plataforma em nuvem do WSO2 (Stratos Live) e tirando várias dúvidas do pessoal! Todos estavam bastante curiosos e questionadores. As dúvidas foram bastante diversificadas, não apenas sobre cloud. O que gerou uma conversa legal e uma ótima troca de experiências.
Fechando as palestras por parte do pessoal do WSO2, veio a Amani Soysa, que falou e mostrou um pouco do poderio do WSO2 Data Services Server. O que é uma “sacanagem”, uma das ferramentas mais úteis e práticas. Não sou o cara mais imparcial pra falar da palestra da Amani, pois sou um amante declarado dessa do WSO2 DSS, então passo a bola.
E, para fechar o evento, falei um pouco sobre nossa implantação aqui no ICI. Tracei o perfil da equipe que participou do projeto, das opções e escolhas que fizemos, um pouco das vantagens e, também, dos problemas enfrentados em uma implantação sem suporte algum, em uma realidade menos ‘enterprise’. E, claro, falei um pouco da comunidade WSO2 Brasil para que a galera se anime a estudar, ajudar e contribuir.
A minha parte da palestra foi gravada, assim que eu conseguir a gravação, compartilharei por aqui. Por enquanto segue a minha apresentação, abaixo:
Resumindo, o evento foi muito bom! E para fechar com chave de ouro, recebemos um convite para acompanhar o quickstart do pessoal do WSO2 (pequenos workshops e instalação de alguns produtos) no Banco Indusval de São Paulo. Um dos motivos da demora para escrevermos sobre.
Posts relacionados
WSO2 Data Services Server e suas atualizações
Se tem uma tarefa que toma muito tempo nosso, são os testes quando sai versão nova de algum produto do WSO2.
Estamos trabalhando na migração do WSO2 Data Services Server 2.5.1 para a 2.6.0 e isso gera uma árdua tarefa de testar todos os serviços que temos rodando, que rodam com diferentes banco de dados (MySQL, PostgreSQL, SQL Server, Oracle).
Na maioria das vezes não encontramos problema algum ou apenas uma pequena mudança de atributo ou tag na definição dos .dbs. Mas as vezes encontramos problemas que fogem da simples configuração do data service, e como aconteceu agora conosco: um bug.
Para tentar minimizar esse trabalho gerei um projeto que tem a ideia de automatizar ao máximo esse tipo de trabalho! E, para com isso, irmos além dos testes unitários que são realizados pelo pessoal do desenvolvimento do WSO2, testar as interfaces em real funcionamento, nos mais variados bancos de dados.
E assim nasceu o pequeno projeto wso2-ds-tests. Que é um apanhando de data services, sql’s e projeto do SOAPUI. Para maiores informações basta acessar o projeto no Github!
Deem uma olhadela por lá e qualquer contribuição é muito bem vinda, basta fazer um fork e mandar um pull request.
Posts relacionados
Novidades WSO2 Data Services Server (2.6.x)
Tenho acompanhado os builds diários que o pessoal do WSO2 tem feito e logo percebi várias novidades na interface, alteração essa que acontecerá em todos or produtos da série Carbon 3.2.*.
Mas, hoje eu tratarei apenas das novidades que teremos no Data Services Server, que são muitas e algumas bem importantes e há muito esperadas!
- UDT (User Defined Type) Support
- Complex Results
- Auto Generated Keys Support
- Distributed Transactions
- Improved Boxcarring Support
- Improved Batch Request Support
- Scheduled Tasks
- Registry Integration for Excel, CSV, XSLT
- Web Scraping Support
- Multiple SQL Dialect Support
- Database to Data Service Generation
- Data Service Query Improvements
- Service Group/Hierarchy Support
- Database Explorer
- Data as a Service Features – DSS Stratos Service
UDT (User Defined Type) Support
Não encontrei maiores detalhes na documentação ou no próprio WSO2 Data Services Server, talvez não tenha saído ainda nessa release.
Complex Results
Agora fica possível criar elementos complexos, facilitando algumas coisas em que era necessário utilizar um transformation (XSLT) ou sub-queries, ganhando – e muito – em performance.
Auto Generated Keys Support
Muito útil para recuperar a primary key de um registro inserido no banco, tirando a necessidade de fazer stored procedures ou outro método de consumo apenas para recuperar a chave inserida.
Distributed Transactions
Uma maneira de realizar transações distribuídas (na maioria das vezes em databases separados), será usado JTA para controlar as transações e também é necessário que usará XA. Com isso ganhamos em não mais precisarmos controlar isso manualmente com um serviço no WSO2 Application Server.
Improved Boxcarring Support
Apenas melhorias no suporte que já existia desde a versão 2.5.0, não encontrei nenhuma alteração visual ou no processo de desenvolvimento.
Improved Batch Request Support
Apenas melhorias no suporte que já existia desde a versão 2.5.0, não encontrei nenhuma alteração visual ou no processo de desenvolvimento.
Scheduled Tasks
Agora, ao invés de fazermos shell scripts que ficam na crontab do servidor para agendar alguns consumos, podemos fazer isso diretamente no WSO2 Data Services Server.
Registry Integration for Excel, CSV, XSLT
Não encontrei maiores detalhes na documentação ou no próprio WSO2 Data Services Server, talvez não tenha saído ainda nessa release.
Web Scraping Support
Poderemos consumir dados diretamente de sites, fazendo parser em conteúdo de páginas, por exemplo.
Multiple SQL Dialect Support
Apesar de ter encontrado referências na wizard de criação/alteração de serviços, não encontrei nada na documentação ou entendi como funcionará, vamos aguardar outros releases.
Database to Data Service
Nessa versão é possível gerar automaticamente os métodos para um database e tabela específico, mas apenas para Carbon Data Sources. Apesar de não ter gostado no padrão gerado, pode ser bom para gerar o CRUD básico e ser alterado posteriormente.
Data Service Query Improvements
Imagino que tenha sido apenas melhorias nas rotinas internas de montagem e processamento de queries. Porque as opções avançadas de query já existiam na versão 2.5.*.
Service Group/Hierarchy Support
Apenas um agrupamento de serviços, imagino que venha como padrão em todo aplicativo da suíte Carbon, pois em alguns outros aplicativos já existia essa opção.
Database Explorer
Uma novidade muito interessante e prática, eles colocaram dentro do WSO2 Data Services Server uma maneira de explorarmos as bases de dados. E a interface lembra bastante o SQuirreL SQL, ficou muito prático.
Data as a Service Features – DSS Stratos Service
Existem algumas novidades também sobre os produtos como serviço na nuvem, que chamam de Stratos, mas não encontrei documentação nesse build.
E algumas outras pequenas alterações que foram percebidas, como:
- Generate response: baseado na query é gerada a resposta do serviço;
- Force stored procedure: força a executar a query como uma stored procedure;
- Entre outras inúmeras pequenas alterações que vão sendo notadas no uso dia-a-dia.
Posts relacionados
SOA Summer School 2011

Movimentando, novamente, nossas férias de inverno (verão para os estadunidenses) tem o SOA Summer School, versão 2011. Várias palestras (online) ministradas pelo pessoal do WSO2, uma vez por semana, falando sobre vários assuntos (lista de palestras abaixo).
Disponibilizei um calendário no fuso horário GMT -3 (America/Sao_Paulo) para que não esqueçamos do evento.
Fiquem ligados e não se esqueçam de realizar a inscrição no site do SOA Summer School 2011!
Posts relacionados
Segurança de informações através de filtragem de dados no WSO2 Data Services
Em alguns casos, podemos nos deparar com a necessidade de confidencializar alguns dados no retorno de Data Services, exibindo-os apenas para determinados grupos de usuários, tanto por questão de segurança (quando algum grupo específico não pode ter acesso a algumas informações), quanto por não ter a necessidade de utilizar esse retorno, para que assim não precisemos criar dois serviços com a mesma finalidade. O WSO2 Data Services Server oferece a possibilidade de filtrar esses dados no retorno de uma query, através do WS-Security (tem como foco principal o uso de XML Signature e XML Encryption).
Nesse caso irei exemplificar a seguinte situação: um serviço que retorna dados referente aos funcionários, sendo consumido por dois departamentos: o RH (que necessita dos dados referente aos pagamentos dos honorários) e o setor de segurança (que utiliza apenas os dados cadastrais para acesso dos funcionários as dependências da empresa).
Iremos utilizar nesse exemplo o WSO2 Data Services Server em sua versão 2.5.1 (nesse caso considerando um conhecimento básico da suíte WSO2, caso contrário consulte os posts relacionados ao WSO2):
Supondo que possuímos o banco de dados, com uma tabela simples chamada de TB_FUNCIONARIOS, com os campos: ID, NOME E SALARIO.
Etapa 1 – Criando o usuário
Logado ao WSO2 Data Services Server vá em “Home > Configure > User Management > Users”, para que possamos criar novos usuários, nesse caso criaremos os usuários “Maria” que faz parte do departamento de RH da empresa e “Joao” que faz parte da segurança do prédio. Click em “Add User” para preenchermos os dados do usuário que será cadastrado.
Após inserir os dados do usuário, clicar em “finish”, repetir o procedimento pro cadastro do outro usuário. Podemos listar os usuários criados como mostra a imagem.
Etapa 2 – Criando grupos de usuários
Com nossos usuários criados, vamos gerar um grupo para vincular ao perfil do usuário. Vá em “Home > Configure > Users and Roles > Roles”, serão listados os grupos existentes no WSO2, clique em “Add New Role” que abrirá a tela para cadastrarmos os grupos.
Crie um grupo com o nome “RecursosHumanos”, em seguida clique em “next”, aparecerá a tela com os flags de permissões e previlégios para os membros do grupo. Nesse caso vamos selecionar a opção “All permissions”, para que sejam marcadas todas as opções. Enquanto estamos criando o grupo, já podemos vincular os usuários que farão parte do mesmo, faça uma busca listando todos os usuários e selecione o usuário “Maria” criado anteriormente, como na imagem abaixo e finalize.
Agora usando o mesmo processo vamos criar o grupo “Seguranca”. Observe que quando selecionamos algum usuário criado e vinculado ao grupo, o mesmo possui um ou vários grupos selecionados.
Etapa 3 – Filtrando dados da consulta
Com os usuários e grupos devidamente criados vamos finalmente ao que interessa, filtrar os dados de acordo com o perfil de cada grupo. Considerando que já exista um serviço “empresa”, vamos criar o método “pesquisarFuncionario” para demonstrar como filtrar os dados de retorno do método. Nesse caso, o método nos retornará os campos “ID” e “NOME” para o grupo Segurança, e “ID”, “NOME” e “SALARIO” para o grupo RecursosHumanos.
Iremos em “Home > Manage > Services > List > Service Dashboard > Service Details > Data Sources > Queries”, para inserirmos nosso novo método. Preenchemos com o SQL, o campo de entrada, e na hora em que formos preencher o retorno será onde a “mágica” acontecerá.
No item “Add new output Mapping” abriremos a tela para cadastrar um novo campo de retorno, preenchemos o tipo do campo, o nome de saída e o nome do campo no SQL. Abaixo dessas opções temos o item “Allowed User Roles”, aonde aparecerão os grupos que criamos anteriormente, para os campos “ID E NOME” selecionaremos ambos os grupos, no caso do campo “SALARIO” selecionaremos apenas o grupo RecursosHumanos, com o método criado mostraremos como consumir esse método filtrando os dados.
Etapa 4 – Testando a filtragem de dados
Agora vamos abrir a opção ” Home > Manage > Services > List > Service Dashboard > Security for the service > Activate Security > Service Dashboard > Security for the service”, selecionamos a opção “yes” no combo e setamos o flag “UsernameToken”, assim estaremos habilitando segurança por grupo e usuário do cliente.
Simulando a execução do serviço, no próprio WSO2 Data Services Server, podemos perceber que aparecem as opções “username” e “password”. O retorno será filtrado de acordo com o usuário que for preenchido nesses campos. Executando a consulta, notaremos que o campo “SALARIO” só aparece no retorno se utilizarmos o usuário “Maria”.
Espero ter colaborado, sugestões e criticas são sempre bem vindas, focando o objetivo de transformar a comunidade WSO2 Brasil cada vez mais forte, até o próximo post.
Post baseado no artigo “content filtering data services user roles” de Anjana Fernando – Software Engineer WSO2.
Pode ser visto um exemplo de consumo um servico seguro utilizando php.
Posts relacionados
Lançamento do WSO2 Complex Event Processing Server 1.0.0 (Alpha)
![]()
Foi lançado ontem na lista de desenvolvedores do WSO2 (carbon-dev@wso2.org) o WSO2 Complex Event Processing Server, em sua versão 1.0.0 (alpha), faz com que tenhamos processamento de eventos complexos em nosso ambiente SOA.
Alguns dos recursos que podemos encontrar no WSO2 CEP:
- Plugable back end rutime support – WSO2 CEP supports following back end run time engines.
- Drools Fusion – This back end runtime engine is distributed with the CEP pack
- Esper – This back end runtime is available at WSO2 GPL P2 repository : http://dist.wso2.org/wso2-gpl-p2/carbon/releases/3.1.0-alpha/ and can be added as a feature with WSO2 Carbon Feature Management.
- Support Multiple Broker Types – WSO2 CEP supports WS-Event and JMS-Qpid broker types;
- GUI Support - WSO2 CEP supports create,edit,delete operations on Buckets, Inputs and Queries;
- Use Registry resources – WSO2 CEP supports using resources stored in registry (Queries) to create buckets;
- Persistence – WSO2 CEP supports persisting created buckets in the registry;
- I18n Support for CEP – WSO2 CEP supports internationalization.
O povo do WSO2 nos convida para baixar o WSO2 CEP, instalar, testar e reportar bugs (utilizando o Jira do WSO2) – caso encontremos!
Posts relacionados
Top 10 Posts de 2010
Pessoal
Segue abaixo os 10 posts mais vistos nesse ano…
1) Série ASP NET MVC com NHibernate e ExtJS – somando 4705 acessos
2) Série criando serviços com WSO2 – somando 429 acessos
3) Criando um ambiente SOA com WSO2 – com 396 acessos
4) CRUD com Entity Framework e ASP NET MVC – com 351 acessos
5) Ferramentas Open Source – com 302 acessos
6) Usando NHibernate com ASP NET MVC – com 280 acessos
7) Formulário Master Detail com ASP NET MVC e JQuery - com 174 acessos
8) Apresentar videos do Youtube com ASP NET MVC – com 169 acessos
9) Mapeamento OneToMany com NHibernate – com 109 acessos
10) ESB – Enterprise Service Bus – com 102 acessos
Considerando que o blog foi criado a pouco tempo (Maio/2010) acho que está de bom tamanho. Agradeço a todos que postaram seus comentários, dúvidas e criticas!
Um Abraço!
Leia mais
Série criando serviços com WSO2
Veja abaixo os links para a série de posts de como criar serviços com o WSO2
Criando um WSO2 Application Service
Um Abraço!
Leia mais
Configurando o WSO2 com PostgreSQL
Quando instalamos as ferramentas do WSO2 por padrão vem configurado com o banco H2, mas hoje vamos ver como alterar para o PostgreSQL dessa forma deixando nossa arquitetura mais robusta.
1. Configurando a base
Primeiro de tudo temos que criar a base de dados no Postgre, para isso vamos utilizar a ferramenta PgAdmin que ja vem na instalação do PostgreSQL. Abra o PgAdmin e clique com o botão direito em cima de DataBases e selecione a opção New Database.
Na nova janela coloque o nome da nova database de gregdb e clique em OK
Agora vamos criar um novo usuário, clique com o botão direito em cima de Login Roles e selecione a opção New Login Role
Na nova janela configure da seguinte maneira:
- Role Name: gregadmin
- Password: gregadmin
- Password (again): gregadmin
Para finalizar clique em OK
2. Configurando o Registry
Agora vamos alterar as configurações do Registry, abra o arquivo registry.xml que se encontra no diretório $GREG_HOME/repository/conf, onde $GREG_HOME é o local onde está instalado o WSO2 Governance Registry,
e adicione as seguintes linhas.
<dbConfig name="postgresql-db">
<url>jdbc:postgresql://localhost:5432/gregdb</url>
<userName>gregadmin</userName>
<password>gregadmin</password>
<driverName>org.postgresql.Driver</driverName>
<maxActive>80</maxActive>
<maxWait>60000</maxWait>
<minIdle>5</minIdle>
</dbConfig>
Explicando a configuração:
- url: Endereço JDBC para o banco
- username: Usuário para conectar ao banco
- password: Senha do usuário
- driverName: Nome do driver
- maxActive: O número máximo de conexões ativas
- maxWait: O número máximo de milissegundos que o pool de espera para uma conexão ser devolvido
- minIdle: O número mínimo de conexões ativas que pode permanecer inativo no pool
Depois de criado a conexão temos que ativa-la, altere a opção currentDBConfig para a coneão que acabamos de criar.
<currentDBConfig>postgresql-db</currentDBConfig>
Agora vamos editar o arquivo user-mgt.xml que se encontra no mesmo diretório ($GREG_HOME/repository/conf) e faça a seguinte alteração.
<Configuration>
...
<Property name="url">jdbc:postgresql://localhost:5432/gregdb</Property>
<Property name="userName">gregadmin</Property>
<Property name="password">gregadmin</Property>
<Property name="driverName">org.postgresql.Driver</Property>
<Property name="maxActive">50</Property>
<Property name="maxWait">60000</Property>
<Property name="minIdle">5</Property>
</Configuration>
3. Adicionando o Driver
Para que nossa conexão com o banco funcione, temos que fazer o download do driver JDBC em http://jdbc.postgresql.org/download.html, baixe a versão JDBC4 e depois copie o JAR para o diretório $GREG_HOME/repository/components/lib
4. Criando a base
Para finalizar, vamos criar as tabelas na base, para isso temos que iniciar o serviço do Registy com a opção -Dsetup.
./wso2server.sh -Dsetup
ATENÇÃO: Essa opção só deve ser executada apenas uma vez
Vamos acessar o PgAdmin e verificar se as tabelas foram criadas
5. Configurando o DS, WSAS, ESB
Depois de ter criado a base do Registry, podemos configurar os outros servers para se comunicar com a base Postgre. Basicamente é o mesmo processo temos que editar o arquivo registry.xml adicionando as configurações de conexão com o banco.
Data Services
- Abra o arquivo $DS_HOME/repository/conf/registry.xml e adicione a configuração do Postgre conforme descrito acima
- Abra o arquivo $DS_HOME/repository/conf/user-mgt.xml e altere a configuração de conexão conforme descrito acima
- adicione o jar no diretório $DS_HOME/repository/components/lib
Application Services
- Abra o arquivo $WSAS_HOME/repository/conf/registry.xml e adicione a configuração do Postgre conforme descrito acima
- Abra o arquivo $WSAS_HOME/repository/conf/user-mgt.xml e altere a configuração de conexão conforme descrito acima
- adicione o jar no diretório $WSAS_HOME/repository/components/lib
Enterprise Service Bus
- Abra o arquivo $ESB_HOME/repository/conf/registry.xml e adicione a configuração do Postgre conforme descrito acima
- Abra o arquivo $ESB_HOME/repository/conf/user-mgt.xml e altere a configuração de conexão conforme descrito acima
- adicione o jar no diretório $ESB_HOME/repository/components/lib
Depois de alterado as configurações, podemos iniciar os serviços normalmente (sem a opção -Dsetup)
Agora nosso ambiente está configurado para usar o PostgreSQL, se você quiser usar o MySQL, Oracle, SQLServer como SGBD pode usar esses mesmos passos apenas alterando as configurações de conexão.
Até a próxima!
Leia mais
Criando serviços com o WSO2 – Parte 3 – WSO2 ESB
Hoje vamos finalizar o processo para criar um serviço com as ferramenta do WSO2, a última parte vamos publicar nosso serviço na BUS, dessa forma disponibilizando o serviço para nossos clientes.
No WSO2 ESB vamos criar um proxy service que será responsável por chamar nosso serviço Bussiness Service (WSO2 WSAS) que por sua vez vai chamar o nosso Data Service (WSO2 DS), essa parte é basicamente configuração não vamos codificar nenhuma linha de código.
Para expor nosso serviço na BUS vamos seguir os seguintes passos:
1) Criar uma Sequence
Um elemento de seqüência é usado para definir uma seqüência de mediadores que podem ser chamados mais tarde, nesse exemplo vamos criar uma sequence com um mediator de Log.
Entre na página de administração do ESB, selecione a opção Sequences.
Clique na opção Add Sequence
Na tela Design Sequence, coloque o nome da sequence como RecursoHumanoSequence e agora vamos adicionar a sequência que vai ser executada, em nosso exemplo temos somente um Log, para isso clique em Add Child -> Core -> Log
Depois de configurado a sequence, clique em Save, nossa sequence será listada na tela Mediation Sequences
2) Criar um EndPoint
Um EndPoint é um destino específico de uma mensagem, também podemos ativar as estatísticas de endpoints e WSDL dos endereços.
Atenção: Para adicionar um Endpoint, vamos precisar acessar o WSAS para recuperar o endereço do Endpoint do nosso serviço, na página de administração do WSAS entre em List e no serviço RecursoHumanoServico clique na opção WSDL1.1
O browser será aberto com o WSDL do serviço, no final está as configurações do Endpoint, copie esse endereço para que possamos colar na tela de criação do Endpoint na ESB.
Agora vamos voltar ao administrador da ESB, clique na opção Endpoints
Na nova tela, clique em Address Endpoint
Adicione um nome RecursoHumanoEndPoint e coloque o endereço do Endpoint que recuperamos no WSAS, clique no botão Test para verificar a comunicação entre a ESB e o WSAS
Clique em Save
Veja nosso Endpoint na listagem
3) Criar o Proxy
Clique na opção Add -> Proxy Service
Temos várias opções para criar proxy, clique na opção Custom Proxy
Vamos configurar nosso proxy da sequinte maneira
- Proxy Service Name: RecursoHumanoServico
- Publishing WSDL: Specify source URL
- WSDL URI: Coloque o endereço do WSDL do WSAS, aonde verificamos anteriormente
Depois clique em Next
Nessa tela vamos configurar a Sequence e o Endpoint que ja criamos anteriormente.
- In Sequence Options: Selecione Import e na combo selecione a Sequence criada anteriormente
- Endpoint Options: Selecione Import e na combo selecione o Endpoint criado anteriormente
Depois clique em Next
Nessa tela não alteramos nada, deixe as duas opções marcadas None, e clique em Finish
Veja na listagem no nosso proxy criado.
4) Testando o serviço
Para testar o serviço clique em Try this service, preencha o campo nome e clique no botão.
Quando clicamos no botão fazemos o seguinte caminho:
- A BUS recebe a requisição
- Encaminha para o WSAS
- Valida os dados
- Chama o DS
- Retorna os dados para o WSAS
- Executa regra de negócio
- Retorna os dados para a BUS
Vamos testar a Exception, não coloque nenhum valor para o parâmetro nome e clique no botão
Nesse caso fizemos o seguinte caminho:
- A BUS recebe a requisição
- Encaminha para o WSAS
- Valida os dados
- Retorna erro para a BUS
Chegamos ao fim desse peque How To de como criar um serviço usando as ferramenta do WSO2, espero que possa ter esclarecido as dúvidas. Se ainda tiverem alguma dúvida ou alguma sugestão, critica favor entre em contato!
Um Abraço!!
Leia mais
Criando serviços com o WSO2 – Parte 2 – WSO2 WSAS
Hoje vamos dar continuidade ao exemplo de como criar um serviço usando as ferramentas do WSO2, no post anterior criamos o Data Services, hoje estaremos criando o nosso Business Service e publicar no WSO2 WSAS.
O nosso Business Service será responsável por conter a regra de negócio do nosso serviço, ou seja, para uma determinada entrada vindo da BUS vamos consumir o Data Service aplicar a nossa regra de negócio e retornar os dados para a BUS. Esse é o momento onde vamos meter a mão na massa e codificar em Java.
Para consumir o Data Service vamos estar usando o Apache Axis2, que é um framework para contrução e consumo de webservices, portanto clique aqui e faça o download, a versão que estou usando é 1.5.1. Depois de concluído o download descompactar o arquivo e copiar para um diretório de sua preferência.
Criando um Business Service
1. Abra o Eclipse e vamos criar um novo projeto, clique em File -> New -> Project
Na nova janela que abriu, selecione Java Project clique em Next.
Coloque o nome do projeto com RecursoHumanoServico depois clique em Finish
Para deixar nosso projeto mais organizado vamos criar duas Package, clique com o botão direito em cima da pasta src e selecione a opção New -> Package
Coloque o nome do package de br.leandroprado.webservices.recursohumano
Adicione mais um package com o nome de br.leandroprado.webservices.recursohumano.entidades, veja como seu projeto deve ficar depois de criado as duas packages
2. Depois de configurado o o projeto temos que adicionar as bibliotecas do Axis2 que vamos utilizar, clique em Project -> Properties
Na nova janela que abrir, clique em Java Build Path -> Libraries
Clique no botão Add External JARs e vá até o diretório onde esta o Axis2, que baixamos anteriormente e selecione os seguintes JARs.
Veja que em Libraries foi adicionado os JARs do Axis2.
3. Agora vamos começar a codificar o nosso serviço, clique com o botão direito em cima da package br.leandroprado.webservices.recursohumano e selecione a opção New -> Class
Coloque o nome da nova classe de RecursoHumanoServico e clique em Finish
Vamos criar outra classe dentro da package br.leandroprado.webservices.recursohumano.entidades chamada Funcionario
Veja abaixo o conteúdo da classe Funcionario.java, ela contém os campos que o nosso DataService retorna.
package br.leandroprado.webservices.recursohumano.entidades;
import java.util.Date;
public class Funcionario {
private int codigo;
private String nome;
private String endereco;
private String sexo;
private String dataAniversario;
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public String getDataAniversario() {
return dataAniversario;
}
public void setDataAniversario(String dataAniversario) {
this.dataAniversario = dataAniversario;
}
}
Agora vamos criar o serviço, na classe RecursoHumanoServico vamos adicionar um novo método onde vamos chamar o nosso método do DataService, veja abaixo o código;
package br.leandroprado.webservices.recursohumano;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import br.leandroprado.webservices.recursohumano.entidades.Funcionario;
public class RecursoHumanoServico {
// endereco do WSDL do DataService
private static EndpointReference rhEndpoint = new EndpointReference("http://10.0.2.15:9764/services/RecursoHumanoServico?wsdl");
public Funcionario[] pesquisarFuncionario(String nome)
{
String nameSpace = "http://webservices.leandroprado.com.br/DataServices/RecursoHumano/PesquisarFuncionario";
String nomeMetodo = "PesquisarFuncionario";
List<Funcionario> lst = new ArrayList<Funcionario>();
try {
// verifica se o parametro esta preenchido
if(nome != null)
{
if(nome.equals(""))
throw new Exception("Campo Nome é obrigatório!");
}
else
throw new Exception("Campo Nome é obrigatório!");
// cria os parametros do servico com o EndPoint e o método que queremos usar
Options options = new Options();
options.setTo(rhEndpoint);
options.setAction("urn:" + nomeMetodo);
// cria um client para o servico
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
// para criar os parametros de entrada do servico
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
nameSpace, // namespace do método
nomeMetodo); // nome do método que vamos invocar
OMElement payload = fac.createOMElement(nomeMetodo, omNs);
// seta o nome dos parametros de entrada e seu conteudo
OMElement param = fac.createOMElement("Nome", omNs);
param.setText("%" + nome + "%");
payload.addChild(param);
// Executa o DataService
OMElement result = sender.sendReceive(payload);
// Recupeara o retorno
Iterator rows = result.getChildElements();
// Enquanto houver linhas no retorno
while (rows.hasNext()) {
OMElement row = (OMElement) rows.next();
// recupera os elementos
OMElement codigo = row.getFirstChildWithName(new QName(omNs.getNamespaceURI(), "CodigoFuncionario"));
OMElement nme = row.getFirstChildWithName(new QName(omNs.getNamespaceURI(), "NomeFuncionario"));
OMElement endereco = row.getFirstChildWithName(new QName(omNs.getNamespaceURI(), "EnderecoFuncionario"));
OMElement sexo = row.getFirstChildWithName(new QName(omNs.getNamespaceURI(), "SexoFuncionario"));
OMElement dataAniver = row.getFirstChildWithName(new QName(omNs.getNamespaceURI(), "DataAniversario"));
// cria um objeto do tipo Funcionario
Funcionario _fun = new Funcionario();
_fun.setCodigo(Integer.parseInt(codigo.getText()));
_fun.setNome(nme.getText());
_fun.setEndereco(endereco.getText());
_fun.setSexo(sexo.getText());
_fun.setDataAniversario(dataAniver.getText());
// Adiciona na lista
lst.add(_fun);
}
}
catch(Exception ex)
{
throw new RuntimeException(ex.getMessage());
}
// verifica se a lista possui elementos
if(lst.size() > 0)
return lst.toArray(new Funcionario[lst.size()-1]);
else
return lst.toArray(new Funcionario[0]);
}
}
4. Agora vamos publicar o serviço no WSO2 WSAS, primeiro de tudo temos que iniciar os serviços WSO2 DataServices e WSO2 WSAS, já vimos no post Criando um ambiente SOA com WSO2 como criar o ambiente e iniciar os serviços.
Uma das maneiras de fazer o deploy de um serviço para o WSAS é exportar nosso serviço para um arquivo .jar, então clique com o botão direito em cima do projeto RecursoHumanoServico e selecione a opção Export.
Selecione a opção Jar File, e clique em Next
Agora selecione em qual diretório vamos salvar o arquivo .jar, nesse caso estou salvando no Desktop e clique em Finish
Acessando nosso diretório Desktop o arquivo exportado.
Agora vamos fazer o Deploy do arquivo .jar para o WSAS, acessar o console de administração do WSAS e selecionar a opção Services -> Add -> Jar Service
Coloque o nome do seu serviço e procure o arquivo .jar que exportamos anteriormente, e clique em Next
Na próxima tela temos que selecionar qual classe que queremos expor como serviço, em nosso exemplo é a classe RecursoHumanoServico.java, não esqueça de selecionar o escopo que é SOAP, depois clique em Next
Selecione os métodos que deseja disponibilizar no serviço, em nosso exemplo só temos um método, mas se tivesse vários métodos poderiamos selecionar quais deles vamos disponibilizar para consumo, depois clique em Finish.
Se tudo ocorrer sem erros, uma mensagem será exibida e o nosso serviço vai aparecer na lista, veja abaixo:
Vamos testar nosso método, clique em Try this Service , preencha o parâmetro nome e clique no botão, o seguinte resultado deverá ocorrer:
Vamos testar se a nossa validação está sendo executada, se invocar o método sem nenhum valor para o parâmetro nome, deve retornar um erro, veja abaixo:
Conclusão
Podemos ver que para criar um BusinessServer usando o WSAS não tem muito segredo, para quem ja programa em JAVA não vai ter nehuma dificuldade.
O que podemos fazer para facilitar o consumo é criar um componente onde só passamos o método que queremos consumir e ele nos retorna um objeto criado, fica por conta de vocês aprimorar esse código.
O WSO2 lançou um plugin para o Eclipse que cria serviços para o WSAS, com esse plugin é possível fazer debug dos nossos métodos, dessa forma facilitando o desenvolvimento para o programador.
Create an Axis2 Web Service in 3 Steps Using Eclipse
How to Debug Your Axis2 Web Service in 3 Steps Using Eclipse
No próximo post estaremos criando a camada da BUS, vamos criar um proxy para disponibilizar os serviços aos nossos clientes.
Até a próxima!
Leia mais
Criando serviços com o WSO2 – Parte 1 – WSO2 Data Services
Depois de publicar o post Criando um ambiente SOA com WSO2 estamos recebendo vários emails e comentários de usuários que estão com diversas dúvidas e como usar as ferramentas do WSO2 integrada, por esse motivo, hoje vamos começar uma série de posts explicativos de como criar um serviço completo (DS, WSAS, BUS) usando as ferramentas WSO2.
Antes de começar vamos entender a arquitetura que vamos estar utilizando, veja abaixo:
- DataService será responsável por recuperar as informações em uma origem de dedos, pode ser um banco de dados (MySQL, Postegres, SQLServer, Oracle, etc…) pode ser em um arquivo XML ou em um arquivo CSV.
- Application Server que será responsável por fazer a orquestração dos nossos serviços e pela regra de negócio
- BUS será responsável por expor nosso serviços para os clientes (Mobile, Portals, Desktop, etc…)
O nosso cenário para o serviço de teste será um cadastro de funcionário para o setor de RH de uma empresa, vamos estar utilizando o banco de dados MySQL 5. Então mãos no teclado!!
Criando a Base de Dados
create database rh;
use rh;
CREATE TABLE funcionario (
id_funcionario int(10) NOT NULL AUTO_INCREMENT,
nome_funcionario varchar(100) NOT NULL,
endereco_funcionario varchar(100) NOT NULL,
sexo_funcionario char(1) NOT NULL,
data_aniversario datetime NOT NULL,
PRIMARY KEY (id_funcionario),
UNIQUE KEY PK_Funcionario (id_funcionario)
);
INSERT INTO funcionario (nome_funcionario, endereco_funcionario, sexo_funcionario, data_aniversario) VALUES ('Leandro Prado 1', 'Rua xyz 367', 'M', '2000-10-10');
INSERT INTO funcionario (nome_funcionario, endereco_funcionario, sexo_funcionario, data_aniversario) VALUES ('Leandro Prado 2', 'Rua xyz 367', 'M', '2000-10-10');
Criando um WSO2 DataService
1. Dentro do Management Console do DataService clique no menu DataServices -> Create
2. Coloque no nome e a descrição do Serviço e clique em Next
3. Agora vamos adionar a nossa fonte de dados, selecione Add New Data Source
4. Na tela de configuração do DataSource temos os seguintes campos:
- DataSource id:
- DataSource Type:
- Database Engine:
- Driver Class:
- JDBC URL:
- User Name:
- Password:
- Min. Pool Size:
- Max. Pool Size:
- AutoCommit:
Clique no botão Test Connection para verificar se a conexão com o banco está correta.
Se esse o erro acima ocorrer significa que está faltando o jar de conexão com o MySQL, então acesse esse link e baixe o conector e copie o jar para a pasta wso2/wso2dataservices-2.2.1/repository/components/lib e depois restart o serviço do WSO2 DataServices.
5. Na próxima tela vamos criar as querys que nosso serviço vai executar
6. Na tela para adicionar uma nova query temos os seguintes campos:
- Query ID:
- Data Source:
- SQL:
- Input Mappging
- Grouped by element:
- Row name:
- Row namespace:
- Output Mappging:
7. Se sua query possuir parâmetros de entrada deve ser adicionado clicando no botão Input Mappings, essa tela possui os seguintes campos:
- Mapping Name
- SQL Type
- IN/OUT Type
- Ordinal
8. Para recuperar os dados de retorno da sua query clique no botão Output Mappings e adicione os campos que deseja retornar, essa tela possui os seguintes campos:
- Mapping Type
- Output field name
- Data source column Name
- Schema Type
- Allowed User Roles
Veja como vai ficar com todos nossos campos de saída mapeados
9. Na próxima tela é para adicionar as operações (métodos) do serviço, cada query vai ter uma operação:
10. Na tela Add New Operation temos um campo para colocar o nome da operação (método) e uma combo para selecionar qual query essa operação vai chamar
Veja como fica a nossa operação PesquisarFuncionario.
11. Clique em Finish para criar o nosso DataService, não precisamos preencher os Resources. Veja que nosso serviço já é listado.
12. Vamos fazer o teste para verificar se tudo está correto e funcionando, clique em Try this service
Conclusão
Criar DataServices usando a ferramenta do WSO2 é muito fácil, intuitivo e produtivo, em apenas alguns minutos conectamos na base de dados, fazemos uma query e retornamos os dados via XML sem escrever nenhuma linha de código.
Os serviços de DataServices também pode ser criados através de um plugin para o eclipse, veja aqui.
No próximo post estaremos criando a camada de negócio usando o WSAS
Até a próxima!
Leia mais
Criando um ambiente SOA com WSO2
Nesse post vou descrever como criar um ambiente SOA completo usando as ferramentas WSO2.
O ambiente que estou usando é Ubuntu 10 como Java 6 (esse tutorial parte do princípio que o Ubuntu e o Java já estão instalados e configurados)
Passo 1- Criar diretório
Vamos criar um diretório onde vamos instalar todas as ferramentas do WSO2
cd /home/leandro-prado
mkdir wso2
cd wso2/
pwd
/home/leandro-prado/wso2
Passo 2 – WSO2 Governance Registry
Baixar o arquivo em http://wso2.com/products/governance-registry/ (a versão que usamos foi a 3.5.0) descompactar e depois mover para o diretório criado acima
cd Downloads/wso2/
unzip wso2greg-3.5.0.zip
mv wso2greg-3.5.0 /home/leandro-prado/wso2/
cd /home/leandro-prado/wso2/wso2greg-3.5.0/bin/
./wso2server.sh
Para iniciar o serviço entrar no diretório bin e executar o arquivo wso2server.sh, se tudo ocorrer sem erros, a seguinte saída deverá ser exibida no console
[2010-06-05 17:46:15,887] INFO - Connection established with the registry
[2010-06-05 17:46:16,732] INFO - HTTPS port : 9443
[2010-06-05 17:46:16,761] INFO - HTTP port : 9763
[2010-06-05 17:46:18,911] INFO - Successfully Initialized Eventing on Registry
[2010-06-05 17:46:27,749] INFO - Mgt Console URL : https://10.0.2.15:9443/carbon/
[2010-06-05 17:46:28,702] INFO - Started Transport Listener Manager
[2010-06-05 17:46:28,703] INFO - Server : WSO2 Governance Registry-3.5.0
[2010-06-05 17:46:28,703] INFO - WSO2 Carbon started in 65 sec
Agora podemos acessar o browser e verificar se esta tudo correto:
Endereco: https://10.0.2.15:9443/carbon – Usuário: admin / Senha:admin
Passo 3 – WSO2 Data Services
Agora vamos instalar o Data Service, baixar o arquivo em http://wso2.com/products/data-services-server/ (a versão que usamos foi a 2.2.1) descompactar e depois mover para o diretório criado no passo 1, podemos perceber que a intalação é igual para todas as ferramentas.
cd Downloads/wso2/
unzip wso2dataservices-2.2.1.zip
mv wso2dataservices-2.2.1 /home/leandro-prado/wso2/
cd /home/leandro-prado/wso2/wso2dataservices-2.2.1/bin/
./wso2server.sh
Quando mandamos iniciar o servidor do Data Service pela primeira vez vamos receber o seguinte erro:
[2010-06-05 18:43:35,233] INFO - Repository : /home/leandro-prado/wso2/wso2dataservices-2.2.1/repository/
[2010-06-05 18:43:35,720] INFO - HTTPS port : 9443
[2010-06-05 18:43:35,721] INFO - HTTP port : 9763
[2010-06-05 18:43:35,954] ERROR - Error initializing endpoint
java.net.BindException: Address already in use:9443
Esse erro ocorre porque a porta 9443 ja esta sendo usanda pelo WSO2 Governance Registry, por esse motivo temos que configurar manualmente outra porta para o Data Service, para isso temos que editar o arquivo transports.xml que fica na pasta conf
cd ..
cd conf/
sudo gedit transports.xml
Temos que alterar o parâmetro port tanto para HTTP e HTTPS, essa configuração está na a linha 3 e na linha 30 e depois iniciar o serviço novamente, conforme abaixo:
<parameter name="port">9764</parameter>
<parameter name="port">9444</parameter>
cd ..
cd bin/
./wsoeserver.sh
Se tudo ocorrer sem erros a seguinte saída devera ser exibida no console:
[2010-07-03 00:21:01,928] INFO - Initializing transport descriptions and their associated parameters
[2010-07-03 00:21:01,992] INFO - Repository : /home/leandro-prado/wso2/wso2dataservices-2.2.1/repository/
[2010-07-03 00:21:02,363] INFO - HTTPS port : 9444
[2010-07-03 00:21:02,363] INFO - HTTP port : 9764
[2010-07-03 00:21:04,398] INFO - Mgt Console URL : https://10.0.2.15:9444/carbon/
[2010-07-03 00:21:04,399] INFO - Started Transport Listener Manager
[2010-07-03 00:21:04,399] INFO - Server : WSO2 Data Services-2.2.1
[2010-07-03 00:21:04,400] INFO - WSO2 Carbon started in 50 sec
Para ver se tudo esta correto podemos acessar o administrador do Data Service no browser.
Endereço: https://10.0.2.15:9444/carbon – Usuário: admin / Senha:admin
Passo 4 – WSO2 Application Server
Agora vamos instalar o Application Server, baixar o arquivo em http://wso2.com/products/web-services-application-server/ (a versão que usamos foi a 3.2.0) para instalar seguir o mesmo padrão, descompactar, mover para o diretório, configurar o arquivo transports.xml (port HTTP 9445 e HTTPS 9765) e iniciar o serviço
cd Downloads/wso2/
unzip wso2wsas-3.2.0.zip
mv wso2wsas-3.2.0 /home/leandro-prado/wso2/
cd /home/leandro-prado/wso2/wso2wsas-3.2.0
cd repository/conf
gedit mgt-transports.xml
cd ../../bin
./wso2server.sh
Se tudo ocorrer sem erros a seguinte saída devera ser exibida no console:
[2010-07-03 00:49:45,404] INFO - Repository : /home/leandro-prado/wso2/wso2wsas-3.2.0/repository/deployment/server/
[2010-07-03 00:49:45,657] INFO - Connection established with the registry
[2010-07-03 00:49:47,821] INFO - HTTPS port : 9445
[2010-07-03 00:49:47,829] INFO - HTTP port : 9765
[2010-07-03 00:49:50,774] INFO - Mgt Console URL : https://10.0.2.15:9445/carbon/
[2010-07-03 00:49:50,787] INFO - Started Transport Listener Manager
[2010-07-03 00:49:50,795] INFO - Server : WSO2 WSAS-3.2.0
[2010-07-03 00:49:50,796] INFO - WSO2 Carbon started in 33 sec
Para ver se tudo esta correto podemos acessar o administrador do Application Server no browser.
Endereco: https://10.0.2.15:9445/carbon – Usuário: admin / Senha:admin
Passo 5 – WSO2 Enterprise Service Bus
Agora vamos instalar a BUS, baixar o arquivo em http://wso2.com/products/enterprise-service-bus/ (a versão que usamos foi a 3.0.0) novamente a instalação segue o mesmo padrão, descompactar, mover para o diretório, configurar o arquivo transports.xml (port HTTP 9446 e HTTPS 9766) e iniciar o serviço
cd Downloads/wso2/
unzip wso2esb-3.0.0.zip
mv wso2esb-3.0.0 /home/leandro-prado/wso2/
cd /home/leandro-prado/wso2/wso2esb-3.0.0
cd repository/conf
gedit mgt-transports.xml
cd ../../bin
./wso2server.sh
Se tudo ocorrer sem erros a seguinte saída devera ser exibida no console:
[2010-07-03 01:15:19,725] INFO - CarbonUIServiceComponent Mgt Console URL : https://10.0.2.15:9446/carbon/
[2010-07-03 01:15:19,783] INFO - StartupFinalizerServiceComponent Started Transport Listener Manager
[2010-07-03 01:15:19,784] INFO - StartupFinalizerServiceComponent Server : WSO2 ESB-3.0.0
[2010-07-03 01:15:19,784] INFO - StartupFinalizerServiceComponent WSO2 Carbon started in 114 sec
Para ver se tudo esta correto podemos acessar o administrador do Application Server no browser.
Endereco: https://10.0.2.15:9446/carbon – Usuário: admin / Senha:admin
Passo 6 – WSO2 Business Activity Monitor
Agora vamos instalar a BAM, baixar o arquivo em http://wso2.com/products/business-activity-monitor/ (a versão que usamos foi a 1.0.1) novamente a instalação segue o mesmo padrão, descompactar, mover para o diretório, configurar o arquivo transports.xml (port HTTP 9447 e HTTPS 9767) e iniciar o serviço.
cd Downloads/wso2/
unzip wso2bam-1.0.1.zip
mv wso2bam-1.0.1 /home/leandro-prado/wso2/
cd /home/leandro-prado/wso2/wso2bam-1.0.1
cd conf/
gedit transports.xml
cd ../bin
./wso2server.sh
Se tudo ocorrer sem erros a seguinte saída devera ser exibida no console:
[2010-07-07 16:06:32,854] INFO - Connection established with the registry
[2010-07-07 16:06:33,816] INFO - Successfully Initialized Eventing on Registry
[2010-07-07 16:06:47,166] INFO - Mgt Console URL : https://10.0.2.15:9447/carbon/
[2010-07-07 16:06:47,167] INFO - Started Transport Listener Manager
[2010-07-07 16:06:47,168] INFO - Server : WSO2 Business Activity Monitor-1.0.1
[2010-07-07 16:06:47,168] INFO - WSO2 Carbon started in 96 sec
Para ver se tudo esta correto podemos acessar o administrador da BAM no browser.
Endereco: https://10.0.2.15:9447/carbon – Usuário: admin / Senha:admin
Podemos ver como é fácil instalar as ferrametas do WSO2, nos próximos posts vamos configurar os servers para se conectar com o baco de dados MySQL.
Até a próxima!
Leia mais
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! (;
Posts relacionados
Lançamento do WSO2 Stratos (alpha)
O pessoal do WSO2 anda com todo o vapor mesmo, hoje foi lançado (versão alpha ainda) o WSO2 Stratos, toda a plataforma rodando em cloud computing, ou seja, tudo “empacotado” e pronto para rodar, sem dependência de hardware e instalações.
Você pode conseguir maiores informações no site do produto WSO2 Stratos (em inglês) e, também, testar tudo funcionando (lembrando que não é uma versão final ainda) fazendo seu cadastro – grátis. Testar o WSO2 Stratos.
Os produtos lançados nesse formato são:
- Governance
- Identity
- Application Server
- Gadgets
- Mashup Server
- Business Activity Monitor
- Enterprise Service Bus
Assim que sobrar um tempo vou ver como ficariam implementações utilizando a versão livre deles e ver até onde ela está liberada para ser utilizada. E também a dificuldade de trabalhar dessa forma.
Posts relacionados
Plataforma WSO2
Neste post vou descrever o que cada solução do WSO2 é responsável.
WSO2 Enterprise Service Bus |
![]() |
WSO2 ESB permite aos administradores de sistema e arquitetos de SOA de forma simples e fácil configurar o roteamento de mensagens, a virtualização, a intermediação, transformação, logs de requisições, agendamento de tarefas, balanceamento de carga, mediação de eventos e muito mais.
WSO2 Governance Registry |
![]() |
Responsável por manter o controle de sua arquitetura SOA como um repositório de metadados, suporte para controle de versão, gestão de ciclo de vida, um modelo avançado para usuários / papéis / permissões, e as características sociais, tais como marcação, classificação e comentários. WSO2 Governance Registry se integra com outros produtos WSO2 para coletar metadados sobre serviços, centraliza a política de metadados, e gerencia dependências.
WSO2 Identity Server |
![]() |
A WSO2 Identity Server é o servidor de gerenciamento de identidade e direito. Ele suporta cartões de Informação e OpenID para autenticação, bem como autorização para XACML. Pode ser integrada facilmente com LDAP ou Active Directory.
WSO2 Business Activity Monitor |
![]() |
A WSO2 Business Activity Monitor (BAM WSO2) serve para suprir as necessidades dos especialistas em TI acompanharem e entenderem as atividades de negócios dentro de uma implantação SOA com isso permite que as organizações sejam pró-ativa ao invés de ser reativo.
WSO2 Gadgat Server |
![]() |
O Gadgat WSO2 Server permite que você possa oferecer aos seus executivos, funcionários, parceiros ou clientes uma maneira de obter todas as informações em um único lugar que eles precisam. Pordemos criar vários paineis para cada usuário permitindo-lhe adicionar, personalizar e reorganizar seus gadgets, assim como agrupá-las em conjuntos de tabulação.
WSO2 Business Process Server |
![]() |
A WSO2 Business Process Server é um servidor responsável por executar os processos de negócios, são escritos usando o padrão WS-BPEL. Oferece um completo console gráfico para implantar, gerenciar e visualizar os processos, além de gerenciar e exibir instâncias do processo.
WSO2 Mashup Server |
![]() |
A WSO2 Mashup Server fornece uma plataforma para uma rápida implantação de serviços Web Mashups. Combinando mashups simples, mas rica de reutilização, segurança, confiabilidade e governação, a WOS2 Mashup Server oferece a composição de serviços de classe empresarial. O servidor Mashup é voltada para desenvolvedores web (HTML + Javascript / competências XML) que permite um rápido desenvolvimento e compartilhamento de novos serviços.
WSO2 Data Services |
![]() |
A WSO2 Data Services fornece uma plataforma fácil de usar para criar serviços responsáveis por buscar os dados armazenados em locais heterogêneos, como banco de dados, arquivos CSV, Excel ou XML, permitindo a fácil integração de dados em processos de negócios, mashups, gadgets aplicações, BI e todos os serviços em geral.
WSO2 Web Services Application Server |
![]() |
WSO2 WSAS é um servidor de aplicativos para web services. Com o seu servidor Web incorporado de alto desempenho, suporte completo para XML, SOAP, WSDL, e suporte para comunicações confiáveis, seguras, WSO2 WSAS torna simples e eficaz para criar, consumir e gerenciar Web Services. tanbém podemos expor aplicativos como serviços na forma de POJOs ou JARs
Além dessas soluções, o WSO2 possui frameworks para fornecer aos desenvolvedores a infra-estrutura para criar e consumir serviços em sua linguagem de programação favorita como C, C++, PHP ou Spring.
Leia mais
WSO2 Data Services
Quanto estamos construindo um sistema temos que nos preocupar em qual abordagem de acesso aos dados vamos utilizar, tais como Enterprise Java Beans (EJBs), CORBA e Hibernate, cada um procura uma abordagem diferente para obtenção de dados, para SOA essa abordagem deve ser simples, para que possamos concentrar nossos esforços na implementação das funcionalidades de negócios.
Porque Data Services?
Os dados são o sangue da vida de uma empresa, por esse motivo eles devem sem bem armazenados e seguros. Geralemente em SOA (Service Oriented Architecture) temos que ter acesso à dados armazenados em fontes de dados heterogêneas.
Data Services essencialmente tira o esforço de desenvolver um mecanismo de acesso a dados para diferentes aplicações, ou seja, é um mecanismo para levar os dados armazenados em bases de dados relacionais, arquivos de Excel e arquivos de CSV e torná-los facilmente disponíveis como WebServices ou como REST.
Na sua essência os Data Services são responsáveis por quebrar a frágil ligação entre as aplicações e dados. Com o Data Services, dados e as aplicações existem isoladamente, mas podem colaborar quando necessário com isso temos a capacidade de manipular os mesmos dados de forma diferente quando solicitados por diferentes canais.
Beneficios do Data Services
- Fácil extrasão de dados de bases relacionais através de JDBC, além de arquivos como Excel, CSV e XML
- Gera um arquivo único de mapeamento no formato XML para expor os dados em vários formatos diferentes e protocolos, sem a necessidade de programação redundante para acesso múltiplo diferentes tecnologias de banco de dados
- Expõe seus dados como os serviços estilo Web Services ou recursos REST. Através de XML sobre HTTP, os dados podem até ser exposto como JSON (JavaScript Object Notation), tornando muito mais fácil para construir interfaces Ajax
- Gerar acesso transparente e unificado de um repositório consistente, que proporciona maior acessibilidade aos dados da empresa
Para manipular o WSO2 Data Services temos o DSDL (Data Services Description Language) que permite especificar como as entradas das solicitações serão mapeadas e controlar como os resultados serão mostrados para o usuário
Performance
O WSO2 Data Services armazena em cache as solicitações mais usadas para ser recuperado por chamadas semelhantes subseqüentes, também é capaz de forçar um flush cache, caso as circunstâncias requerer o esvaziamento de cache de dados.
Segurança
WSO2 Data Services oferece suporte a segurança em nível de elemento e segurança baseada em função de indivíduos e grupos no acesso aos dados, incluindo a assinatura digital, criptografia e diversas outros tokens de segurança.
Conclusão
WSO2 Data Services é uma abordagem para o tratamento de dados da empresa como um serviço de primeira classe empresarial. Ele encapsula toda a lógica que executa a descoberta de dados, acesso a dados, validação de dados,
segurança em uma camada de abstração simples.
WSO2 Data Services ajuda a criar serviços com rapidez e facilidade para o consumo de um serviço orientada a arquitetura.
Leia mais
Ferramentas SOA Open Source
Quando decidimos criar um ambiente SOA, um dos requisitos impostos pela maioria dos diretores é se é uma solução livre, ou seja, OpenSource. Partindo desse pré-requisito, pesquisamos algumas ferramentas que poderíamos utilizar.
A primeira ferramenta que testamos foi o Intalio, que, na verdade, é uma ferramenta de BPM em que podemos modelar os processos em BPEL e depois fazer um deploy como um serviço para expor na BUS. Um dos problemas que encontramos com essa ferramenta, foi que não conseguimos levantar uma excessão e retornar para o usuário.
Também estudamos o Mule, que é uma BUS para expor todos os serviços criados a partir do Intalio.
Outra opção foi o JBOSS SOA Plataform; chegamos a fazer um piloto com consultores da Red Hat, porém não supriu todas as nossas necessidades, tinhamos os mesmos problemas da ferramenta Intalio.
Até que descobrimos uma ferramenta chamada WSO2, a qual possui várias ferramentas para SOA como DataServices, Business Process Server, Web Services Application, Governance Registry, Enterprise Service Bus, etc.
A grande vantagem de usar o WSO2 é que temos um grande suporte em fóruns, e-mail, acesso ao código-fonte e atualizações frequentes de suas ferramentas, isso significa que os desenvolvedores estão aprimorando cada vez mais cada uma das ferramentas.
Outra grande vantagem é a sua fácil instalação, na maioria das vezes é necessário somente descompactar a pasta e iniciar o serviço que o servidor já está funcionando.
Atualmente estamos usando DataServices, Web Services Application, Governance Registry e Enterprise Service Bus, todos rodando em um mesmo servidor, porém em portas diferentes.
Veja abaixo a solução completa que o WSO2 implementa.
Nos próximos posts vou explicar a funcionalidade de cada produto.
Leia mais
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)
Posts relacionados
Instalando o WSO2 Web Services Framework for PHP (2.0.0)
Como eu disse anteriormente, em Consumindo um serviço seguro utilizando PHP, vou mostrar uma das maneiras para instalar o framework que o pessoal do WSO2 disponibiliza para criação e consumo de serviços em PHP, conhecido como: WSO2 Web Services Framework for PHP.
Na página de downloads do WSO2 Web Services Framework for PHP, é possível escolher entre 3 opções de instalação, então exemplificar a fundo apenas uma e colocar uma breve descrição das outras.
Binary Distribution
É o framework já compilado e com a DLL dentro que serve para as pessoas que a utilizarão em ambientes Windows, não terá muito trabalho, apenas colocar a DLL na pasta correta e configurar o seu php.ini. Essa é a opção mais prática – na minha opinião – para Windows (deixarei essa para uma próxima, não tenho ambiente para isso – ainda).
PECL Distribution
Em teoria é a mais fácil de todas. Mas por que “em teoria”? Passei dois dias realizando diversas configurações na minha máquina para que isso funcionasse corretamente, perguntei no fórum se alguém poderia me ajudar a solucionar, mas desisti. Parti para a maneira “clássica”, o famoso CMM, que descrevo abaixo.
Source Distribution
Essa versão é o código-fonte do WSO2 Web Services Framework for PHP (aberto, hein!) e aqui temos duas opções de download, com apenas uma diferença mínima: o compactador. Uma foi compactada utilizando ZIP e outra TAR/GZ. E ambas será necessário compilação, com os bons e velhos comandos: ./configure, make && make install.
Mas, chega de papo, vamos por a mão na “massa”.
Instalando as dependências
As dependências para funcionamento do framework, não são muitas:
- WSO2 Web Services Framework for C
- PHP 5.1.1 ou superior
- Bibliotecas libxml2 e OpenSSL
WSO2 Web Services Framework for C
Para quem tá acostumado, são os velhos conhecidos, bastando baixar a última versão (no meu caso a 2.0.0):
wget http://dist.wso2.org/products/wsf/c/2.0.0/wso2-wsf-c-src-2.0.0.tar.gz tar xfvz wso2-wsf-c-src-2.0.0.tar.gz cd wso2-wsf-c-src-2.0.0 ./configure make sudo make install
PHP 5.1.1 ou superior
Não vou entrar nos méritos de instalação do PHP, pois imagino que isso esteja mais do que documentado na internet por aí a fora (para os preguiçosos – google: instalação do php no ubuntu).
Bibliotecas libxml2 e OpenSSL
O comando para instalar as dependências é:
sudo apt-get install libxml2 openssl
E com todas as dependências já instaladas e funcionando, podemos utilizar um phpinfo(); para conferir:
Compilação do WSF/PHP
CMM
E agora, a instalação propriamente dita, utilizando novamente os pacotes da versão 2.0.0:
wget http://dist.wso2.org/products/wsf/php/2.0.0/wso2-wsf-php-src-2.0.0.tar.gz ./configure make sudo make install
1, 2, 3, testando…
Estamos quase chegando lá…
Vamos copiar dois arquivos do diretório samples (um cliente e um servidor) para o diretório do servidor web (no meu caso: /var/www/samples) e ver se tudo funcionou:
sudo mkdir -p /var/www/samples/ sudo cp samples/math_* /var/www/samples/.
Indo ao navegador, basta abrir o endereço http://localhost/samples/math_client.php e conferir tudo funcionando:
Conclusão
Ainda não consigo avaliar até onde é válido ou interessante utilizar esse framework, não pesquisei a fundo ainda o funcionamento e as vantagens dele sobre as implementações como SOAP (nativa do PHP) NuSOAP.
Mas o fato de ser uma instalação que não pode ser feita em “qualquer” servidor, ainda mais no Brasil onde as empresas de hospedagens normalmente não instalam extensões de terceiros e o preço para ter um servidor próprio não é tão acessível, pode acabar ficando inviável.
Realizarei testes mais profundos para verificar as verdadeiras vantagens dessa abordagem na implementação dos serviços, só que – novamente – ficará para um outro post.
































































































































