<?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; Tutoriais</title>
	<atom:link href="http://www.paulomotta.pro.br/category/tutoriais/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>Fri, 30 Jul 2010 00:59:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tutorial JPA com Servlets</title>
		<link>http://www.paulomotta.pro.br/2010/06/07/tutorial-jpa-com-servlets/</link>
		<comments>http://www.paulomotta.pro.br/2010/06/07/tutorial-jpa-com-servlets/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 00:48:08 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>
		<category><![CDATA[WEB]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=537</guid>
		<description><![CDATA[Coloquei aqui no site um tutorial sobre JPA usando TopLink e MySQL em uma aplicação desktop. Bom, nesse período estou fazendo uma experiência na faculdade de trocar o uso de JDBC com DAO, por JPA utilizando os geradores de código do Netbeans, até então parece que tudo está caminhando bem exceto por alguns problemas que [...]]]></description>
			<content:encoded><![CDATA[<p>Coloquei aqui no site um <a href="http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/" target="_blank">tutorial sobre JPA</a> usando TopLink e MySQL em uma aplicação desktop. Bom, nesse período estou fazendo uma experiência na faculdade de trocar o uso de JDBC com DAO, por JPA utilizando os geradores de código do Netbeans, até então parece que tudo está caminhando bem exceto por alguns problemas que tivemos em sala de aula. O primeiro problema foi a dificuldade de usar o MySQL, e para isso vou colocar um mini tutorial de MySQL em outro post, o segundo problema é para o pessoal que está fazendo a disciplina de programação web temos um outro problema.</p>
<p>A arquitetura projetada pela Sun sugere que usemos EJBs para isolar a parte de acesso a dados, no entanto essa tecnologia não faz parte da ementa da nossa disciplina e portanto não discutimos isso (embora possam ser gerados pelo Netbeans também.) E aí temos um problema, o tutorial anterior pressupõe que o uso do JPA seria gerenciado, mas isso não é possível quando usamos Servlets.</p>
<p>Se quisermos usar JPA com Servlets (que é o que estamos fazendo atualmente) precisamos de algumas pequenas modificações em relação ao tutorial inicial.</p>
<p>A primeira delas é que quando criamos o persistence.xml, devemos desmarcar a opção de usar JTA.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/06/1.jpg"><img class="aligncenter size-medium wp-image-538" title="Persistence" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/06/1-300x176.jpg" alt="" width="300" height="176" /></a></p>
<p>A segunda modificação diz respeito ao JPAController, quando o Netbeans cria a classe com alguns conceitos voltados para a injeção de dependência, mas o que é isso ? É quando o próprio ambiente insere para nós os recursos que são necessários para executar nosso software, isso é uma grande inovação em relação a tudo que precisavamos fazer para conseguir referenciar conexões por exemplo.</p>
<p>Como disse antes, a visão da Sun é que uma aplicação web seja feita para interagir com componentes EJB, mas se não é isso que você quer fazer então temos um problema aqui para gerenciar as dependências. O que pode ser feito é criar um EntityManagerFactory a partir do <em>persistence unit</em> diretamente. Para isso precisamos fazer algumas modificações no código gerado pelo Netbeans.</p>
<p>Como o código já foi gerado no outro tutorial vou apenas mostrar as modificações no código.</p>
<p>O código:</p>
<blockquote><p>@Resource<br />
private UserTransaction utx = null;<br />
@PersistenceUnit(unitName = &#8220;TesteJPAWebPU&#8221;)<br />
private EntityManagerFactory emf = null;</p></blockquote>
<p>Deve ser modificado para:</p>
<blockquote><p>EntityManagerFactory emf = Persistence.createEntityManagerFactory(&#8220;TesteJPAWebPU&#8221;);</p></blockquote>
<p>O código do método create gerado é:</p>
<blockquote><p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/06/2.jpg"><img class="aligncenter size-medium wp-image-545" title="2" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/06/2-300x109.jpg" alt="" width="300" height="109" /></a></p></blockquote>
<p>Deve ser substituído pelo seguinte código:</p>
<blockquote><p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/06/3.jpg"><img class="aligncenter size-medium wp-image-546" title="3" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/06/3-300x85.jpg" alt="" width="300" height="85" /></a></p></blockquote>
<p>Note os detalhes relacionados a troca da criação da transação para um processo manual.</p>
<p>Com essas duas pequenas modificações já podemos usar o JPA dentro de Servlets para gravar nossos dados com mais facilidades. É claro que os outros métodos como edit e destroy devem ser modificados de forma semelhante.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/06/07/tutorial-jpa-com-servlets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial JPA</title>
		<link>http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/</link>
		<comments>http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/#comments</comments>
		<pubDate>Mon, 17 May 2010 10:00:29 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[APLICAÇÃO]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OBJETOS]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>
		<category><![CDATA[SISTEMA]]></category>
		<category><![CDATA[WEB]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=452</guid>
		<description><![CDATA[Já há algum tempo eu vinha planejando colocar aqui no site alguns tutoriais, mas o tempo sempre curto me atrapalhava muito. Esse período porém eu tenho um aliado, decidi usar na faculdade o JPA nas disciplinas de Java e de Web, então para economizar o tempo de explicações nada melhor do que colocar aqui o [...]]]></description>
			<content:encoded><![CDATA[<p>Já há algum tempo eu vinha planejando colocar aqui no site alguns tutoriais, mas o tempo sempre curto me atrapalhava muito. Esse período porém eu tenho um aliado, decidi usar na faculdade o JPA nas disciplinas de Java e de Web, então para economizar o tempo de explicações nada melhor do que colocar aqui o primeiro tutorial de como usar JPA (com o auxílio do Netbeans.)</p>
<p>Vamos começar com o que será necessário. Primeiro de tudo meu ambiente é um linux configurado em inglês por isso as telas aqui estão em inglês, então pode ser que precise adaptar os detalhes das telas para o seu ambiente. Aqui eu uso tanto MySQL quanto PostgreSQL, mas nesse tutorial vou assumir que existe um MySQL instalado com um banco de dados criado de nome &#8220;curso&#8221; com um usuário &#8220;javadb&#8221; (e a senha você precisa saber qual configurou aí.) Infelizmente a configuração do MySQL não está no nosso escopo, mas qualquer banco de dados relacional serve (só precisa mudar durante a configuração conforme vou mostrar mais a frente.) Finalmente a última definição é usar o Netbeans 6.7, já temos o 6.8 disponível, mas por questões de projeto ainda não migrei nem testei ele, já a versão 6.7.1 tem alguns problemas com detalhes de web e CVS então sugiro ficar com o 6.7 por enquanto, e pode ser encontrado <a href="http://netbeans.org/downloads/6.7/index.html" target="_blank">aqui</a>.</p>
<p>Então agora vamos começar!</p>
<p>Primeiro precisamos entender do que estamos falando, isso costuma ajudar muito no desenvolvimento de qualquer coisa na vida. JPA é a sigla para Java Persistence Api, ou seja, uma especificação de persistência para Java. Isso significa que depois de anos de trabalho tentando mapear sistemas orientados a objetos em bancos de dados relacionais aprendemos quais são os problemas recorrentes e as soluções foram sendo catalogadas. O resultado disso ao longo dos anos foi a construção de ferramentas que ofereciam soluções parcialmente automáticas. Com a chegada do EJB3 a Sun mudou os Entity Beans (entidades do sistema) para marcar seus relacionamentos via anotações, e além disso incorporou os mecanismos das diversas ferramentas de persistência. Como implementação de referência a Oracle disponibilizou gratuitamente o TopLink, na época Oracle ainda não tinha comprado a Sun.</p>
<p>É claro que usar uma ferramenta de persistência pode sacrificar um pouco o desempenho da aplicação, mas tenha em mente o seguinte, nem todas as partes do sistema precisam ser extremamente rápidas. Quando alguma das partes do sistema não estiver satisfatória podemos deixar de lado a ferramenta e prover alguma solução construída manualmente. Mas por experiência própria, são poucas as vezes que isso é necessário em sistemas de informação.</p>
<p>Então para fechar a parte teórica e começarmos a meter a mão na massa. A Sun já tinha proposto anteriormente o JDBC que é a especificação que permite que os fornecedores de bancos de dados disponibilizem os drivers para acessar seus produtos, agora com o JPA temos o papel de provedor de persistência, neste caso temos <a href="http://www.hibernate.org/" target="_blank">Hibernate</a>, <a href="http://www.oracle.com/technology/products/ias/toplink/index.html" target="_blank">TopLink</a>, <a href="http://www.eclipse.org/eclipselink/" target="_blank">EclipseLink</a> e assim por diante. Entre estes eu não usei ainda o eclipse link.</p>
<p>Agora então temos uma nova camada entre a aplicação e o banco de dados tentando tornar a aplicação cada vez mais independente de tecnologias de infraestrutura. Para o nosso exemplo vamos usar o TopLink que já vem com o Netbeans simplesmente porque o Hibernate requer que a aplicação seja gerenciada por um container, se a ideia fosse uma aplicação web isso seria mais fácil, mas vou usar aqui uma aplicação desktop.</p>
<p>Vamos começar então criando um projeto Java no Netbeans. Escolha Java e Aplicação Java como na figura a seguir.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/1.jpg"><img class="aligncenter size-medium wp-image-453" title="Iniciando um projeto no Netbeans" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/1-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Agora precisamos dar um nome ao projeto, sugiro TutorialJPA, uma coisa que o Netbeans sempre faz é perguntar se você quer criar uma classe main, pode desabilitar essa opção. E vamos escolher finalizar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/2.jpg"><img class="aligncenter size-medium wp-image-459" title="Nome do projeto" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/2-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Agora que temos um projeto para trabalhar fica tudo um pouco mais fácil. Para entender melhor o que vamos fazer, a ideia e criar uma aplicação que grave as informações de uma classe Livro no banco de dados. Então precisamos de uma entidade Livro, e vou usar os atributos título, autor, isbn e número de páginas. Para isso vamos criar um pacote java de nome &#8220;domain&#8221; para guardar todas as entidades do nosso pequeno sistema.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/3.jpg"><img class="aligncenter size-medium wp-image-461" title="Criando um pacote java" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/3-300x274.jpg" alt="" width="300" height="274" /></a></p>
<p>E em seguida indique o nome do pacote, domain.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/4.jpg"><img class="aligncenter size-medium wp-image-462" title="nome do pacote" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/4-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Certo, agora vamos criar a classe de entidade, para isso temos a opção criar nova classe de entidade que já considera que você vai usar as facilidades de JPA.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/5.jpg"><img class="aligncenter size-medium wp-image-465" title="criando uma classe de entidade" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/5-300x284.jpg" alt="" width="300" height="284" /></a></p>
<p>Agora precisamos escolher o nome da entidade, Livro.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/61.jpg"><img class="aligncenter size-medium wp-image-467" title="Classe de entidade Livro" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/61-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Note que usamos o tipo Long para o id dos objetos, além disso o Netbeans no diz que não tem uma unidade de persitência configurada, agora começa a mágica do negócio. Antes de criar essa unidade de persistência, vamos entender do que se trata, para que a nossa aplicação tenha tantas indepedências precisamos configurar em algum lugar onde está o banco, e que tipo de banco estamos usando. Isso é feito em um xml que fica embutido no projeto, se você quiser mudar alguma coisa do banco, basta mexer nesse xml sem compilar nada! Aqui escolhemos Toplink, damos um nome para referenciar dentro da aplicação e precisamos escolher também qual a conexão com o banco de dados. Além disso podemos escolher o comportamento do JPA, se deve criar; remover e criar, ou não tomar ações em relação as tabelas, sim! O JPA pode criar as tabelas para nós no banco de ddaos!</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/7.jpg"><img class="aligncenter size-medium wp-image-468" title="unidade de persistencia" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/7-300x160.jpg" alt="" width="300" height="160" /></a></p>
<p>Uma facilidade que o Netbeans nos oferece é criar a conexão durante este processo, é claro que se você já tiver conexões de banco de dados (até porque o Netbeans permite conectar no banco e executar comandos SQL) você pode simplesmente escolher. É claro que aqui eu vou mostrar como criar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/8.jpg"><img class="aligncenter size-medium wp-image-469" title="conexao com o banco" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/8-300x160.jpg" alt="" width="300" height="160" /></a></p>
<p>E agora configurar a conexão, colocando driver, endereço, nome do banco de dados, login e senha, escolhi também para lembrar a senha.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/9.jpg"><img class="aligncenter size-medium wp-image-470" title="configuracao de conexao de banco" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/9-300x247.jpg" alt="" width="300" height="247" /></a></p>
<p>Terminando esse processo voltamos para a tela de criação da unidade de persistência e clicamos em criar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/11.jpg"><img class="aligncenter size-medium wp-image-471" title="conexao criada" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/11-300x160.jpg" alt="" width="300" height="160" /></a></p>
<p>O resultado é uma tela que nos permite visualizar de forma amigável o conteúdo do arquivo xml.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/12.jpg"><img class="aligncenter size-medium wp-image-472" title="visualizando o pu" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/12-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>Agora vamos retomar nossa classe de Entidade, é claro que se fossemos criar várias classes de entidade, apenas na primeira vez seria necessário. Bom podemos ver que a classe Livro foi criada apenas com o atributo id, e vamos colocar agora 4 novos atributos que estão marcados na figura a seguir.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/13.jpg"><img class="aligncenter size-medium wp-image-475" title="atributos da classe livro" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/13-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>Pela especificação de java beans (já bem antiga) devemos criar os métodos acessores (get/set) para esses atributos, mas calma! O Netbeans ajuda a gente nisso. Para isso vamos clicar com o botão direito do lado de qualquer um dos atributos e aparecerá um menu no qual vamos escolher Refatorar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/14.jpg"><img class="aligncenter size-medium wp-image-476" title="refatorar" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/14-153x300.jpg" alt="" width="153" height="300" /></a></p>
<p>Depois disso aparecerá outro menu no qual vamos escolher Encapsular Campos.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/15.jpg"><img class="aligncenter size-medium wp-image-477" title="encapsular campos" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/15-204x300.jpg" alt="" width="204" height="300" /></a></p>
<p>Com isso aparecerá uma nova tela na qual vamos escolher quais campos (atributos) queremos encapsular. Vamos escolher os quatro atributos que acabamos de criar.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/16.jpg"><img class="aligncenter size-medium wp-image-478" title="escolher os atributos" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/16-300x192.jpg" alt="" width="300" height="192" /></a></p>
<p>Agora temos um detalhe, quando a classe foi criada o Netbeans gerou para a gente automanticamente dois métodos importantes o equals e o hashCode, esses métodos são fundamentais para conseguir comparar corretamente dois objetos, só que como criamos atributos novos precisamos recriar esses métodos, e novamente vamos ter uma ajuda. Podemos remover os métodos gerados.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/17.jpg"><img class="aligncenter size-medium wp-image-480" title="equals e hashCode original" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/17-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>Agora podemos recriar os métodos clicando novamente com o botão direito na tela, dentro da classe e escolhendo inserir código.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/18.jpg"><img class="aligncenter size-medium wp-image-481" title="inserir codigo" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/18-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>E uma nova janela aparece onde escolhemos equals e hashCode.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/19.jpg"><img class="aligncenter size-full wp-image-482" title="equals e hashCode" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/19.jpg" alt="" width="153" height="134" /></a></p>
<p>Agora, surgirá uma nova tela onde podemos escolher os atributos que serão usados para comparar dois objetos.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/21.jpg"><img class="aligncenter size-medium wp-image-483" title="escolha de atributos" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/21-300x190.jpg" alt="" width="300" height="190" /></a></p>
<p>Antes de continuar, vamos dar uma pausa para uma outra configuração, precisamos importar para o nosso projeto a biblioteca do MySQL, como esse passo é bem simples é um bom momento para descansar a cabeça <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Então agora vamos clicar com o botão direito sobre o projeto e vamos escolher propriedades.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/30.jpg"><img class="aligncenter size-medium wp-image-484" title="propriedades do projeto" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/30-300x162.jpg" alt="" width="300" height="162" /></a></p>
<p>Isso nos abre uma outra tela na qual vamos escolher a opção bibliotecas. E agora vamos escolher adicionar bibliotecas.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/31.jpg"><img class="aligncenter size-medium wp-image-485" title="escolher bibliotecas 1" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/31-300x234.jpg" alt="" width="300" height="234" /></a></p>
<p>Com isso vai aparecer a opção para escolhermos quais as bibliotecas queremos adicionar, neste caso a do MySQL.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/32.jpg"><img class="aligncenter size-medium wp-image-486" title="biblioteca do mysql" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/32-261x300.jpg" alt="" width="261" height="300" /></a></p>
<p>Fim dos comerciais, agora podemos voltar ao nosso projeto. Vamos agora criar um pacote java chamado app onde ficará nossa classe de &#8220;aplicação&#8221; que vai representar o que seria uma interface gráfica por exemplo. Isso já está explicado aí em cima né ? Então vamos seguir para criar uma classe Java tradicional.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/231.jpg"><img class="aligncenter size-medium wp-image-488" title="classe de aplicacao" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/231-283x300.jpg" alt="" width="283" height="300" /></a></p>
<p>E basta agora dar o nome de Aplicacao e colocar a classe no pacote app. Vamos deixar essa classe em banho-maria por enquanto. Vamos seguir agora para uma outra parte mágica do JPA, o Netbeans permite criar um tipo de classe chamado JPAController, aplicando o padrão de projetos Controller, ele permite fazer a ponte entre a classe de entidade e o banco de dados efetivamente. Quando criada, está classe já vem com as operações básicas, e que muitas vezes são suficientes para alguns cadastros. Algumas vezes o tipo de recurso que queremos criar não está disponível no menu, basta ir até &#8220;outros&#8221;.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/24.jpg"><img class="aligncenter size-medium wp-image-489" title="outras classes" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/24-234x300.jpg" alt="" width="234" height="300" /></a></p>
<p>E em seguida escolher em persistência, JPAController.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/25.jpg"><img class="aligncenter size-medium wp-image-490" title="jpacontroller" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/25-300x215.jpg" alt="" width="300" height="215" /></a></p>
<p>Agora uma nova tela surgirá para que escolhamos para qual Entidade vamos criar o JPAController, sim, para cada entidade teremos um controller diferente.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/26.jpg"><img class="aligncenter size-medium wp-image-491" title="escolha de entidade" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/26-300x203.jpg" alt="" width="300" height="203" /></a></p>
<p>Em nosso projeto só existe uma entidade, e portanto fica fácil de escolher, basta clicar na classe domain.Livro e clicar em adicionar, depois vamos para a próxima tela onde vamos escolher em que pacote as classes vão ser criadas.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/28.jpg"><img class="aligncenter size-medium wp-image-492" title="pacote do jpa" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/28-300x191.jpg" alt="" width="300" height="191" /></a></p>
<p>Neste momento estamos com toda a infraestrutura do nosso projeto criada e podemos retomar a nossa classe de aplicação que vai utilizar todos esses mecanismos. Para conferir a estrutura e as classes criadas segue a próxima figura.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/29.jpg"><img class="aligncenter size-medium wp-image-493" title="classes criadas" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/29-237x300.jpg" alt="" width="237" height="300" /></a></p>
<p>Agora retomando nossa classe de aplicação, o que queremos fazer com um banco de dados ? Persistir os dados de nossa aplicação! Então precisamos criar objetos, preencher os valores, criar uma instância de JPAController e chamar os métodos para realizar as ações desejadas. Nesta figura temos todos os usos das chamadas, criar, buscar, editar e remover. Esse código precisa ser colocado no método main da nossa classe Aplicacao.</p>
<p><a href="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/34.jpg"><img class="aligncenter size-medium wp-image-494" title="codigo" src="http://www.paulomotta.pro.br/wp-content/uploads/2010/05/34-300x164.jpg" alt="" width="300" height="164" /></a></p>
<p>É isso, é claro que até aqui só temos o suficiente para criar um pequeno projeto, mas podemos ampliar os estudos com alguns livros importantes, mais para frente vou colocar aqui umas resenhas de livros importantes para esse tópico.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/05/17/tutorial-jpa/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Representando uma Matriz com um Array</title>
		<link>http://www.paulomotta.pro.br/2010/02/12/representando-uma-matriz-com-um-array-2/</link>
		<comments>http://www.paulomotta.pro.br/2010/02/12/representando-uma-matriz-com-um-array-2/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 05:00:00 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ALGORITMOS]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JOGOS]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=267</guid>
		<description><![CDATA[Bom esse assunto é recorrente na programação e muitas vezes é utilizado como exercício em cursos de programação ou de estrutura de dados. Muitas vezes também é necesário nos cursos de computação gráfica (programada, não curso de usar photoshop ok?)
O truque é puramente matemático e precisamos entender uma propriedade dos números inteiros (tenhamos em mente [...]]]></description>
			<content:encoded><![CDATA[<p>Bom esse assunto é recorrente na programação e muitas vezes é utilizado como exercício em cursos de programação ou de estrutura de dados. Muitas vezes também é necesário nos cursos de computação gráfica (programada, não curso de usar photoshop ok?)</p>
<p>O truque é puramente matemático e precisamos entender uma propriedade dos números inteiros (tenhamos em mente que os índices de arrays são normalmente números inteiros&#8230;) relacionada ao resto da divisão. Quando dividimos um número inteiro por outro, pode acontecer de sobrar um resto, de forma que o resultado mais esse resto é igual ao número dividido, assim temos:</p>
<p>a/ b = q + r</p>
<p>onde &#8220;q&#8221; é o resultado de a/b e &#8220;r&#8221; o resto da divisão.</p>
<p>e para achar o número dividio original basta operar: b * q + r</p>
<p>por exemplo: 4/3 = 1 com resto 1 e (1 * 3 ) + 1 = 4</p>
<p>Quem estiver muito interessado nisso pode procurar mais material referente as Classes de Números Inteiros (na matemática, não é nenhuma classe Java não!)</p>
<p>Bom, mas porque essa matemática toda? Porque essa propriedade é fundamental para convertermos um número em dois! Isso mesmo, como o array é indexado por um único número temos que conseguir uma relação que nos permita transformar esse número em um par de números para indexar uma matriz (que na verdade não existe, está sendo representada no array.)</p>
<p>Vamos pensar em uma matriz 3&#215;3 seu array correspondente deve ter tamanho 9 (= 3 * 3) para conseguir comportar todos os elementos da matriz. Dessa maneira nossos índices (considerando as linguagens C, Java, C++, C# e outras que começam a contar em 0) são: 0, 1, 2, 3, 4, 5, 6, 7, 8, porém os índices da matriz são (0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2). Pelo menos temos a mesma quantidade de índices e pares de índices, já é uma dica do que esta acontecendo aqui <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Vamos começar a analisar primeiro do ponto de vista de entrada, o usuário quer acessar um elemento em sua &#8220;matriz&#8221; e para isso vai informar dois valores digamos &#8220;i&#8221; e &#8220;j&#8221; que serão (1,1) respectivamente. Basta aqui multiplicar &#8220;i&#8221; pela ordem da matriz (3 nesse caso) e somar o valor de &#8220;j&#8221; e assim (1 * 3) + 1 = 4. Nossa primeira fórmula:</p>
<p>(i,j) = (i * N) + j (onde N é a ordem da matriz)</p>
<p>Essa foi fácil! Mas ainda não falamos sobre o porque de ter entrado aquela explicação toda sobre resto de divisão&#8230; Isso é porque para fazer a operação inversa teremos que converter um único número em dois!</p>
<p>Imaginemos então que o próximo passo seja imprimir a matriz na tela ou em um arquivo em disco, então vamos percorrer nosso array com um único for já que só temos uma dimensão, no entanto para imprimir precisaremos colocar os valores que o usuário conhece que são os pares (i,j), mas como?</p>
<p>Bom, lembrando das propriedades que falamos temos o seguinte, consideremos a posição 4 que já sabemos que equivale ao par (1,1), se dividirmos 4 pela ordem da matriz, 3 neste caso, teremos 1, agora isso é o &#8220;i&#8221; ou o &#8221; j&#8221; ? Vamos explorar outros casos, se pegarmos o 5 por exemplo e dividirmos por 3 também teremos 1 como resultado, se o 4 e o 5 estão na mesma linha então a divisão inteira de números nos dá o componente &#8220;i&#8221;! Como vamos conseguir então com uma mesma operação e 3 valores distintos conseguir resultados que acessem as colunas? Sim, porque o valor de &#8220;j&#8221; deve ser crescente para os índices 3, 4 e 5 do array, porém é sempre o mesmo em cada uma das linhas. A resposta está na operação de módulo ou resto da divisão.  Vamos considerar esses valores abaixo:</p>
<p>3 % 3 = 0</p>
<p>4 % 3 = 1</p>
<p>5 % 3 = 2</p>
<p>Então esta é nossa segunda fórmula mágica, o resto da divisão do array pela ordem da matriz nos da o componente &#8220;j&#8221; do par.</p>
<p>Resumindo temos o seguinte:</p>
<p>dados (i,j) devemos guardar o valor na posição array[(i*N)+j]</p>
<p>dado o valor (idx) o seu valor corresponde ao elemento (i,j) tal que i = idx / N e j = idx % N</p>
<p>Como exemplo de correspondências temos:</p>
<p>array[0] = matriz[0][0]<br />
array[1] = matriz[0][1]<br />
array[2] = matriz[0][2]<br />
array[3] = matriz[1][0]<br />
array[4] = matriz[1][1]<br />
array[5] = matriz[1][2]<br />
array[6] = matriz[2][0]<br />
array[7] = matriz[2][1]<br />
array[8] = matriz[2][2]</p>
<p>A mágica das Classes de Números Inteiros está (muito resumidamente) no fato de que os números apresentam certas propriedades que os relacionam, assim podemos pensar em formato de tabela da seguinte forma (agora para um exemplo maior):</p>
<p>0     1   2   3    4</p>
<p>5     6   7   8    9</p>
<p>10 11 12 13 14</p>
<p>15 16 17 18 19</p>
<p>20 21 22 23 24</p>
<p>Com essa tabela podemos ver que se uma matriz tem ordem 5&#215;5 então ela tem 25 elementos, além disso, podemos perceber que todos os múltiplos de 5 estão na coluna 0, todos os que tem resto de divisão 1 estão na coluna 1, e assim sucessivamente até a coluna 4 onde o próximo número será múltiplo de 5 e por isso voltará para a coluna 0 (mas com o índice de linha incrementado.)</p>
<p>A seguir um código Java para ilustrar o uso dessas fórmulas:</p>
<pre>public class ArrayMatriz {
    public static void main(String[] args) {
        int N = 3;
        float matriz[][] = new float[N][N];
        float array[] = new float[(N*N)];

        for (int i = 0; i &lt; array.length; i++) {
            array[i] = i;
            System.out.println("array["+i+"]="+array[i]);
        }
        for (int i = 0; i &lt; matriz.length; i++) {
            for (int j = 0; j &lt; matriz[i].length; j++) {
                matriz[i][j] = (i * N) + j;
                System.out.print("matriz["+i+"]["+j+"]="+
                         (matriz[i][j])+"   ");
            }
            System.out.println("");
        }

        for (int i = 0; i &lt; array.length; i++) {
            array[i] = i;
            int mi = i / N;
            int mj = i % N;
            System.out.println("array["+i+"]="+array[i]+
                     " matriz["+mi+"]["+mj+"]="+matriz[mi][mj]);
        }
        for (int i = 0; i &lt; matriz.length; i++) {
            for (int j = 0; j &lt; matriz[i].length; j++) {
                matriz[i][j] = (i * N) + j;
                System.out.print("matriz["+i+"]["+j+"]="+(matriz[i][j])+
                    " / array["+((i * N) + j)+"]="+array[(i * N) + j]+"   ");
            }
            System.out.println("");
        }
    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/02/12/representando-uma-matriz-com-um-array-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Iniciando a programação de GPU com CUDA</title>
		<link>http://www.paulomotta.pro.br/2010/02/05/iniciando-a-programacao-de-gpu-com-cuda/</link>
		<comments>http://www.paulomotta.pro.br/2010/02/05/iniciando-a-programacao-de-gpu-com-cuda/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 04:18:34 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[GPU]]></category>
		<category><![CDATA[PARALELISMO]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/2010/02/05/iniciando-a-programacao-de-gpu-com-cuda/</guid>
		<description><![CDATA[Por conta do doutorado eu tenho um interesse especial por arquiteturas paralelas como é o caso do processador Cell Broadband Engine que equipa o Playstation3 e também das placas de vídeo da nVidia que têm diversos núcleos e nos últimos anos têm chamado a atenção dos pesquisadores por serem muito mais baratas do que máquinas [...]]]></description>
			<content:encoded><![CDATA[<p>Por conta do doutorado eu tenho um interesse especial por arquiteturas paralelas como é o caso do processador Cell Broadband Engine que equipa o Playstation3 e também das placas de vídeo da nVidia que têm diversos núcleos e nos últimos anos têm chamado a atenção dos pesquisadores por serem muito mais baratas do que máquinas paralelas grandes.<br />
Sempre adiei o início dos meus estudos desse tipo de desenvolvimento mas nesse verão surgiu a oportunidade de fazer um mini-curso de programação CUDA no LNCC em Petrópolis, tem sido uma experiência interessante (que terminou sexta-feira dia 05/02/2010) e que me incentivou a finalmente fazer a instalação do meu ambiente.<br />
Tal como no caso do Cell Broadband Engine, existem meios de programar usando um ambiente emulado, mas nada como poder executar seu programa na arquitetura final <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  por sorte minha máquina é equipada com uma placa GeForce 8200M G. No site da nVidia consta que esta placa não tem capacidade de rodar programas CUDA, mas depois de rodar pelos fóruns descobri que algumas pessoas conseguiram executar com sucesso, e também na wikipedia consta esta placa como capaz de rodar programas CUDA.<br />
Bom, a tarefa parecia simples, é necessário usar o driver fornecido pela nVidia, existem versões para linux, windos e mac. A versão mais recente (e estável) do CUDA é a 2.3, porém esta precisava da versão 190 do driver, começou aí o meu primeiro problema. Meu OpenSuSE 11.1 é uma versão de 32 bits, para que reconhecesse toda a memória instalada (4GB) foi necessário usar o módulo de expansão PAE, com isso o driver de vídeo mais atualizado é o 185.18.14 voltei então para a versão 2.2 do CUDA que é compátivel com meu driver.<br />
A instalação é bem tranquila, sendo realizada a partir de dois arquivos binários baixados da nVidia, porém precisamos ficar atentos, os exemplos não compilavam de jeito algum, pois a biblioteca libcuda.so não estava visível, mais uma busca nos fóruns e achei uma dica de criar um link simbólico do arquivo .so fornecido para o nome esperado pelo SDK, funcionou corretamente, mas agora o problema estava com a compilação de certos exemplos, que realizei como root.</p>
<p>Hora de fazer um resumo ! Comece assim:</p>
<ol>baixe os arquivos da nVidia</ol>
<ol>atualize o driver de vídeo</ol>
<ol>instale o SDK</ol>
<ol>vá até o diretório /usr/lib e faça um link simbólico para o arquivo do libcuda.so.xxx como libcuda.so</ol>
<ol>no diretório NVIDIA_CUDA_SDK execute o make como root (ou com sudo)</ol>
<p>Pronto! Agora já tem um ambiente funcionando, no meu caso o openGL não está funcionando, mas não é bem o meu objetivo então isso não foi um grande problema. Minha placa tem apenas um multiprocessador com 8 núcleos e 512MB acredito que seja possível realizar os testes necessários, mas se tudo funcionar vou precisar providenciar um ambiente mais forte com mais núcleos.</p>
<p>Em breve vou postar aqui alguns exemplos de codificação e como configurar o Netbeans para trabalhar com o CUDA.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/02/05/iniciando-a-programacao-de-gpu-com-cuda/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bluetooth no openSuSE 11.1</title>
		<link>http://www.paulomotta.pro.br/2009/08/24/bluetooth-no-opensuse-111/</link>
		<comments>http://www.paulomotta.pro.br/2009/08/24/bluetooth-no-opensuse-111/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 06:04:07 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[BLUETOOTH]]></category>
		<category><![CDATA[OPENSUSE]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/2009/08/24/bluetooth-no-opensuse-111/</guid>
		<description><![CDATA[Quando saiu a versÃ£o atual do openSuSE, a 11.1, fiquei animado para atualizar a mÃ¡quina, embora quisesse experimentar a versÃ£o 64 bits, resolvi deixar isso para depois usando a 32 bits mesmo, porque devido a experiÃªncia anterior, vi que algumas ferramentas sÃ£o mais difÃ­ceis de encontrar. Quando atualizei o sistema tive uma surpresa desagradÃ¡vel, porÃ©m [...]]]></description>
			<content:encoded><![CDATA[<p>Quando saiu a versÃ£o atual do openSuSE, a 11.1, fiquei animado para atualizar a mÃ¡quina, embora quisesse experimentar a versÃ£o 64 bits, resolvi deixar isso para depois usando a 32 bits mesmo, porque devido a experiÃªncia anterior, vi que algumas ferramentas sÃ£o mais difÃ­ceis de encontrar. Quando atualizei o sistema tive uma surpresa desagradÃ¡vel, porÃ©m nÃ£o grave, a pilha de protocolos bluetooth <a href="http://www.bluez.org" target="_blank">BlueZ</a> tendo sido atualizada para a versÃ£o 4.19 nÃ£o estava mais funcionando, nÃ£o sÃ³ nÃ£o funcionava no KDE 3.5.x como nÃ£o funcionava diretamente com o hcitool, atÃ© achei algumas pÃ¡ginas que davam algumas dicas de como tentar contornar o problema, mas nada com real sucesso.</p>
<p>A grande surpresa veio quando, sem conseguir me conformar com a falta do suporte bluetooth (jÃ¡ que o controle do Wii Ã© um dispositivo bluetooth com o qual tenho trabalhado,) resolvi mais uma vez procurar alguma coisa e, mudando os parÃ¢metros de busca no google, cheguei atÃ© uma pÃ¡gina que sugeria desinstalar completamente os pacotes do bluez versÃ£o 4.x e fazer um <em>downgrade</em> para a versÃ£o 3.x, sugeria ainda instalar os pacotes a partir de um repositÃ³rio independente que jÃ¡ tinha os pacotes compilados. Infelizmente um dos repositÃ³rios sugeridos nÃ£o tem mais os pacotes.</p>
<p>ApÃ³s pensar um pouco tive a ideia de baixar os fontes do site do BlueZ e compilar localmente, nÃ£o haveria o RPM mas havia uma chance de funcionar. Bom, apÃ³s compilar e instalar o pacote, voltei ao <a href="http://medwinz.blogsome.com/2009/01/17/workaround-for-bluetooth-service-on-opensuse-111-downgrade-bluez-and-it-works/" target="_blank">tutorial</a> e instalei a parte de utilitÃ¡rios bluez3-test, bluez3-utils e bluez-hcidump atravÃ©s do segundo repositÃ³rio que ainda estÃ¡ disponÃ­vel. Optei por nÃ£o compilar essa parte porque existem mais dependÃªncias de compilaÃ§Ã£o. AlÃ©m disso instalei tambÃ©m o libbluetooth2 e o kbluetooth. Resultado funcionamento completo de bluetooth no openSuSE 11.1 com direito a tray-icon e busca por dipositivos com o suporte do KDE!</p>
<p>Bom para resumir os passos devemos fazer o seguinte:</p>
<ol>
<li>Remover todos os pacotes de bluetooh do sistema</li>
<li>Baixar o pacote <a href="http://bluez.sf.net/download/bluez-libs-3.36.tar.gz">bluez-libs-3.36.tar.gz</a> e descompactar o pacote para uma pasta em sua mÃ¡quina local</li>
<li>Executar &#8220;./configure &#8211;prefix=/usr&#8221; na pasta onde foi descompactado o arquivo</li>
<li>Executar &#8220;make &amp;&amp; make install&#8221; como root</li>
<li>Instalar o repositÃ³rio &#8220;http://download.opensuse.org/repositories/home:/enzokiel:/bluez3/openSUSE_11.1_Update/&#8221; no Yast</li>
<li>Instalar os pacotes:
<ol>
<li>bluez-audio (3.36.x)</li>
<li>bluez-hcidump (1.42.x)</li>
<li>bluez-utils (3.36.x)</li>
<li>kdebluetooth (1.0_beta8)</li>
<li>kdebluetooth-lang (1.0_beta8)</li>
<li>libbluetooth2 (3.36.x)</li>
</ol>
</li>
</ol>
<p>Pronto agora basta plugar a antena (caso seja usb) e o Ã­cone jÃ¡ aparece na barra de trabalho! Ainda Ã© necessÃ¡rio configurar o adaptador para selecionar se o computador deve ser encontrado ou nÃ£o por dispositivos. Como teste tentei procurar dipositivos de entrada e coloquei o Wiimote em modo de sincronia, achou e guardou a configuraÃ§Ã£o! Ainda nÃ£o testei sincronizar o <a href="http://www.submarino.com.br/produto/11/1972674/celular+nokia+n73+camera+3.2mp+mp3+cartao+1gb+e+fone+estereo/franq=268087" target="_blank">Nokia N73</a>, mas acredito que funcionarÃ¡ porque na versÃ£o anterior (openSuSE 11.0 com KDE 3.5.x e bluetooth BlueZ 3.x) a sincronia com o telefone funcionava sem problemas.</p>
<p>Pretendo em breve gerar uma versÃ£o em RPM de ambos os pacotes BlueZ 3.36.x e disponibilizar aqui, mas infelizmente isso nÃ£o esta com prioridade alta na lista de tarefas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2009/08/24/bluetooth-no-opensuse-111/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
