maneh corp. projetos e sisteminhas inúteis de utilidade pública

8mar/100

Consumindo um serviço seguro utilizando PHP

Dia desses precisei colocar autenticação em um serviço que desenvolvi e passeando pelas opções da interface administrativa da WSO2 Enterprise Service Bus encontrei facilmente minha solução. Um pouco depois, li no twitter do @WSO2 um comentário sobre um novo artigo publicado sobre segurança nos Data Services, onde ensinava a fazer toda a parte de configuração: Content Filtering in Data Services with User Roles.

Só que pouco tempo depois de configurar e entregar ao cliente o serviço, veio o problema: como consumir em PHP o serviço? No artigo a solução entregue por eles para consumo é em Java, como a capacidade do cliente deixa a desejar, fiquei de fazer e enviar um exemplo de consumo do serviço desenvolvido.

Então... mãos na massa!

Configurando a ESB

Nesse ponto não irei escrever passo-a-passo a configuração que deve ser feita, o trabalho realizado pelo pessoal do WSO2 está muito bem feito nessa parte do artigo: Step 4 – Enable User Authentication for the Data Service.

Consumo sem segurança

Um pequeno trecho de PHP que mostra como consumir o serviço sem nenhum tipo de segurança. Código pequeno, limpo e objetivo.

$client = new SoapClient("http://localhost:8280/services/Tutorial?wsdl");
try {
$obj = $client->searchProductsByGroupId(array("group_id" => 1));
print_r($obj);

} catch (Exception $e) {
echo "ERRO: " . $e->getMessage();
}

Mas mesmo com toda essa objetividade, o problema do cliente não estava resolvido e eu recebia o seguinte erro:

ERRO: SOAP header missing

E, para resolver, faltava adicionar o cabeçalho com os dados de segurança.

Consumo com segurança

Agora um não-tão-pequeno trecho em PHP.

