<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mcorp. &#187; wso2</title>
	<atom:link href="http://www.mcorp.com.br/tag/wso2/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mcorp.com.br</link>
	<description>tecnologia e informações inúteis de utilidade pública</description>
	<lastBuildDate>Fri, 03 Sep 2010 20:05:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0</title>
		<link>http://www.mcorp.com.br/2010/06/compilando-o-wso2-carbon-3-0-0-e-corrigindo-o-wso2-data-services-server-2-5-0/</link>
		<comments>http://www.mcorp.com.br/2010/06/compilando-o-wso2-carbon-3-0-0-e-corrigindo-o-wso2-data-services-server-2-5-0/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 13:17:12 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[carbon]]></category>
		<category><![CDATA[data services]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[maven2]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[software livre]]></category>
		<category><![CDATA[wso2]]></category>
		<category><![CDATA[wso2 carbon]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=447</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="WSO2 Data Services Server" src="/wp-content/uploads/2010/06/wso2-data-services-server.gif" alt="" width="179" height="23" />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.</p>
<p>E para não pararmos no tempo, vendo que <a href="/2010/04/novidades-do-proximo-wso2-data-services-server-2-5-x/" target="_blank">as  novidades do WSO2 Data Services Server  2.5.0</a> 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 <a href="/2009/12/testes-na-versao-2-2-0-do-wso2-data-services-server/" target="_blank">WSO2 Data Services Server 2.2.1</a>.</p>
<p>Mas como nem tudo são rosas, um velho <em>bug</em> conhecido nosso na  versão 2.0 e discutido no <a href="http://wso2.org/forum/thread/5349" target="_blank">fórum - de não aceitar valores <em>null</em></a>,  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.</p>
<p><img class="alignleft" title="WSO2 Carbon" src="/wp-content/uploads/2010/06/wso2-carbon.gif" alt="" width="107" height="23" />Como já conhecemos a estrutura, fomos  direto ao site do projeto para realizar o <a href="http://wso2.org/downloads/data-services-server" target="_blank">download do fonte  do WSO2 Data Services Server</a> 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 <a href="http://wso2.org/downloads/carbon" target="_blank">WSO2 Carbon</a>.</p>
<p>Então com o arquivo de <a href="http://dist.wso2.org/products/carbon/3.0.0/wso2carbon-3.0.0-src.zip" target="_blank">código-fonte  do WSO2 Carbon 3.0.0</a> devidamente baixado, vamos colocar a mão na  massa.</p>
<h2>Baixando e descompactando o fonte</h2>
<pre class="brush: php">wget  http://dist.wso2.org/products/carbon/3.0.0/wso2carbon-3.0.0-src.zip
unzip wso2carbon-3.0.0-src.zip</pre>
<h2>Baixando e aplicando o <em>patch</em></h2>
<pre class="brush: php">wget /wp-content/uploads/2010/06/wso2-dataservices-accept-null.txt
cd wso2carbon-3.0.0-src
patch -p1 wso2-dataservices-accept-null.patch</pre>
<p>E a mensagem recebida aqui será algo como:</p>
<pre class="brush: php">patching file components/data-services/org.wso2.carbon.dataservices.core/3.0.0/src/main/java/org/wso2/carbon/dataservices/dispatch/query/SQLQuery.java</pre>
<h2>Compilando o componente</h2>
<p>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.</p>
<pre class="brush: php">cd components/data-services
mvn install</pre>
<h2>Corrigindo o Data Services Server</h2>
<p>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).</p>
<pre class="brush: php">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</pre>
<h2>Conclusão</h2>
<p>Com o <em>patch</em> criado, testado e aplicado. Abrimos um <a href="http://wso2.org/jira/browse/CARBON-7589" target="_blank">pedido de  correção no JIRA do WSO2</a>, para que eles possam corrigir na próxima <em>release</em> (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).</p>
<ul>
<li><a href="/wp-content/uploads/2010/06/carbon-dataservices-core-3.0.0.tar.gz" target="_blank">org.wso2.carbon.dataservices.core-3.0.0.jar</a></li>
<li><a href="/wp-content/uploads/2010/06/carbon-dataservices-ui-3.0.0.tar.gz" target="_blank">org.wso2.carbon.dataservices.ui-3.0.0.jar</a></li>
</ul>
<p>E tenho que falar, viva o código aberto e o software livre! (;</p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2010/05/utilizando-o-array-type-do-wso2-data-services-server-2-5-x/" title="Utilizando o Array Type do WSO2 Data Services Server 2.5.x">Utilizando o Array Type do WSO2 Data Services Server 2.5.x</a></li><li><a href="http://www.mcorp.com.br/2009/11/novidades-nos-lancamentos-nov2009-da-plataforma-wso2/" title="Novidades nos lançamentos (nov/2009) da plataforma WSO2">Novidades nos lançamentos (nov/2009) da plataforma WSO2</a></li><li><a href="http://www.mcorp.com.br/2010/04/novidades-do-proximo-wso2-data-services-server-2-5-x/" title="Novidades do próximo WSO2 Data Services Server (2.5.x)">Novidades do próximo WSO2 Data Services Server (2.5.x)</a></li><li><a href="http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/" title="Consumindo um serviço seguro utilizando PHP">Consumindo um serviço seguro utilizando PHP</a></li><li><a href="http://www.mcorp.com.br/2009/12/compilando-o-plugin-do-wso2-data-services-para-o-eclipse/" title="Compilando o plugin do WSO2 Data Services Server para o Eclipse">Compilando o plugin do WSO2 Data Services Server para o Eclipse</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/06/compilando-o-wso2-carbon-3-0-0-e-corrigindo-o-wso2-data-services-server-2-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lançamento do WSO2 Stratos (alpha)</title>
		<link>http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/</link>
		<comments>http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 18:50:24 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[bam]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[esb]]></category>
		<category><![CDATA[gadged]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[mashup]]></category>
		<category><![CDATA[nuvem]]></category>
		<category><![CDATA[stratos]]></category>
		<category><![CDATA[wso2]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=440</guid>
		<description><![CDATA[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, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-439" title="WSO2 Stratos" src="http://www.mcorp.com.br/wp-content/uploads/2010/06/wso2-stratos.png" alt="" width="107" height="23" />O pessoal do <a href="http://wso2.org" target="_blank">WSO2</a> anda com todo o vapor mesmo, hoje foi lançado (versão <em>alpha</em> ainda) o <a href="http://wso2.com/cloud/stratos/" target="_blank">WSO2 Stratos</a>, toda a plataforma rodando em <em>cloud computing</em>, ou seja, tudo "empacotado" e pronto para rodar, sem dependência de hardware e instalações.</p>
<p>Você pode conseguir maiores informações no site do produto <a href="http://wso2.com/cloud/stratos/" target="_blank">WSO2 Stratos</a> (em inglês) e, também, testar tudo funcionando (lembrando que não é uma versão final ainda) fazendo seu cadastro - grátis. <a href="http://cloud.wso2.com/" target="_blank">Testar o WSO2 Stratos</a>.</p>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/06/wso2-stratos-home.png" rel="lightbox[440]"><img class="alignnone size-medium wp-image-443" title="WSO2 Stratos - Home" src="http://www.mcorp.com.br/wp-content/uploads/2010/06/wso2-stratos-home-300x228.png" alt="" width="300" height="228" /></a></p>
<p>Os produtos lançados nesse formato são:</p>
<ul>
<li>Governance</li>
<li>Identity</li>
<li>Application Server</li>
<li>Gadgets</li>
<li>Mashup Server</li>
<li>Business Activity Monitor</li>
<li>Enterprise Service Bus</li>
</ul>
<p>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.</p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2009/11/novidades-nos-lancamentos-nov2009-da-plataforma-wso2/" title="Novidades nos lançamentos (nov/2009) da plataforma WSO2">Novidades nos lançamentos (nov/2009) da plataforma WSO2</a></li><li><a href="http://www.mcorp.com.br/2010/04/wso2-business-activity-monitoring-sql-server/" title="WSO2 Business Activity Monitoring + SQL Server">WSO2 Business Activity Monitoring + SQL Server</a></li><li><a href="http://www.mcorp.com.br/2010/04/wso2-enterprise-service-bus-manipulando-erros-em-endpoints/" title="WSO2 Enterprise Service Bus &#8211; Manipulando erros em Endpoints">WSO2 Enterprise Service Bus &#8211; Manipulando erros em Endpoints</a></li><li><a href="http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/" title="Consumindo um serviço seguro utilizando PHP">Consumindo um serviço seguro utilizando PHP</a></li><li><a href="http://www.mcorp.com.br/2009/12/instalando-wso2-enterprise-service-bus-eclipse-tools-no-ubuntu-karmic-koala-9-10/" title="Instalando WSO2 Enterprise Service Bus Eclipse Tools no Ubuntu Karmic Koala (9.10)">Instalando WSO2 Enterprise Service Bus Eclipse Tools no Ubuntu Karmic Koala (9.10)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizando o Array Type do WSO2 Data Services Server 2.5.x</title>
		<link>http://www.mcorp.com.br/2010/05/utilizando-o-array-type-do-wso2-data-services-server-2-5-x/</link>
		<comments>http://www.mcorp.com.br/2010/05/utilizando-o-array-type-do-wso2-data-services-server-2-5-x/#comments</comments>
		<pubDate>Thu, 06 May 2010 21:27:32 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[array type]]></category>
		<category><![CDATA[builder]]></category>
		<category><![CDATA[carbon]]></category>
		<category><![CDATA[data services]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[release candidate]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[soapui]]></category>
		<category><![CDATA[web services application]]></category>
		<category><![CDATA[wso2]]></category>
		<category><![CDATA[wso2 carbon]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=397</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das <a href="/2010/04/novidades-do-proximo-wso2-data-services-server-2-5-x/" target="_blank">novidades do WSO2 Data Services Server 2.5.x</a>, já listada anteriormente, é que agora poderemos trabalhar com <em>Array Types</em>. 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 <em>string</em> e posteriormente (em uma <em>procedure</em> ou algo do gênero) realizar o <em>parser</em>.</p>
<p>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 <em>parser</em> na <em>procedure</em>; mas, de uma forma ou outra, resolviam o problema. Só que com a implementação de <em>Array Type</em> resolvemos esse problema de maneira simples, eficiente e elegante!</p>
<h2>Colocando a mão na massa</h2>
<p>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 <em>productById</em> que recebe um <em>id</em>, algo como abaixo:</p>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/try-it-method-productById-without-array-type.png" rel="lightbox[397]"><img class="alignnone size-thumbnail wp-image-398" title="Try-it: method productById without array type" src="http://www.mcorp.com.br/wp-content/uploads/2010/05/try-it-method-productById-without-array-type-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/soap-ui-method-productById-without-array-type.png" rel="lightbox[397]"><img class="alignnone size-thumbnail wp-image-399" title="SOAPUI: method productById without array type" src="http://www.mcorp.com.br/wp-content/uploads/2010/05/soap-ui-method-productById-without-array-type-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Mas agora tudo foi facilitado, vamos a "mágica"! Para alteração do método que aceite a entrada de um <em>Array Type</em>, serão necessários apenas dois passos.</p>
<h3>Passo 1: editando a <em>query</em></h3>
<p>Teremos que trocar a <em>query</em> 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 <em>query</em> do WSO2 Data Services Server, basta trocarmos, como fiz abaixo:</p>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/query-without-array.png" rel="lightbox[397]"><img class="alignnone size-thumbnail wp-image-400" title="query without array" src="http://www.mcorp.com.br/wp-content/uploads/2010/05/query-without-array-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/query-with-array.png" rel="lightbox[397]"><img class="alignnone size-thumbnail wp-image-401" title="query with array" src="http://www.mcorp.com.br/wp-content/uploads/2010/05/query-with-array-150x150.png" alt="" width="150" height="150" /></a></p>
<h3>Passo 2: editando o tipo da entrada</h3>
<p>E o segundo passo, editando os <em>Input Mappings,</em> basta trocarmos o tipo <em>scalar</em> para <em>array</em>, novamente, como fiz abaixo:</p>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/input-scalar.png" rel="lightbox[397]"><img class="alignnone size-thumbnail wp-image-402" title="input scalar" src="http://www.mcorp.com.br/wp-content/uploads/2010/05/input-scalar-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/input-array.png" rel="lightbox[397]"><img class="alignnone size-thumbnail wp-image-403" title="input array" src="http://www.mcorp.com.br/wp-content/uploads/2010/05/input-array-150x150.png" alt="" width="150" height="150" /></a></p>
<h2>O resultado</h2>
<p>E agora vamos a parte legal: o resultado!</p>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/try-it-method-productById-with-array-type.png" rel="lightbox[397]"><img class="alignnone size-thumbnail wp-image-404" title="Try-it: method productById with array type" src="http://www.mcorp.com.br/wp-content/uploads/2010/05/try-it-method-productById-with-array-type-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/soap-ui-method-productById-with-array-type.png" rel="lightbox[397]"><img class="alignnone size-thumbnail wp-image-405" title="SOAPUI: method productById with array type" src="http://www.mcorp.com.br/wp-content/uploads/2010/05/soap-ui-method-productById-with-array-type-150x150.png" alt="" width="150" height="150" /></a></p>
<h2>Conclusão</h2>
<p>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 <em>releases candidates</em>, que podem ser acompanhadas pelo <a href="http://builder.wso2.org/~carbon/releases/carbon/3.0.0/" target="_blank">repositório de <em>builders</em> do WSO2 Carbon 3.0.0</a>.</p>
<p>Deixo aqui o <a href="http://www.mcorp.com.br/wp-content/uploads/2010/05/wso2tutorial-array-type.zip">download dos arquivos utilizados para implementar o <em>Array Type</em></a> nesse exemplo, contém os arquivos abaixo:</p>
<ul>
<li><em>Data Service</em> antes da implementação do <em>Array Type</em></li>
<li><em>Data Service</em> depois da implementação do <em>Array Type</em></li>
<li>Script de criação do banco de dados utilizado (MySQL)</li>
</ul>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2009/11/novidades-nos-lancamentos-nov2009-da-plataforma-wso2/" title="Novidades nos lançamentos (nov/2009) da plataforma WSO2">Novidades nos lançamentos (nov/2009) da plataforma WSO2</a></li><li><a href="http://www.mcorp.com.br/2010/06/compilando-o-wso2-carbon-3-0-0-e-corrigindo-o-wso2-data-services-server-2-5-0/" title="Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0">Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0</a></li><li><a href="http://www.mcorp.com.br/2010/04/novidades-do-proximo-wso2-data-services-server-2-5-x/" title="Novidades do próximo WSO2 Data Services Server (2.5.x)">Novidades do próximo WSO2 Data Services Server (2.5.x)</a></li><li><a href="http://www.mcorp.com.br/2010/04/wso2-business-activity-monitoring-sql-server/" title="WSO2 Business Activity Monitoring + SQL Server">WSO2 Business Activity Monitoring + SQL Server</a></li><li><a href="http://www.mcorp.com.br/2009/11/wso2-e-a-quinta-feira-agitada-muitos-lancamentos/" title="WSO2 e a quinta-feira agitada: muitos lançamentos">WSO2 e a quinta-feira agitada: muitos lançamentos</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/05/utilizando-o-array-type-do-wso2-data-services-server-2-5-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando o WSO2 Web Services Framework for PHP (2.0.0)</title>
		<link>http://www.mcorp.com.br/2010/04/instalando-o-wso2-web-services-framework-for-php-2-0-0/</link>
		<comments>http://www.mcorp.com.br/2010/04/instalando-o-wso2-web-services-framework-for-php-2-0-0/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 00:47:45 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[cmm]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[libxml2]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nusoap]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[pecl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[wsf]]></category>
		<category><![CDATA[wso2]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=372</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-378" title="WSO2 Web Services Framework for PHP" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wsf-php.gif" alt="" width="249" height="23" />Como eu disse anteriormente, em <a href="http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/" target="_blank">Consumindo um serviço seguro utilizando PHP</a>, 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: <a href="http://wso2.org/downloads/wsf/php" target="_blank">WSO2 Web Services Framework <em>for PHP</em></a>.</p>
<p>Na página de <a href="http://wso2.org/downloads/wsf/php" target="_blank">downloads do WSO2 Web Services Framework <em>for PHP</em></a>, é 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.</p>
<h2>Binary Distribution</h2>
<p>É 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 <em>php.ini</em>. 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).</p>
<h2>PECL Distribution</h2>
<p>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 <a href="http://wso2.org/forum/thread/9553" target="_blank">fórum</a> se alguém poderia me ajudar a solucionar, mas desisti. Parti para a maneira "clássica", o famoso <a href="/glossario/#CMM">CMM</a>, que descrevo abaixo.</p>
<h2>Source Distribution</h2>
<p>Essa versão é o <a href="https://wso2.org/repos/wso2/trunk/wsf/php/" target="_blank">código-fonte do WSO2 Web Services Framework <em>for PHP</em></a> (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: <em>./configure</em>, <em>make &amp;&amp; make install</em>.</p>
<p>Mas, chega de papo, vamos por a mão na "massa".</p>
<h3>Instalando as dependências</h3>
<p>As dependências para funcionamento do framework, não são muitas:</p>
<ul>
<li><a href="http://wso2.org/downloads/wsf/c" target="_blank">WSO2 Web Services Framework <em>for C</em></a></li>
<li>PHP 5.1.1 ou superior</li>
<li>Bibliotecas libxml2 e OpenSSL</li>
</ul>
<h3>WSO2 Web Services Framework <em>for C</em></h3>
<p>Para quem tá acostumado, são os velhos conhecidos, bastando baixar a última versão (no meu caso a 2.0.0):</p>
<pre class="brush: shell">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</pre>
<h3>PHP 5.1.1 ou superior</h3>
<p>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: <a href="http://www.google.com.br/#hl=pt-BR&amp;source=hp&amp;q=instala%C3%A7%C3%A3o+do+php+no+ubuntu&amp;btnG=Pesquisa+Google&amp;meta=&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=instala%C3%A7%C3%A3o+do+php+no+ubuntu&amp;gs_rfai=&amp;fp=fbe0f18c81cbb156" target="_blank">instalação do php no ubuntu</a>).</p>
<h3>Bibliotecas libxml2 e OpenSSL</h3>
<p>O comando para instalar as dependências é:</p>
<pre class="brush: shell">sudo apt-get install libxml2 openssl</pre>
<p>E com todas as dependências já instaladas e funcionando, podemos utilizar um <em>phpinfo()</em>; para conferir:</p>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/config-php-libxml2-openssl.png" rel="lightbox[372]"><img class="alignnone size-medium wp-image-376" title="config-php-libxml2-openssl" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/config-php-libxml2-openssl-300x187.png" alt="" width="300" height="187" /></a></p>
<h3>Compilação do WSF/PHP</h3>
<h4>CMM</h4>
<p>E agora, a instalação propriamente dita, utilizando novamente os pacotes da versão 2.0.0:</p>
<pre class="brush: shell">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</pre>
<h4>1, 2, 3, testando...</h4>
<p>Estamos quase chegando lá...</p>
<p>Vamos copiar dois arquivos do diretório <em>samples</em> (um cliente e um servidor) para o diretório do servidor web (no meu caso: <em>/var/www/samples</em>) e ver se tudo funcionou:</p>
<pre class="brush: shell">sudo mkdir -p /var/www/samples/
sudo cp samples/math_* /var/www/samples/.</pre>
<p>Indo ao navegador, basta abrir o endereço <a href="http://localhost/samples/math_client.php" target="_blank">http://localhost/samples/math_client.php</a> e conferir tudo funcionando:</p>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wsf-php-sample-math.png" rel="lightbox[372]"><img class="size-medium wp-image-386" title="WSO2 Web Services Framework for PHP: sample math running" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wsf-php-sample-math-300x176.png" alt="" width="300" height="176" /></a></p>
<h3>Conclusão</h3>
<p>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 <a href="http://www.php.net/soap" target="_blank">SOAP</a> (nativa do PHP) <a href="http://nusoap.sourceforge.net/" target="_blank">NuSOAP</a>.</p>
<p>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.</p>
<p>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.</p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/" title="Consumindo um serviço seguro utilizando PHP">Consumindo um serviço seguro utilizando PHP</a></li><li><a href="http://www.mcorp.com.br/2010/06/compilando-o-wso2-carbon-3-0-0-e-corrigindo-o-wso2-data-services-server-2-5-0/" title="Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0">Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0</a></li><li><a href="http://www.mcorp.com.br/2009/12/instalando-wso2-enterprise-service-bus-eclipse-tools-no-ubuntu-karmic-koala-9-10/" title="Instalando WSO2 Enterprise Service Bus Eclipse Tools no Ubuntu Karmic Koala (9.10)">Instalando WSO2 Enterprise Service Bus Eclipse Tools no Ubuntu Karmic Koala (9.10)</a></li><li><a href="http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/" title="Lançamento do WSO2 Stratos (alpha)">Lançamento do WSO2 Stratos (alpha)</a></li><li><a href="http://www.mcorp.com.br/2010/05/utilizando-o-array-type-do-wso2-data-services-server-2-5-x/" title="Utilizando o Array Type do WSO2 Data Services Server 2.5.x">Utilizando o Array Type do WSO2 Data Services Server 2.5.x</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/04/instalando-o-wso2-web-services-framework-for-php-2-0-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WSO2 Enterprise Service Bus &#8211; Manipulando erros em Endpoints</title>
		<link>http://www.mcorp.com.br/2010/04/wso2-enterprise-service-bus-manipulando-erros-em-endpoints/</link>
		<comments>http://www.mcorp.com.br/2010/04/wso2-enterprise-service-bus-manipulando-erros-em-endpoints/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 14:54:27 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[endpoint]]></category>
		<category><![CDATA[enterprise service bus]]></category>
		<category><![CDATA[erro]]></category>
		<category><![CDATA[esb]]></category>
		<category><![CDATA[fail-over]]></category>
		<category><![CDATA[falha]]></category>
		<category><![CDATA[manipulação]]></category>
		<category><![CDATA[wso2]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=283</guid>
		<description><![CDATA[A manipulação de erros em endpoints é uma situação crítica e importante em qualquer publicação da WSO2 Enterprise Service Bus. Neste artigo, Supun Kamburugamuva descreveu como manipular os erros no nível de endpoint. Nota de tradução: O artigo original foi escrito em inglês e pode ser lido em: WSO2 Enterprise Service Bus - Endpoint Error [...]]]></description>
			<content:encoded><![CDATA[<p>A manipulação de erros em <em>endpoints</em> é uma situação crítica e importante em qualquer publicação da <a href="http://wso2.org/projects/esb/java">WSO2 Enterprise Service Bus</a>. Neste artigo, <a href="http://wso2.com/about/engineers/supun-kamburugamuva/" target="_blank">Supun Kamburugamuva</a> descreveu como manipular os erros no nível de <em>endpoint</em>.</p>
<p><strong>Nota de tradução:</strong> O artigo original foi escrito em inglês e pode ser lido em: <a href="http://wso2.org/library/articles/wso2-enterprise-service-bus-endpoint-error-handling" target="_blank">WSO2 Enterprise Service Bus - Endpoint Error Handling </a></p>
<h2>WSO2 Enterprise Service Bus - Manipulando erros em <em>endpoints</em></h2>
<h3>Conteúdo</h3>
<ul>
<li><a href="#ManipulandoErrosEndpoint_Terminologia">Terminologia</a></li>
<li><a href="#ManipulandoErrosEndpoint_Introducao">Introdução</a></li>
<li><a href="#ManipulandoErrosEndpoint_Importante">Qual a importância da manipulação de erros?</a></li>
<li><a href="#ManipulandoErrosEndpoint_Conceitos">Conceitos</a></li>
<li> <a href="#ManipulandoErrosEndpoint_SituacoesEndpoint">Situações de <em>endpoint</em></a>
<ul>
<li><a href="#ManipulandoErrosEndpoint_SituacoesEndpointActive"><em>Active</em></a></li>
<li><a href="#ManipulandoErrosEndpoint_SituacoesEndpointTimeout"><em>Timeout</em></a></li>
<li><a href="#ManipulandoErrosEndpoint_SituacoesEndpointSuspended"><em>Suspended</em></a></li>
</ul>
</li>
<li> <a href="#ManipulandoErrosEndpoint_ConfiguracaoEndpoint">Configurações do <em>Leaf endpoint</em></a>
<ul>
<li><a href="#ManipulandoErrosEndpoint_ConfiguracaoEndpointExemplo">Exemplo de configuração</a></li>
</ul>
</li>
<li> <a href="#ManipulandoErrosEndpoint_FailOverEndpoint"><em>Fail-Over Endpoint</em></a>
<ul>
<li><a href="#ManipulandoErrosEndpoint_FailOverEndpointExemplo">Exemplo de configuração</a></li>
</ul>
</li>
<li><a href="#ManipulandoErrosEndpoint_Conclusao">Conclusão</a></li>
<li><a href="#ManipulandoErrosEndpoint_ApendiceA">Apêndice A</a></li>
</ul>
<h3><a name="ManipulandoErrosEndpoint_Terminologia">Terminologia</a></h3>
<p><em>Service Provider endpoint</em>: WSO2 Enterprise Service Bus atua como uma central de distribuição, entregando as mensagens recebidas dos clientes aos <em>service provider endpoints</em>.</p>
<p><em>WSO2 Enterprise Service Bus Endpoint</em>: Esta é a representação do <em>service provider endpoint</em>, omitida internamente na configuração do WSO2 Enterprise Service Bus.</p>
<h3><a name="ManipulandoErrosEndpoint_Introducao">Introdução</a></h3>
<p>Corporações são complexamente estruturadas e compostas por centenas de aplicações com semânticas completamente diferentes. Algumas dessas aplicações são desenvolvidas personalizadamente, algumas são adquiridas de terceiros e outras podem ser a combinação de ambas; e podem ser operadas em diferentes ambientes e sistemas. Muitas aplicações rodam em diferentes sistemas, o que faz isso ser muito complexo. E devido a esses fatores, isto é vital a integração entre as diferentes aplicações.</p>
<p>O WSO2 Enterprise Service Bus tem a capacidade de prover a tecnologia para integrar essas aplicações, as quais podem ser definidas como o estado da arte para <a href="http://pt.wikipedia.org/wiki/EAI" target="_blank">EAI</a>, baseadas nos princípios do <a href="/glossario/#SOA">SOA</a>. Com a WSO2 Enterprise Service Bus, o processo completo pode ser alcançado pela realização de várias tarefas na mensagem - transformação (<em>transformation</em>), roteamento (<em>routing</em>) e troca de transporte (<em>transport switching</em>) - antes do envio ao <em>service provider</em>.</p>
<p>A configuração no WSO2 Enterprise Service Bus é feita em etapas, são elas:</p>
<ul>
<li><em>Mediators</em></li>
<li><em>Proxy services</em></li>
<li><em>Endpoints</em></li>
<li><em>Tasks</em></li>
</ul>
<p>Os<em> Mediators</em> são componentes funcionais dentro do WSO2 Enterprise Service Bus, eles fazem várias coisas como gravação de log (<em>logging</em>), transformação (<em>XSLT transformation</em>), envia mensagens externas, filtros baseados em <em>XPath</em>, etc. Então os <em>mediators</em> são o núcleo da mensagem processada dentro do WSO2 Enterprise Service Bus. A última etapa da mensagem dentro do WSO2 Enterprise Service Bus é o envio da mensagem de resposta para um <em>services provider</em>. Quanto ao WSO2 Enterprise Service Bus é responsável pelo envio da mensagem para um serviço de escuta de <em>endpoint</em>. As mensagens enviadas do WSO2 Enterprise Service Bus podem ser muito diferentes da mensagem recebida. Por exemplo, as mensagens recebidas podem ser <em>SOAP 1.1 over HTTP</em>. Mas WSO2 Enterprise Service Bus pode enviar a mensagem para o serviço como <em>SOAP 1.2 over JMS</em>. Neste caso o <em>endpoint</em> exposto para o cliente é <em>SOAP 1.1 over HTTP</em>, o atual <em>endpoint</em> é <em>SOAP 1.2 over JMS</em>.</p>
<p>Um Endpoint é uma abstração do <em>services provider</em>. Uma vez que a mensagem é enviada usando um Mediator, ele deve saber qual é o <em>endpoint services provider</em>. O Endpoint é capaz de prover essa informação. No cenário ideal o serviço de endpoint aceita requisições de mesmo tipo, WSO2 ESB pode ser usado para balanceamento de carga (Load Balancer). A principal razão por trás disso tudo é que esses endpoints tem mesmas funcionalidades e é natural vê-las como uma coisa só.</p>
<p>WSO2 Enterprise Service Bus tem o conceito de construção de endpoints para representar <em>endpoint services provider</em>. Seguindo os Endpoints construídos sobre o WSO2 Enterprise Service Bus.</p>
<ol>
<li>Address Endpoint</li>
<li>WSDL Endpoint</li>
<li>Default Endpoint</li>
<li>Load Balancing Endpoint</li>
<li>Fail-Over Endpoint</li>
</ol>
<p>Dos itens mencionados acima, os mais utilizados são o Address e o WSDL Endpoints. Cada Endpoint tem seu próprio XML de configuração, escrito na linguagem Synapse. Synapse é uma linguagem XML usada para configurar a Enterprise Service Bus.</p>
<p>Até o Endpoint enviar a mensagem de resposta, pode encontrar vários erros de transporte. Por exemplo, a conexão pode dar timeout ou pode ser fechada pelo serviço atual.</p>
<h3><a name="ManipulandoErrosEndpoint_Importante">Qual a importância da manipulação de erros?</a></h3>
<p>WSO2 Enterprise Service Bus é uma aplicação de longa duração e nesse tempo falhas podem ocorrer. Retiring on transient failures enhances the fault tolerance of a system. Para a WSO2 Enterprise Service Bus, essas falhas podem ser falha de conexão entre o <em>services provider</em> e a WSO2 Enterprise Service bus, erro em alguma operação do banco de dados e assim por diante, sendo que as falhas de comunicação são mais frequentes.</p>
<p>Então a manipulação de erros é a chave para o sucesso de qualquer publicação na Enterprise Service Bus. Muitas vezes nós utilizamos TCP, as pessoas podem perguntar, como podem ocorrem erros? O protocolo TCP é muito confiável, não é? Mas não na vida real. Mensagens pode falhar ou se perder devido a diversas razões na rede TCP. Esses erros são muito raros, mas podem ocorrer. Para entender a importância da manipulação de erros vamos considerar o seguinte cenário.</p>
<p>Se a WSO2 Enterprise Service Bus não estiver devidamente configurada para aceitar erros, ocasionalmente, quando eles ocorrerem, o Endpoint será marcado com uma falha. Isto leva para uma mensagem de falha. Por padrão, o Endpoint será marcado como falho por um longo tempo. Os erros encontrados na WSO2 Enterprise Service Bus podem ser um problema intermitente que ocorrem uma vez por semana, mas devido a singularidade do erro, mensagens posteriores poderão ser perdidas. Claro que você pode configurar a WSO2 Enterprise Service Bus para manipular estas situações e este artigo dará a você uma maior compreensão sobre como trabalhar com Endpoints e otimizar as suas configurações.</p>
<h3><a name="ManipulandoErrosEndpoint_Conceitos">Conceitos</a></h3>
<p>Nós chamamos Address, Default and WSDL Endpoints como Leaf Endpoints, que enviam a mensagem. A Load Balance ou Fail-Over Endpoints usa um ou vários Leaf Endpoints para enviar a mensagem. Então um Load Balance ou Fail-Over Endpoint é um agrupamento lógico de Leaf Endpoints. Um Load Balance ou Fail-Over Endpoint nunca envia uma mensagem diretamente, ao invés de enviar ela delega aos Leaf Endpoints, dependendo da configuração e da situação (status).</p>
<p>Endpoint é uma abstração do servidor remoto, onde o WSO2 Enterprise Service Bus envia a mensagem de saída. Ela pode especificar quais as propriedades usadas para enviar a mensagem, por exemplo, pode especificar o formato - como SOAP 1.1 - ou pode especificar a necessidade de utilizar uma política de segurança com WS Security para responder a mensagem.</p>
<p>WSO2 Enterprise Service Bus Endpoint tem configurações para especificar o comportamento diante de erros, que podem ocorrer entre a WSO2 Enterprise Service Bus e o atual Endpoint.</p>
<p>Um Endpoint tem uma situação, mas antes vamos para as configurações de Endpoint para vermos como as transições acontecem.</p>
<h3><a name="ManipulandoErrosEndpoint_SituacoesEndpoint">Situações do Endpoint</a></h3>
<p>Em alguns momentos a situação do Endpoint pode ser Active, Timeout, Suspended ou Off. A situação de transição do Endpoint normalmente acontece na base de mensagens. E para colocarmos uma situação de Off num Endpoint (utilizando para issoJMX), então esta situação não é a Situação do Diagrama de Transição. Vamos analisar as diferentes situações do endpoint em detalhes:</p>
<ul>
<li>Active: O endpoint está ativo e funcionando.</li>
<li>Timeout: Foram encontrados erros no endpoint, que passa a ser um candidato a ser suspenso, mas pode continuar enviando mensagens. Se os erros persisterem o endpoint será suspenso.</li>
<li>Suspended: Foram encontrados erros no endpoint e é enviado para a situação onde não pode enviar requisições. Ele não pode enviar mensagens e mensagens recebidas por ele resultarão em falhas.</li>
<li>Off: O endpoint não está ativo.</li>
</ul>
<div id="attachment_360" class="wp-caption alignnone" style="width: 516px"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/state_2.png" rel="lightbox[283]"><img class="size-full wp-image-360 " title="state_2" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/state_2.png" alt="" width="506" height="266" /></a><p class="wp-caption-text">Toda situação de transição acontece na mensagem. Por exemplo, se a duração da suspensão é expirada, na situação Suspended, o endpoint continuará na situação Suspensed até que uma nova mensagem chegue e seja bem sucedida.</p></div>
<p>Toda situação de transição acontece na mensagem. Por exemplo, se a duração da suspensão é expirada, na situação Suspended, o endpoint continuará na situação Suspensed até que uma nova mensagem chegue e seja bem sucedida.</p>
<h4><a name="ManipulandoErrosEndpoint_SituacoesEndpointActive">Active</a></h4>
<p>Quando o WSO2 Enterprise Service Bus inicializa, os endpoints estão ativos (na situação Active) e prontos para enviar mensagens. Se o usuário não desligar os endpoints (situação Off), será Active até que ocorra um erro.</p>
<p>Quando ocorrer um erro, o Endpoint poderá ser configurado como: Active, Timeout ou Suspended. Todo erro tem um código. As configurações de Endpoint possibilitam que você defina os erros que colocarão o Endpoint nos modos Timeout e Suspension. Se um erro não foi definido como Timeout ou Suspended, será ignorado.</p>
<p>Os erros são manipulados de três formas:</p>
<ul>
<li>Endpoint na situação SUSPENDED</li>
<li>Endpoint na situação TIMEOUT</li>
<li>Ignorado e mantido no ACTIVE</li>
</ul>
<p>Se um erro específico não possui um <em>timeout</em> configurado, então a conexão será fechada e o erro será tratado como TIMEOUT. Todos os outros erros terão o Endpoint colocado como SUSPENDED.</p>
<p>Quando um erro ocorrer no Endpoint, será visto primeiramente se ele é um erro para colocar na situação TIMEOUT. Caso contrário, será verificado se é para colocar na situação SUSPENDED.</p>
<h4><a name="ManipulandoErrosEndpoint_SituacoesEndpointTimeout">Timeout</a></h4>
<p>Nesta situação o Endpoint pode ter na mensagem encaminhada um número máximo de tentativas. Se as falhas persistirem e o número máximo for excedido, o Endpoint será marcado como SUSPENDED. Mas se alguma mensagem for processada o Endpoint será marcado como ACTIVE.</p>
<p>Por exemplo, vamos dizer que o número de tentativas é 3 para esta situção. Se as próximas três mensagens são enviadas usando este Endpoint, e encontramos um erro, o endpoint é colocado como SUSPENDED. Mas se alguma das mensagens anteriores for bem sucedida neste Endpoint, que estava SUSPENDED, ele então será colocado como ACTIVE.</p>
<h4><a name="ManipulandoErrosEndpoint_SituacoesEndpointSuspended">Suspended</a></h4>
<p>Um endpoint suspended não pode ser usado para enviar mensagens. Depois que o endpoint é colocado nesta situação, pode ser tentado novamente após o tempo configurado. Depois deste de passado o tempo de expiração, o WSO2 Enterprise Service Bus tentará encaminhar as mensagens deste endpoint. Se a mensagem for bem-sucedida, então o WSO2 Enterprise Service Bus marcará este endpoint como ACTIVE. Se a próxima mensagem falhar, o endpoint será colocado como SUSPENDED ou TIMEOUT dependendo do erro que ocorrer.</p>
<p>O próximo período é calculado usando a seguinte fórmula:</p>
<p>Next suspension time period = Max (Initial Suspension duration * (progression factor <sup>try count</sup>), Maximum Duration)</p>
<p>Todas as variáveis da fórmula acima são valores configurados usados para calcular o número de tentativas (contabilizadas após o endpoint ser marcado SUSPENDED). Com a incrementação do número de tentativas (try count), o próximo período de suspensão (next suspension time period) também será incrementado. O incremento é vinculado a máxima duração (maximum duration).</p>
<h3><a name="ManipulandoErrosEndpoint_ConfiguracaoEndpoint">Configurações do Leaf Endpoint</a></h3>
<p>Esta é a configuração do endereço do endpoint. Uma vez que estamos interessados apenas nas configurações de erros, as mesmas também podem ser aplicadas aos WSDL Endpoints. As configurações de maninpulação de erros são:</p>
<ol>
<li>timeout</li>
<li>markForSuspension</li>
<li>suspendOnFailure</li>
</ol>
<p>Vamos ver as configurações individualmente.</p>
<pre class="brush: xml">
&lt;address uri=&quot;endpoint address&quot; [format=&quot;soap11|soap12|pox|get&quot;]
[optimize=&quot;mtom|swa&quot;] [encoding=&quot;charset encoding&quot;]
[statistics=&quot;enable|disable&quot;] [trace=&quot;enable|disable&quot;]&gt;
&lt;enableRM [policy=&quot;key&quot;]/&gt;?
&lt;enableSec [policy=&quot;key&quot;]/&gt;?
&lt;enableAddressing [version=&quot;final|submission&quot;] [separateListener=&quot;true|false&quot;]/&gt;?

&lt;timeout&gt;
&lt;duration&gt;timeout duration in seconds&lt;/duration&gt;
&lt;action&gt;discard|fault&lt;/action&gt;
&lt;/timeout&gt;?

&lt;markForSuspension&gt;
[&lt;errorCodes&gt;xxx,yyy&lt;/errorCodes&gt;]
&lt;retriesBeforeSuspension&gt;m&lt;/retriesBeforeSuspension&gt;
&lt;retryDelay&gt;d&lt;/retryDelay&gt;
&lt;/markForSuspension&gt;

&lt;suspendOnFailure&gt;
[&lt;errorCodes&gt;xxx,yyy&lt;/errorCodes&gt;]
&lt;initialDuration&gt;n&lt;/initialDuration&gt;
&lt;progressionFactor&gt;r&lt;/progressionFactor&gt;
&lt;maximumDuration&gt;l&lt;/maximumDuration&gt;
&lt;/suspendOnFailure&gt;
&lt;/address&gt;
</pre>
<h4>Timeout</h4>
<table>
<thead>
<td>Nome</td>
<td>Valores</td>
<td>Default</td>
<td>Descrição</td>
</thead>
<tbody>
<tr>
<td>duration</td>
<td>miliseconds</td>
<td>60000</td>
<td>Tempo máximo de conexão. Se o endpoint remoto não responder neste tempo, ele será tratado como timeout</td>
</tr>
<tr>
<td>action</td>
<td>discard, fault, none</td>
<td>none</td>
<td>Tempo para descartar, invocará uma exceção (fault handler) ou responderá como tempo de execução excedido</td>
</tr>
</tbody>
</table>
<h4>markForSuspension</h4>
<table>
<thead>
<td>Nome</td>
<td>Valores</td>
<td>Padrão</td>
<td>Descrição</td>
</thead>
<tbody>
<tr>
<td>errorCodes</td>
<td>Códigos de erro separados por vírgula</td>
<td>101504, 101505</td>
<td>Lista de erros que envia o endpoint na situação "TIMEOUT retriesBeforeSuspension"</td>
</tr>
<tr>
<td>retriesBeforeSuspension</td>
<td>Integer</td>
<td>0</td>
<td>Na situação TIMEOUT o número de tentativas é igual ao número de requisições menos um e pode falhar antes do endpoint ser marcado como "SUSPENDED retryDelay". Esta configuração é por Endpoint e não por mensagem. Muitas mensagens podem ser tentadas ao mesmo tempo e falhar, com isso o número de tentativas restantes será reduzido.</td>
</tr>
<tr>
<td>retryDelay</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h4>suspendOnFailure</h4>
<table>
<thead>
<td>Nome</td>
<td>Valores</td>
<td>Padrão</td>
<td>Descrição</td>
</thead>
<tbody>
<tr>
<td>errorCodes</td>
<td>Códigos de erro separados por vírgula</td>
<td>Todos os erros, exceto os especificados em markForSuspension</td>
<td>Erros que enviam o endpoint para a situação SUSPENDED</td>
</tr>
<tr>
<td>initialDuration</td>
<td>miliseconds</td>
<td>60 x 60 x 1000</td>
<td>Depois que um endpoint fica SUSPENDED, esperará por essa quantidade de tempo antes de tentar enviar a mensagem. Todas as mensagens que forem recebidas durante este período resultarão na ativação de <em>fault sequence</em>.</td>
</tr>
<tr>
<td>progressionFactor</td>
<td>Integer</td>
<td>1</td>
<td>O endpoint tentará enviar as mensagens depois da <em>initialDuration</em>. Utilizando a fórmula: next duration = Max(initialDuration x progressionFactor ^ retry count, maximumDuration)</td>
</tr>
<tr>
<td>maximunDuration</td>
<td>miliseconds</td>
<td>Long.MAX_VALUE</td>
<td>Limite superior da duração de tentativas</td>
</tr>
</tbody>
</table>
<h4><a name="ManipulandoErrosEndpoint_ConfiguracaoEndpointExemplo">Exemplo de configuração</a></h4>
<pre class="brush: xml">
&lt;endpoint name=&quot;Sample_First&quot; statistics=&quot;enable&quot; &gt;
&lt;address uri=&quot;http://localhost/myendpoint&quot; statistics=&quot;enable&quot; trace=&quot;disable&quot;&gt;
&lt;timeout&gt;
&lt;duration&gt;60000&lt;/duration&gt;
&lt;/timeout&gt;

&lt;markForSuspension&gt;
&lt;errorCodes&gt;101504, 101505&lt;/errorCodes&gt;
&lt;retriesBeforeSuspension&gt;3&lt;/retriesBeforeSuspension&gt;
&lt;retryDelay&gt;1&lt;/retryDelay&gt;
&lt;/markForSuspension&gt;

&lt;suspendOnFailure&gt;
&lt;errorCodes&gt;101500, 101501, 101506, 101507, 101508&lt;/errorCodes&gt;
&lt;initialDuration&gt;1000&lt;/initialDuration&gt;
&lt;progressionFactor&gt;2&lt;/progressionFactor&gt;
&lt;maximumDuration&gt;64000&lt;/maximumDuration&gt;
&lt;/suspendOnFailure&gt;
&lt;/address&gt;
&lt;/endpoint&gt;
</pre>
<p>Aqui nós mudamos a situação TIMEOUT do endpoint para os erros 101504 e 101505. Depois desse processo, três requisições podem falhar por um ou desses erros antes de alterar a situação do endpoint para SUSPENDED.</p>
<p>Nós colocamos o endpoint em suspensão para os erros 101500, 101501, 101506, 101507 e 101508. Mas como você pode ver, nós ignoramos o erro 101503. Se o erro 101503 ocorrer, o endpoint será marcado como ACTIVE.</p>
<p>Para mais informações sobre códigos de erro, ver <a href="#ManipulandoErrosEndpoint_ApendiceA">APÊNDICE A</a>.</p>
<h3><a name="ManipulandoErrosEndpoint_FailOverEndpoint">Fail-Over Endpoint</a></h3>
<p>Com essa configuração, se ocorrer um erro durante o processo de transmissão da mensagem, a mesma será perdida. A mensagem que falhou não terá uma nova tentativa de envio. Esses erros ocorrem raramente, mas falhas em mensagens ainda podem ocorrer. Em algumas aplicações essas falhas nas mensagens perdidas são aceitáveis, mas algumas vezes essas falhas não são aceitáveis e o Fail-Over endpoint é a solução ideal.</p>
<p>Abaixo uma configuração para fail-over endpoints. No nível de configuração, um fail-over é um agrupamento lógico de um ou mais endpoints.</p>
<pre class="brush: xml">
&lt;failover&gt;
&lt;endpoint .../&gt;+
&lt;/failover&gt;
</pre>
<p>Quando uma mensagem chega a situação Fail-Over, será atráves da lista de fail-over endpoints que escolherá a primeira situação entre ACTIVE ou TIMEOUT. Então será enviada a mensagem usando esse endpoint. Se ocorrer um erro enquanto a mensagem é enviada, o fail-over, através da lista de endpoints, irá começar novamente e tentará enviar a mensagem usando o primeiro endpoint.</p>
<p>Alguns erros colocam o endpoint na situação TIMEOUT e outros deixam o endpoint com a situação ACTIVE. Nesses casos as tentativas acontecem usando o mesmo endpoint. Se ocorrer um erro com o primeiro endpoint do grupo fail-over e esse erro não colocar o endpoint como SUSPENDED, as próximas tentativas ocorrerão usando o mesmo endpoint.</p>
<p>O fail-over dá a prioridade para o primeiro endpoint que não esteja como SUSPENDED. Então será enviada a mensagem através do primeiro endpoint do grupo fail-over, enquanto não for marcado como SUSPENDED. Quando o primeiro endpoint é marcado como SUSPENDED as requisições serão enviadas usando o segundo endpoint. Quando o primeiro endpoint estiver pronto para ser utilizado novamente, ele tentará de novo, mesmo que o segundo endpoint ainda esteja ativo.</p>
<p>Se houver apenas um serviço endpoint e falhas não são toleráveis, os fail-overs são possíveis com apenas um endpoint.</p>
<p>Abaixo um exemplo de fail-over com um endpoint.</p>
<h4><a name="ManipulandoErrosEndpoint_FailOverEndpointExemplo">Exemplo de configuração de Fail-Over Endpoint</a></h4>
<pre class="brush: xml">
&lt;endpoint name=&quot;SampleFailover&quot;&gt;
&lt;failover&gt;
&lt;endpoint name=&quot;Sample_First&quot; statistics=&quot;enable&quot; &gt;
&lt;address uri=&quot;http://localhost/myendpoint&quot; statistics=&quot;enable&quot; trace=&quot;disable&quot;&gt;
&lt;timeout&gt;
&lt;duration&gt;60000&lt;/duration&gt;
&lt;/timeout&gt;

&lt;markForSuspension&gt;
&lt;errorCodes&gt;101504, 101505, 101500&lt;/errorCodes&gt;
&lt;retriesBeforeSuspension&gt;3&lt;/retriesBeforeSuspension&gt;
&lt;retryDelay&gt;1&lt;/retryDelay&gt;
&lt;/markForSuspension&gt;

&lt;suspendOnFailure&gt;
&lt;initialDuration&gt;1000&lt;/initialDuration&gt;
&lt;progressionFactor&gt;2&lt;/progressionFactor&gt;
&lt;maximumDuration&gt;64000&lt;/maximumDuration&gt;
&lt;/suspendOnFailure&gt;

&lt;/address&gt;
&lt;/endpoint&gt;
&lt;/failover&gt;
&lt;/endpoint&gt;
</pre>
<p>Nesse exemplo (Sample_First) o endpoint é marcado como TIMEOUT quando a conexão excede o tempo máximo de duração, a conexão é fechada ou envia erros de IO, respectivamente, os códigos de erro: 101504, 101505 e 101500. Para todos os outros erros, será marcado como SUSPENDED. Quando esse erro ocorrer, o fail-over tentará usando o primeiro endpoint que não estiver SUSPENDED, neste caso é o mesmo endpoint (Sample_First). O número de tentativas inicia com a configuração <em>retriesBeforeSuspension</em> e será reduzida a cada mensagem que falhar, até chegar ao zero. É importante notar que a configuração da contagem de tentativas não é por mensagem, mas sim por endpoint.</p>
<p>Nesta configuração nós assumimos que os erros são raros e quando acontecem, basta tentar novamente. Mas se ocorrem frequentemente e continuamente é necessário atenção imediata para que voltem para a situação normal.</p>
<h3><a name="ManipulandoErrosEndpoint_Conclusao">Conclusão</a></h3>
<p>A manipulação de erros é crucial para a publicação de endpoints. Os erros devem ser descobertos nos testes, é recomendado executar muitos testes de carga e melhorar a performance das configurações do endpoint preparando-o para os variados erros que podem ocorrer.</p>
<h3><a name="ManipulandoErrosEndpoint_ApendiceA">Apêndice A</a></h3>
<p>Códigos de erro</p>
<table>
<thead>
<td>Código</td>
<td>Descrição</td>
</thead>
<tbody>
<tr>
<td>101000</td>
<td>Receiver IO error sending</td>
</tr>
<tr>
<td>101001</td>
<td>Receiver IO error receiving</td>
</tr>
<tr>
<td>101500</td>
<td>Sender IO error sending</td>
</tr>
<tr>
<td>101501</td>
<td>Sender IO error receiving</td>
</tr>
<tr>
<td>101503</td>
<td>Connection failed</td>
</tr>
<tr>
<td>101504</td>
<td>Connection timed out</td>
</tr>
<tr>
<td>101505</td>
<td>Connection closed</td>
</tr>
<tr>
<td>101506</td>
<td>HTTP protocol violation</td>
</tr>
<tr>
<td>101507</td>
<td>Connect cancel</td>
</tr>
<tr>
<td>101508</td>
<td>Connect timeout</td>
</tr>
<tr>
<td>101509</td>
<td>Send abort</td>
</tr>
</tbody>
</table>
<h3>Autor</h3>
<p>Supun Kamburugamuva, Software Engineer, WSO2, supun@wso2.com</p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2009/11/novidades-nos-lancamentos-nov2009-da-plataforma-wso2/" title="Novidades nos lançamentos (nov/2009) da plataforma WSO2">Novidades nos lançamentos (nov/2009) da plataforma WSO2</a></li><li><a href="http://www.mcorp.com.br/2009/11/wso2-e-a-quinta-feira-agitada-muitos-lancamentos/" title="WSO2 e a quinta-feira agitada: muitos lançamentos">WSO2 e a quinta-feira agitada: muitos lançamentos</a></li><li><a href="http://www.mcorp.com.br/2009/10/wso2-enterprise-service-bus-esb-2-1-1-lancada/" title="WSO2 Enterprise Service Bus (ESB) 2.1.1 lançada">WSO2 Enterprise Service Bus (ESB) 2.1.1 lançada</a></li><li><a href="http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/" title="Lançamento do WSO2 Stratos (alpha)">Lançamento do WSO2 Stratos (alpha)</a></li><li><a href="http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/" title="Consumindo um serviço seguro utilizando PHP">Consumindo um serviço seguro utilizando PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/04/wso2-enterprise-service-bus-manipulando-erros-em-endpoints/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novidades do próximo WSO2 Data Services Server (2.5.x)</title>
		<link>http://www.mcorp.com.br/2010/04/novidades-do-proximo-wso2-data-services-server-2-5-x/</link>
		<comments>http://www.mcorp.com.br/2010/04/novidades-do-proximo-wso2-data-services-server-2-5-x/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 16:24:27 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[batch mode]]></category>
		<category><![CDATA[boxcarring]]></category>
		<category><![CDATA[data services]]></category>
		<category><![CDATA[eventing]]></category>
		<category><![CDATA[jmx]]></category>
		<category><![CDATA[lançamento]]></category>
		<category><![CDATA[wip services]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[wso2]]></category>
		<category><![CDATA[wso2 carbon]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=312</guid>
		<description><![CDATA[A versão RC2 do WSO2 Data Services Server 2.5.0 nos mostrou que está com novas opções e funcionalidades muito úteis, algumas que estavam até fazendo falta. Claro que a adoção do WSO2 Carbon 3.0, traz várias diferenças nos recursos e interface em toda a suíte. Mas vamos partir para o que interessa. Dashboard Carbon Data [...]]]></description>
			<content:encoded><![CDATA[<p>A versão RC2 do WSO2 Data Services Server 2.5.0 nos mostrou que está com novas opções e funcionalidades muito úteis, algumas que estavam até fazendo falta. Claro que a adoção do WSO2 Carbon 3.0, traz várias diferenças nos recursos e interface em toda a suíte. Mas vamos partir para o que interessa.</p>
<ul>
<li><a href="#Dashboard">Dashboard</a></li>
<li><a href="#CarbonDataSources">Carbon Data Sources</a></li>
<li><a href="#ArrayType">Array type</a></li>
<li><a href="#DefaultValuesInputMappings">Default values in input mappings</a></li>
<li><a href="#DataValidationLogic">Data Validation Logic</a></li>
<li><a href="#WIPServices">WIP services</a></li>
<li><a href="#ContractFrist">Contract first</a></li>
<li><a href="#BatchMode">Batch mode</a></li>
<li><a href="#Boxcarring">Boxcarring</a></li>
<li><a href="#Eventing">Eventing</a></li>
<li><a href="#BinaryData">Binary Input/Output data</a></li>
<li><a href="#JMX">JMX</a></li>
<li><a href="#QueryProperties">Query Properties</a></li>
<li><a href="#Conclusao">Conclusão</a></li>
</ul>
<h2><a name="Dashboard">Dashboard</a></h2>
<p>Com a atualização para o WSO2 Carbon 3.0, foi implantando um <em>Dashboard</em> que pode conter informações variadas. Essas informações podem ser personalizadas utilizando <em>gadgets</em>. Aliás, essa atualização pode ser notada em toda a suíte que utilizam o novo Carbon.</p>
<h2><a name="CarbonDataSources">Carbon Data Sources</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-CarbonDataSources-01.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-318" title="Gerenciando um Carbon Data Source (adicionando)" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-CarbonDataSources-01-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-CarbonDataSources-02.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-320" title="Configurando um serviço para utilizar um Carbon Data Source" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-CarbonDataSources-02-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Agora ficará muito mais fácil gerenciar conexões às várias base de dados. Com <em>Carbon Data Sources</em>, será possível apontar no <a href="/glossario/#DataServices" target="_blank">Data Service</a> qual <em>data source</em> utilizar, e cada ambiente (teste, desenvolvimento, homologação ou produção) terão suas próprias configurações, bastará manter o mesmo nome.</p>
<h2><a name="ArrayType">Array Type</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-ArrayType-01.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-326" title="Escolhendo o tipo Array para entrada" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-ArrayType-01-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-ArrayType-02.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-327" title="Escolhendo o tipo Scalar para entrada" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-ArrayType-02-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Poderemos ter entradas do tipo <em>array</em> ou <em>scalar</em>, onde essas entradas podem conter valores de diferentes tipos, como: <em>string</em>, <em>integer</em>, <em>real</em>, <em>double</em>, <em>numeric</em>, <em>tinyint</em>, <em>smallint</em>, <em>bigint</em>, <em>date</em>, <em>time</em>, <em>timestamp</em>, <em>bit</em>, <em>oracle ref cursor</em> ou <em>binary</em>.</p>
<h2><a name="DefaultValuesInputMappings">Default values in input mappings</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-DefaultValuesInputMappings.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-328" title="Escolhendo um valor padrão para a entrada" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-DefaultValuesInputMappings-150x150.png" alt="" width="150" height="150" /></a></p>
<p>No caso do tipo de entrada <em>scalar</em>, poderá ser indicado um valor padrão para a entrada.</p>
<h2><a name="DataValidationLogic">Data Validation Logic</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-DataValidationLogic-01.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-329" title="Validação de dados (da maioria) com mínimo e máximo" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-DataValidationLogic-01-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-DataValidationLogic-02.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-330" title="Validação de dados de entrada (personalizado)" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-DataValidationLogic-02-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Os dados de entrada poderão ser validados utlizando alguns validadores padrões:</p>
<ul>
<li><strong>Long Range</strong>: com mínimo e máximo de opção;</li>
<li><strong>Double Range</strong>: com mínimo e máximo de opção;</li>
<li><strong>Length</strong>: com mínimo e máximo de opção;</li>
<li><strong>Pattern</strong>: com pattern de opção;</li>
<li><strong>Custom</strong>: com a classe de opção.</li>
</ul>
<h2><a name="WIPServices">WIP Services</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wip_dbs.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-418" title="wip_dbs" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wip_dbs-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wip_service_list.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-419" title="WIP Service list" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wip_service_list-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Os serviços que ainda não estão finalizados, estão passando por correção ou qualquer outro motivo, poderão ser marcados como: "Work in progress". Isso evitará erros e os clientes não conseguirão consumir o serviço.</p>
<h2><a name="ContractFrist">Contract first</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wsdl_upload.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-416" title="WSDL Upload" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wsdl_upload-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/dummy_data_source.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-417" title="Dummy data source" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/dummy_data_source-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Com essa funcionalidade, criar <em>data services</em> poderá fica ainda mais simples. Basta adicionar um contrato (WSDL) com todas as definições e ele criará um <em>WIP Service</em> para você, sendo necessário apenas você configurar conexões e preencher as <em>queries</em>.</p>
<h2><a name="BatchMode">Batch mode</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-BatchMode-01.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-331" title="Habilitando o Batch Mode num serviço" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-BatchMode-01-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-BatchMode-02.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-332" title="Métodos criados automaticamente" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-BatchMode-02-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Um recurso bastante interessante implementado é o <em>Batch Mode</em>, esse recurso implementa automaticamente, em todos os métodos que realizam alguma função de escrita no banco de dados (<em>INSERT</em>, <em>DELETE</em> e <em>UPDATE</em>), o recurso de invocar uma única vez o serviço, mas realizando operações em vários objetos de uma única vez, como - por exemplo - um inserir uma listagem de pessoas.</p>
<h2><a name="Boxcarring">Boxcarring</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-Boxcarring-01.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-335" title="Habilitando o boxcarring num serviço" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-Boxcarring-01-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-Boxcarring-02.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-336" title="Boxcarring e os métodos que são criados automaticamente" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-Boxcarring-02-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Implementação importante para essa nova versão, <em>boxcarring</em> nada mais é que o suporte a transações nos serviços, pelas informações coletadas, essa transação pode ser de dois tipos: <em>SOAP</em> ou <em>Transport</em>.</p>
<h2><a name="Eventing">Eventing</a></h2>
<p>Será um recurso que dará a opção de implementarmos eventos em cima de determinadas operações, funciona basicamente como uma <em>trigger</em> de banco de dados.</p>
<h2><a name="BinaryData">Binary Input/Output Data</a></h2>
<p>Será possível utilizar dados binários (tipo Base64) tanto para enviar, quanto para receber.</p>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/binary-input-mapping.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-422" title="binary input mapping" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/binary-input-mapping-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/binary-output-mapping.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-423" title="binary output mapping" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/binary-output-mapping-150x150.png" alt="" width="150" height="150" /></a></p>
<h2><a name="JMX">JMX</a></h2>
<p>O WSO2 Data Services Server proverá informações dos serviços publicados, utilizando Java Management Extensions (JMX).</p>
<h2><a name="QueryProperties">Query Properties</a></h2>
<p style="text-align: center;"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-QueryProperties-01.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-339" title="Query Properties: clicando no &quot;+&quot; você exibe as opções" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-QueryProperties-01-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-QueryProperties-02.png" rel="lightbox[312]"><img class="alignnone size-thumbnail wp-image-340" title="Query Properties: As opções expandidas" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2ds-2.5.0-r2-QueryProperties-02-150x150.png" alt="" width="150" height="150" /></a></p>
<p>As <em>queries</em> podem ter algumas propriedades específicas na execução, ajudando na questão de performance e limitações.</p>
<h2><a name="Conclusao">Conclusão</a></h2>
<p>Essas novas versões que estão para sair, da suíte WSO2 Carbon (3.0) e WSO2 Data Services Server (2.5.0), evoluíram bastante comparativamente as suas sucessoras. E o que é bem importante, não foi necessária nenhuma alteração para os serviços que rodam na versão 2.2.1 do WSO2 Data Services Server funcionarem nessa <em>release</em>, diferentemente da atualização da versão 2.0.x para a 2.2.x.</p>
<p>Os tópicos que não documentei ainda, provavelmente consiga documentar nas próximas <em>releases</em>, ou quando achar aonde estão esses recursos, a não ser que as alterações sejam internas e não fiquem visuais pra nós. Caso queira ajudar a encontrar e documentar todas as alterações, pode acessar o <a href="http://builder.wso2.org/~carbon/releases/carbon/3.0.0/" target="_blank">repositório</a> com os <em>builders</em> (com gerações quase que diárias).</p>
<p>Minha ideia é também exemplificar como utilizar cada uma delas futuramente, para que não fique dúvidas de como utilizar esses novos recursos. Então, fique ligado nas atualizações pelo <em>feed</em>.</p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2009/11/novidades-nos-lancamentos-nov2009-da-plataforma-wso2/" title="Novidades nos lançamentos (nov/2009) da plataforma WSO2">Novidades nos lançamentos (nov/2009) da plataforma WSO2</a></li><li><a href="http://www.mcorp.com.br/2010/06/compilando-o-wso2-carbon-3-0-0-e-corrigindo-o-wso2-data-services-server-2-5-0/" title="Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0">Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0</a></li><li><a href="http://www.mcorp.com.br/2010/05/utilizando-o-array-type-do-wso2-data-services-server-2-5-x/" title="Utilizando o Array Type do WSO2 Data Services Server 2.5.x">Utilizando o Array Type do WSO2 Data Services Server 2.5.x</a></li><li><a href="http://www.mcorp.com.br/2009/11/wso2-e-a-quinta-feira-agitada-muitos-lancamentos/" title="WSO2 e a quinta-feira agitada: muitos lançamentos">WSO2 e a quinta-feira agitada: muitos lançamentos</a></li><li><a href="http://www.mcorp.com.br/2010/04/wso2-business-activity-monitoring-sql-server/" title="WSO2 Business Activity Monitoring + SQL Server">WSO2 Business Activity Monitoring + SQL Server</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/04/novidades-do-proximo-wso2-data-services-server-2-5-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WSO2 Business Activity Monitoring + SQL Server</title>
		<link>http://www.mcorp.com.br/2010/04/wso2-business-activity-monitoring-sql-server/</link>
		<comments>http://www.mcorp.com.br/2010/04/wso2-business-activity-monitoring-sql-server/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 18:44:57 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[bam]]></category>
		<category><![CDATA[business activity monitoring]]></category>
		<category><![CDATA[business process]]></category>
		<category><![CDATA[data services]]></category>
		<category><![CDATA[governance registry]]></category>
		<category><![CDATA[h2]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[registry]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[wso2]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=265</guid>
		<description><![CDATA[A pedidos do "chefe", realizei o download e a instalação do WSO2 Business Activity Monitoring (versão 1.0.1) e parti para os testes. Mas como migramos toda a suíte para rodar sobre o SQL Server, configurei tudo para apontar para o banco de dados do WSO2 Governance Registry (arquivo conf/registry.xml) e do WSO2 Identity Server (arquivo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2-bam.gif" rel="lightbox[265]"><img class="alignright size-full wp-image-266" style="border: 0pt none; margin: 5px;" title="WSO2 Business Activity Monitoring" src="http://www.mcorp.com.br/wp-content/uploads/2010/04/wso2-bam.gif" alt="" width="180" height="21" /></a>A pedidos do "chefe", realizei o download e a instalação do <a href="http://wso2.org/downloads/bam" target="_blank">WSO2 Business Activity Monitoring</a> (versão 1.0.1) e parti para os testes.</p>
<p>Mas como migramos toda a suíte para rodar sobre o SQL Server, configurei tudo para apontar para o banco de dados do <a href="http://wso2.org/downloads/governance-registry" target="_blank">WSO2 Governance Registry</a> (arquivo <em>conf/registry.xml</em>) e do <a href="http://wso2.org/downloads/identity" target="_blank">WSO2 Identity Server</a> (arquivo <em>conf/user-mgt.xml</em>) - maiores explicações ficam para uma outra oportunidade.</p>
<p>Só que ainda ficou uma dúvida no ar! Aonde estavam as configurações de conexão de banco de dados que armazenam as informações do <a href="/glossario/#BAM" target="_blank">BAM</a> propriamente dito? Pesquisando nos arquivos instalados encontrei um diretório "bam", e para minha não-surpresa, lá estavam mais dois diretórios:</p>
<ul>
<li><strong>./bam/database/</strong>: diretório com arquivos da base de dados do H2;</li>
<li><strong>./bam/sql/</strong>: scripts de criação da base de dados em diferentes bancos (H2, SQL Server, MySQL e Oracle).</li>
</ul>
<p>Com essa descoberta, o jeito foi partir para o básico, buscar um arquivo de configuração que pudesse conter a conexão apontando para esses arquivos.</p>
<pre class="brush: php">leonardo@mcorp:~/Applications/wso2/wso2bam-1.0.1$ grep -r h2:database *
conf/registry.xml:        jdbc:h2:database/WSO2CARBON_DB
conf/user-mgt.xml:		jdbc:h2:database/WSO2CARBON_DB</pre>
<p>Ops, não encontrei nada. Nova tentativa:</p>
<pre class="brush: php">leonardo@mcorp:~/Applications/wso2/wso2bam-1.0.1$ grep -r h2 *
[milhões de respostas - ocultadas por mim - que não ajudam em nada]</pre>
<p>Vamos lá, filtrar um pouco mais para quem sabe ser mais feliz:</p>
<pre class="brush: php">leonardo@mcorp:~/Applications/wso2/wso2bam-1.0.1$ grep -r jdbc:h2 *
conf/registry.xml:        jdbc:h2:database/WSO2CARBON_DB
conf/user-mgt.xml:		jdbc:h2:database/WSO2CARBON_DB
repository/dataservices/BAMSummaryGenerationDS.dbs:jdbc:h2:bam/database/WSO2BAM_DB
repository/dataservices/BAMConfigurationDS.dbs:jdbc:h2:bam/database/WSO2BAM_DB
repository/dataservices/BAMStatQueryDS.dbs:jdbc:h2:bam/database/WSO2BAM_DB
repository/dataservices/BAMDataCollectionDS.dbs:jdbc:h2:bam/database/WSO2BAM_DB
repository/dataservices/BAMSummaryQueryDS.dbs:jdbc:h2:bam/database/WSO2BAM_DB</pre>
<p>E agora sim! Com isso descobrimos que ele utiliza alguns <a href="/glossario/#DataServices" target="_blank">data services</a> que realizam o trabalho "sujo".</p>
<p>Então, basta alterarmos todos esses serviços para conectarem na base de dados criada no SQL Server (dentro de cada serviço tem exemplos). Os serviços são:</p>
<ul>
<li>repository/dataservices/BAMSummaryGenerationDS.dbs</li>
<li>repository/dataservices/BAMConfigurationDS.dbs</li>
<li>repository/dataservices/BAMStatQueryDS.dbs</li>
<li>repository/dataservices/BAMDataCollectionDS.dbs</li>
<li>repository/dataservices/BAMSummaryQueryDS.dbs</li>
</ul>
<p>E carregar o arquivo <em>bam/sql/bam_schema_mssql.sql</em> na base de dados e... <em>voilà</em>.</p>
<pre class="brush: php">INFO -  Server  :  WSO2 Business Activity Monitor-1.0.1
INFO -  WSO2 Carbon started in 6 sec</pre>
<p>Os estudos sobre o WSO2 Business Activity Monitoring continuarão num próximo capítulo, sempre acompanhado de dicas e descobertas. (:</p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2009/11/novidades-nos-lancamentos-nov2009-da-plataforma-wso2/" title="Novidades nos lançamentos (nov/2009) da plataforma WSO2">Novidades nos lançamentos (nov/2009) da plataforma WSO2</a></li><li><a href="http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/" title="Lançamento do WSO2 Stratos (alpha)">Lançamento do WSO2 Stratos (alpha)</a></li><li><a href="http://www.mcorp.com.br/2010/05/utilizando-o-array-type-do-wso2-data-services-server-2-5-x/" title="Utilizando o Array Type do WSO2 Data Services Server 2.5.x">Utilizando o Array Type do WSO2 Data Services Server 2.5.x</a></li><li><a href="http://www.mcorp.com.br/2009/12/compilando-o-plugin-do-wso2-data-services-para-o-eclipse/" title="Compilando o plugin do WSO2 Data Services Server para o Eclipse">Compilando o plugin do WSO2 Data Services Server para o Eclipse</a></li><li><a href="http://www.mcorp.com.br/2009/11/wso2-e-a-quinta-feira-agitada-muitos-lancamentos/" title="WSO2 e a quinta-feira agitada: muitos lançamentos">WSO2 e a quinta-feira agitada: muitos lançamentos</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/04/wso2-business-activity-monitoring-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consumindo um serviço seguro utilizando PHP</title>
		<link>http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/</link>
		<comments>http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 23:03:58 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[data services]]></category>
		<category><![CDATA[esb]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ws-security]]></category>
		<category><![CDATA[wso2]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=256</guid>
		<description><![CDATA[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: [...]]]></description>
			<content:encoded><![CDATA[<p>Dia desses precisei colocar autenticação em um serviço que desenvolvi e passeando pelas opções da interface administrativa da <a href="http://wso2.org/downloads/esb" target="_blank">WSO2 Enterprise Service Bus</a> encontrei facilmente minha solução. Um pouco depois, li no twitter do @<a href="http://twitter.com/wso2" target="_blank">WSO2</a> um comentário sobre um novo artigo publicado sobre segurança nos <a href="/glossario/#DataServices">Data Services</a>, onde ensinava a fazer toda a parte de configuração: <a href="http://wso2.org/library/articles/content-filtering-data-services-user-roles" target="_blank">Content Filtering in Data Services with User Roles</a>.</p>
<p>Só que pouco tempo depois de configurar e entregar ao cliente o serviço, veio o problema: como consumir em <a href="http://www.php.net/" target="_blank">PHP</a> o serviço? No artigo a solução entregue por eles para consumo é em <a href="http://java.sun.com/" target="_blank">Java</a>, como a capacidade do cliente deixa a desejar, fiquei de fazer e enviar um exemplo de consumo do serviço desenvolvido.</p>
<p>Então... mãos na massa!</p>
<h2>Configurando a ESB</h2>
<p>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: <a href="http://wso2.org/library/articles/content-filtering-data-services-user-roles#step_4" target="_blank">Step 4 – Enable User Authentication for the Data Service</a>.</p>
<h2>Consumo sem segurança</h2>
<p>Um pequeno trecho de PHP que mostra como consumir o serviço sem nenhum tipo de segurança. Código pequeno, limpo e objetivo.</p>
<pre class="brush: php">
$client = new SoapClient(&quot;http://localhost:8280/services/Tutorial?wsdl&quot;);
try {
$obj = $client-&gt;searchProductsByGroupId(array(&quot;group_id&quot; =&gt; 1));
print_r($obj);

} catch (Exception $e) {
echo &quot;ERRO: &quot; . $e-&gt;getMessage();
}</pre>
<p>Mas mesmo com toda essa objetividade, o problema do cliente não estava resolvido e eu recebia o seguinte erro:</p>
<pre class="brush: php">ERRO: SOAP header missing</pre>
<p>E, para resolver, faltava adicionar o cabeçalho com os dados de segurança.</p>
<h2>Consumo com segurança</h2>
<p>Agora um não-tão-pequeno trecho em PHP.</p>
<pre class="brush: php">// configurações de conexão
$username = &quot;admin&quot;;
$password = &quot;admin&quot;;
$created = date (&quot;Y-m-d\TH:i:s&quot;, mktime (date(&quot;H&quot;), date(&quot;i&quot;), date(&quot;s&quot;), date(&quot;m&quot;), date(&quot;d&quot;), date(&quot;Y&quot;))).&quot;Z&quot;;

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

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

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

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

// criando header
$headers = new SOAPHeader($ns, &#039;Security&#039;, $wsec);

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

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

} catch (Exception $e) {
echo &quot;ERRO: &quot; . $e-&gt;getMessage();
}</pre>
<p>E tudo rodou normalmente, sem problemas, o cliente ficou feliz e eu matei um pouco da saudade de programar em PHP.</p>
<p>Na pesquisa por soluções, tentei utilizar o <a href="http://wso2.org/projects/wsf/php" target="_blank">WSO2 Web Services Framework <em>for PHP</em></a> mas descobri que depende de instalação de módulo no <a href="http://httpd.apache.org" target="_blank">Apache</a> e não servia para meu cliente, mas anotei na pauta para testá-lo em outro momento.</p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2010/06/compilando-o-wso2-carbon-3-0-0-e-corrigindo-o-wso2-data-services-server-2-5-0/" title="Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0">Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0</a></li><li><a href="http://www.mcorp.com.br/2010/04/instalando-o-wso2-web-services-framework-for-php-2-0-0/" title="Instalando o WSO2 Web Services Framework for PHP (2.0.0)">Instalando o WSO2 Web Services Framework for PHP (2.0.0)</a></li><li><a href="http://www.mcorp.com.br/2009/11/novidades-nos-lancamentos-nov2009-da-plataforma-wso2/" title="Novidades nos lançamentos (nov/2009) da plataforma WSO2">Novidades nos lançamentos (nov/2009) da plataforma WSO2</a></li><li><a href="http://www.mcorp.com.br/2009/11/wso2-e-a-quinta-feira-agitada-muitos-lancamentos/" title="WSO2 e a quinta-feira agitada: muitos lançamentos">WSO2 e a quinta-feira agitada: muitos lançamentos</a></li><li><a href="http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/" title="Lançamento do WSO2 Stratos (alpha)">Lançamento do WSO2 Stratos (alpha)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Livro grátis: SOA Adoption for Dummies</title>
		<link>http://www.mcorp.com.br/2010/02/livro-gratis-soa-adoption-for-dummies/</link>
		<comments>http://www.mcorp.com.br/2010/02/livro-gratis-soa-adoption-for-dummies/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 16:25:05 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[wso2]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=250</guid>
		<description><![CDATA[Para os interessados em aprender mais sobre SOA, uma boa oportunidade é a leitura do livro SOA Adoption for Dummies, ainda não tive tempo de ler todo ele pra "garantir" a qualidade, mas logo postarei minha impressão sobre ele. Você pode realizar o download dele por este link: SOA Adoption for Dummies. Posts relacionadosUtilizando o [...]]]></description>
			<content:encoded><![CDATA[<p>Para os interessados em aprender mais sobre <a href="/glossario/#SOA" target="_blank">SOA</a>, uma boa oportunidade é a leitura do livro <strong>SOA Adoption for Dummies</strong>, ainda não tive tempo de ler todo ele pra "garantir" a qualidade, mas logo postarei minha impressão sobre ele.</p>
<div id="attachment_251" class="wp-caption aligncenter" style="width: 204px"><a href="http://www.mcorp.com.br/wp-content/uploads/2010/02/Free_Book_SOA_Adoption_for_Dummies.png" rel="lightbox[250]"><img class="size-medium wp-image-251" title="Free Book: SOA Adoption for Dummies" src="http://www.mcorp.com.br/wp-content/uploads/2010/02/Free_Book_SOA_Adoption_for_Dummies-194x300.png" alt="" width="194" height="300" /></a><p class="wp-caption-text">Free Book: SOA Adoption for Dummies (somente em inglês)</p></div>
<p>Você pode realizar o download dele por este link: <a href="http://www.softwareag.com/Corporate/res/books/soa_adoption_for_dummies/default.asp " target="_blank">SOA Adoption for Dummies</a>.</p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2010/05/utilizando-o-array-type-do-wso2-data-services-server-2-5-x/" title="Utilizando o Array Type do WSO2 Data Services Server 2.5.x">Utilizando o Array Type do WSO2 Data Services Server 2.5.x</a></li><li><a href="http://www.mcorp.com.br/2009/11/soa-esta-para-wso2-ou-wso2-esta-para-o-soa/" title="SOA está para WSO2 ou WSO2 está para o SOA?">SOA está para WSO2 ou WSO2 está para o SOA?</a></li><li><a href="http://www.mcorp.com.br/2010/08/promocao-livro-shell-script/" title="Promoção: Livro Shell Script">Promoção: Livro Shell Script</a></li><li><a href="http://www.mcorp.com.br/2010/06/compilando-o-wso2-carbon-3-0-0-e-corrigindo-o-wso2-data-services-server-2-5-0/" title="Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0">Compilando o WSO2 Carbon 3.0.0 e corrigindo o WSO2 Data  Services Server 2.5.0</a></li><li><a href="http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/" title="Lançamento do WSO2 Stratos (alpha)">Lançamento do WSO2 Stratos (alpha)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2010/02/livro-gratis-soa-adoption-for-dummies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando WSO2 Enterprise Service Bus Eclipse Tools no Ubuntu Karmic Koala (9.10)</title>
		<link>http://www.mcorp.com.br/2009/12/instalando-wso2-enterprise-service-bus-eclipse-tools-no-ubuntu-karmic-koala-9-10/</link>
		<comments>http://www.mcorp.com.br/2009/12/instalando-wso2-enterprise-service-bus-eclipse-tools-no-ubuntu-karmic-koala-9-10/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 13:43:15 +0000</pubDate>
		<dc:creator>Leonardo Saraiva</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[9.10]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[esb]]></category>
		<category><![CDATA[karmic koala]]></category>
		<category><![CDATA[libstdc]]></category>
		<category><![CDATA[libstdc++5]]></category>
		<category><![CDATA[libstdc++6]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wso2]]></category>
		<category><![CDATA[wtp]]></category>

		<guid isPermaLink="false">http://www.mcorp.com.br/?p=243</guid>
		<description><![CDATA[Com o lançamento do WSO2 Enterprise Service Bus Eclipse Tools (v1.0.0-beta), cansado de ficar utilizando a interface web para gerenciar os "esqueminhas" da ESB, resolvei testar o plugin. Mas como nem tudo são flores, após eu instalar o plugin e tentar criar um novo endpoint, recebi o erro abaixo: Unhandled event loop exception XPCOM error [...]]]></description>
			<content:encoded><![CDATA[<p>Com o lançamento do <a href="http://wso2.org/projects/tools/esb/esb-authoring" target="_blank">WSO2 Enterprise Service Bus Eclipse Tools</a> (v1.0.0-beta), cansado de ficar utilizando a interface web para gerenciar os "esqueminhas" da ESB, resolvei testar o plugin.</p>
<p>Mas como nem tudo são flores, após eu <a href="http://wso2.org/project/tools/esb/esb-authoring/1.0.0/docs/install_guide.html" target="_blank">instalar o plugin</a> e tentar criar um novo <em>endpoint</em>, recebi o erro abaixo:</p>
<pre class="brush: php">Unhandled event loop exception
XPCOM error -2147467259</pre>
<p><a href="http://www.mcorp.com.br/wp-content/uploads/2009/12/wso2-plugin-esb-eclipse-error.png" rel="lightbox[243]"><img class="aligncenter size-medium wp-image-245" title="WSO2 Plugin ESB Eclipse error" src="http://www.mcorp.com.br/wp-content/uploads/2009/12/wso2-plugin-esb-eclipse-error-300x184.png" alt="" width="300" height="184" /></a></p>
<p>Com isso, passei um certo tempo procurando na internet, até descobrir que o erro é causado por falta da biblioteca <strong>libstdc++5</strong>, que no Ubuntu Karmic Koala (9.10) foi atualizada para <strong>libstdc++6</strong>. Versão que é incompátivel com a visualização embarcada do Mozilla que o <a href="http://www.eclipse.org/webtools/" target="_blank">Eclipse WTP</a> utiliza.</p>
<p>Então, para resolver o problema, primeiro passo que tentei foi:</p>
<pre class="brush: php">$ sudo apt-get install libstdc++5
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package libstdc++5 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package libstdc++5 has no installation candidate</pre>
<p>Só que não resolveu, a maneira que encontrei foi procurar a biblioteca para download, encontrei no site do Debian:</p>
<pre class="brush: php">wget http://ftp.br.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.6-18_i386.deb</pre>
<p>E instalei:</p>
<pre class="brush: php">sudo dpkg -i libstdc++5_3.3.6-18_i386.deb</pre>
<p>E com esses passos, tudo funciona normalmente...</p>
<p><a href="http://www.mcorp.com.br/wp-content/uploads/2009/12/wso2-plugin-esb-eclipse-running.png" rel="lightbox[243]"><img class="aligncenter size-medium wp-image-246" title="WSO2 plugin ESB Eclipse rodando" src="http://www.mcorp.com.br/wp-content/uploads/2009/12/wso2-plugin-esb-eclipse-running-300x222.png" alt="" width="300" height="222" /></a></p>
<h3  class="related_post_title">Posts relacionados</h3><ul class="related_post"><li><a href="http://www.mcorp.com.br/2009/12/compilando-o-plugin-do-wso2-data-services-para-o-eclipse/" title="Compilando o plugin do WSO2 Data Services Server para o Eclipse">Compilando o plugin do WSO2 Data Services Server para o Eclipse</a></li><li><a href="http://www.mcorp.com.br/2010/06/lancamento-do-wso2-stratos-alpha/" title="Lançamento do WSO2 Stratos (alpha)">Lançamento do WSO2 Stratos (alpha)</a></li><li><a href="http://www.mcorp.com.br/2010/04/instalando-o-wso2-web-services-framework-for-php-2-0-0/" title="Instalando o WSO2 Web Services Framework for PHP (2.0.0)">Instalando o WSO2 Web Services Framework for PHP (2.0.0)</a></li><li><a href="http://www.mcorp.com.br/2010/04/wso2-enterprise-service-bus-manipulando-erros-em-endpoints/" title="WSO2 Enterprise Service Bus &#8211; Manipulando erros em Endpoints">WSO2 Enterprise Service Bus &#8211; Manipulando erros em Endpoints</a></li><li><a href="http://www.mcorp.com.br/2010/03/consumindo-um-servico-seguro-utilizando-php/" title="Consumindo um serviço seguro utilizando PHP">Consumindo um serviço seguro utilizando PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.mcorp.com.br/2009/12/instalando-wso2-enterprise-service-bus-eclipse-tools-no-ubuntu-karmic-koala-9-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
