WSO2: SOA Workshop em São Paulo

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. Continue lendo

Publicado em eventos | Com a tag , , , , , , | Deixar um comentário

SOAP vs REST

Tenho visto vários artigos e discussões dizendo que SOAP acabou, que a nova solução para todos os problemas do mundo é o REST (de preferência com JSON). Porém, qualquer pessoa que pare para pensar – o mínimo que seja – notará que no mundo real nem tudo é mil maravilhas como dizem ser o REST e nem tão ruim quanto dizem ser o SOAP.

Para quem está envolvido com serviços no dia-a-dia poderia dar vários pontos de vantagens e desvantagens sobre as duas tecnologias. Mas qualquer ponto será levantado dependendo do contexto de quem aplica ou utiliza a tecnologia.

Mas, antes de discussão técnica e filosófica, um ponto que eu acho bastante importante é: até onde vale a pena entrar na discussão da melhor solução e/ou tecnologia? Sei lá, mas entrarei mesmo assim.

As pessoas deveriam se preocupar em resolver os problemas da melhor maneira e não tentar encontrar/criar um padrão que resolva todos os problemas.

Historinhas fictícias

Historinha 1

<History type=”ficção” context=”enterprise” description=”padrão perfeito X” observation=”Qualquer semelhança com a vida real será pura coincidência”>
<Content>
1 – Temos o “padrão perfeito X”, chamado a partir de agora ppX;
2 – O ppX é grande, foi criado para resolver todo tipo de problema do mundo tecnológico;
3 – Muitas pessoas enterprise (vulgo PE) usam e amam o ppX e são felizes com ele;
4 – Toda palestra, evento e rodinha das PE só se ouve falar do ppX, bem, é lógico;
5 – Usam ele para todo e qualquer problema;
6 – Eles sabem que o ppX tem seus problemas, mas é super confiável;
7 – Eles resolvem seus problemas com o ppX e são felizes com o que fazem.
</Content>
</History>

Historinha 2

history = {
type: ‘ficção’,
context: ‘non-enterprise’,
description: ‘padrão perfeito X’,
observation: ‘Qualquer semelhança com a vida real será pura coincidência’,
content: ‘
1 – Existe o “padrão perfeito X”, chamado a partir de agora ppX;
2 – O ppX é grande, foi criado para resolver todo tipo de problema do mundo tecnológico;
3 – Muitas pessoas enterprise (vulgo PE) usam e amam o ppX e são felizes com ele;
4 – Muitas pessoas não-enterprise (vulgo PNE) pouco usam e odeiam o ppX;
5 – Toda palestra, evento e rodinha das PNE só se ouve falar mal do ppX;
6 – Resolvem inventar o “padrão perfeito aberto X” (adivinha? Errou. Vulgo A-ppX);
7 – Usam ele para todo e qualquer problema;
8 – Eles sabem que o ppX tem seus problemas, então fazem desses problemas a causa da fome no mundo;
9 – Mostram a todos que o A-ppX é a perfeita solução para todos os problemas do mundo, menos a fome;
10 – Eles resolvem seus problemas com o A-ppX e são felizes com o que fazem.
‘}

Se é que alguém chegou até aqui…

Cada um no seu quadrado ou não.

Espertas são as pessoas que conseguem juntar o melhor dos dois mundos indiferente do contexto onde ela esteja. Porque, no fim, o que importa REALMENTE é: resolver seus problemas e ser feliz com o que faz.

Publicado em arquitetura, desenvolvimento | Com a tag , , , , | Deixar um comentário

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.

Publicado em desenvolvimento | Com a tag , , , , , , , , , , , | Deixar um comentário

Novidades WSO2 Data Services Server (2.6.x)

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!

Continue lendo

Publicado em arquitetura, desenvolvimento | Com a tag , , , , , , , , , , , , , , , , , | 2 comentários

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!

Publicado em avisos | Com a tag , | Deixar um comentário

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.

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.

Publicado em desenvolvimento | Com a tag , , , , , , , , | Deixar um comentário

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

Publicado em desenvolvimento | Com a tag , , , , | Deixar um comentário

Promoção: Livro Shell Script

Inspirado nas promoções de 3000 conchinhas vendidas e 1000 piazinhos vendidos que o Aurélio fez no twitter, resolvi parar de ser enrolado e egoísta!

Afinal, o prazer de ler os livros escritos pelo Aurélio tem que ser passado a frente. Por isso vou sortear o livro de Shell Script que ganhei na promoção das 2.000 conchinhas vendidas, pois tenho uma cópia comprada legalmente no site da Editora Novatec (aqui você pode ler uma resenha sobre o livro Shell Script) e não tenho muito o que fazer com dois livros iguais!

Foto por: Mog (chupinhado do blog.aurelio.net)

Até tentei pensar em maneiras diferentes de sortear o livro, mas não consegui achar nenhuma revolucionária e/ou que não fosse trabalhosa demais. Então parti pro método fácil e direto!

Como faço para participar?

Basta escrever no twitter:

Quero ganhar o livro de Shell Script do @oreio que o @vyper está sorteando! http://migre.me/17EB0

Como, onde e quando será feito o sorteio?

Farei o sorteio dia 03/07/2010 03/09/2010 as 17:00, utilizando o sorteie.me. O vencedor será anunciado no meu twitter, então, vamos lá e divulguem para seus amigos! (:

E como recebo?

Mandarei o livro para qualquer canto do Brasil, via Correios!

Informações inúteis de utilidade pública…

Um dia hei de entender porque sempre participo das promoções do Aurélio, sendo que tenho todos os livros! E, lembre-se, caso você tenha algum dos livros (ou todos) não esqueça de fazer o cadastro no “Clube do Aurélio” para pegar sua carteirinha!

Atualização (03/09/2010): Resultado!

E o sorteio não foi bem como eu esperava, afinal, os problemas que aconteceram no migre.me atrapalhou. E, aparentemente, está parcialmente resolvido.

Porém, o sorteie.me não estava suportando mais o migre.me, então minha opção foi fazer o sorteio em “shell script”. Aproveitando o livro, claro!

Mas para não ficar obscuro, coloquei todos os RT do link num arquivo texto e com o comando abaixo, realizei o sorteio:

shuf sorteio.txt | tail -1

E o resultado foi:

Peço desculpa a todos, mas foi por força maior e parabéns ao ganhador: @taiar. Por favor, entre em contato comigo para que me envie seus dados!

Atualização (22/09/2010): Finalmente chegou!

Demorou um pouco para chegar, mas chegou! Leia um pouco mais sobre a “aventura” de André Taiar e o livro de Shell Script do Aurélio.

Publicado em promoção | Com a tag , , , , , , , , , , , | 17 comentários

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! (;

Publicado em desenvolvimento | Com a tag , , , , , , , , , | Deixar um comentário