<?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>My own tech words... &#187; Java</title>
	<atom:link href="http://blog.lucastex.com/category/tech/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lucastex.com</link>
	<description></description>
	<lastBuildDate>Mon, 12 Apr 2010 12:01:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Construindo um serviÃ§o sÃ­ncrono-assÃ­ncrono &#8211; parte 2: AplicaÃ§Ã£o Legada</title>
		<link>http://blog.lucastex.com/2008/12/09/construindo-um-servico-sincrono-assincrono-parte-2-aplicacao-legada/</link>
		<comments>http://blog.lucastex.com/2008/12/09/construindo-um-servico-sincrono-assincrono-parte-2-aplicacao-legada/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 14:07:18 +0000</pubDate>
		<dc:creator>lucastex</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[asynchronous]]></category>
		<category><![CDATA[bea]]></category>
		<category><![CDATA[BUS]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[service bus]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[XSD]]></category>

		<guid isPermaLink="false">http://blog.lucastex.com/?p=27</guid>
		<description><![CDATA[Bom, como jÃ¡ disse, nÃ£o gosto muito de chamar de &#8220;legadas&#8221; as aplicaÃ§Ãµes que serÃ£o ativadas pelo BUS em um arquitetura SOA. A nÃ£o ser Ã© claro, que realmente faÃ§am jus a este nome. O que nÃ£o gosto Ã© de construir uma nova aplicaÃ§Ã£o que conterÃ¡ realmente a lÃ³gica de negÃ³cio do zero, e ainda [...]]]></description>
			<content:encoded><![CDATA[<p>Bom, como jÃ¡ disse, nÃ£o gosto muito de chamar de &#8220;legadas&#8221; as aplicaÃ§Ãµes que serÃ£o ativadas pelo BUS em um arquitetura SOA. A nÃ£o ser Ã© claro, que realmente faÃ§am jus a este nome. O que nÃ£o gosto Ã© de <strong>construir uma nova aplicaÃ§Ã£o </strong>que conterÃ¡ realmente a lÃ³gica de negÃ³cio do zero, e ainda chamÃ¡-la de legada, e olha que isso Ã© mais comum do que pensamos.</p>
<p>Enfim, a nossa grande aplicaÃ§Ã£o que serÃ¡ ativada pelo BUS via JMS, seguindo o desenho <a href="http://blog.lucastex.com/2008/12/08/construindo-um-servico-sincrono-assincrono-com-aqualogic-service-bus" target="_blank">deste post</a>Â se chamarÃ¡ &#8220;ReverseIt&#8221;, e conterÃ¡ uma lÃ³gica nuclear de inverter a string que receberÃ¡ como parÃ¢metro. NÃ£o vou entrar em detalhes dos detalhes da criaÃ§Ã£o do projeto na IDE, mas basicamente serÃ¡ um &#8220;Web Service Project&#8221; com o facet do XMLBeans Builder Library, para que ele converta nosso XSD em objetos java facilmente. A aplicaÃ§Ã£o estÃ¡ rodando em um domÃ­nio Weblogic Server puro, em localhost:30000.</p>
<p>Vamos definir um schema XSD (dentro da pasta schemas) que contenha a operaÃ§Ã£o de request e de response para a operaÃ§Ã£o. Obviamente como temos um parÃ¢metro string para entrada e outro para saÃ­da, ficaria algo bem trivial, basicamente o escrito abaixo:</p>
<p><code><span style="color: #008000;"> &lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;schema xmlns="http://www.w3.org/2001/XMLSchema"Â <br />
Â Â  Â  Â  Â targetNamespace="http://blog.lucastex.com/reverseit"Â <br />
Â Â  Â  Â  Â xmlns:revit="http://blog.lucastex.com/reverseit"Â <br />
Â Â  Â  Â  Â elementFormDefault="qualified"&gt;</span></code></p>
<p><code><span style="color: #008000;"> </span><span style="color: #008000;">Â Â  Â &lt;element name="reverseItRequest" type="revit:ReverseItRequest"&gt;&lt;/element&gt;<br />
Â Â  Â &lt;element name="reverseItResponse" type="revit:ReverseItResponse"&gt;&lt;/element&gt;</span></code></p>
<p><code> </code></p>
<p><code><span style="color: #008000;">Â Â  Â (...) definiÃ§Ã£o e descriÃ§Ã£o dos tipos (...)</span></code></p>
<p><code><span style="color: #008000;"> &lt;/schema&gt;</span></code></p>
<p>Agora vamos:</p>
<ul>
<li>Criar um web service como de costume</li>
<li>Configurar entrada do serviÃ§o para ReverseItRequest</li>
<li>Configurar saÃ­da do serviÃ§o para ReverItResponse</li>
<li>Escrever a lÃ³gica para inversÃ£o da palavra<br />
Â </li>
</ul>
<p><code><span style="color: #008000;"><span style="color: #008000;">public ReverseItResponseDocument reverseIt(ReverseItRequestDocument request) {<br />
Â Â  Â <br />
Â Â  Â (...) 1- Pegar input do request<br />
Â Â  Â (...) 2- Inverter a string<br />
Â Â  Â (...) 3- Retornar no responseÂ </span></span></code></p>
<p><code><span style="color: #008000;">}</span></code></p>
<p><code> </code></p>
<p>Legal, mas atÃ© aÃ­ temos o nosso Web Service tÃ£o padrÃ£o quanto todos que jÃ¡ fizemos, vamos agora para as anotaÃ§Ãµes, que vÃ£o garantir que o serviÃ§o trabalhe de forma assÃ­ncrona. Bom, como ele funcionarÃ¡ via JMS, uma coisa que temos que fazer Ã© criar uma fila JMS onde serÃ£o colocadas as mensagens que este serviÃ§o irÃ¡ consumir, e tambÃ©m uma fila de resposta, para que ele coloque as mensagens de response. NÃ£o podemos esquecer tambÃ©m da ConnectionFactory o nosso serviÃ§o. Estes foram os nomes que eu dei:</p>
<ul>
<li><strong>Fila de Request</strong>: reversit.jms.requestQueue</li>
<li><strong>Fila de Response</strong>: reverseit.jms.responseQueue</li>
<li><strong>ConnectionFactory</strong>: reversit.jms.connectionFactory</li>
</ul>
<div>NÃ£o vou entrar em detalhes da criaÃ§Ã£o dos mesmos, nÃ£o Ã© este o foco da explicaÃ§Ã£o.</div>
<div>Agora, vamos anotar nosso serviÃ§o para os resources criados.</div>
<pre>
<div><span style="color: #008000;">@WLJmsTransport(serviceUri="ReverseIt",
<span style="color: #000000;"><span><span style="color: #008000;">		</span></span><span style="color: #008000;">portName="ReverseItPort",
<span style="color: #000000;"><span><span style="color: #008000;">		</span></span><span style="color: #008000;">connectionFactory="reverseit.jms.connectionFactory",Â 
<span style="color: #000000;"><span><span style="color: #008000;">		</span></span><span style="color: #008000;">queue="reverseit.jms.requestQueue",Â 
<span style="color: #000000;"><span><span style="color: #008000;">		</span></span><span style="color: #008000;">contextPath = "ReverseIt")</span></span></span></span></span></span></span></span></span></div>
</pre>
<div>Nesta anotaÃ§Ã£o WLJmsTransport, nÃ³s definimos o serviceURI e contextPath do serviÃ§o para que ele possa ser encontrado, tambÃ©m colocamos o connectionFactory e a queue de onde ele receberÃ¡ as requisiÃ§Ãµes, e tambÃ©m o nome do port que serÃ¡ criado no WSDL para este transporte.Â </div>
<div></div>
<div>Uma coisa que pode intrigar caso alguÃ©m nÃ£o esteja familiarizado com este conceito, Ã© a doce pergunta: &#8220;Onde diabos o serviÃ§o sabe qual Ã© a fila onde ele deverÃ¡ colocar a resposta?&#8221;. Para isso, vale uma lida neste artigo sobre os padrÃµes de resposta para mensageria assÃ­ncrona:Â <a href="http://e-docs.bea.com/alsb/docs30/interopjms/MsgIDPatternforJMS.html" target="_blank">Understanding Message ID and Correlation ID Patterns for JMS Request/Response</a>Â .Â </div>
<div></div>
<div>Prontinho, nosso serviÃ§o estÃ¡ funcionando de maneira JMS. Uma ponto muito (muito mesmo) legal e interessante, Ã© que poderÃ­amos expor este MESMO serviÃ§o via HTTP, apenas adicionando a anotaÃ§Ã£o @WLHttpTransport com suas propriedades, e terÃ­amos 2 ports diferentes na definiÃ§Ã£o do WSDL.</div>
<div></div>
<div>AmanhÃ£ acho que consigo fazer a parte do Service BUS chamando ele, e transformando um request do terceiro (HTTP) para este nosso request (JMS). Ã‰ nessa parte que tem o &#8220;pulo do gato&#8221; do produto.</div>
<div></div>
<div>Vamos deixar para testar assim que fizermos este passo.</div>
<div></div>
<div>AtÃ©,</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucastex.com/2008/12/09/construindo-um-servico-sincrono-assincrono-parte-2-aplicacao-legada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