// configurações de conexão
$username = "admin";
$password = "admin";
$created = date ("Y-m-d\TH:i:s", mktime (date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")))."Z";

// definição de namespaces
$ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
$wsu = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';

// criando elemento UsernameToken
$token = new stdClass;
$token->Username = new SOAPVar($username, XSD_STRING, null, null, null, $ns);
$token->Password = new SOAPVar($password, XSD_STRING, null, null, null, $ns);

// criando elemento Timestamp
$timestamp = new stdClass;
$timestamp->Created = new SOAPVar($created, XSD_STRING, null, null, null, $wsu);

// criando elemento Security
$wsec = new stdClass;
$wsec->UsernameToken = new SoapVar($token,     SOAP_ENC_OBJECT, null, null, null, $ns);
$wsec->Timestamp     = new SoapVar($timestamp, SOAP_ENC_OBJECT, null, null, null, $wsu);

// criando header
$headers = new SOAPHeader($ns, 'Security', $wsec);

// construtor do web-service (com cabeçalho) passando o endereço do WSDL
$client = new SoapClient("http://localhost:8280/services/Tutorial?wsdl");
$client->__setSOAPHeaders($headers);

// chamada do método
try {
$obj = $client->searchProductsByGroupId(array("group_id" => 1));
print_r($obj);

} catch (Exception $e) {
echo "ERRO: " . $e->getMessage();
}

E tudo rodou normalmente, sem problemas, o cliente ficou feliz e eu matei um pouco da saudade de programar em PHP.

Na pesquisa por soluções, tentei utilizar o WSO2 Web Services Framework for PHP mas descobri que depende de instalação de módulo no Apache e não servia para meu cliente, mas anotei na pauta para testá-lo em outro momento.

18dez/090

Testes na versão 2.2.0 do WSO2 Data Services Server

Estava eu, numa calma sexta-feira, realizando testes na recém lançada versão 2.2.0 do WSO2 Data Services Server, e para começá-los resolvi fazer deploy dos serviços que já temos desenvolvido, pensando que tudo seria tranquilo, como estava o meu dia, mas... ledo engano.

Erro - Primeiro ato

Fui no básico: "Add > Data Service > Upload" e...

wso2-data-services-faulty-01Um erro que não me diz muito, então o jeito foi ver o que poderia ser por "tentativa" e erro. Após um pouco de luta e leitura do código fonte do arquivo DBS, descobri que era algum método que executa uma procedure e não tinha o ordinal preenchido.

<query id="productsByGroup" useConfig="default">
<sql>call sp_productsByGroup @group_id = ?</sql>
<param name="cliente" ordinal="" sqlType="INTEGER" type="IN"/>
<result defaultNamespace="http://ds.ws.mcorp.com.br/products" element="products" rowName="product">
<element column="id" name="id"/>
<element column="name" name="name"/>
</result>
</query>

Então peguei a linha 3 e corrigi, deixando assim:

<query id="productsByGroup" useConfig="default">
<sql>call sp_productsByGroup @group_id = ?</sql>
<param name="cliente" ordinal="1" sqlType="INTEGER" type="IN"/>
<result defaultNamespace="http://ds.ws.mcorp.com.br/products" element="products" rowName="product">
<element column="id" name="id"/>
<element column="name" name="name"/>
</result>
</query>

Ou seja, devíamos ter prestado mais atenção quando falavam ser obrigatório para procedures o preenchimento desse campo, mas como nunca deu problema, então não prestávamos a devida atenção.

Erro - Segundo ato

Com o serviço devidamente publicado, fui a execução dos métodos para ver se tudo iria bem. Primeiro método (sem parâmetros de entrada) foi tranquilo, retornou tudo que eu precisava. Já no segundo método...

wso2-data-services-faulty-02E voltamos a busca do erro perdido... E dessa vez não foi falta de atenção nossa, apenas o plugin que o pessoal do WSO2 disponibiliza (e que ensinei a compilar) que não preencheu o atributo como devia. Na chamada da operação estava assim:

<operation name="productsByGroup">
<call-query href="productsByGroup">
<with-param name="group_id" query-param=""/>
</call-query>
</operation>

Enquanto deveria estar assim:

<operation name="productsByGroup">
<call-query href="productsByGroup">
<with-param name="group_id" query-param="group_id"/>
</call-query>
</operation>

E feito todas essas alterações na definição dos data service, tudo correu bem e tranquilo com essa nova versão.

Mas ainda acho que vale a pena esperar um pouco pra ver se não aparece nenhuma correção que levem eles a gerar a versão 2.2.1; também tenho que verificar se os patches que aplicamos na versão anterior deixaram de ser necessário. Mas isso fica pra uma próximo oportunidade.

18dez/090

Compilando o plugin do WSO2 Data Services Server para o Eclipse

Eclipse + WSO2 Data ServiceComo não encontrei uma versão final do plugin para o Eclipse para criação, edição e deploy de serviços do WSO2 Data Services Server na página de downloads do site, o jeito foi compilar o plugin a partir do fonte disponível no repositório (e viva o código aberto). E seguem abaixo os passos necessário para o procedimento.

Requisitos

Será necessário que você tenha instalado os programas abaixo para poder realizar esse processo. Não é minha ideia ensinar como instalar, mas com uma busca no Google esse problema deve ser facilmente resolvido:

Baixando fontes

Primeiro passo é baixar do repositório o código fonte da última versão:

svn co https://wso2.org/repos/wso2/trunk/tools/ide/eclipse/data-service/org.wso2.ws.dataservices.ide/

Compilação

Depois de baixados os fontes, basta entrar na pasta que foi gerada e mandar compilar:

cd org.wso2.ws.dataservices.ide
mvn install

Esse processo pode demorar um pouco, pois ele realiza o download de diversas dependências para compilação, mas no fim ele gera dentro do diretório "target" com o arquivo "org.wso2.ws.dataservices.ide_1.0.0.jar" que deve ser instalado no seu Eclipse.

Instalação

No meu caso, o Eclipse está instalado no meu home e é para lá que copiei o arquivo.

cp target/org.wso2.ws.dataservices.ide_1.0.0.jar ~/Applications/eclipse/plugins/.

Finalização

WSO2 Data services: Wizard newE com isso, no menu de "Novo", do seu Eclipse, deve ter a opção de wizard para criação e após criado o serviço (que ficará para um outro post) você tem a opção de clicar com o botão direito no arquivo e editar (Edit Data Service) ou realizar o deploy (Deploy Data Service).

1dez/090

Data Services: O que é isso?

Já viu algum datacenter assim?

Organização e datacenter, sempre andando juntos!

Se fisicamente algumas empresas mantém um datacenter como esse acima, imagine o que não conseguem fazer com relação a "fontes de dados" e, para tentar minimizar esse problema, o SOA propõe a utilização do "data services", que não podemos afirmar ser a solução para toda e qualquer empresa, mas foi a nossa opção e tem nos atendido muito bem.

Definição

Data Services: Camada que fornece acesso às diversas fontes de dados, podendo essas fontes serem: banco de dados, planilhas ou arquivos textos.

Então o que é isso afinal?

Digamos que temos uma maneira de organizar aquela "bagunça" generalizada que as vezes temos em nossa arquitetura, imagine o seguinte cenário: um sistema para o RH utilizando SQL Server, o sistema de compras utilizando Firebird, uma planilha de gerenciamento de projetos em excel e o restante em um ERP próprio utilizando PostgreSQL.

Analisando esse cenário, aparece o problema de integrar todas essas soluções e, para não acessarmos diversas fontes de dados, cada um com seu driver específico, utilizamos o WSO2 Data Services Server!

Que - basicamente - funciona como uma camada acima de toda aquela bagunça, com uma única maneira de acesso (serviços) às várias fontes de dados e sem maiores dependências, independente da forma dos dados o acesso será o mesmo.

WSO2 Data Services - Lista de serviços

WSO2 Data Services - Lista de serviços

A tela acima mostra a visão do WSO2 Data Services Server na sua página de listagem de serviços, com atalhos para o WSDL (na versões 1.1 e 2.0) e um "try-it", que são as duas formas de acesso aos serviços que expomos no WSO2 Data Services Server. E com isso teremos uma única fonte para consultar os dados de nossa empresa, atendendo uma das camadas da arquitetura que explicamos no post "SOA está para WSO2 ou WSO2 está para SOA?".

O desenvolvimento desses serviços é relativamente simples e será abordado em um próximo post.

Caso esteja sendo muito superficial, aceito comentários e/ou críticas caso esteja muito rápido.

24nov/090

Novidades nos lançamentos (nov/2009) da plataforma WSO2

Como avisei aqui e no twitter semana passada, o pessoal do WSO2 lançou algumas atualizações nos projetos da plataforma WSO2 Carbon. Mas somente agora, com o lançamento oficial, é que podemos descobrir o que foi atualizado.

Segue um resumão (baseado nas notas de lançamento) com o que foi atualizado em cada um dos projetos.

WSO2 Web Services Application Server (v3.1.2)

  • Correções em vários softwares que fazem parte dele: Apache Axis2, Apache Rampart, Apache Sandesha2, WSO2 Carbon e alguns outros projetos;
  • Correção da limpeza de memória após reiniciar o servidor.

Versão original (inglês): aqui.

WSO2 Enterprise Service Bus (v2.1.2)

  • Diversas melhorias e correções desde a versão 2.1.0 lançada em julho de 2009.

Versão original (inglês): aqui.

WSO2 Governance Registry (v3.0.2)

  • Melhoria no suporte a transação;
  • Suporte ao WebSphere, WebLogic e JBoss;
  • Baseado na suíte WSO2 Carbon;
  • Suporte a clusterização;
  • Correção de vários bugs.

Versão original (inglês): aqui.

WSO2 Business Process Server (v1.1.0)

  • Nova camada de integração WSO2 Carbon para o Apache ODE;
  • Utilizando Apache ODE 2.0-beta (baseado no trunk) como engine BPEL;
  • Suporte experimental para clusterização;
  • Suporte para consumo de serviços seguros (usando WS-Security);
  • Utilizando OpenJPA para camada de acesso a dados ODE;
  • Recuperação de atividades utilizando o management console;
  • Atualização online (hot update) do pacote BPEL facilitam o versionamento;
  • Suporte a manipulação de dados utilizando E4X nos processos BPEL.

Aqui deixo um adendo, baseado em alguns testes superficiais que fiz, posso dizer que não é indicado colocar essa versão em produção. Como disseram nas notas de lançamento, muita coisa está incompleta ainda e achei alguns probleminhas. Mas é interessante tentarmos colocar os processos BPEL e realizar testes para reportarmos os problemas e ajudarmos na correção dos mesmos para a versão 1.1.1 (que espero que chegue logo).

Isso é até compreensível, já que se trata de uma nova versão e não apenas correções de bugs como as outras. (:

Versão original com cada item comentado (inglês): aqui.

WSO2 Identity Server (v2.0.2)

  • Correções em vários softwares que fazem parte dele: Apache Axis2, Apache Rampart, Apache Sandesha2, WSO2 Carbon e alguns outros projetos.

Versão original (inglês): aqui.

WSO2 Mashup Server (v2.0.1)

  • Interface visual para gerenciar as tarefas agendadas;
  • Baseado no WSO2 Carbon SOA Framework que irá facilitar habilitação de funções a um clique, como o gerenciamento de Data Services nas futuras versões do Mashup Server.

Versão original (inglês): aqui.

19nov/090

WSO2 e a quinta-feira agitada: muitos lançamentos

Uma passeadinha básica no site do WSO2 para ver o movimento do fórum e quase caio para trás quando vejo a quantidade de produtos que eles atualizaram de ontem pra hoje.

Não sei se estou sendo apressado, mas o lançamento nem está na página inicial ainda, apenas nas páginas dos projetos... Mas vamos divulgando não é? Então os projetos atualizados são:

Mas ainda sinto falta das atualizações do WSO2 Data Services, que está largado na 2.0 e com alguns bugzinhos chatos que até já arrumamos e mandamos o patch, mas ainda assim...

E pensar que passei dois dias testando as alterações das últimas versões e hoje tem novas. Não consegui nem documentar as antigas... Só me resta testar novamente e homologar as novas versões.

17set/090

WSO2 Data Services – Instalação do servidor

A instalação do WSO2 Data Services se divide em duas partes, a instalação do servidor e a preparação do ambiente de desenvolvimento.

1. Servidor

É necessário realizar o download da última versão (utilizamos aqui a 2.0) do servidor na página do projeto.

Vou exemplificar os comandos como se fosse utilizar pasta "~/Applications/wso2" para colocar todos os servidores do WSO2, caso tenha outra escolha, verifique a adaptação dos comandos.

Criando a pasta:

mkdir -p ~/Applications/wso2

Descompactando o arquivo (lembrando de verificar a versão do arquivo que você baixou - no meu caso, 2.0):

unzip /path/to/download/wso2dataservices-2.0.zip -d ~/Applications/wso2

Após descompactado, vamos iniciar o servidor:

cd ~/Applications/wso2/wso2-dataservices-2.0
./bin/wso2server.sh

Após algumas (várias) mensagens depois, você deve receber algo como:

[2009-05-29 14:30:30,330]  INFO -  HTTPS port             : 9443 {org.wso2.carbon.core.StartupServlet}
[2009-05-29 14:30:30,333]  INFO -  HTTP port              : 9763 {org.wso2.carbon.core.StartupServlet}
[2009-05-29 14:30:30,333]  INFO -  WSO2 Carbon started in 35 sec {org.wso2.carbon.core.StartupServlet}

E isso representa que tudo já está instalado e funcionando! Para sair, basta usar "CTRL + C".

Esse comando que acabou de utilizar é usado para controlar o serviço do WSO2, tem alguns parâmetros que podem ser utilizados, para vê-los basta digitar:

./bin/wso2server.sh help

E com isso temos o servidor instalado! Para mantê-lo iniciado, em background, basta utilizar o comando:

./bin/wso2server.sh start

1. Ambiente de desenvolvimento

É necessário realizar o download e instalação desse plugin para o Eclipse.

Numa próxima "jornada", vamos fazer nosso primeiro data service.

   

Categories

Tags

arquitetura aurélio banco de dados bpel bpel editor business process código aberto carbon casa di bel cms data services definição deploy eclipse efetividade enterprise service bus esb expressão regular governance registry identity instalação jboss jboss tools lançamento livro mashup moleskines oracle palestra papelaria cícero plugin produtividade promoção soa software livre sql server transformation webcast weblogic web services application websphere wordpress wso2 wso2 carbon xsl

Lista de Links

RSSTwitter: vyper

Archives

Meta