<?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>PauloMotta.pro &#187; JPA</title>
	<atom:link href="http://www.paulomotta.pro.br/tag/jpa/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.paulomotta.pro.br</link>
	<description>&#34;Qualquer tecnologia suficientemente avançada é indistinguível da mágica&#34; - Arthur C. Clarke</description>
	<lastBuildDate>Tue, 10 Jan 2012 03:00:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Tutorial JPA em atualização e Tutorial de Relatórios!</title>
		<link>http://www.paulomotta.pro.br/2011/09/27/tutorial-jpa-em-atualizacao-e-tutorial-de-relatorios/</link>
		<comments>http://www.paulomotta.pro.br/2011/09/27/tutorial-jpa-em-atualizacao-e-tutorial-de-relatorios/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 15:12:40 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[iReport]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JSF]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=1440</guid>
		<description><![CDATA[Comecei a atualizar o tutorial JPA aqui do site. É claro que quando eu comecei com essa coisa de tutoriais eu achei que daria muito menos trabalho do que realmente dá mas a segunda versão do tutorial vai ficar melhor e maior então vai valer a pena! Além disso estou planejando também a continuação dela [...]]]></description>
			<content:encoded><![CDATA[<p>Comecei a atualizar o <a href="http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/" target="_blank">tutorial JPA aqui do site</a>. É claro que quando eu comecei com essa coisa de tutoriais eu achei que daria muito menos trabalho do que realmente dá <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  mas a segunda versão do tutorial vai ficar melhor e maior então vai valer a pena! Além disso estou planejando também a continuação dela com outros detalhes.</p>
<p>Outro tópico que vem aí é a criação de relatórios com iReport e com JSF, duas abordagens diferentes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2011/09/27/tutorial-jpa-em-atualizacao-e-tutorial-de-relatorios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate do Netbeans 7.0 não é o mais atual</title>
		<link>http://www.paulomotta.pro.br/2011/09/21/hibernate-do-netbeans-7-0-nao-e-o-mais-atual/</link>
		<comments>http://www.paulomotta.pro.br/2011/09/21/hibernate-do-netbeans-7-0-nao-e-o-mais-atual/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 16:23:54 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Principal]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[Netbeans]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=1437</guid>
		<description><![CDATA[Estava mexendo com o Netbeans 7.0 para começar a usá-lo em sala de aula. Comecei a mexer nos wizards de geração de código porque isso realmente ajudar na vida de um programador então usei o seguinte roteiro: Criar uma aplicação JEE 6 Web Adicionar Java Server Faces 2 Criar uma classe de Entidade Nesta hora [...]]]></description>
			<content:encoded><![CDATA[<p>Estava mexendo com o Netbeans 7.0 para começar a usá-lo em sala de aula. Comecei a mexer nos wizards de geração de código porque isso realmente ajudar na vida de um programador <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  então usei o seguinte roteiro:</p>
<ol>
<li>Criar uma aplicação JEE 6 Web</li>
<li>Adicionar Java Server Faces 2</li>
<li>Criar uma classe de Entidade</li>
</ol>
<p>Nesta hora o Netbeans pergunta se você não criar uma unidade de persistência e você pode escolher a infraestrutura que quer. Eu escolhi Hibernate JPA2. Até aí tudo bem, mas acontece que o Hibernate que está incluído é a versão 3.2.5 que NÃO contempla essa especificação.</p>
<p>Quando mandamos gerar os session façades para a classe de entidade o resultado são duas classes: AbstractFacade e um [Nome da Entidade]Facade. O problema é que como escolhi a versão JPA2 o wizard tenta criar as consultas usando um CriteriaQuery e isso só tem na versão JPA 2.</p>
<p>Estou ainda vendo como contornar isso de forma civilizada (ou seja, fácil). Assim que descobrir vou postar um roteiro aqui.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2011/09/21/hibernate-do-netbeans-7-0-nao-e-o-mais-atual/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Uma bibliografia JavaEE mais atual</title>
		<link>http://www.paulomotta.pro.br/2011/02/22/uma-bibliografia-javaee-mais-atual/</link>
		<comments>http://www.paulomotta.pro.br/2011/02/22/uma-bibliografia-javaee-mais-atual/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 11:00:00 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Bibliografias]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[ANÁLISE]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[SISTEMA]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=1265</guid>
		<description><![CDATA[Há muito tempo, meu primeiro post foi uma bibliografia sobre Java. Naquela época eu pensava em usar o site mais como apoio aos cursos que ministrava do que como um lugar para expressar meus pensamentos sobre tecnologia. De lá para cá muita coisa mudou, embora algunas daqueles livros continuem válidos. Resolvi então colocar aqui uma [...]]]></description>
			<content:encoded><![CDATA[<p>Há muito tempo, meu primeiro post foi uma bibliografia sobre Java. Naquela época eu pensava em usar o site mais como apoio aos cursos que ministrava do que como um lugar para expressar meus pensamentos sobre tecnologia.</p>
<p>De lá para cá muita coisa mudou, embora algunas daqueles livros continuem válidos. Resolvi então colocar aqui uma lista dos livros que um desevolvedor Java EE da atualidade deve ler para conseguir dominar esse ambiente, pelo menos são os livros básicos <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<ol>
<li><a href="http://www.submarino.com.br/produto/1/158382/utilizando+uml+e+padroes/franq=268087" target="_blank">Utilizando UML e Padrões do Craig</a> &#8211; livro obrigatório porque discute o que é desenvolver sistemas, fala de padrões de projeto e de como fazer a análise</li>
<li><a href="http://www.submarino.com.br/produto/1/1981750/franq=268087" target="_blank">Java Persistence com Hibernate</a> &#8211; detalha como funciona a API de persistência do Java, mas utiliza muitos detalhes relacionados ao Hibernate. O livro é muito bom porque discute em detalhes todos os problemas relacionados ao uso de bancos de dados relacionais com linguagens de programação orientadas a objetos.</li>
<li><a href="http://www.submarino.com.br/produto/1/1974097/franq=268087" target="_blank">Core Java Server Faces</a> -  apresenta o framework da Sun para o desenvolvimento de aplicações web, desde que comecei a usar o JSF não quero mais saber de Struts <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  não vou falar mal do Struts porque usei muito no passado, mas o JSF realmente é um modelo mais robusto e interessante. Este livro cobre todos os detalhes de como usar e como escrever uma aplicação completa.</li>
<li><a href="http://www.submarino.com.br/produto/1/21565273/franq=268087" target="_blank">EJB3 em Ação</a> &#8211; Nenhuma aplicação Java EE está completa sem o uso de EJB, que é o modelo de componentes proposto pela Sun para a linguagem Java. Neste livro aprendemos como usar a especificação mais recente e como o uso de anotações facilita a vida do desenvolvedor que fica livre de muitos arquivos XML.<a href="http://www.submarino.com.br/produto/1/21565273/franq=268087" target="_blank"><br />
</a></li>
<li><a href="http://www.submarino.com.br/produto/1/21393669/franq=268087" target="_blank">EJB3 Profissional: Java Persistence API</a> &#8211; Um complemento ao livro de Hibernate, neste livro o leitor vai achar material relacionado apenas a especificação o que é muito bom porque, como costumo trabalhar, pode-se ficar totalmente independente da implementação de persitência.</li>
<li><a href="http://www.submarino.com.br/produto/1/21499577/franq=268087" target="_blank">Desenvolvendo Relatórios Profissionais Com iReport Para Netbeans IDE</a> &#8211; Como toda aplicação precisa de relatórios para estar completa, nada como usar uma ferramenta poderosa e baseada em ambiente gráfico para escrever os seus. Neste livro, aprendemos a usar o plugin para Netbeans de forma gradual e bem detalhada.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2011/02/22/uma-bibliografia-javaee-mais-atual/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Testes de Usabilidade, Negligência na Análise e Testes Unitários Corporativos</title>
		<link>http://www.paulomotta.pro.br/2011/01/17/testes-de-usabilidade-negligencia-na-analise-e-testes-unitarios-corporativos/</link>
		<comments>http://www.paulomotta.pro.br/2011/01/17/testes-de-usabilidade-negligencia-na-analise-e-testes-unitarios-corporativos/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 11:00:14 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Análise]]></category>
		<category><![CDATA[Inovação]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[Testes]]></category>
		<category><![CDATA[ANÁLISE]]></category>
		<category><![CDATA[ARQUITETURA]]></category>
		<category><![CDATA[EJB]]></category>
		<category><![CDATA[ICEFaces]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[SISTEMA]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=1145</guid>
		<description><![CDATA[Eu confesso que esse conceito, Teste de Usabilidade (o artigo pode ser lido aqui), me surpreendeu e acho que merece uma atenção de nós que desenvolvemos software. Já temos muita dificuldade de testar o sistema para garantir que ele faz o que deve fazer do jeito que deve ser feito, que as integrações estão todas [...]]]></description>
			<content:encoded><![CDATA[<p>Eu confesso que esse conceito, Teste de Usabilidade (o artigo pode ser lido <a href="http://queue.acm.org/detail.cfm?id=1925091" target="_blank">aqui</a>), me surpreendeu e acho que merece uma atenção de nós que desenvolvemos software. Já temos muita dificuldade de testar o sistema para garantir que ele faz o que deve fazer do jeito que deve ser feito, que as integrações estão todas corretas e que as regras de negócio estão aderentes à análise (supondo que esta última esteja correta), imagine agora além disso tudo testar como está o fluxo de experiência do usuário no uso do software?</p>
<p>Mas é exatamente disso que os testes de usabilidade tratam, e no final das contas, temos mais é que testar isso tudo mesmo! Eu acho que quanto mais fácil se tornou desenvolver os sistemas, mais preguiçosos ficamos. Explico. Fácil de desenvolver porque hoje temos ferramentas de geração de código (que não existiam até bem pouco tempo) baseadas em padrões de projeto (que não estavam documentados até bem pouco tempo) que nos permitem simplesmente esquecer que certas partes precisam ser feitas. Muitas vezes tudo que precisamos fazer é introduzir pequenos detalhes específicos no código gerado, mas na maioria dos casos nem isso! Ficamos preguiçosos porque os sistemas cresceram, são agora corporativos, é muito menor a demanda de pequenas empresas por seus próprios softwares, com isso o analista que sai da faculdade demora a ter, se é que vai ter, contato direto com o cliente. Os analistas passam a ter um ponto focal centralizado a quem se reportam e acho que isso mascara a responsabilidade levando a uma negligência involuntária.</p>
<p>Antes que eu receba vários ataques de analistas raivosos, não estou aqui falando que todo analista de sistemas (e neste caso estou considerando a dualidade analista/programador) sejam negligentes. Embora eu já tenha trabalhado com muitos que eram realmente negligentes, estou falando aqui de uma negligência involuntária, é mais uma coisa de não fazer porque a percepção é de que o software é para uso próprio e poderemos conversar com o usuário e explicar.</p>
<p>Mesmo que o software seja para uso da própria empresa deve ser desenvolvido com todo o cuidado. Você pode ler mais sobre as minhas impressões sobre análise em:</p>
<ul>
<li><a href="http://www.paulomotta.pro.br/2009/08/01/como-se-faz-analise/" target="_blank">Como se faz análise</a></li>
<li><a href="http://www.paulomotta.pro.br/2009/08/04/antes-de-resolver-defina-o-problema/" target="_blank">Antes de resolver, defina o problema</a></li>
<li><a href="http://www.paulomotta.pro.br/2009/08/12/artesanato-de-software/" target="_blank">Artesanato de Software</a></li>
</ul>
<p>Mas agora de volta aos testes de usabilidade. Um problema que temos com os sistemas corporativos é que são muito difíceis de testar pelo alto grau de dependência entre as partes, dessa forma, os testes unitários são quase testes de integração. Uma alternativa é fazer os testes unitários das camadas mais básicas de forma a garantir que estas estão funcionando de forma que os testes das camadas superiores possam se basear nessas camadas, mas se fizermos isso quebramos a possibilidade de paralelizar nossa equipe já que não haverão módulos básicos suficientes para todos. O que acaba ocorrendo é que as pessoas codificam antes de criar seus testes (acredite o Test Driven Development funciona!) e acabam por nunca mais fazer os testes.</p>
<p>Além disso os sistemas corporativos têm uma tendência forte a serem baseados em arquitetura Web ou SOA precisando estar instalados em um servidor de aplicação para executar, o problema disso é que a fórmula:</p>
<p>(a implantação do sistema em um servidor + iniciar o servidor de aplicação) * (obter referências aos componentes a serem testados + executar os testes)</p>
<p>Não é facilmente incluída nos scripts de testes unitários. O que estou pensando em adotar é um esquema de testes semiautomatizado, ou seja, a parte de iniciar o servidor e implantar a aplicação é feita manualmente, a parte de obter referências e executar testes é feita com JUnit.  Até existe um <em>framework</em> JSFUnit, mas infelizmente ele tem uns problemas com o ICEfaces, eu até achei o ponto onde é o problema (depois de baixar o código fonte do JSFUnit e do ICEFaces dos repositórios e gastar umas 4 horas nisso direto), mas precisa de uma modificação no código que ainda não tive tempo de implementar e testar. Embora esta seja uma parte importante, ainda assim não testaria todo o sistema, porque não resolveria a parte dos EJBs e depois de testar com EJBUnit (e mais alguns vários) chegamos a conclusão que não existe um suporte efetivo para essa camada.</p>
<p>Um pouco dessa dificuldade vem do fato que os <em>frameworks</em> *Unit são ferramentas independentes, se a Oracle/Sun adotassem o *Unit como padrão da implementação do Java isso seria incrível para os desenvolvedores, isto porque toda vez que saísse uma nova versão da plataforma e suas especificações já teríamos uma ferramenta de testes para usar.</p>
<p>Estou realmente achando que essa coisa de testes unitários semiautomáticos pode dar certo para a camada EJB.</p>
<p>Uma outra alternativa mais radical (e que na verdade eu gosto muito) é fazer o sistema todo isolado de tecnologias específicas tal como EJB, ou seja, as regras de negócio ficam em classes puramente Java, também conhecidos como POJO &#8211; Plain Old Java Objects &#8211; algo que em português seria (livremente) traduzido para Bom e Velho Objeto Java. Isto funciona porque os POJOs podem ser facilmente testados com JUnit básico, e se você usar o EJB apenas para envolver os POJOs então você garante que as regras de negócio estão sendo testadas o que já é um grande alívio. Mas porque então não tem muita gente fazendo isso?</p>
<p>Para separar as regras de negócio você terá mais uma camada, mais um nível de indireção e consequentemente mais classes para gerenciar. Acredito que esta seja a maior barreira para se adotar essa prática, mas eu vou criar um sistema de testes (digo sistema, porque para testar esse tipo de coisa não adianta criar uma classezinha de teste) para avaliar o impacto de se criar essa camada extra.</p>
<p>Outro fator é que muitas vezes as regras de negócio têm dependências de dados que precisam ser supridas, se você conseguir prever todas as necessidades de acesso a banco de dados por exemplo e executar isso antes de chamar o método fica mais fácil de tratar, mas as vezes precisamos fazer uma busca em banco no meio de um processamento de regra de negócio. Aí começa o dilema, porque se você usa JPA com EJB, então terá uma dependência do servidor de aplicação para resolver isso e quebramos a automatização do teste de novo. É claro que você pode usar <em>Mock Objects</em>, uma técnica de fornecer objetos que fingem ser os que realmente precisamos para efeitos de teste, mas ainda assim você terá uma proliferação de classes muito grande.</p>
<p>Assim que eu tiver resultados vou colocar aqui.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2011/01/17/testes-de-usabilidade-negligencia-na-analise-e-testes-unitarios-corporativos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Referências entre Objetos no JPA</title>
		<link>http://www.paulomotta.pro.br/2010/11/09/referencias-entre-objetos-no-jpa/</link>
		<comments>http://www.paulomotta.pro.br/2010/11/09/referencias-entre-objetos-no-jpa/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 11:00:45 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=1031</guid>
		<description><![CDATA[Há algum tempo atrás eu coloquei um tutorial sobre JPA aqui. Bom, agora chegou a hora de falar de uma coisa super importante, usar referências entre objetos, isto porque dificilamente você vai fazer uma aplicação que tenha apenas uma classe isolada. Mas afinal porque eu gosto tanto de JPA? Simples, porque você deixa de lado [...]]]></description>
			<content:encoded><![CDATA[<p>Há algum tempo atrás eu coloquei um tutorial sobre JPA <a href="http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/" target="_blank">aqui</a>. Bom, agora chegou a hora de falar de uma coisa super importante, usar referências entre objetos, isto porque dificilamente você vai fazer uma aplicação que tenha apenas uma classe isolada. Mas afinal porque eu gosto tanto de JPA? Simples, porque você deixa de lado todos os detalhes do mapeamento objeto-relacional para se concentrar em relações para representar. Explico.</p>
<p>Em JPA temos um conjunto de anotações (aquelas marcações que colocamos em Java com um @ na frente) que servem para identificar o comportamento dos objetos na hora de gravar em banco. Vamos começar com uma bem simples, uma referência @OneToMany (ah sim, um pouco de conhecimento de inglês vai ajudar muito nessa hora!)</p>
<p>Em uma relação @ManyToOne estamos indicando que a classe de origem tem uma referência para um objeto da classe destino, e que este último pode ser referenciado por vários objetos da classe de origem. Exemplo, Livro tem uma Editora (não vou discutir detalhes de modelagem, se é a melhor ou não, apenas um exemplo <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) então em Livro teremos um atributo do tipo Editora, agora podemos colocar a anotação correspondente:</p>
<blockquote>
<pre>Exemplo:

@Entity
public class Livro implements Serializable{

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;
   private String titulo;
   private String autor;
   private String isbn;
   private int numPaginas;
   @ManyToOne
   private Editora editora;

   //aqui vem o resto do código
}
</pre>
</blockquote>
<p>Outros tipos de relação são: @OneToOne, @ManyToOne e @ManyToMany. Além disso podemos ter relações unidirecionais, como no caso do Livro Editora que apresentei ou bidirecionais, quando o objeto destino também conhece o objeto de origeme aí terá um atributo que aponta de volta. Um bom exemplo é quando temos OrdemDeVenda e ItemDeVenda, onde a primeira tem uma lista de itens, e a segunda tem um atributo único apontando para a ordem a qual pertence.</p>
<blockquote>
<pre>Exemplo:

@Entity
public class OrdemDeVenda implements Serializable {
   //aqui tem várias coisas
   @OneToMany(mappedBy = "ordemDeVenda")
   private List&lt;ItemDeVenda&gt; itens;
   //aqui tem várias coisas
}

@Entity
public class ItemDeVenda implements Serializable {
   //aqui tem várias coisas
   @ManyToOne
   private OrdemDeVenda ordemDeVenda;
   //aqui tem várias coisas
}
</pre>
</blockquote>
<p>O que podemos ver então é que no caso de uma relação OneToMany bidirecional, ela terá um complemento ManyToOne, bem razoável <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Existem na verdade muito mais opções para marcar, mas isso já é um começo para permitir algumas experiências. Uma nota importante, no Netbeans, quando você coloca um atributo em uma entidade ele já pede para que você marque o tipo de relação e aí basta escolher, inclusive se for bidirecional o Netbeans muda a outra classe para incluir o atributo correspondente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/11/09/referencias-entre-objetos-no-jpa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

