<?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>SubMundo Java &#187; Uncategorized</title>
	<atom:link href="http://submundojava.com.br/wordpress/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://submundojava.com.br/wordpress</link>
	<description>Um pouco de tudo, mas tecnologia acima de tudo!</description>
	<lastBuildDate>Wed, 26 May 2010 15:00:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Parte 2: Explorando padrões e princípios para as novas gerações de soluções SOA.</title>
		<link>http://submundojava.com.br/wordpress/2010/02/23/parte-2-explorando-padroes-e-principios-para-as-novas-geracoes-de-solucoes-soa/</link>
		<comments>http://submundojava.com.br/wordpress/2010/02/23/parte-2-explorando-padroes-e-principios-para-as-novas-geracoes-de-solucoes-soa/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 21:43:18 +0000</pubDate>
		<dc:creator>paulo.sales</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://submundojava.com.br/wordpress/?p=93</guid>
		<description><![CDATA[
    Este post é a parte final do resumo do artigo &#8220;Exploring Patterns and Principles of a New Generation of SOA Solutions&#8221; da 22a. edição da revista &#8220;The Architecture Journal&#8221;. O artigo original discute sobre alguns desafios das tradicionais arquiteturas orientadas a serviço e explora alguns padrões e princípios para as novas [...]]]></description>
			<content:encoded><![CDATA[<p>
    Este post é a parte final do resumo do artigo &#8220;Exploring Patterns and Principles of a New Generation of SOA Solutions&#8221; da 22a. edição da revista <a href="http://www.architecturejournal.net">&#8220;The Architecture Journal&#8221;</a>. O artigo original discute sobre alguns desafios das tradicionais arquiteturas orientadas a serviço e explora alguns padrões e princípios para as novas gerações de arquiteturas orientadas a serviço, <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">SOA</a>.
</p>
<h2>Abraçando a WEB: Serviços <a href="">RESTful</a></h2>
<p>
    Apesar dos Web Services serem desenvolvidos para muitos protocolos o que vemos na grande maioria das implementações é o uso do protocolo HTTP como meio para o transporte de outro protocolo o SOAP. Esse excesso de abstração da camada de transporte impossibilita o uso dos recursos do protocolo HTTP. Por quê não utilizar HTTP somente?
</p>
<p>
    Um dos meios para utilizar o protocolo HTTP para distribuir serviços, Web Services, de maneira amigável seria o uso do <a href="">REST</a>. Seguindo os princípios do REST podemos ter uma arquitetura SOA altamente escalável. Sem dúvida REST se tornou uma alternativa muito atraente para substituir os Web Services SOAP/WS-*, resolvendo os problemas citados na <a href="">Parte 1</a>, como interoperabilidade e escalabilidade. Segue algumas características dos serviços RESTful:</p>
<ul>
<li>Endereçamento de recursos/serviços através de uma URI</li>
<li>Interações baseadas somente em HTTP</li>
<li>Uso de métodos padrões HTTP (GET, POST, PUT, etc)</li>
<li>Interações sem estado</li>
<li>Possibilita diferentes formatos de distribuição</li>
<li>Armazenamento em <a href="">Cache</a></li>
<li>Iteroperabilidade</li>
<li>Escalabilidade</li>
</ul>
<p>
    A simplicidade e o alto nível de interoperabilidade dos serviços em RESTful são alguns dos fatores que podem melhorar a agilidade da próxima geração de soluções SOA.
</p>
<h2>Interoperabilidade com WS-*</h2>
<p>
    Apesar do notável trabalho acadêmico realizado na família de protocolos WS-* percebemos que ainda não supre as expectativas iniciais. Interoperabilidade e complexidade ainda são desafios importantes que encaramos na adoção dos protocolos WS-*. A melhor prática para melhorar a interoperabilidade dos protocolos WS-* é identificar as características dos consumidores dos serviços e criar <a href="">endpoints</a> distintos para cada particularidade desses consumidores. Por exemplo, vamos considerar um senário que devemos assegurar um Web Service que irá ser consumido por aplicações .NET, Sun Metro, Oracle Weblogic e Ruby on Rails. Neste senário podemos permitir que três endpoints com diferentes configurações de segurança atendam às diferentes características das aplicações que consomem o Web Service, como mostrado na Figura 6:
</p>
<div id="attachment_94" class="wp-caption aligncenter" style="width: 310px"><a href="http://submundojava.com.br/wordpress/wp-content/uploads/2010/02/soa_post_fig_6a.jpg"><img src="http://submundojava.com.br/wordpress/wp-content/uploads/2010/02/soa_post_fig_6a-300x164.jpg" alt="Padrão de múltiplos endpoints de serviços" title="Padrão de múltiplos endpoints de serviços" width="300" height="164" class="size-medium wp-image-94" /></a><p class="wp-caption-text">Padrão de múltiplos endpoints de serviços</p></div>
<h2>Federação de ESB: Um caminho menos árduo</h2>
<p>
    Vimos na sessão anterior que uma arquitetura com um ESB centralizado é uma das causas fundamentais de falhas na implementação de um sistema SOA. Após inúmeras tentativas de implementação de um ESB centralizado em grandes organizações a indústria está adotando um padrão mais ágil de implementação do ESB. Essencialmente, esse novo padrão visa particionar as funcionalidades em leves ESBs físicos que são agrupados como <a href="http://en.wikipedia.org/wiki/Federated_identity">entidades federativas</a>. Este padrão é comumente conhecido como Federação de ESB e representa uma das emergentes arquiteturas para implementar soluções ESB de alta escalabilidade. Com essa arquitetura podemos ter uma infraestrutura ESB específica para interfaces <a href="http://en.wikipedia.org/wiki/Business-to-business">Business to Business</a>, outra para troca de transações financeiras, como mostrada na Figura 6.<br />
<div id="attachment_95" class="wp-caption aligncenter" style="width: 310px"><a href="http://submundojava.com.br/wordpress/wp-content/uploads/2010/02/soa_post_fig_6.jpg"><img src="http://submundojava.com.br/wordpress/wp-content/uploads/2010/02/soa_post_fig_6-300x147.jpg" alt="Padrão de Federação de ESB" title="Padrão de Federação de ESB" width="300" height="147" class="size-medium wp-image-95" /></a><p class="wp-caption-text">Padrão de Federação de ESB</p></div>
</p>
<h2>Governça em SOA: Capitalizando SOA</h2>
<p>
    A limitada adoção do <a href="http://en.wikipedia.org/wiki/Universal_Description_Discovery_and_Integration">UDDI</a> em sistemas SOA de grande porte tem sido um catalisador do surgimento de um modelo mais leve e mais interoperável de governaça em SOA, levando em conta tecnologias como REST e <u><a href="http://en.wikipedia.org/wiki/Web_2.0">Web 2.0</a></u>. Essencialmente, esses modelos foram criados para remover algumas complexidades que são apresentadas pelo modelo UDDI centralizado, substituindo algumas tecnologias por outras amplamente adotadas como HTTP, <a href="http://en.wikipedia.org/wiki/Atom_%28standard%29">Atom</a> e <a href="http://en.wikipedia.org/wiki/JSON">JSON</a>.<br />
    Uma das formas mais populares de implementar esse novo modelo de governaça SOA é utilizar um repositório de serviços RESTful. Neste modelo a implementação tradicional SOA como serviços, endpoints, operações e mensagens são representadas como recursos que podem ser acessados através de um conjunto de interfaces RESTful.<br />
    O maior benefício que traz esse novo modelo é a interoperabilidade ganha utilizando interfaces RESTful, como mostrada na Figura 7, além de ser uma abordagem muito mais leve e flexível.
</p>
<div id="attachment_96" class="wp-caption aligncenter" style="width: 310px"><a href="http://submundojava.com.br/wordpress/wp-content/uploads/2010/02/soa_post_fig_7.jpg"><img src="http://submundojava.com.br/wordpress/wp-content/uploads/2010/02/soa_post_fig_7-300x224.jpg" alt="Repositório RESTful" title="Repositório RESTful" width="300" height="224" class="size-medium wp-image-96" /></a><p class="wp-caption-text">Repositório RESTful</p></div>
<h2>Bem-vindo a <a href="http://en.wikipedia.org/wiki/Cloud_computing">Computação em Núvem</a></h2>
<p>
    A computação em núvem pode auxiliar em uma arquitetura SOA híbrida, onde alguns componentes de um sistema SOA possam estar em uma outra infraestrutura. Alguns exemplos do uso da computação em núvem em um sistema SOA:</p>
<ul>
<li>ESB na Núvem: Podemos hospedar um ESB na núvem? Claro que podemos! Este tipo de arquitetura possibilita disponibilizar todos os recursos de um ESB através de uma infraestrutura na Núvem.</li>
<li>Serviços de Segurança na Núvem: Nos últimos anos temos percebido o aumento da adoção de serviços de segurança, assim como o <a href="http://en.wikipedia.org/wiki/Windows_Live_ID">Windows Live ID</a> ou o <a href="http://en.wikipedia.org/wiki/Facebook_Platform">Facebook Connect</a>, e usar a Núvem para prover serviços de segurança pode facilitar a implementação de mecanismos altamente interoperáveis, disponibilizando serviços de autenticação, identificação e autorização a diversos clientes distintos.</li>
<li>Serviços de Armazenamento na Núvem: Indiscutivelmente, serviços de armazenamento como Amazon S3 ou o Azure DB são os serviços mais atraentes encontrados na Núvem. Considerar esse mecanismo pode alavancar a flexibilidade e a interoperabilidade da troca de dados de seu sistema SOA, além de eliminar algumas complexidades existentes em se ter uma infraestrutura própria para armazenamento de dados.</li>
</ul>
<div id="attachment_97" class="wp-caption aligncenter" style="width: 310px"><a href="http://submundojava.com.br/wordpress/wp-content/uploads/2010/02/soa_post_fig_8.jpg"><img src="http://submundojava.com.br/wordpress/wp-content/uploads/2010/02/soa_post_fig_8-300x208.jpg" alt="Serviços na Núvem" title="Serviços na Núvem" width="300" height="208" class="size-medium wp-image-97" /></a><p class="wp-caption-text">Serviços na Núvem</p></div>
<h2>Conclusão</h2>
<p>
    A tradicional arquitetura SOA implica em sérios desafios que tornam impraticável implementações em larga escala. Este <u>artigo</u> post sugeriu uma série de padrões que podem ajudar o desenvolvedor a ter uma implementação mais leve, interoperável e escalável de SOA, possibilitando realmente serviços de negócio com agilidade em senários de larga escala empresarial.
</p>
<p><b>Abstração de Protocolos:</b></br></p>
<ul>
<li><b>Considerar</b> primeiro o protocolo padrão, HTTP. Ele é muito leve e pode conversar com outros frameworks.</li>
<li><b>Fazer</b> uso do SOAP e WS-* quando houver necessidade de controle de transações ou a necessidade de muita performance no protocolo <a href="http://en.wikipedia.org/wiki/Internet_Protocol_Suite">TCP/IP</a>.</li>
</ul>
<p><b>SOAP e WSDL:</b></br></p>
<ul>
<li><b>Não fazer</b> uso de SOAP e WSDL até ter certeza que vai precisar de algum recurso que eles oferecem.</li>
<li><b>Considerar</b> o uso de REST, JSON e Atom Pub como alternativas mais leves.</li>
<li><b>Não cair</b> na armadilha de gerar o WSDL a partir do código, o contrato vem sempre em primeiro.</li>
</ul>
<p><b>Governaça</b></br></p>
<ul>
<li><b>Fazer</b> uso de um repositório de serviços para ajudar a gerenciar os serviços de sua empresa.</li>
<li><b>Considerar</b> o uso de um repositório de serviços RESTful.</li>
</ul>
<p><b>Enterprise Service Bus</b></br></p>
<ul>
<li><b>Não confundir</b> um ESB com um sistema que processa eventos.</li>
<li><b>Considerar</b> o uso de federação de ESBs.</li>
</ul>
<p><b>Serviços baseados na Núvem</b></br></p>
<ul>
<li><b>Considerar</b> serviços de segurança local, privado ou públic baseados na Núvem, é um dos os serviços mais maduros que existe na Núvem</li>
<li><b>Considerar</b> a possibilidade futura de serviços de armazenamento e serviços de ESB na Núvem.
    </ul>
</p>
<p>
    A coisa mais importante que você deve ter em mente quando está contruindo sua aplicação SOA é o mantra &#8220;Convenção ao invés de Configuração&#8221;. Diminuindo o número de opções ao mínimo e fazendo somente o que são requisitos do negócio, você deve acreditar que é possível contruir uma arquitetura orientada a serviços que seja leve, fácil de manter e evoluir, mesmo em ambientes de larga escala empresarial.
</p>
<h2>Minha Conclusão</h2>
<p>
    Acho que essa segunda parte extendeu um pouco, portanto, vou deixar minha conclusão para uma terceira parte. <img src='http://submundojava.com.br/wordpress/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />
</p>
<p>
    Mesmo assim nessa segunda parte podemos ver as sugestões de Jesus Rodriguez e Don Demsak para solucionar alguns dos problemas encontrados nas implementações tradicionais SOA. Espero que tenham gostado, mas se não gostaram podem deixar suas queixas nos comentários irei acatá-las com certeza. Até a próxima parte&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://submundojava.com.br/wordpress/2010/02/23/parte-2-explorando-padroes-e-principios-para-as-novas-geracoes-de-solucoes-soa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Arquivo eclipse.ini para evitar o tão odiado &#8220;java.lang.OutOfMemoryError: PermGen Space&#8221; Exception.</title>
		<link>http://submundojava.com.br/wordpress/2008/01/15/arquivo-eclipseini-para-evitar-o-tao-odiado-javalangoutofmemoryerror-permgen-space-exception/</link>
		<comments>http://submundojava.com.br/wordpress/2008/01/15/arquivo-eclipseini-para-evitar-o-tao-odiado-javalangoutofmemoryerror-permgen-space-exception/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 23:01:07 +0000</pubDate>
		<dc:creator>Henrique Lima</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://submundojava.com.br/wordpress/2008/01/15/arquivo-eclipseini-para-evitar-o-tao-odiado-javalangoutofmemoryerror-permgen-space-exception/</guid>
		<description><![CDATA[Na verdade, quero ser breve neste POST. A questão é que ontem comecei a escrever um novo POST e precisei instalar o eclipse numa máquina antiga e depois de alguns minutos trabalhando lentamente o tão temido &#8220;permgen&#8221; (para os íntimos) apareceu. Toda vez que isso aconteceu eu preciso entrar no google e lembrar dos valores [...]]]></description>
			<content:encoded><![CDATA[<p>Na verdade, quero ser breve neste POST. A questão é que ontem comecei a escrever um novo POST e precisei instalar o eclipse numa máquina antiga e depois de alguns minutos trabalhando lentamente o tão temido &#8220;permgen&#8221; (para os íntimos) apareceu. Toda vez que isso aconteceu eu preciso entrar no google e lembrar dos valores que eu utilizava para a minha máquina. Segue abaixo o meu eclipse.ini.</p>
<pre class="prettyprint">
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms128m
-Xmx512m
-XX:MaxPermSize=128m
</pre>
<p>E se por um acaso alguém quiser saber mais detalhes sobre este problema, recomendo a leitura do POST <a href="http://xlml.com/aehso/2007/04/05/the-dreaded-javalangoutofmemoryerror-permgen-space-exception/" title="dreaded “java.lang.OutOfMemoryError: PermGen space” error" target="_blank" id="o7z5">dreaded “java.lang.OutOfMemoryError: PermGen space” error</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://submundojava.com.br/wordpress/2008/01/15/arquivo-eclipseini-para-evitar-o-tao-odiado-javalangoutofmemoryerror-permgen-space-exception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
