<?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>blog.caelum.com.br &#187; integração</title>
	<atom:link href="http://blog.caelum.com.br/tag/integracao/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caelum.com.br</link>
	<description>blog dos desenvolvedores da Caelum</description>
	<lastBuildDate>Thu, 09 Feb 2012 13:04:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Arquitetura REST com Java: JAX-RS</title>
		<link>http://blog.caelum.com.br/arquitetura-rest-com-java-jax-rs/</link>
		<comments>http://blog.caelum.com.br/arquitetura-rest-com-java-jax-rs/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 16:00:50 +0000</pubDate>
		<dc:creator>Sérgio Azevedo Junior</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[javaee6]]></category>
		<category><![CDATA[jax-rs]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[roa]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[webservices]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/?p=1456</guid>
		<description><![CDATA[A necessidade de trocar informações entre aplicações motivou diferentes abordagens para &#8220;integração de dados&#8221;. Desde soluções simples e questionáveis como utilizar um banco de dados compartilhado, ou realizar troca de arquivos até soluções mais elaboradas que utilizam objetos distribuidos (COM e Corba). Em diversos momentos não temos somente a integração de sistemas diferentes mas a <a href="http://blog.caelum.com.br/arquitetura-rest-com-java-jax-rs/#more-1456'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2009/12/Picture-2.png" width="240" />
		</p><p>A necessidade de trocar informações entre aplicações motivou diferentes abordagens para &#8220;integração de dados&#8221;. Desde soluções simples e questionáveis como utilizar um <a href="http://www.eaipatterns.com/SharedDataBaseIntegration.html">banco de dados compartilhado</a>, ou realizar <a href="http://www.eaipatterns.com/FileTransferIntegration.html">troca de arquivos</a> até soluções mais elaboradas que utilizam objetos distribuidos (<a href="http://www.microsoft.com/com/default.mspx">COM</a> e <a href="http://www.cs.wustl.edu/~schmidt/corba-overview.html">Corba</a>). Em diversos momentos não temos somente a integração de sistemas diferentes mas a distribuição de um único sistema em diversas partes também pode ser integrada da mesma maneira.</p>
<p>A solução de integração denominada <a href="http://en.wikipedia.org/wiki/Web_service">Webservices</a>, que já é relativamente <a href="http://blog.caelum.com.br/webservices-sem-servidor-de-aplicacao-no-java-6/">simples de implementar</a>, é a mais utilizada hoje em dia, que vemos em profundidade no curso <a href="http://www.caelum.com.br/curso/fj-31-java-ee-web-services/">FJ-31</a>.</p>
<p>A Web é amplamente utilizada e reconhecida principalmente por sua arquitetura robusta, tolerante a falhas e escalável. Quem sustenta a Web nesses fatores e lhe dá todo este poder é o protocolo HTTP. Este protocolo inocente que utilizamos &#8220;meio que sem saber&#8221; em nossos navegadores de internet está presente na Web inteira, e inclusive em nossos Webservices. Não seria ótimo se eles tirassem proveito das caracteristicas do protocolo HTTP, sem que isso nos desse muito trabalho?</p>
<p>A especifição <a href="http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html">JSR-311 JAX-RS</a> de Restful webservices (que faz parte agora do <a href="http://java.sun.com/developer/technicalArticles/JavaEE/JavaEE6Overview.html">Java EE 6</a>) tornou isso simples e possível. Diferentemente do tradicional SOAP &#8211; em sua versão amplamente utilizada &#8211; e WSDL, o JAX-RS foca um pouco mais em URIs e nos detalhes do protocolo HTTP para se beneficiar de seus recursos.</p>
<p>Como utilizamos o JAX-RS para buscar dados de um <code>Pedido</code>?</p>
<pre class="brush: java; title: ; notranslate">
@Path(&quot;/pedido/{id}&quot;)
public class PedidoResource {
 @GET
@Produces( { MediaType.APPLICATION_XML })
 public Pedido getPedidoById(@PathParam(&quot;id&quot;) Long id) {
   PedidoDAO pedidoDAO = new PedidoDAO();
   Pedido pedido = pedidoDAO.getPedidoById(id);
   return pedido;
 }
}
</pre>
<p>Através da classe <code>PedidoResource</code>, disponibilizaremos os dados de nossos pedidos no formato XML. Vamos supor que configuramos que este serviço esteja disponível no endereço: <em>http://caelum.com.br/rest/pedido</em>. Para conseguirmos informações sobre o pedido 10, podemos acessar a url <em>http://caelum.com.br/rest/pedido/10</em>, através de nosso browser de internet favorito. E assim receberiamos um resultado parecido com este:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;pedido&gt;
  &lt;dataPedido&gt;2009-12-10T18:50:57.173-02:00&lt;/dataPedido&gt;
  &lt;descricao&gt;Pedido 10&lt;/descricao&gt;
  &lt;id&gt;10&lt;/id&gt;
  &lt;total&gt;3000.25&lt;/total&gt;
&lt;/pedido&gt;
</pre>
<p>A api JAX-RS nos permite trabalhar com o que foi denominado Restful WebServices. E segundo a arquitetura REST nós devemos expor as informações importantes de nossa aplicação como <em>recursos</em>. Para isso precisamos criar uma classe que é definida pela especificação como <code>RootResource</code>. Em nosso exemplo a classe <code>PedidoResource</code> é a nossa , e para ser acessivel aos clientes fornecemos a ela um url através da anotaçao <span style="color: #646464;">@Path</span><span style="color: #000000;">(</span><span style="color: #2a00ff;">&#8220;/pedido/{id}&#8221;</span><span style="color: #000000;">)</span>, e o próprio JAX-RS reconhece <span style="color: #2a00ff; ">{id} </span>como sendo um parametro que é enviado através do url.</p>
<p>Um recurso pode responder a operações do protocolo HTTP, dentre as quais destacam-se: POST, GET, PUT e DELETE. Nós escolhemos que nosso serviço responderá apenas a solitações do tipo GET, a anotação <span style="color: #646464; ">@GET</span> acima do método <code>getPedidoById</code> é quem define isso. Essas anotações de caminho e de qual método HTTP podem acessar determinado método estão presentes em frameworks como o <a href="http://static.springsource.org/docs/Spring-MVC-step-by-step/">Spring MVC</a> e o <a href="http://www.vraptor.com.br/">VRaptor</a>.</p>
<p>Depois dizemos que uma solitação GET para nosso recurso irá produzir um resposta do tipo XML, através da anotação <span style="color: #000000;"><span style="color: #646464;">@Produces</span><span style="color: #000000;">( { </span><span style="color: #000000;">MediaType.APPLICATION_XML </span><span style="color: #000000;">})</span>.<br />
</span><br />
É impotante destacar que esta anotação não é a responsável por serializar o objeto no formato XML. O JAX-RS usa o <a href="http://blog.caelum.com.br/jaxb-xml-e-java-de-maos-dadas/">JAX-B</a> como serializador padrão, basta para isso colocar a anotação <span style="color: #646464;">@XmlRootElement</span> na classe desejada, assim como nós fizemos em nossa classe pedido.</p>
<pre class="brush: java; title: ; notranslate">
@XmlRootElement
public class Pedido {

 private Long id;
 private String descricao;
 private double total;
 private Calendar dataPedido;
 //Getters e Setters...

}
</pre>
<p>Agora que entendemos melhor o nosso serviço, ou seja, como acessar nosso <em>recurso</em>, podemos olhar melhor para nosso cliente. Como nosso cliente do serviço web pode ser um simples browser de internet, conseguimos usar o browser para consumir nosso serviço web porque eles já estão bem acostumados a realizar operações HTTP do tipo GET.</p>
<p>Mas os browser&#8217;s não são nossos únicos clientes. Podemos criar diferentes tipos, e inclusive ter aplicações desktop como clientes. Vejamos um exemplo de uma aplicação cliente, que o usa a API do <a href="http://hc.apache.org/httpcomponents-client-ga/">httpclient</a> do grupo apache:</p>
<pre class="brush: java; title: ; notranslate">
public class CaelumRestClient {

  public static void main(String[] args) throws Exception {
    HttpClient httpClient = new HttpClient();

    GetMethod httpMethod =
      new GetMethod(&quot;http://caelum/rest/pedido/20&quot;);

    httpMethod.addRequestHeader(&quot;Accept&quot;, &quot;application/xml&quot;);
    httpClient.executeMethod(httpMethod);
    Scanner scan =
      new Scanner(httpMethod.getResponseBodyAsStream());
    PrintStream ps = System.out;
    while (scan.hasNext()) {
      ps.println(scan.nextLine());
    }
    httpMethod.releaseConnection();
  }
}
</pre>
<p>Este cliente é bem simples, ele faz  apenas o mesmo trabalho que o browser já havia feito. Mas nada nos impede de implementar coisas bem mais interessantes. Poderiamos fazer com que este cliente desserializasse nosso objeto pedido. Para isso precisarimos apenas de um parser XML para extrair os valores do xml e depois popular um objeto Pedido com estes dados. A partir daí poderiamos utilizar este objeto em nossa aplicação.</p>
<p>A única <a href="http://guilhermesilveira.wordpress.com/2009/12/03/resteasy-where-did-the-hypermedia-go-to/">limitação</a> é que esta representação XML não nos diz nada sobre quais ações estão disponiveis para o nosso objeto Pedido, nem mesmo quais as relações desse recurso com o mundo afora. Uma alternativa seria utilizar o <a href="http://github.com/caelum/restfulie-java">restfulie</a> framework <a href="http://www.infoq.com/news/2009/12/restfulie">muito discutido hoje em dia</a> e idealizado por <a href="http://guilhermesilveira.wordpress.com/">Guilherme Silveira</a> e desenvolvido em conjunto com o pessoal da <a href="http://www.caelum.com.br">Caelum</a>, que usa o conceito de hypermedia para expor além dos dados as ações que um determinado objeto pode realizar.</p>
<p>Em breve teremos um post do próprio Guilherme sobre a importância do conteúdo hypermedia na arquitetura REST.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/arquitetura-rest-com-java-jax-rs/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>OndeTrabalhar.com &#8211; uma iniciativa da Caelum</title>
		<link>http://blog.caelum.com.br/ondetrabalharcom-uma-iniciativa-da-caelum/</link>
		<comments>http://blog.caelum.com.br/ondetrabalharcom-uma-iniciativa-da-caelum/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 23:28:05 +0000</pubDate>
		<dc:creator>Fabio Kung</dc:creator>
				<category><![CDATA[Caelum]]></category>
		<category><![CDATA[Inovação]]></category>
		<category><![CDATA[carreira]]></category>
		<category><![CDATA[emprego]]></category>
		<category><![CDATA[guj]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[ondetrabalhar]]></category>
		<category><![CDATA[oportunidade]]></category>
		<category><![CDATA[oportunidades]]></category>
		<category><![CDATA[projeto]]></category>
		<category><![CDATA[trabalho]]></category>
		<category><![CDATA[vaga]]></category>
		<category><![CDATA[vagas]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/?p=855</guid>
		<description><![CDATA[Atalho para os apressados: OndeTrabalhar.com. Muitos dos nossos alunos aqui na Caelum fazem os cursos atrás de boas oportunidades de emprego. Por causa disso, sempre tivemos um relacionamento muito próximo com pessoas bem qualificadas atrás de vagas. Uma discussão recorrente aqui dentro da Caelum é: como fazer para encaminhar nossos alunos a boas oportunidades de <a href="http://blog.caelum.com.br/ondetrabalharcom-uma-iniciativa-da-caelum/#more-855'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2009/07/logo-guj.gif" width="240" />
		</p><p>Atalho para os apressados: <a href="http://ondetrabalhar.com">OndeTrabalhar.com</a>.</p>
<p><a href="http://ondetrabalhar.com"><img src="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2009/07/ondetrabalhar-300x113.png" alt="OndeTrabalhar.com" title="OndeTrabalhar.com" width="300" height="113" class="aligncenter size-medium wp-image-898" /></a></p>
<p>Muitos dos nossos alunos aqui na Caelum fazem os cursos atrás de boas oportunidades de emprego. Por causa disso, sempre tivemos um relacionamento muito próximo com pessoas bem qualificadas atrás de vagas. Uma discussão recorrente aqui dentro da Caelum é: como fazer para encaminhar nossos alunos a <strong>boas oportunidades</strong> de emprego?</p>
<p>Justamente por nos conhecermos dentro dos cursos, os contatos que fazemos são com profissionais altamente qualificados e sedentos por conhecimento. Caso contrário, não estariam fazendo o treinamento.</p>
<p>Ao mesmo tempo, empresas que conhecem a qualidade dos cursos que oferecemos, regularmente nos enviam pedidos de indicação, interessadas nos profissionais que treinamos. Informalmente, a Caelum sempre fez o papel de ligar os talentos às empresas.</p>
<p>Através do <a href="http://ondetrabalhar.com">OndeTrabalhar.com</a>, estamos procurando formalizar este papel que sempre tivemos e atender melhor a todos.</p>
<p>A idéia principal do site é fazer as vagas atingirem os melhores desenvolvedores, de maneira simples. Pessoalmente, sempre achei irritante ter que preencher enormes formulários para poder começar a procurar por vagas. Pior ainda quando precisamos fazer upload de um arquivo do Word com o currículo!</p>
<p>A filosofia principal do site é simplicidade. Funciona como um <em>job board</em> (popular lá fora) e as empresas podem anunciar vagas de emprego a vontade. Detestamos burocracia: procurar boas oportunidades de emprego deve ser simples e fácil. Não é necessário se cadastrar, nem preencher formulários para buscar por vagas. Quer procurar por vagas de Java? De Ruby on Rails?</p>
<p><a href="http://ondetrabalhar.com/java">http://ondetrabalhar.com/java</a><br />
<a href="http://ondetrabalhar.com/rails">http://ondetrabalhar.com/rails</a></p>
<p>Apenas em São Paulo?</p>
<p><a href="http://ondetrabalhar.com/java/em/sao-paulo-sp">http://ondetrabalhar.com/java/em/sao-paulo-sp</a></p>
<p>Estamos fazendo um trabalho forte de <a href="http://pt.wikipedia.org/wiki/SEO"><em>Search Engine Optimization</em></a> (SEO) para fazer as vagas ficarem bem posicionadas nos principais mecanismos de busca. Além disso, fornecemos feeds para qualquer pesquisa e você pode acompanhar as vagas do seu agregador de RSS favorito. Em breve, também será possível receber emails com as vagas de interesse.</p>
<p>Outra enorme preocupação do <a href="http://ondetrabalhar.com">OndeTrabalhar.com</a> é fazer as vagas chegarem no público certo: os melhores desenvolvedores do mercado. Para isso, estamos fazendo diversos acordos com algumas das maiores comunidades de desenvolvimento do Brasil. Entre as que já posso citar estão o <a href="http://www.guj.com.br">GUJ.com.br</a>, o <a href="http://www.portaljava.com.br">PortalJava</a>, o <a href="http://rubyonbr.org">RubyOnBr.org</a>, o <a href="http://www.rubyinside.com.br">Ruby Inside Brasil</a> e algumas comunidades de outras linguagens como PHP e Python ainda vem por aí. Em breve já aparecerão vagas de emprego do <a href="http://ondetrabalhar.com">OndeTrabalhar.com</a> em todos esses sites, inclusive por aqui no Blog da Caelum.</p>
<p><a href="http://www.guj.com.br"><img src="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2009/07/logo-guj.gif" alt="Grupo de Usuários Java" title="Grupo de Usuários Java" width="220" height="54" class="aligncenter size-full wp-image-909" /></a></p>
<p>Caso exista alguma vaga aí na empresa onde trabalha, eu te peço um enorme favor: <strong>comente sobre o <a href="http://ondetrabalhar.com">OndeTrabalhar.com</a> </strong> ao responsável. Melhor ainda se você mesmo for o responsável e puder cadastrar a(s) vaga(s) por lá.</p>
<p>Se você tem interesse em fazer alguma parceiria conosco, para ter uma lista de vagas atualizada no seu site, blog, portal, ou comunidade, sem ter dor de cabeça tendo que gerenciar isso (inclusive remover vagas já preenchidas), entre <a href="http://ondetrabalhar.com/info#who_we_are">em contato</a>!</p>
<p>O <a href="http://ondetrabalhar.com">OndeTrabalhar.com</a> foi produzido pelo núcleo de <a href="http://www.caelum.com.br/curso/rr-71-ruby-on-rails/">Ruby on Rails da Caelum</a>, do qual eu tenho um orgulho e felicidade enormes de ver crescendo!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/ondetrabalharcom-uma-iniciativa-da-caelum/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>SOA sem tentar vender middleware?</title>
		<link>http://blog.caelum.com.br/soa-sem-tentar-vender-middleware/</link>
		<comments>http://blog.caelum.com.br/soa-sem-tentar-vender-middleware/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 09:58:11 +0000</pubDate>
		<dc:creator>Fabio Kung</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[buzzword]]></category>
		<category><![CDATA[corba]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[pox]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[rpc]]></category>
		<category><![CDATA[serviço]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/?p=671</guid>
		<description><![CDATA[Na última sexta-feira, estive junto com o Alexandre Magno em um evento organizado pelo pessoal da Stefanini, no Rio de Janeiro. O Alexandre falou um pouco sobre a sua especialidade, Scrum. Eu dei uma palestra sobre SOA e como sempre a expectativa do pessoal era ouvir mais uma palestra cheia de buzzword, que de alguma <a href="http://blog.caelum.com.br/soa-sem-tentar-vender-middleware/#more-671'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Na última sexta-feira, estive junto com o <a href="http://amagno.blogspot.com/">Alexandre Magno</a> em um evento organizado pelo pessoal da Stefanini, no Rio de Janeiro. O Alexandre falou um pouco sobre a sua especialidade, Scrum. Eu dei uma palestra sobre SOA e como sempre a expectativa do pessoal era ouvir mais uma palestra cheia de <a href="http://en.wikipedia.org/wiki/Buzzword">buzzword</a>, que de alguma forma tenta empurrar algum produto de integração e que tenha ESB (Enterprise Service Bus) no nome.</p>
<p>O público era bem misto, com pessoal técnico e não técnico. Bastante gente veio conversar comigo no fim da palestra e demonstraram surpresa com relação a abordagem diferente sobre SOA. Um pouco na linha do fantástico <a href="http://www.infoq.com/interviews/jim-webber-qcon-london">Guerrilla SOA</a> do Jim Webber, tentei falar sobre o assunto sem tentar vender nenhum produto gigante <em>middleware-de-integração</em>. Se você ainda não viu: <a href="http://jim.webber.name/downloads/presentations/2009-01-SOA-Forum.zip">veja <strong>agora</strong></a>, sério. A minha palestra fala um pouco sobre como <em>SOA não precisa ser buzzword</em>, <strong>SOA é integração</strong>:</p>
<p>
<div style="width:425px;text-align:left" id="__ss_1158360"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/fabiokung/soa-no-precisa-ser-buzzword?type=presentation" title="SOA não precisa ser buzzword">SOA não precisa ser buzzword</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=soa-090317105205-phpapp02&#038;rel=0&#038;stripped_title=soa-no-precisa-ser-buzzword" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=soa-090317105205-phpapp02&#038;rel=0&#038;stripped_title=soa-no-precisa-ser-buzzword" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/fabiokung">Fabio Kung</a>.</div>
</div>
<p><br/></p>
<p>Talvez a palestra não faça tanto sentido para quem não esteve presente, mas fiquem a vontade para dar uma olhada e comentar a respeito.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/soa-sem-tentar-vender-middleware/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

