WSO2: SOA Workshop em São Paulo

Leonardo Saraiva (12/11/2011)

Junior, Chintana, Amani, Nuwan e Leonardo

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

Leonardo Saraiva (06/10/2011)

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)

Leonardo Saraiva (11/06/2011)

WSO2 - Data Services Server 2.6.0 - Home

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

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

WSO2 Data Services Server 2.6.0 - Complex Elements - List WSO2 Data Services Server 2.6.0 - Complex Elements - Insert nested

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

WSO2 Data Services Server 2.6.0 - Generate keys WSO2 Data Services Server 2.6.0 - Generate keys: Invoke

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

WSO2 Data Services Server 2.6.0 - Distribute 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

WSO2 Data Services Server 2.6.0 - Scheduled Tasks WSO2 Data Services Server 2.6.0 - Scheduled Tasks: Insert

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

WSO2 Data Services Server 2.6.0 - Web Scraping: Data Source WSO2 Data Services Server 2.6.0 - Web Scraping: Query

Poderemos consumir dados diretamente de sites, fazendo parser em conteúdo de páginas, por exemplo.

Multiple SQL Dialect Support

WSO2 Data Services Server 2.6.0 - Multiple Dialects SQL: Options WSO2 Data Services Server 2.6.0 - Multiple Dialects SQL: Add

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

WSO2 Data Services Server 2.6.0 - Database to Data Service Generation WSO2 Data Services Server 2.6.0 - Database to Data Service Generation: Choise Type WSO2 Data Services Server 2.6.0 - Database to Data Service Generation: Select Tables WSO2 Data Services Server 2.6.0 - Database to Data Service Generation: Try-it

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

WSO2 Data Services Server 2.6.0 - Service Group: Option WSO2 Data Services Server 2.6.0 - Service Group: List

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

WSO2 Data Services Server 2.6.0 - Database Console: Login WSO2 Data Services Server 2.6.0 - Database Console: Simple Query

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

Leonardo Saraiva (06/05/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

José Nogueira (24/02/2011)

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.

add user wso2

add user wso2

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.

list user wso2

list user wso2

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.

select user wso2

select user wso2

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.

roles of users wso2

roles of users wso2

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á.

edit query wso2

edit query wso2

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.

add edit output mapping wso2

add edit output mapping wso2

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.

security for the service wso2

security for the service wso2

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”.

full return service wso2

full return service wso2

parcial return service wso2

partial return service wso2

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)

Leonardo Saraiva (04/01/2011)

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.
  • 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

Leandro Prado (22/12/2010)

Série criando serviços com WSO2

Leandro Prado (22/10/2010)

Configurando o WSO2 com PostgreSQL

Leandro Prado (18/10/2010)

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

Leandro Prado (13/10/2010)

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:

  1. A BUS recebe a requisição
  2. Encaminha para o WSAS
  3. Valida os dados
  4. Chama o DS
  5. Retorna os dados para o WSAS
  6. Executa regra de negócio
  7. 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:

  1. A BUS recebe a requisição
  2. Encaminha para o WSAS
  3. Valida os dados
  4. 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

Leandro Prado (05/10/2010)

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.

Download Parte 2

Até a próxima!

Leia mais

Criando serviços com o WSO2 – Parte 1 – WSO2 Data Services

Leandro Prado (22/09/2010)

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

Leandro Prado (15/07/2010)

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

Leonardo Saraiva (16/06/2010)

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)

Leonardo Saraiva (01/06/2010)

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

Leandro Prado (31/05/2010)

Neste post vou descrever o que cada solução do WSO2 é responsável.

WSO2 Enterprise Service Bus

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

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

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

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

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

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

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 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

Leandro Prado (26/05/2010)

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

Leandro Prado (19/05/2010)

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.

Plataforma WSO2

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

Leonardo Saraiva (06/05/2010)

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)

Leonardo Saraiva (21/04/2010)

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

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.

Posts relacionados

Sobre

Somos uma comunidade brasileira de interessados e curiosos na plataforma WSO2, estamos aqui para compartilharmos conhecimento e notícias, além é claro de ajudar a difundir a tecnologia.

E para quem ainda não conhece o WSO2, é uma suíte de produtos de código-livre integrados e modulares que dão suporte para implantação de uma plataforma SOA, suprindo a parte de criação, conexão, composição e governança de serviços.

Sinta-se a vontade para ler nossas últimas postagens e acompanhar o pessoal da comunidade.

Comunidade

@WSO2Brasil

  • RT @vyper: O meu relato sobre o Workshop com o povo do @WSO2 em São Paulo: t.co/Vg4KUmx5 #wso2 #workshop
    Em: 12/11/2011 19:22:31
  • A apresentacao do @vyper no #WSO2 SOA Workshop foi publicada. Ele promete que fara um post com maiores detalhes: t.co/YWtr9ZkR
    Em: 08/11/2011 19:20:20
  • RT @vyper: Agora o trabalho é traduzir pro inglês a apresentação para que o pessoal do @WSO2 possa comentar. (:
    Em: 05/11/2011 16:26:12
  • RT @vyper: A apresentação foi de boa. O pessoal do @WSO2 ficou curioso com os problemas apontados por nós, no case do @ICI_Curitiba.
    Em: 05/11/2011 16:23:07
  • RT @vyper: E começa a parte técnica. Go go go. t.co/pO4iRQLV
    Em: 05/11/2011 12:03:47
  • RT @vyper: Uma ótima introdução ao #WSO2 SOA Workshop, feita pelo Diogenes do Banco Indusval. t.co/FgCAo1Nl
    Em: 05/11/2011 11:56:50
  • RT @vyper: Waiting for @WSO2 meeting. t.co/5cvFIMeg
    Em: 05/11/2011 11:01:29

Plataforma SOA WSO2