<?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 do Alone &#187; Java</title>
	<atom:link href="http://www.nelsonalone.com.br/tag/java-jee-jme/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nelsonalone.com.br</link>
	<description>A tecnologia de forma simplificada</description>
	<lastBuildDate>Fri, 27 Jan 2012 11:27:20 +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>JBoss 7 e o problema com o Dom4j</title>
		<link>http://www.nelsonalone.com.br/2012/01/25/jboss-7-e-o-problema-com-o-dom4j/</link>
		<comments>http://www.nelsonalone.com.br/2012/01/25/jboss-7-e-o-problema-com-o-dom4j/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 17:05:57 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[JDom]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=626</guid>
		<description><![CDATA[Pra quem iniciou o JBoss 7 com projetos que utilizam a lib Dom4j deve ter deparado com o erro org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory. Esse erro acontece que nas libs do JBoss já existe a mesma biblioteca. Quando é feito o deploy, ou executado standalone, esse erro acontece. Não adianta remover a lib do<a href="http://www.nelsonalone.com.br/2012/01/25/jboss-7-e-o-problema-com-o-dom4j/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Pra quem iniciou o JBoss 7 com projetos que utilizam a lib Dom4j deve ter deparado <strong><em>com o erro org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory</em></strong>.</p>
<p style="text-align: justify;">Esse erro acontece que nas libs do JBoss já existe a mesma biblioteca. Quando é feito o deploy, ou executado standalone, esse erro acontece. Não adianta remover a lib do classpath da aplicação. Pode ater dar certo mas, se sua aplicação depende dela, talvez os testes automatizados não sejam executados corretamente.</p>
<p style="text-align: justify;">Para solucionar esse problema em uma aplicação web simples, é necessário informar ao JBoss que essa lib é necessária para o projeto. Para isso, é só incluir a linha abaixo no arquivo MANIFEST.MF: <em>Dependencies: org.dom4j</em>. No momento do deploy o JBoss ler esse arquivo para tentar encontrar diretivas utilizadas para gerenciar o ClassLoader da aplicação e gerenciar a dependência de módulos.</p>
<p style="text-align: justify;">Espero ter ajudado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2012/01/25/jboss-7-e-o-problema-com-o-dom4j/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Anti-Patterns</title>
		<link>http://www.nelsonalone.com.br/2012/01/25/java-anti-patterns/</link>
		<comments>http://www.nelsonalone.com.br/2012/01/25/java-anti-patterns/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 11:01:49 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Anti-Pattern]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=618</guid>
		<description><![CDATA[No dia-dia nos deparamos com situações que não sabemos  a melhor forma soluciona-la, levando, as vezes, utilizar de soluções conhecidas como Anti-Pattern. As ferramentas de análise de código ajudam um pouco, mas não chegam a ser imediatas quando precisamos. Nesse caso, a melhor ferramenta é a nossa cachola. Encontrei nesse blog um número repleto de<a href="http://www.nelsonalone.com.br/2012/01/25/java-anti-patterns/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">No dia-dia nos deparamos com situações que não sabemos  a melhor forma soluciona-la, levando, as vezes, utilizar de soluções conhecidas como Anti-Pattern. As ferramentas de análise de código ajudam um pouco, mas não chegam a ser imediatas quando precisamos.</p>
<p style="text-align: justify;">Nesse caso, a melhor ferramenta é a nossa cachola. Encontrei nesse blog um número repleto de dicas para solucionar os problemas de Anti-Pattern que utilizamos no dia-dia. Desde dicas de performance até soluções para determinados problemas. Vale a pena dar uma olhada. <a href="http://www.odi.ch/prog/design/newbies.php">Odi’s Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2012/01/25/java-anti-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss 7 &#8211; Reformulação completa</title>
		<link>http://www.nelsonalone.com.br/2012/01/22/jboss-7-reformulacao-completa/</link>
		<comments>http://www.nelsonalone.com.br/2012/01/22/jboss-7-reformulacao-completa/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 20:58:10 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=602</guid>
		<description><![CDATA[Quando se trata de servidores de aplicação, é difícil deixar de fora da conversa o JBoss. Sem dúvida, o servidor de aplicação mais conhecido no mundo Java. Recentemente, foi disponibilizada a relase 2 do versão 7 do AS, porem, a questão a ser tratada é a reformulação da estrutura do produto em comparação com as<a href="http://www.nelsonalone.com.br/2012/01/22/jboss-7-reformulacao-completa/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Quando se trata de servidores de aplicação, é difícil deixar de fora da conversa o JBoss. Sem dúvida, o servidor de aplicação mais conhecido no mundo Java.</p>
<p style="text-align: justify;">Recentemente, foi disponibilizada a relase 2 do versão 7 do AS, porem, a questão a ser tratada é a reformulação da estrutura do produto em comparação com as versões anteriores. O time de desenvolvimento praticamente refez todo o core do servidor, modificando desde a estrutura de carregamento das classes (classe loadin) até a forma de gerenciamento de dependência.</p>
<p style="text-align: justify;">A interface de administração, apesar de não ser o forte deles, está mais limpa e direta. Através dele é possível ter total informação do que está instalado no servidor, datasources, módulos, dependências,  web services, etc. Lembro que no JBoss 5/6 havia uma interface que mostrava os webservices que estavam disponíveis na aplicação. Nessa versão, esse tipo de informação está disponível na própria interface de administração.</p>
<p style="text-align: justify;">
<h4 style="text-align: justify;">- VELOCIDADE AO SUBIR</h4>
<p style="text-align: justify;">Alguns pontos que se destacaram logo a primeira vista, entre esses, o mais perceptível é a velocidade que o JBoss é iniciado. Ao verificar os detalhes, me deparei na principal mudança ocorrida no núcleo do servidor. Ele está trabalhando inteiramente com OSGI, ou seja, no momento do boot o servidor sobe apenas os módulos necessários para tal. Esses elementos são lidos no arquivo de configuração domain.xml ou standalone.xml respectivamente.</p>
<p style="text-align: justify;">Isso justifica o fator da velocidade de carregamento. Porém, quando for necessário incluir mais um módulo que sua aplicação necessite, um REST ou um Web Service tradicional por exemplo, será necessário editar o arquivo de configuração para que o módulo seja incluso.</p>
<p style="text-align: justify;">
<h4 style="text-align: justify;">- OS MÓDULOS</h4>
<p style="text-align: justify;">Essa informação está bem explícitas nos arquivos de configuração das instâncias, logo na primeira sessão está presente as extensões necessárias para o funcionamento da instância. Mais embaixo, quase no fim do documento, estão os módulos.</p>
<p style="text-align: justify;">Os drivers de conexão JDBC são também tratados como módulos. Portanto, para utilizar um driver de conexão com um determinado banco de dados, será necessário incluí-lo como um módulo e importa-lo do projeto. Isso é feito criando uma hierarquia de diretórios, adicionar o jar do driver no diretório main, conforme o padrão, e criar um documento de descrição do módulo em questão, como o exemplo abaixo:</p>
<p style="text-align: justify;"><a href="http://www.nelsonalone.com.br/content/wp-content/uploads/2012/01/Captura-de-Tela-2012-01-22-às-15.53.35.png"><img class="size-medium wp-image-604 aligncenter" title="Captura de Tela 2012-01-22 às 15.53.35" src="http://www.nelsonalone.com.br/content/wp-content/uploads/2012/01/Captura-de-Tela-2012-01-22-às-15.53.35-300x190.png" alt="" width="300" height="190" /></a></p>
<p style="text-align: justify;">
<p style="text-align: justify;">
<h4 style="text-align: justify;">- INSTÂNCIA</h4>
<p style="text-align: justify;">A versão 7 suporta uma característica muito útil que para organizar as aplicações. O conceito de instância. Quem já trabalhou com o Oralce Application Server (hoje em dia Web Ligic) e com o WebSphere sentia bastante falta desse conceito no JBoss para efetuar configurações específicas de uma aplicação específica.</p>
<p style="text-align: justify;">No primeiro momento, a opção por executar o jboss no modo standalone, mesmo em ambiente de produção, torna-se a melhor opção pelo fato da facilidade, ou melhor, ser um processo parecido como o que tinha nas versões anteriores.  Isso não quer dizer que não funcione, pelo contrário, funciona perfeitamente, tanto que temos aplicações rodando com essa configuração.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">Acredito que, além da quantidade de recursos existentes nessa nova versão, uma outra característica que vem implícita com o servidor de aplicação, mesmo nas versões anteriores, é a simplicidade. A curva de aprendizado para configurar e disponibilizar um servidor de aplicação JBoss é bem baixa.</p>
<p style="text-align: justify;">O JBoss apresentou um servidor de aplicação robusto e simples de utilizar. Acredito que com essa ultima versão deixou muito dos seus usuários otimistas, mesmo com as mudanças drásticas realizadas em sua estrutura.</p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2012/01/22/jboss-7-reformulacao-completa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter Storm no GitHub</title>
		<link>http://www.nelsonalone.com.br/2011/09/26/twitter-storm-no-github/</link>
		<comments>http://www.nelsonalone.com.br/2011/09/26/twitter-storm-no-github/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 15:08:18 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[storm]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=595</guid>
		<description><![CDATA[A equipe de desenvolvimento do Twitter disponibilizou nessa segunda a ultima versão do storm. Pra quem não conhece, assim como eu a duas horas atrás, é uma API do Twitter, desenvolvida pela BackType, utilizada para solucionar problemas de processamento em tempo real com tolerância a falhas. Referências abaixo: Artigo na Infoq: Link Repositório no GitHub:<a href="http://www.nelsonalone.com.br/2011/09/26/twitter-storm-no-github/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">A equipe de desenvolvimento do Twitter disponibilizou nessa segunda a ultima versão do storm. Pra quem não conhece, assim como eu a duas horas atrás, é uma API do Twitter, desenvolvida pela BackType, utilizada para solucionar problemas de processamento em tempo real com tolerância a falhas.</p>
<p style="text-align: justify;">Referências abaixo:</p>
<p style="text-align: justify;">Artigo na Infoq: <a title="infoq" href="http://www.infoq.com/news/2011/09/twitter-storm-real-time-hadoop">Link</a></p>
<p style="text-align: justify;">Repositório no GitHub: <a title="github download" href="https://github.com/nathanmarz/storm/downloads">Link</a></p>
<p style="text-align: justify;">Wiki: <a title="wiki github" href="https://github.com/nathanmarz/storm/wiki">Link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2011/09/26/twitter-storm-no-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate/JPA – Utilizando SQL sem perder o vinculo dos objetos relacionados</title>
		<link>http://www.nelsonalone.com.br/2011/09/22/hibernatejpa-%e2%80%93-utilizando-sql-sem-perder-o-vinculo-dos-objetos-relacionados/</link>
		<comments>http://www.nelsonalone.com.br/2011/09/22/hibernatejpa-%e2%80%93-utilizando-sql-sem-perder-o-vinculo-dos-objetos-relacionados/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 16:51:37 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Persistência]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPA]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=581</guid>
		<description><![CDATA[Não há dúvidas de que o hibernate é um excelente ORM, se não o melhor que há no mercado. Porém, muitas pessoas, satisfeitas com os procedimentos iniciais de aprendizado do framework, não se dão conta das demais funcionalidades disponíveis para o desenvolvedor. A lista é vasta, confesso que posso não conhecer a metade, mas alguns<a href="http://www.nelsonalone.com.br/2011/09/22/hibernatejpa-%e2%80%93-utilizando-sql-sem-perder-o-vinculo-dos-objetos-relacionados/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Não há dúvidas de que o hibernate é um excelente ORM, se não o melhor que há no mercado. Porém, muitas pessoas, satisfeitas com os procedimentos iniciais de aprendizado do framework, não se dão conta das demais funcionalidades disponíveis para o desenvolvedor. A lista é vasta, confesso que posso não conhecer a metade, mas alguns dias atrás, uma dessas funcionalidades me ajudou muito.</p>
<p style="text-align: justify;">Um objeto persistente, para o hibernate, é uma entidade que contem relacionamentos com outras entidades que juntos formam uma relação. Em diversas situações, na maioria das vezes no mundo real, essa relação se torna complexa quando existe a necessidade de relação com outras entidades, somado com o numero enorme de dados relacionados. Existem várias formas de obter essas esses dados relacionados, uns que permitem obter todo o conjunto de dados relacionados ao carregar o objeto (eager), outro no momento que a relação é obtida (lazy). Outras alternativas podem ser utilizadas em conjunto, como, as consultas nomeadas atreladas ao carregamento do objeto. Porém, apenas obter a lista de desses informações não é suficiente para a aplicação, fazendo com que o desenvolvedor utiliza consultas mais elaboradas com HQL ou criteria.</p>
<p style="text-align: justify;">A forma como o framework monta as consultas é na maioria das vezes genérica e pouco intuitiva, fazendo com que o desenvolvedor opte por utilizar o SQL nativo, ou portar a consulta para uma Stored Procedure para construir uma consulta mais elaborada. É uma estratégia plausível quando a aplicação necessita de desempenho mas, isso tiraria a principal vantagem do framework; o acesso as relações que são representadas pelo relacionamento entre os objetos. Existe uma maneira muito simples de executar uma consulta SQL mantendo o relacionamento entre os objetos.</p>
<p style="text-align: justify;">Para o framework, os objetos persistentes são de extrema importância. Quando o framework é executado pela primeira vez, ele adiciona uma série de funcionalidade nos objetos persistentes que permite realizar as operações em suas relações. A maneira com que o framework realiza essa tarefa é pela <a title="Instrumentação de cógigo - Wikipedia" href="http://en.wikipedia.org/wiki/Instrumentation_%28computer_programming%29">Instrumentação</a> de código. A instrumentação nada mais de uma técnica de incluir alterações do código do programa mesmo após a sua compilação. O conceito pode ser semelhante com Reflexão e AOP, mas existem particularidades que tornam os conceitos bem distintos. Por ser um assunto muito pesquisado e com referencias em abundância, é um assunto para ser tratado outra hora. No hibernate, isso é feito através da lib ASM, que é um extenso conjunto de utilidade que permitem a plicar esse conceito nas classes escritas em linhagem Java.</p>
<p>Bom, para que o framework compreenda que o resultado de uma consulta SQL possa ser vinculado a um objeto é necessário que o retorno corresponda aos atributos do objeto, sendo que o objeto possa ser reconhcido pelo motor de consulta. Ex:<code></code></p>
<p><code><br />
List&lt;ClasseQualquer&gt; planos = new ArrayList&lt;ClasseQualquer&gt;();<br />
String queryStr = queryUtils.findValue(nome_da_query); //obtem a string de consulta<br />
Query query = entityManager.createNativeQuery(queryStr, ClasseQualquer.class);</code></p>
<p>&nbsp;</p>
<p>Obtendo um objeto Query configurado como acima, é possível realizar operações como essas abaixo:<code><br />
</code></p>
<p><code>List dados = instanciaObjetoQualquer.getDadosParticulares();</code></p>
<p>&nbsp;</p>
<p>Esse simples macete pode ajudar bastente para obter objetos, que necessitem manter o acesso aos objetos relacionados, através de consultas bem elaboradas e com o desempenho do SQL.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2011/09/22/hibernatejpa-%e2%80%93-utilizando-sql-sem-perder-o-vinculo-dos-objetos-relacionados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Suporte a Ruby on Rails descontinuado no NetBeans</title>
		<link>http://www.nelsonalone.com.br/2011/01/27/suporte-a-ruby-on-rails-descontinuado-no-netbeans/</link>
		<comments>http://www.nelsonalone.com.br/2011/01/27/suporte-a-ruby-on-rails-descontinuado-no-netbeans/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 16:18:21 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[RoR]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=555</guid>
		<description><![CDATA[Não tenho muito o que falar por nunca ter utilizado o NetBeans para esse propósito, mas é uma notícia triste para as pessoas que mantinham projetos RoR sobre essa IDE. Em resumo, o fato foi devido a necessidade de priorizar o relase 7 (JDK 7), por ser o maior relase da plataforma,  e pela baixa<a href="http://www.nelsonalone.com.br/2011/01/27/suporte-a-ruby-on-rails-descontinuado-no-netbeans/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } --><span style="font-family: Arial, sans-serif;">Não tenho muito o que falar por nunca ter utilizado o NetBeans para esse propósito, mas é uma notícia triste para as pessoas que mantinham projetos RoR sobre essa IDE. </span></p>
<p><span style="font-family: Arial, sans-serif;">Em resumo, o fato foi devido a necessidade de priorizar o relase 7 (JDK 7), por ser o maior relase da plataforma,  e pela baixa utilização da IDE para projetos RoR. </span></p>
<p><span style="font-family: Arial, sans-serif;">Segue a fonte <a href="http://netbeans.org/community/news/show/1507.html">AQUI</a>.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2011/01/27/suporte-a-ruby-on-rails-descontinuado-no-netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dica de Leitura: Effective Java Second Edition</title>
		<link>http://www.nelsonalone.com.br/2011/01/05/dica-de-leitura-effective-java-second-edition/</link>
		<comments>http://www.nelsonalone.com.br/2011/01/05/dica-de-leitura-effective-java-second-edition/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 11:37:58 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[Effective Java]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[livro]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=522</guid>
		<description><![CDATA[Para quem quer se aprofundar na linguagem Java, segue uma importante dica de leitura: Effective Java. É uma obra clássica que todo programador Java deveria ter em sua estante, ou melhor, em sua mesa de trabalho. O livro está na segunda edição e contem uma série assuntos voltados para os recursos da versão 5 e<a href="http://www.nelsonalone.com.br/2011/01/05/dica-de-leitura-effective-java-second-edition/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p><!-- p { margin-bottom: 0.21cm; }a:link {  } --><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Para quem quer se aprofundar na linguagem Java, segue uma importante dica de leitura: <a href="http://java.sun.com/docs/books/effective/">Effective Java</a>. É uma obra clássica que todo programador Java deveria ter em sua estante, ou melhor, em sua mesa de trabalho. O livro está na segunda edição e contem uma série assuntos voltados para os recursos da versão 5 e 6 da linguagem. Como o autor afirma no texto; “Esse livro foi concebido para torna-lo mais eficiente no uso da linguagem Java e em suas bibliotecas fundamentais”. </span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><a href="http://www.nelsonalone.com.br/content/wp-content/uploads/2011/01/effective.jpeg"><img class="aligncenter size-full wp-image-524" title="effective" src="http://www.nelsonalone.com.br/content/wp-content/uploads/2011/01/effective.jpeg" alt="" width="167" height="167" /></a></p>
<p></span></span></p>
<p><!-- p { margin-bottom: 0.21cm; } --><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Os assuntos abordados vão dês dos fundamentos da criação de objetos até paralelismo. No decorrer do texto é possível encontrar afirmações como “Não faça isso” para as práticas não recomendadas e em seguida a maneira correta de se fazer. </span></span></p>
<p><span style="font-family: Arial,sans-serif;"><span style="font-size: x-small;"><a href="http://www.nelsonalone.com.br/content/wp-content/uploads/2011/01/josh.jpeg"><img class="aligncenter size-full wp-image-525" title="josh" src="http://www.nelsonalone.com.br/content/wp-content/uploads/2011/01/josh.jpeg" alt="" width="259" height="194" /></a></p>
<p></span></span></p>
<p><!-- p { margin-bottom: 0.21cm; }a:link {  } --><span style="font-family: Arial,sans-serif;"><span style="font-size: small;">Joshua Bloch é um dos desenvolvedores das principais APIs do Java, entre elas está as collections e math e assert. Hoje em dia ele assumiu o cargo de Chief Java Architect na Google. Mais detalhes <a href="http://en.wikipedia.org/wiki/Joshua_Bloch">aqui</a>. </span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2011/01/05/dica-de-leitura-effective-java-second-edition/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O Builder na prática e no Mundo Real</title>
		<link>http://www.nelsonalone.com.br/2010/11/03/o-builder-na-pratica-e-no-mundo-real/</link>
		<comments>http://www.nelsonalone.com.br/2010/11/03/o-builder-na-pratica-e-no-mundo-real/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 18:26:41 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=507</guid>
		<description><![CDATA[O padrão de projetos Builder permite a separação da construção de objetos complexos de sua representação possibilitando, com o mesmo processo de construção, criar diferentes representações. No desenho tradicional do GOF ele aparece como um elemento agregado do Builder, possibilitando a criação na forma separada. Mas o padrão Builder cumpre um papel importante no “jeitão”<a href="http://www.nelsonalone.com.br/2010/11/03/o-builder-na-pratica-e-no-mundo-real/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p>O padrão de projetos Builder permite a separação da construção de objetos complexos de sua representação possibilitando, com o mesmo processo de construção, criar diferentes representações.</p>
<p>No desenho tradicional do GOF ele aparece como um elemento agregado do Builder, possibilitando a criação na forma separada. Mas o padrão Builder cumpre um papel importante no “jeitão” das libs contidas na JVM. Um exemplo disso é o fato de Utilizar o tradicional System.out.println() ou o System.gc() que são processos de iniciação estáticos.</p>
<p><a href="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/11/builder.png"><img class="aligncenter size-medium wp-image-508" title="builder" src="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/11/builder-300x153.png" alt="" width="300" height="153" /></a></p>
<p>De acordo com o item 2 do Effective Java 2nd Edicition do Joshua Bloch, “<em>Static factories and constructors share a limitation: they do not scale well to large numbers of optional parameters</em>”. Segundo Bloch, a solução para isso está na construção de métodos státicos associados aos tipos genéricos para construir os objetos de forma elegante como abaixo:</p>
<pre class="brush:java">Rectangle rec = new Rectangle.Builder().opacity(5.0).height(1.2).build();
</pre>
<p>Quando se faz muitos testes unitários, a maioria das vezes torna-se necessário construir objetos, ou mocks, que representam um estado fictício para a execução dos demais testes. E frequentemente utilizamos o método tradicional, com os construtores:</p>
<pre class="brush:java">Usuario usuario = new Usuario("Nelson","Alone",new Date(),"alone","alone",new Departamento(),new Filial());
</pre>
<p>É uma forma tediosa de iniciar objetos quando temos vários atributos que precisamos preencher para utilizá-lo no procedimento de teste. Portanto, o Builder pode agilizar esse processo da seguinte forma</p>
<p>Para exemplificar a utilização do Builder com métodos genéricos e de classes internas, inicialmente vamos preparar a construção de duas classes tradicionais, Rectangle e Chape. Utilizaremos classes internas para a construção dos objetos internamente. Isso faz com qua a instancia da classes possa ser feita através da classes interna e do método builder para finalização do processo:</p>
<pre class="brush:java">public class Shape {

	private final double opacity;

	protected static abstract class Init&lt;T extends Init&lt;T&gt;&gt; {
		private double opacity;
		protected abstract T self();

		public T opacity(double opacity) {
			this.opacity = opacity;
			return self();
		}
	}

	public static class Builder extends Init&lt;Builder&gt; {
		protected Builder self() {
			return this;
		}
	}

	protected Shape(Init&lt;?&gt; init) {
		this.opacity = init.opacity;
	}

}
</pre>
<pre class="brush:java">public class Rectangle extends Shape {
	private final double height;

	protected static abstract class Init&lt;T extends Init&lt;T&gt;&gt; extends Shape.Init&lt;T&gt; {

		private double height;

		public T height(double height) {
			this.height = height;
			return self();
		}

		public Rectangle build() {
			return new Rectangle(this);
		}

	}

	public static class Builder extends Init&lt;Builder&gt; {
		protected Builder self() {
			return this;
		}
	}

	protected Rectangle(Init&lt;?&gt; init) {
		super(init);
		this.height = init.height;
	}

}
</pre>
<p>Exemplo para construção:</p>
<pre class="brush:java">Rectangle rec = new Rectangle.Builder().opacity(5.0).height(1.2).build();
</pre>
<p>Já ajudou bastante. A cada atributo incluso é retornado uma instância do construtor para a inclusão posterior, sendo finalizado pelo método build(). Porém, é necessário o acoplamento da classes interna para a preparação do Builder ara a sua utilização. Essa solução pode solucionar o problema, mas vamos fazer diferente. </p>
<p>Agora, temos um jeito mais elegante de construer objetos sem o auxílio direto da classe interna Builder. Utilizaremos o método estático builder para auxiliar no processo, como abaixo:</p>
<pre class="brush:java">public class Shape {

	private final double opacity;

	public static abstract class Builder&lt;T extends Builder&lt;T&gt;&gt; {
		private double opacity;

		protected abstract T self();

		public T opacity(double opacity) {
			this.opacity = opacity;
			return self();
		}

		public Shape build() {
			return new Shape(this);
		}
	}

	public static class Builder2 extends Builder&lt;Builder2&gt; {
		public Builder2 self() {
			return this;
		}
	}

	public static Builder&lt;?&gt; builder() {
		return new Builder2();
	}

	protected Shape(Builder&lt;?&gt; builder) {
		this.opacity = builder.opacity;
	}

}</pre>
<pre class="brush:java">public class Rectangle extends Shape {
	private final double height;

	protected static abstract class Builder&lt;T extends Builder&lt;T&gt;&gt; extends Shape.Builder&lt;T&gt; {

		private double height;

		public T height(double height) {
			this.height = height;
			return self();
		}

		public Rectangle build() {
			return new Rectangle(this);
		}

	}

	public static class Builder2 extends Builder&lt;Builder2&gt; {
		protected Builder2 self() {
			return this;
		}
	}

	public static Builder&lt;?&gt; builder() {
		return new Builder2();
	}

	protected Rectangle(Builder&lt;?&gt; init) {
		super(init);
		this.height = init.height;
	}

}</pre>
<p>Exemplo para construção:</p>
<pre class="brush:java">Rectangle rec = Rectangle.builder().opacity(14.45).height(478.41).build();
</pre>
<p>Ficou mais aceitável e, ao mesmo tempo, menos acoplável. Internamente, temos mais código, mas facilita bastante a construção do objeto caso tenha um número grande de parâmetros.</p>
<p>Faça <a title="Fontes" href="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/11/makebuilderadapter.zip">download dos fontes</a>,  execute os teste e veja como fica em uma solução mais complexa.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2010/11/03/o-builder-na-pratica-e-no-mundo-real/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como anda o Java</title>
		<link>http://www.nelsonalone.com.br/2010/11/02/como-anda-o-java/</link>
		<comments>http://www.nelsonalone.com.br/2010/11/02/como-anda-o-java/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 21:16:06 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jvm]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=494</guid>
		<description><![CDATA[O surgimento das linguagens dinâmicas em conjunto com a flexibilidade atribuída as suas VMs tem atraído enorme interesse dos desenvolvedores para esse novo segmento. A elegância atribuída a facilidade, fez com que uma comunidade se formasse em torno das novas tendências que agregam em eficiência no tempo de desenvolvimento de sistemas computacionais, formando a falsa<a href="http://www.nelsonalone.com.br/2010/11/02/como-anda-o-java/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">O surgimento das linguagens dinâmicas em conjunto com a flexibilidade atribuída as suas VMs tem atraído enorme interesse dos desenvolvedores para esse novo segmento. A elegância atribuída a facilidade, fez com que uma comunidade se formasse em torno das novas tendências que agregam em eficiência no tempo de desenvolvimento de sistemas computacionais, formando a falsa conclusão de que outras linguagens, ditas corporativas, estariam depreciáveis. Em paralelo, estão as metodologias ágeis, que são difundidas como elementos primordiais para a adoção de uma nova cultura no desenvolvimento de projetos, não só computacionais, mais, principalmente voltados para a área de tecnologia da informação.</p>
<p style="text-align: justify;">Desenvolvedores de software estão sempre criando elementos que agilizem as tarefas que de desenvolvimento e dos clientes pelo qual trabalham, na maioria das vezes, tentando fazer com que suas empresas obtenham maior velocidade em suas rotinas administrativas aumentando sempre o ponto motivacional, o lucro. Muitas vezes, os clientes não conhecem a dimensão e nem a complexidade que compõe o produto que solicitou e atribui prazos horrendos para um produto simplesmente pelo fato de não conhecer as nuancias que essa atividade depende. Aí está a motivação de tornar, pelo menos, a maioria das atividade que compõe o desenvolvimento de software automáticas, simples, intuitivas e ao mesmo tempo divertidas.</p>
<p style="text-align: justify;">A motivação para isso resulta na criação de builds automatizados, integração contínua, track lists, bug track e etc. Em muitas situações, esses elementos não são suficientes, já que, mesmo com um grande  aparato para apoio na atividades, não não estão livres de erros. Erros sempre vão acontecer, suas dimensões dependerão do tamanho e complexidade do produto a ser entregue e da experiência que a equipe tem com projetos. Nessas situações pegunta-se, o que podemos fazer para aumentar a velocidade de desenvolvimento de nossas aplicações. Evangelistas responderiam freneticamente que as linguagens dinâmicas preencheriam essa lacuna e resolveriam esse problema.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">
<ul style="text-align: justify;">
<li>Linguagens 	Dinâmicas</li>
</ul>
<p style="text-align: justify;">
<p style="text-align: justify;">As linguagens dinâmicas não são bem uma novidade para os desenvolvedores mais experientes. Há muito tempo tornaram-se peça chave para os desenvolvedores de software que optam por automatizar suas tarefas, adicionar funcionanlidades a conteúdos estáticos e até mesmo estar no núcleos dos software mais complexos. Entre as mais conhecidas estão JavaScript, PHP, Python e Ruby com as principais opções nesse segmento. Quando se fala em Web o que vem na ponta da língua são essas soluções. Mas, será que essas linguagens podem preencher todos os tipos de necessidades. Acredito que não. Sou completamente a favor do programador poliglota e conhecedor  dos mais numerosos itens do seu canivete suíço e em conjunto com metodologias ágeis o desenvolvedor pode aflorar muitas de suas habilidades.</p>
<p style="text-align: justify;">Ruby foi um dos principais expoentes desse movimento que cresce cada vez mais. Uma linguagem dinâmica, funcional, elegante e com um grau de orientação a objetos altíssimo vem tomando o interesse, não só dos novos desenvolvedores, mas também dos desenvolvedores experientes vindos de outras linguagens. Screencasts que ensinam a desenvolver CRUDs com uma velocidade considerável estão aos montes nos blogs e YouTube.</p>
<p style="text-align: justify;"><img class="aligncenter size-medium wp-image-495" title="ruby_matz_python" src="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/11/ruby_matz_python-246x300.jpg" alt="" width="246" height="300" /></p>
<p style="text-align: justify;">Com o excelente trabalho dos evangelistas na divulgação do produto, sendo ajudados pela velocidade da informação em conjunto com a difusão da substituição das linguagens tradicionais no segmento enterprise, as empresas estão notando o potencial do conjunto. O potencial é visível, mas o investimento feito nas linguagens que conhecemos hoje como também na plataforma, certamente são a principal barreira para esse fator. Barreira justificável quando se trata de desempenho, maturidade e, principalmente do apoio que teriam ao negócio.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">Sabemos que recentemente a Oracle, uma das principais colaboradoras da plataforma Java, comprou a SUN Microsistem co</p>
<p style="text-align: justify;">m o objetivo de agregar mais valor ao seu portfólio de aplicações enterprise. Muitos das peças chaves da SUN saíram em decorrência, principalmente, da filosofia acadêmica natural da universidade de Stanford que, até o momento, era uma das principais colaboradoras da empresa. Tendo em vista esse histórico, a aquisição da Sun pela Oracle teve um impacto negativo não só aos seus funcionários como também em toda comunidade ao redor dos produtos da empresa. Nesse momento, a facilidade que a linguagem Java oferecia e a questão de ser multiplataforma estava em descrédito, principalmente pelo fato das novas features adicionadas no Java 5 (Annotations, Varargs, Boxing e Generics) que os desenvolvedores torciam o nariz temendo o aumento da complexidade da linguagem.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">A alternativa a outras linguagens fez com que muitos desenvolvedores voltassem os olhos para outras alternativas e, entre essas, as linguagens que hoje estão se tornando as mais populares, como:Ruby e Python. Python tem um histórico de sucesso para os desenvolvedores que utilizam o Linux. Muita coisa do Goolge foi feito com Python, elem do mais, a gigante fez com que a linguagem fosse a primeira a ter suporte no Google App Engine.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">Ruby ainda não foi adotada pela Google, mas é um nome quente quando se trata de comunidade ao redor dela. Criada no Japão por Matz com o objetiva de ser melhor que Pearl, teve muita popularidade principalmente por ser mais flexível e com um nível elevado de orientação a objetos. Particularmente, gosto muito da linguagem Ruby. Acho interessante o fator escrever fazer mais com pouco código. Principalmente quando se trata do Rails.</p>
<ul style="text-align: justify;">
<li> A 	linguagem/plataforma Java</li>
</ul>
<p style="text-align: justify;">
<p style="text-align: justify;">Dei enfase, de forma não tanto comprativa com java, devido as circunstancias do que está acontecendo após a compra da SUN pela Oracle. Esse fato, deixou uma onda de boatos sobre a plataforma Java ao ponto de deixar qualquer cético em dúvida sobre as direções tomadas pela oracle. A saída do Gosling, Schwartz e as indefinições como o que vai acontecer com o OpenOffice e o Mysql provocou uma grande dúvida na estratégia da Oracle relacionado ao vinculo de mercado desses produtos. Notícias recentes apontam uma postura enérgica sobre o JCP que foi muito criticada pela comunidade, porém, bem aceita pelos desenvolvedores.</p>
<p style="text-align: justify;"><a href="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/11/1268514479_67022913_2-moto-antiga-java-Ourem-1268514479.jpg"><img class="aligncenter size-medium wp-image-498" title="1268514479_67022913_2-moto-antiga-java-Ourem-1268514479" src="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/11/1268514479_67022913_2-moto-antiga-java-Ourem-1268514479-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p style="text-align: justify;">A questão, pode ser uma especulação, é de tornar o Java cada vez mais comercial, enterprise e profissional. Não me recordo se a Oracle obteve uma empresa com uma grande comunidade por trás de um produto como é o Java. Talvez seja uma estratégia de mercado de agrupamento de produtos em forma de pacotes comerciais. Ou o pior, o fazer o que Jobs fez quando voltou para Apple; enxugar a quantidade de produtos objetivando um único foco e com qualidade.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">A questão é que: Uma linguagem, plataforma, seja o que for não morre de um dia para o outro. Existe muita coisa que foi feito sobre a plataforma que não pode ser descartada. O investimento, feito na época pela SUN, no aprimoramento e formação de profissionais certificados, não só na linguagem, mas também na plataforma SOLARIS, foi muito alto e resultou em um gerando número de pessoas que tem pelo menos uma certificação nos produtos da SUN. Acredito a poeira vai baixar e que a plataforma, pode ser que não a linguagem, serão um dos pontos fortes de investimento, não só da Oracle, mas também de outras empresas e da comunidade.</p>
<p style="text-align: justify;"><a href="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/11/fowler.jpg"><img class="aligncenter size-medium wp-image-499" title="fowler" src="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/11/fowler-300x228.jpg" alt="" width="300" height="228" /></a></p>
<p style="text-align: justify;">Muitos vão dizer: O pessoal da <a href="http://www.thoughtworks.com/radar">Thoughtworks</a> publicou um artigo afirmando que não utilizarão a linguagem Java nos seus projetos daqui pra frente, pensarão em Java apenas como VM. Eles tem voz forte no mercado, ditam tendencias. Pode ser que isso se intensifique porque já está acontecendo. Java está perdendo popularidade no mundo open source, portém, no mundo corporativo ela é muito requisitada.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">
<p style="text-align: justify;">
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2010/11/02/como-anda-o-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle compara linha por linha cópias feitas pelo Google</title>
		<link>http://www.nelsonalone.com.br/2010/10/29/oracle-compara-linha-por-linha-copias-feitas-pelo-google/</link>
		<comments>http://www.nelsonalone.com.br/2010/10/29/oracle-compara-linha-por-linha-copias-feitas-pelo-google/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 14:31:40 +0000</pubDate>
		<dc:creator>nelsonsozinho</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.nelsonalone.com.br/?p=489</guid>
		<description><![CDATA[O Blog Beetween The Lines publicou uma nota informando em detalhes, linha por linha, sobre a cópia que a Google fez dos fontes de JVM para a plataforma Android. A informação é bem evidente. Como é possível notar, nessa classe existe poucas diferenças como número de chaves, quantidade de parâmetros e nomes de variáveis. Existem<a href="http://www.nelsonalone.com.br/2010/10/29/oracle-compara-linha-por-linha-copias-feitas-pelo-google/"> <br /><br /> (More)…</a>]]></description>
			<content:encoded><![CDATA[<p>O<a title="Between the Lines" href="http://www.zdnet.com/blog/btl/oracle-says-google-directly-copied-java-code-heres-the-line-by-line-comparison/41025"> Blog Beetween The Lines</a> publicou uma nota informando em detalhes, linha por linha, sobre a cópia que a Google fez dos fontes de JVM para a plataforma Android. A informação é bem evidente.</p>
<p><a href="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/10/orclcode.png"><img class="aligncenter size-medium wp-image-490" title="orclcode" src="http://www.nelsonalone.com.br/content/wp-content/uploads/2010/10/orclcode-300x132.png" alt="" width="300" height="132" /></a></p>
<p>Como é possível notar, nessa classe existe poucas diferenças como número de chaves, quantidade de parâmetros e nomes de variáveis.</p>
<p>Existem mais detalhes no <a title="Between the Lines" href="http://www.zdnet.com/blog/btl/oracle-says-google-directly-copied-java-code-heres-the-line-by-line-comparison/41025">blog do autor</a>, inclusive os documentos redigidos pela empresa referente ao feito.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nelsonalone.com.br/2010/10/29/oracle-compara-linha-por-linha-copias-feitas-pelo-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

