<?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; rio</title>
	<atom:link href="http://blog.caelum.com.br/tag/rio/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>Nova sede da Caelum no Rio de Janeiro</title>
		<link>http://blog.caelum.com.br/nova-sede-da-caelum-no-rio-de-janeiro/</link>
		<comments>http://blog.caelum.com.br/nova-sede-da-caelum-no-rio-de-janeiro/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 23:44:34 +0000</pubDate>
		<dc:creator>Nico Steppat</dc:creator>
				<category><![CDATA[Caelum]]></category>
		<category><![CDATA[Inovação]]></category>
		<category><![CDATA[rio]]></category>
		<category><![CDATA[rj]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/?p=3291</guid>
		<description><![CDATA[Depois de um mês de reformas a nova casa da Caelum RJ está pronta! Estamos em um novo prédio com um conjunto de salas maior e totalmente reformado. Nosso novo endereço no RJ é Rua do Ouvidor 50, Sobreloja 200 &#8211; na esquina com a Rua Primeiro de Março. Exibir mapa ampliado O novo local <a href="http://blog.caelum.com.br/nova-sede-da-caelum-no-rio-de-janeiro/#more-3291'" 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/2010/10/IMG_0312.jpg" width="240" />
		</p><p>Depois de um mês de reformas a nova casa da Caelum RJ está pronta! Estamos em um novo prédio com um conjunto de salas maior e totalmente reformado. Nosso novo endereço no RJ é <strong>Rua do Ouvidor 50, Sobreloja 200</strong> &#8211; na esquina com a Rua Primeiro de Março. </p>
<p><iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com.br/maps?f=q&amp;source=s_q&amp;hl=pt-BR&amp;geocode=&amp;q=Rua+do+Ouvidor+50,+Rio+de+Janeiro;z=14&amp;output=embed"></iframe><br /><small><a href="http://maps.google.com.br/maps?f=q&amp;source=embed&amp;hl=pt-BR&amp;geocode=&amp;q=Rua+do+Ouvidor+50,+Rio+de+Janeiro+&amp;sll=-22.897604,-43.16833&amp;sspn=0.001942,0.005284&amp;ie=UTF8&amp;hq=&amp;hnear=R.+do+Ouvidor,+50+-+Centro,+Rio+de+Janeiro,+20040-030&amp;ll=-22.902516,-43.174059&amp;spn=0.004131,0.010568&amp;z=14" style="color:#0000FF;text-align:left">Exibir mapa ampliado</a></small></p>
<p>O novo local conta com <b>muito mais espaço</b>,  com 4 salas de aula e um grande espaço para o lanche, além da recepção e administração, tudo <b>reformado</b> e <b>cuidadosamente preparado</b>. Com o investimento na nova sede, a Caelum espera melhorar ainda mais o serviço prestado na capital carioca e atender a crescente demanda de treinamentos.</p>
<p><a href="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2010/10/IMG_0315.jpg"><img src="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2010/10/IMG_0315-300x225.jpg" alt="" title="Sala Caelum RJ" width="300" height="225" class="alignleft size-medium wp-image-3303" /></a></p>
<p><a href="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2010/10/IMG_0334.jpg"><img src="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2010/10/IMG_0334-300x225.jpg" alt="" title="Sala de Aula Caelum RJ" width="300" height="225" class="alignleft size-medium wp-image-3305" /></a></p>
<p><a href="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2010/10/IMG_0312.jpg"><img src="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2010/10/IMG_0312-300x225.jpg" alt="" title="Sala de Aula Caelum RJ " width="300" height="225" class="alignleft size-medium wp-image-3307" /></a></p>
<p>O antigo local na Rua Senador Dantas foi desativado e a partir desde momento a Caelum RJ está funcionando na <b>Rua do Ouvidor, 50</b> (os telefones continuam os mesmos).</p>
<p>Venha nos visitar no novo endereço. Esperamos te encontrar lá!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/nova-sede-da-caelum-no-rio-de-janeiro/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Caelum com as portas abertas no Rio de Janeiro</title>
		<link>http://blog.caelum.com.br/caelum-rj-com-as-portas-abertas/</link>
		<comments>http://blog.caelum.com.br/caelum-rj-com-as-portas-abertas/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 04:37:28 +0000</pubDate>
		<dc:creator>Nico Steppat</dc:creator>
				<category><![CDATA[Caelum]]></category>
		<category><![CDATA[Inovação]]></category>
		<category><![CDATA[cursos]]></category>
		<category><![CDATA[inauguração]]></category>
		<category><![CDATA[rio]]></category>
		<category><![CDATA[rio de janeiro]]></category>
		<category><![CDATA[rj]]></category>
		<category><![CDATA[treinamento]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/?p=334</guid>
		<description><![CDATA[A Caelum no Rio de Janeiro está inaugurada! Estamos muito contentes em agora ter um lugar próprio aqui, onde já temos diversos clientes. Estamos na Rua Senador Dantas 80, Salas 307/308, no Centro da Cidade. É muito perto da estação de metrô Carioca (Saida Rua Senador Dantas). Estamos finalizando as reformas nas salas, mas já <a href="http://blog.caelum.com.br/caelum-rj-com-as-portas-abertas/#more-334'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>A Caelum no Rio de Janeiro está inaugurada! Estamos muito contentes em agora ter um lugar próprio aqui, onde já temos diversos clientes.</p>
<p>Estamos na <a href="http://maps.google.com/maps?f=q&amp;hl=pt-BR&amp;geocode=&amp;q=Rua+Senador+Dantas+80,+Rio+de+Janeiro&amp;sll=-22.9289,-43.175943&amp;sspn=0.009308,0.01914&amp;ie=UTF8&amp;ll=-22.90893,-43.177772&amp;spn=0.009309,0.01914&amp;z=16&amp;iwloc=addr">Rua Senador Dantas 80</a>, Salas 307/308, no Centro da Cidade. É muito perto da estação de metrô Carioca (Saida Rua Senador Dantas). </p>
<p>Estamos finalizando as reformas nas salas, mas já dá para ver como vai ficar:</p>
<p><center><a href="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/09/cimg4082-1.jpg"><img src="http://caelum.wpengine.netdna-cdn.com/wp-content/uploads/2008/09/cimg4082-1-300x225.jpg" alt="" width="300" height="225" class="alignnone size-medium wp-image-378" /></a></center></p>
<p>Você já pode entrar em contato conosco através do telefone (21) 2220-4156 ou mande um <a href="http://www.caelum.com.br/contato/">email</a>, e aproveite os descontos especiais de inauguração. Estamos oferecendo os mesmos treinamentos com a mesma qualidade da sede de São Paulo.</p>
<p>As primeiras turmas já estão programadas para o mês de Outubro. Veja o <a href="http://www.caelum.com.br/calendario/">calendário</a>. Venha nos fazer uma visita. Em breve mais novidades!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/caelum-rj-com-as-portas-abertas/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Os 7 hábitos dos desenvolvedores Hibernate e JPA altamente eficazes</title>
		<link>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/</link>
		<comments>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 09:26:02 +0000</pubDate>
		<dc:creator>Paulo Silveira</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[fj-25]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[LazyInitializationException]]></category>
		<category><![CDATA[persistencia]]></category>
		<category><![CDATA[rio]]></category>
		<category><![CDATA[riojug]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/2008/01/28/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/</guid>
		<description><![CDATA[Essa última semana tive a oportunidade de palestrar no RioJUG sobre JPA e Hibernate, onde fui muito bem recebido pelo Guilherme Chapiewski e Magno Cavalcante. Isso ocorreu durante o treinamento de Arquitetura Java que demos para diversos desenvolvedores da Globo.com, e onde tive o prazer de conhecer alguns desenvolvedores e arquitetos, como Vitor Pellegrino, Anselmo <a href="http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/#more-182'" 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/2012/01/hibernate-logo.png" width="240" />
		</p><p>Essa última semana tive a oportunidade de <a href="http://www.riojug.org/">palestrar no RioJUG sobre JPA e Hibernate</a>, onde fui muito bem recebido pelo <a href="http://gc.blog.br/">Guilherme Chapiewski</a> e <a href="http://webtier.blogspot.com/">Magno Cavalcante</a>. Isso ocorreu durante o treinamento de Arquitetura Java que demos para diversos desenvolvedores da Globo.com, e onde tive o prazer de conhecer alguns desenvolvedores e arquitetos, como <a href="http://vp.blog.br/">Vitor Pellegrino</a>, Anselmo Alves, Wesley Silva, Alexandre Gazola, <a href="http://programandosemcafeina.blogspot.com/">Tiago Motta</a>, entre outros. Também vi o Ettore Luglio e o Daniel Passos.</p>
<p><center><br />
<a href="http://www.flickr.com/photos/silveira/2221130320/" title="DSC01736 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2056/2221130320_7aaeaf522f_m.jpg" width="240" height="135" alt="DSC01736" /></a> <a href="http://www.flickr.com/photos/silveira/2221128832/" title="DSC01709 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2082/2221128832_086cb7d832_m.jpg" width="240" height="135" alt="DSC01709" /></a><br />
<a href="http://www.flickr.com/photos/silveira/2221128066/" title="DSC01691 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2037/2221128066_083d78e208_m.jpg" width="240" height="135" alt="DSC01691" /></a> <a href="http://www.flickr.com/photos/silveira/2221127324/" title="DSC01750 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2039/2221127324_600dbcd1e8_m.jpg" width="240" height="135" alt="DSC01750" /></a><br />
</center></p>
<p>Infelizmente durante a palestra não tive tempo de mostrar muitos recursos avançados e boas práticas do Hibernate, então vou usar este espaço para tal.</p>
<p>Precisamos conhecer todo pontencial de qualquer ferramenta, framework ou biblioteca que vamos usar em um projeto. Uma ferramenta boa, sem o devido conhecimento, resulta em projetos atrasados, com problemas de performance e  desculpas do tipo <em>&#8220;O problema é o [Hibernate|Struts|JSP, insira sua tecnologia aqui...], que gera uma quantidade excessiva de [queries|objetos|scriptlets|...] durante [lazy loading|requisições|...]&#8220;</em>. Isso vale em especial para ferramentas mais antigas, como JSP e Struts 1. Hoje em dia ambas possuem recursos poderosos que auxiliam em muito o desenvolvimento, mas alguns desenvolvedores acabam não se aprofundando e desconhecem esses detalhes que podem ser vitais no uso de determinadas tecnologias.</p>
<p>Com o Hibernate não é diferente. É muito comum as pessoas culparem o Hibernate pela queda do banco de dados, performance das queries, número de objetos em memória, <code>LazyInitializationException</code>, e outros inúmeros problemas os quais em sua maioria poderiam ter sido evitados com a utilização de alguns recursos, boas práticas e bons hábitos no uso desse framework.</p>
<p>Sem mais demora, <strong>os 7 hábitos:</strong></p>
<p><strong>Connection Pool</strong> &#8211; Usar o pool de conexões embutido com o Hibernate é um erro comum, e a própria documentação diz que você não deve usa-lo em produção! Pode acontecer até connections leak!<br />
A Caelum teve ótimas experiências com o <a href="http://www.mchange.com/projects/c3p0/index.html">C3P0</a>, e é muito fácil <a href="http://www.hibernate.org/214.html">configurá-lo como Provider para o Hibernate</a>.</p>
<p><strong>Second Level Cache</strong> &#8211; Todos já passamos por situações em que precisamos criar caches para as linhas de banco de dados mais acessadas. Aqui temos diversos problemas: sincronismo, gasto de memória, memory leak, tamanho do cache, política de prioridade da fila (LFU, LRU, FIFO, etc), tempo de expiração e modos de invalidar o cache. Escrever um cache eficiente e seguro é um grande trabalho, imagine ainda dar suporte a um cache distribuído e que possa se aproveitar do disco rígido para não gastar tanta memória? Esse é o papel do <a href="http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html">second level cache</a>. Você pode usá-lo com diversos providers, sendo o <a href="http://ehcache.sourceforge.net/">EhCache</a> um dos mais conhecidos.</p>
<p><strong>Query Cache</strong> &#8211; Um recurso fantástico do Hibernate. No caso de você ter queries que são executadas inúmeras vezes, você pode pedir para o Hibernate fazer o cache do resultado desta query. O interessante é que ele não vai armazenar todos os objetos resultantes, e sim apenas suas primary keys: no momento que ele precisar executar novamente aquela query, ele já tem todos os IDs resultantes, e através destes ele consulta o second level cache, sem fazer um único hit ao banco de dados! Esse cache será invalidado quando alguma das tabelas envolvidas nesta query for atualizada, ou um determinado tempo passar. </p>
<p><strong>Controle do Lazy</strong> &#8211; Algumas pessoas costumam reclamar do lazy loading, dizendo que em alguns casos teria sido melhor ele carregar tudo em uma única query. Você sempre pode redefinir o comportamento desses relacionamentos quando fizer uma query, através de um <a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&#038;f=78&#038;t=002559">eager fetch</a>.</p>
<p><strong>Stateless Session</strong> &#8211; Algumas vezes precisamos fazer um processamento em batch de objetos, ou mesmo inserir uma quantidade grande deles na base de dados. Em muitos casos uma <a href="http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html">bulk operation</a> é o suficiente, mas se quisermos manter a Orientação a Objetos, devemos tomar cuidado com a grande quantidade de objetos que ficarão armazenados no first level cache. A <a href="http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-statelesssession">StatelessSession</a> resolve esse problema: simplesmente não há first level cache e nenhum objeto se comportará como managed, tendo praticamente o mesmo efeito que chamar <code>entityManager.clear()</code> a cada operação.</p>
<p><strong>Open Session in View</strong> &#8211; Na arquitetura MVC, muitas vezes renderizamos em nossa view diversas entidades do nosso modelo, e essas podem ter sido carregas pelo Hibernate. Se essas entidades possuem relacionamentos lazy, precisamos que a sessão esteja aberta no momento da renderização da View, caso contrário teremos uma <code>LazyInitializaionException</code> ou algum código macarrônico para carregar relacionamentos que nem sempre precisamos. Para isso devemos manter a session aberta através de um filtro, interceptador ou algum outro mecanismo. Isso resulta no pattern <a href="http://community.jboss.org/wiki/OpenSessioninView">Open Session in View</a> e também se aplica ao <code>EntityManager</code>.<br />
O mesmo efeito pode ser obtido através de inversão de controle e injeção de dependências através da anotação <code>@PersistenceContext</code>, que é tratada por containers EJB3 e também por muitos frameworks web, como o Spring. O EJB3 ainda possui o conceito de um contexto de persistência extendido, quem é interessante em casos de conversações longas: o <code>EntityManager</code> usado será o mesmo enquanto aquele stateful session bean não for removido.</p>
<p><strong>Evitando número de queries excessivas (n+1)</strong> &#8211; Se uma NotaFiscal possui muitos <code>Item</code>s, e essa coleção é lazy, gastaremos duas queries para buscar a <code>NotaFiscal</code> e seus respectivos Itens. Mas se temos uma lista de <code>NotaFiscal</code> resultante de uma query, para cada <code>NotaFiscal</code> teremos uma nova query executada para todo <code>getItems</code> invocados. <strong>1</strong> query para listar <code>NotaFiscal</code>, <strong>N</strong> queries para pegar os relacionamentos: é o problema das <strong>n+1 queries</strong>. Você deve usar as configurações de <code>batch-size</code> e <code>fetch-size</code> para pedir ao Hibernate carregar as entidades/relacionamentos em blocos em vez de um em um. Você também pode utilizar o second level cache nesses relacionamentos,  diminuindo consideravelmente o número de queries disparada.</p>
<p>Essas são apenas alguns dos hábitos, poderíamos ainda falar sobre o bom tratamento de exceções, o cuidado ao fechar todos os recursos abertos pelo Hibernate, o uso de queries nativas, o mapeamento de queries nativas para entidades através do <code>ResultTransformer</code>, filtros de coleções, dynamic insert e update, a criação do seu próprio tipo de persistência, e muitos outros. Conhecer bem o <a href="http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html">capítulo de performance do Hibernate</a> é fundamental além de um bom começo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
	</channel>
</rss>

