<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>JESJOBLOG</title>
	
	<link>http://blog.jesjobom.com</link>
	<description>O blog do Jesjobom</description>
	<lastBuildDate>Fri, 21 Dec 2012 15:39:36 +0000</lastBuildDate>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jesjoblog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="jesjoblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Configurando Solr Cloud (Beta) + Tomcat + Zookeeper externo</title>
		<link>http://blog.jesjobom.com/2012/08/configurando-solr-cloud-beta-tomcat-zookeeper-externo/</link>
		<comments>http://blog.jesjobom.com/2012/08/configurando-solr-cloud-beta-tomcat-zookeeper-externo/#comments</comments>
		<pubDate>Thu, 30 Aug 2012 23:16:46 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Configuração]]></category>
		<category><![CDATA[Indexação]]></category>
		<category><![CDATA[Índice]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[Solr 4]]></category>
		<category><![CDATA[Solr Cloud]]></category>
		<category><![CDATA[Solr distribuído]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Zookeeper]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=265</guid>
		<description><![CDATA[Virtualmente materializo-me aqui novamente trazendo informação aos necessitados! Dessa vez, trago um guia simples e (até certo ponto) completo para configuração do Solr Cloud rodando em Tomcat acessando um Zookeeper externo. Precisei configurar e testar uma estrutura distribuída e expansível do Solr para indexações rápidas e consultas mais rápidas ainda. Devido ao fato do Solr [...]]]></description>
			<content:encoded><![CDATA[<p>Virtualmente materializo-me aqui novamente trazendo informação aos necessitados! Dessa vez, trago um guia simples e (até certo ponto) completo para configuração do Solr Cloud rodando em Tomcat acessando um Zookeeper externo.</p>
<p>Precisei configurar e testar uma estrutura distribuída e expansível do Solr para indexações rápidas e consultas mais rápidas ainda. Devido ao fato do Solr 4 (que implementa o &#8220;modo Cloud&#8221;) ainda estar em Beta (pelo menos até a data de publicação desse post), existe pouco material de boa qualidade.</p>
<p>No site oficial um tutorial simples ensina a rodar o Solr através do Jetty interno levantando o serviço de um Zookeeper também interno.<span id="more-265"></span></p>
<p>Bem, antes de mais nada, vamos a definições rápidas:</p>
<h3><a title="Apache Lucene Core" href="http://lucene.apache.org/core/" target="_blank">Lucene</a></h3>
<p>Motor de indexação e busca de textos, rico em recursos, escrito em Java e cross plataforma. Essencialmente nos permite indexar grandes e numerosos textos para realizarmos buscas rápidas.</p>
<h3><a title="Apache Solr" href="http://lucene.apache.org/solr/" target="_blank">Solr</a></h3>
<p>Plataforma opensource de buscas para o Lucene, permitindo integrações via requisições REST e outros recursos de gerenciamento. De maneira bem simples, é uma interface para o Lucene.</p>
<h3><a title="Apache Solr Cloud Wiki" href="http://wiki.apache.org/solr/SolrCloud/" target="_blank">Solr Cloud</a></h3>
<p>É o novo recurso do Solr 4-Beta, permitindo a distribuição ou replicação de índices através de várias instâncias do Solr.</p>
<h3><a title="Apache Zookeeper" href="http://zookeeper.apache.org/" target="_blank">Zookeeper</a></h3>
<p>Serviço centralizado de manutenção de configurações, distribuição de estados e gerenciamento de eventos. É usado pelo Solr Cloud para obtenção de configurações e comunicação entre as instâncias do Solr.</p>
<p>&nbsp;</p>
<h2>1. Preparando</h2>
<p>Durante o tutorial, considerarei uma determinada estrutura de pastas. Todos os passos foram executados em Linux (CentOS 6) com Java 7 (1.7.0_06-b24).</p>
<p>Baixei o <a title="Download Apache Tomcat 7" href="http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.29/bin/apache-tomcat-7.0.29.zip" target="_blank">Tomcat 7</a> (7.0.29) e extraí para /usr/tomcat/ .</p>
<p>Baixei o <a title="Download Apache Solr 4 Beta" href="http://www.us.apache.org/dist/lucene/solr/4.0.0-BETA/apache-solr-4.0.0-BETA.zip" target="_blank">Solr 4</a> (beta) e extraí em /usr/solr/ .</p>
<p>Baixei o <a title="Download Apache Zookeeper" href="http://www.us.apache.org/dist/zookeeper/zookeeper-3.4.3/zookeeper-3.4.3.tar.gz" target="_blank">Zookeeper 3</a> (3.4.3) e extraí em /usr/zookeeper/ .</p>
<p>&nbsp;</p>
<h2>2. Configurando e iniciando o Zookeeper</h2>
<p>A simplicidade do serviço principal do Zookeeper é assustadora. Entre na pasta de configurações e edite o arquivo <em>zoo.cfg</em> conforme abaixo:</p>
<blockquote><p>#cd /usr/zookeeper/zookeeper-3.4.3/conf/<br />
#vim zoo.cfg</p></blockquote>
<blockquote><p>tickTime=2000<br />
initLimit=10<br />
syncLimit=5<br />
dataDir=/usr/zookeeper/data/<br />
clientPort=9000</p></blockquote>
<p>No arquivo<em> zoo_sample.cfg </em>existem explicações sobre os possíveis parâmetros. Mas já deve ficar claro que <em>dataDir</em> informa onde ficarão os arquivos gerados e o PID do serviço; e o <em>clientPort</em> será a porta que o serviço escutará por clientes.</p>
<p>Para startar o serviço, é mais fácil ainda:</p>
<blockquote><p>#cd /usr/zookeeper/zookeeper-3.4.3/bin/<br />
#./zkServer start</p></blockquote>
<p>&nbsp;</p>
<h2>3. Carregando configurações do Solr no Zookeeper</h2>
<p>O Zookeeper, quando iniciado, gera um sistema de arquivos virtual que pode ser distribuído e pode ser acessado através do serviço. E é nesse sistema de arquivos que temos que salvar as configurações do Solr para que qualquer instância acesse, mesmo que remotamente.</p>
<p>O acesso ao Zookeeper requer uma implementação muitas vezes complicada&#8230; <strong>se</strong> tivéssemos que fazer tudo manualmente. Mas existem ferramentas, APIs e scripts prontos pra isso.</p>
<p>No pacote do Solr, juntamente com alguns exemplos, existe um script (bash e bat) para esse envio de configurações&#8230; e também existem configurações prontas para utilizarmos&#8230; e dados para testarmos&#8230; Enfim, vamos fazer o upload.</p>
<blockquote><p>#cd /usr/solr/apache-solr-4.0.0-BETA/example/cloud-scripts/<br />
#./zkcli.sh -cmd upconfig -confdir /usr/solr/apache-solr-4.0.0-BETA/example/solr/collection1/conf/ -confname collection1 -z localhost:9000</p></blockquote>
<p>Depois que o envio terminar, podemos acessar o sistema de arquivos do Zookeeper e ver o resultado.</p>
<blockquote><p>#cd /usr/zookeeper/zookeeper-3.4.3/bin/<br />
#./zkCli.sh -server localhost:9000<br />
#ls /configs/collection1</p></blockquote>
<p>&nbsp;</p>
<h2>4. Configurando o Solr</h2>
<p>Apesar das configurações de indexação serem obtidas do Zookeeper, existem configurações locais que definem a função da instância local do Solr. Nessa configuração local, definimos as instâncias que serão criadas (<em>cores</em>) e a quais <em>collections</em> e <em>shards</em> essas instâncias se conectarão.</p>
<p>Explicando e seguindo uma ordem de hierarquia:</p>
<h3>Collection</h3>
<p>É o conjunto de configurações que foram carregadas. No nosso caso, temos uma <em>collections</em> nomeada como &#8220;collection1&#8243;. Pode-se considerar que representa um domínio de dados, como &#8220;livros&#8221;, &#8220;documentos&#8221; ou &#8220;jornais da cidade&#8221;.</p>
<h3>Shard</h3>
<p>É uma divisão física dos índices salvos, permitindo a distribuição da tarefa de indexação por várias instâncias do Solr. No caso da perda de uma <em>shard</em> inteira, a parte dos índices que estavam nesta<em> shard </em>serão perdidos.</p>
<p>No caso de 2 ou mais <em>cores </em>estarem configurados para a mesma <em>shard</em>, estes serão réplicas, mantendo cópias dos mesmos índices fornecendo um nível de redundância e acelerando consultas.</p>
<p>Além disso, se não for especificado uma quantidade de  <em>shards</em>, por padrão existirá apenas 1. E os <em>cores</em> serão igualmente distribuídos entre as <em>shards</em> se não forem forçadamente direcionados.</p>
<h3>Core</h3>
<p>É efetivamente uma instância do Solr, com sua própria configuração e seu próprio índice. Deve ser especificado um nome único para cada <em>core</em> e a configuração (<em>collection</em>) que será carregada. A definição da <em>shard</em> é opcional.</p>
<blockquote><p>#cd /usr/solr/apache-solr-4.0.0-BETA/example/solr<br />
#vim solr.xml
</p></blockquote>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;solr</span> <span style="color: #000066;">persistent</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cores</span> <span style="color: #000066;">adminPath</span>=<span style="color: #ff0000;">&quot;/admin/cores&quot;</span> <span style="color: #000066;">host</span>=<span style="color: #ff0000;">&quot;localhost&quot;</span> <span style="color: #000066;">hostPort</span>=<span style="color: #ff0000;">&quot;8080&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;core</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;core1&quot;</span> <span style="color: #000066;">collection</span>=<span style="color: #ff0000;">&quot;collection1&quot;</span> <span style="color: #000066;">instanceDir</span>=<span style="color: #ff0000;">&quot;core1/&quot;</span> <span style="color: #000066;">shard</span>=<span style="color: #ff0000;">&quot;shard1&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;core</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;core2&quot;</span> <span style="color: #000066;">collection</span>=<span style="color: #ff0000;">&quot;collection1&quot;</span> <span style="color: #000066;">instanceDir</span>=<span style="color: #ff0000;">&quot;core2/&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cores<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/solr<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>No caso, criei 2 <em>cores</em> apontando para a mesma configuração. Cada um deles com seu próprio nome e pasta (onde serão salvos os índices). O &#8220;core1&#8243; possui uma <em>shard</em> especificada e será a única existente. O &#8220;core2&#8243; será designado automaticamente para &#8220;shard1&#8243;.</p>
<p>Importante notar as outras configurações. O &#8220;persistent=true&#8221; permitirá que o gerenciamento de <em>cores</em> pela interface reflita neste arquivo. E o &#8220;host&#8221; e &#8220;hostPort&#8221; devem ser os mesmo para o acesso padrão ao Tomcat com o Solr.</p>
<p>&nbsp;</p>
<h2>5. Configurando e subindo o Tomcat</h2>
<p>Apenas duas coisas são necessárias para podermos startar o Tomcat e ver tudo funcionando: incluir a configuração apontando para o .war do Solr e setar uma variável do Java necessária para o Solr Cloud.</p>
<blockquote><p>#cd /usr/tomcat/apache-tomcat-7.0.29/conf/Catalina/localhost/<br />
#vim solr.xml</p></blockquote>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Context</span> <span style="color: #000066;">docBase</span>=<span style="color: #ff0000;">&quot;/usr/solr/apache-solr-4.0.0-BETA/dist/apache-solr-4.0.0-BETA.war&quot;</span> <span style="color: #000066;">path</span>=<span style="color: #ff0000;">&quot;/solr&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Environment</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;solr/home&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;java.lang.String&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;/usr/solr/apache-solr-4.0.0-BETA/example/solr&quot;</span> <span style="color: #000066;">override</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Context<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Observe que é necessário apontar o local onde está o &#8220;solr.xml&#8221; configurado anteriormente.</p>
<p>Para iniciar o Solr em modo Cloud, basta disponibilizar a variável Java &#8220;zkHost&#8221; apontando para o endereço onde o ZooKeeper está escultando. </p>
<p>No caso, inclua a variável no JAVA_OPTS através de <em>export</em> ou editando o &#8220;catalina.sh&#8221;. Então inicie o Tomcat.</p>
<blockquote><p>#export JAVA_OPTS=&#8221;-DzkHost=localhost:9000&#8243;<br />
#./startup.sh</p></blockquote>
<p>Quando terminar de startar, acesse <a href="http://localhost:8080/solr/" title="Solr Local" target="_blank">http://localhost:8080/solr/</a>. Se o Cloud Mode do Solr ativou com sucesso (devido à variável &#8220;zkHost&#8221;),  no menu lateral deve aparecer a opção &#8220;Cloud&#8221;. Nesta é possível visualizar o gráfico da rede de instâncias conectadas ou que já conectaram.</p>
<p>Se tudo ocorreu bem, neste gráfico deverão ter um <em>collection</em> &#8220;collection1&#8243;, um <em>shard</em> &#8220;shard1&#8243;, e dois <em>cores</em> &#8220;localhost&#8221; (o nome do core é usado para nomeá-los em outras áreas).</p>

<a href="http://blog.jesjobom.com/wp-content/gallery/outros/solr-cloud.jpg" title="" class="shutterset_singlepic22" >
	<img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/cache/22__320x240_solr-cloud.jpg" alt="Solr Cloud Graph" title="Solr Cloud Graph" />
</a>

<p>Certo?! =)</p>
<p>Lembrando que aqui temos 2 instâncias na mesma máquina que o Zookeeper&#8230; Mas podem ser <em>n</em> instâncias em máquinas diferentes, apontando para o mesmo Zookeeper. Basta seguir os passos 4 e 5 para cada servidor.</p>
<p>Pararei por aqui&#8230; Formas de indexar, conectar, consultar, otimizar e etc. são operações existentes desde versões anteriores do Solr e, por isso, muito comuns pela rede&#8230; So&#8230; <a href="http://lmgtfy.com/?q=solr+tutorial" title="Google Solr Tutorial" target="_blank">GOOGLE IT</a>!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.jesjobom.com%2F2012%2F08%2Fconfigurando-solr-cloud-beta-tomcat-zookeeper-externo%2F&amp;title=Configurando%20Solr%20Cloud%20%28Beta%29%20%2B%20Tomcat%20%2B%20Zookeeper%20externo" id="wpa2a_2"><img src="http://blog.jesjobom.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2012/08/configurando-solr-cloud-beta-tomcat-zookeeper-externo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuração de múltiplas unidades de persistência com JPA + Spring</title>
		<link>http://blog.jesjobom.com/2012/06/configuracao-de-multiplas-unidades-de-persistencia-com-jpa/</link>
		<comments>http://blog.jesjobom.com/2012/06/configuracao-de-multiplas-unidades-de-persistencia-com-jpa/#comments</comments>
		<pubDate>Sun, 03 Jun 2012 03:13:44 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Annotation]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[EntityManager]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Persistence]]></category>
		<category><![CDATA[PersistenceUnit]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Transactional]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=250</guid>
		<description><![CDATA[Depois de um longo período sem postar (para variar) volto com uma dica que me foi muito útil: configurar o JPA com múltiplas unidades de persistência, ou seja, utilizar mais de um banco de dados em um projeto java. Recentemente voltei a desenvolver (de verdade) em Java e estou encarando desafios inéditos até então para [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de um longo período sem postar (para variar) volto com uma dica que me foi muito útil: configurar o <a title="JPA Wiki" href="http://pt.wikipedia.org/wiki/Java_Persistence_API" target="_blank">JPA</a> com múltiplas unidades de persistência, ou seja, utilizar mais de um banco de dados em um projeto java.</p>
<p>Recentemente voltei a desenvolver (de verdade) em Java e estou encarando desafios inéditos até então para mim. Estou vendo muitas coisas novas e espero tornar o blog um pouco mais ativo com essas &#8220;descobertas&#8221;. Talvez 1 ou 2 posts por semestre&#8230; =]</p>
<p>Anyway, a motivação desse post é que precisei utilizar dois bancos de dados, um MySQL para leituras e outro PgSQL para escrita. Procurei bastante e achei bastante material, mas nada completo envolvendo configurações dos data sources, das unidades de persistências e das transações num lugar só. Por isso venho tentar unificar isso e ajudar quem precise.</p>
<p>Ah, não irei demonstrar uma aplicação completa, como geralmente faria&#8230; Se precisarem de um projeto com as configurações básicas procurem pelo arquétipo do Maven &#8220;spring-mvn-jpa-archtype/&#8221;.<span id="more-250"></span></p>
<p>Bem, para inicio de conversa, nesse meu projeto compatível com Java 6, utilizei Spring 3.0.5, Hibernate 3.6.0 e a implementação do JPA 2.0 pelo Hibernate. Utilizarei annotations, mas não quero exagerar e abolir os XMLs ^^ .</p>
<p>Primeiramente a configuração dos bancos:</p>
<p><strong>database.xml</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;placeHolderDefault&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;locations&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;classpath:db.properties&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;my_dataSource&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.apache.commons.dbcp.BasicDataSource&quot;</span></span>
<span style="color: #009900;">		<span style="color: #000066;">destroy-method</span>=<span style="color: #ff0000;">&quot;close&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;driverClassName&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${my.driver}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;url&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${my.url}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${my.username}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${my.password}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;pg_dataSource&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.apache.commons.dbcp.BasicDataSource&quot;</span></span>
<span style="color: #009900;">		<span style="color: #000066;">destroy-method</span>=<span style="color: #ff0000;">&quot;close&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;driverClassName&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${pg.driver}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;url&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${pg.url}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${pg.username}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${pg.password}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;my_entityManagerFactory&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;my_dataSource&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;persistenceXmlLocation&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;classpath:META-INF/my_persistence.xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jpaVendorAdapter&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;showSql&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;generateDdl&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;databasePlatform&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${my.dialect}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>		
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;pg_entityManagerFactory&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;pg_dataSource&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;persistenceXmlLocation&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;classpath:META-INF/pg_persistence.xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jpaVendorAdapter&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;showSql&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;generateDdl&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;databasePlatform&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${pg.dialect}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/property<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>		
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;my_transactionManager&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.orm.jpa.JpaTransactionManager&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;entityManagerFactory&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;my_entityManagerFactory&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;qualifier</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;my_transactionManager&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;pg_transactionManager&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.orm.jpa.JpaTransactionManager&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;entityManagerFactory&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;pg_entityManagerFactory&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;qualifier</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;pg_transactionManager&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Observe que criei uma série de recursos para cada banco, isolando assim as conexões a eles.</p>
<p>Nesse caso, referenciei 2 locais diferentes para as configurações do <em>Persistence Unit</em>. Por padrão, o arquivo &#8220;META-INF/persistence.xml&#8221; é carregado. Mas, como quero poder referenciar diferentes Unidades de Persistência por nome, criei dois arquivos diferentes com praticamente o mesmo conteúdo.</p>
<p><strong>META-INF/my_persistence.xml</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;persistence</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/persistence&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/persistence</span>
<span style="color: #009900;">      http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;persistence-unit</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;my_persistenceUnit&quot;</span> <span style="color: #000066;">transaction-type</span>=<span style="color: #ff0000;">&quot;RESOURCE_LOCAL&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernate.hbm2ddl.auto&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;update&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernate.show_sql&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernate.transaction.flush_before_completion&quot;</span></span>
<span style="color: #009900;">				<span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernate.cache.provider_class&quot;</span> </span>
<span style="color: #009900;">                                <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;org.hibernate.cache.HashtableCacheProvider&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/persistence-unit<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/persistence<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p><strong>META-INF/pg_persistence.xml</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;persistence</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/persistence&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/persistence</span>
<span style="color: #009900;">      http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd&quot;</span></span>
<span style="color: #009900;">	<span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;persistence-unit</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;pg_persistenceUnit&quot;</span> <span style="color: #000066;">transaction-type</span>=<span style="color: #ff0000;">&quot;RESOURCE_LOCAL&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernate.hbm2ddl.auto&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;update&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernate.show_sql&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernate.transaction.flush_before_completion&quot;</span></span>
<span style="color: #009900;">				<span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;hibernate.cache.provider_class&quot;</span> </span>
<span style="color: #009900;">                                <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;org.hibernate.cache.HashtableCacheProvider&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/properties<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/persistence-unit<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/persistence<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>A única diferença é o nome da Unidade de Persistência. Para o mesmo efeito pode-se manter as definições acima no mesmo arquivo (por exemplo no padrão &#8221;META-INF/persistence.xml&#8221;) e setar o nome das unidades nos beans <em>LocalContainerEntityManagerFactoryBean</em>.</p>
<p>Sobre o <em>placeHolderDefault</em> (<em>PropertyPlaceholderConfigurer</em>), serve para injetar valores de propriedades que utilizo depois (como ${my.driver}) obtidos de um simples arquivo de texto.</p>
<p><strong>db.properties</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="properties" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#MySQL Options</span>
<span style="color: #000080; font-weight:bold;">my.username</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">myuser</span>
<span style="color: #000080; font-weight:bold;">my.password</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">mypass</span>
<span style="color: #000080; font-weight:bold;">my.url</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">jdbc:mysql://localhost/mydatabase</span>
<span style="color: #000080; font-weight:bold;">my.dialect</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">org.hibernate.dialect.MySQL5Dialect</span>
<span style="color: #000080; font-weight:bold;">my.driver</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">com.mysql.jdbc.Driver</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#PostgreSQL Options</span>
<span style="color: #000080; font-weight:bold;">pg.username</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">pguser</span>
<span style="color: #000080; font-weight:bold;">pg.password</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">pgpass</span>
<span style="color: #000080; font-weight:bold;">pg.url</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">jdbc:postgresql://localhost/pgdatabase</span>
<span style="color: #000080; font-weight:bold;">pg.dialect</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">org.hibernate.dialect.PostgreSQLDialect</span>
<span style="color: #000080; font-weight:bold;">pg.driver</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">org.postgresql.Driver</span></pre></td></tr></table></div>

<p>Agora, para podermos utilizar as anotações @Transactional e @PersistenceUnit, temos que incluir:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tx:annotation-driven</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;context:component-scan</span> <span style="color: #000066;">base-package</span>=<span style="color: #ff0000;">&quot;br.com.package&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></td></tr></table></div>

<blockquote><p>Observação: é comum a inclusão do <em>PersistenceAnnotationBeanPostProcessor</em>, mas isso é feito automaticamente quando usa-se <em>context:component-scan</em> ou <em>context:annotation-config</em>.</p></blockquote>
<p>Agora basta definir os <em>EntityManagers</em> para permitir as operações em ambos os bancos e as <em>Transactions</em> para persistir corretamente.</p>
<p>No meu caso, utilizei uma classe abstrata <em>BaseManager</em> com algumas operações básicas. Nas classes filhas especifiquei as unidades de persistência.</p>
<p><strong>BaseManager.java</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> BaseManager <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">abstract</span> EntityManager getEntityManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">synchronized</span> BaseModel persist<span style="color: #009900;">&#40;</span>BaseModel model<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        BaseModel returnValue<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>model.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            getEntityManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">persist</span><span style="color: #009900;">&#40;</span>model<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            returnValue <span style="color: #339933;">=</span> model<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            returnValue <span style="color: #339933;">=</span> getEntityManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">merge</span><span style="color: #009900;">&#40;</span>model<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> returnValue<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> BaseModel findById<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Class</span> clazz, <span style="color: #003399;">Long</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        BaseModel model <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>BaseModel<span style="color: #009900;">&#41;</span>getEntityManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">find</span><span style="color: #009900;">&#40;</span>clazz, id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> model<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">synchronized</span> <span style="color: #000066; font-weight: bold;">void</span> delete<span style="color: #009900;">&#40;</span>BaseModel model<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>model.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            getEntityManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span>model<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Observe que o <em>getEntityManager()</em>, essencial para as operações, é abstrato.</p>
<p><strong>UserManager.java</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">@Service
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> UserManager <span style="color: #000000; font-weight: bold;">extends</span> BaseManager <span style="color: #009900;">&#123;</span>
&nbsp;
    @PersistenceContext<span style="color: #009900;">&#40;</span>unitName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;pg_persistenceUnit&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">protected</span> EntityManager entityManager<span style="color: #339933;">;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">protected</span> EntityManager getEntityManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> entityManager<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    @Transactional<span style="color: #009900;">&#40;</span>value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;pg_transactionManager&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> BaseModel persist<span style="color: #009900;">&#40;</span>BaseModel model<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">persist</span><span style="color: #009900;">&#40;</span>model<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    @Transactional<span style="color: #009900;">&#40;</span>value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;pg_transactionManager&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> delete<span style="color: #009900;">&#40;</span>BaseModel model<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">delete</span><span style="color: #009900;">&#40;</span>model<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Assim, para a classe <em>UserManager</em> o banco usado será o PostgreSQL.</p>
<p>Note que as operações que precisam de uma transação foram sobrescritas para permitir a utilização de um <em>@Transactional</em> específico.</p>
<p>Done! Com isso feito, basta testar!</p>
<p>E por hoje é só pessoal.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.jesjobom.com%2F2012%2F06%2Fconfiguracao-de-multiplas-unidades-de-persistencia-com-jpa%2F&amp;title=Configura%C3%A7%C3%A3o%20de%20m%C3%BAltiplas%20unidades%20de%20persist%C3%AAncia%20com%20JPA%20%2B%20Spring" id="wpa2a_4"><img src="http://blog.jesjobom.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2012/06/configuracao-de-multiplas-unidades-de-persistencia-com-jpa/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>SQL Server – Resetar Senha do Usuário ‘sa’</title>
		<link>http://blog.jesjobom.com/2012/03/sql-server-resetar-senha-do-usuario-sa/</link>
		<comments>http://blog.jesjobom.com/2012/03/sql-server-resetar-senha-do-usuario-sa/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 19:51:45 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MS SQL Server Password Unlocker]]></category>
		<category><![CDATA[osql]]></category>
		<category><![CDATA[regedit]]></category>
		<category><![CDATA[registro windows]]></category>
		<category><![CDATA[resetar senha]]></category>
		<category><![CDATA[single-user mode]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[sqlcmd]]></category>
		<category><![CDATA[usuário sa]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[windows authentication]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=224</guid>
		<description><![CDATA[Volto aqui para um post pequeno (espero eu) sobre algo legal e útil que precisei e achei recentemente: resetar a senha do usuário &#8216;sa&#8217; do SQL Server mesmo possuindo sérias restrições de acesso. Nas minhas buscas achei diversas soluções para esse fim em diversas condições. Tentarei listar aqui esses meios apontando a situação em que [...]]]></description>
			<content:encoded><![CDATA[<p>Volto aqui para um post pequeno (espero eu) sobre algo legal e útil que precisei e achei recentemente: resetar a senha do usuário &#8216;sa&#8217; do SQL Server mesmo possuindo sérias restrições de acesso.</p>
<p>Nas minhas buscas achei diversas soluções para esse fim em diversas condições. Tentarei listar aqui esses meios apontando a situação em que funcionam ou ajudam.</p>
<p>No meu caso, os testes foram feitos no SQL Server 2008 instalado no Windows 7. O problema real ocorreu em um servidor Windows Server 2008 R2 + SQL Server 2008 R2 onde eu não tinha a senha do usuário &#8216;sa&#8217; (e nenhum outro usuário) e não tinha acesso pelo <em>Windows Authentication</em>.<span id="more-224"></span></p>
<p>Bem, o grande motivo desse post seria conseguir o acesso mesmo sem a possibilidade de usar a autenticação pela conta do Windows, mas começarei mostrando algumas formas de setar a senha tendo algum tipo de acesso&#8230; Pode ser útil no caso de automatizar esse processo ou fazer a alteração via linha de comando.</p>
<h3> _</h3>
<h3>Setar senha pela linha de comando tendo acesso pela autenticação do Windows</h3>
<p style="padding-left: 30px;">1. No prompt de comando (MS-DOS) abra o <em>SQL Server Command Line Tool</em> usando a autenticação do Windows:</p>
<blockquote><p>sqlcmd -E</p></blockquote>
<p style="padding-left: 30px;">1.1. No caso de versões anteriores ao SQL Server 2008, use <em>osql -E</em></p>
<p style="padding-left: 30px;">2. Use o comando <em>sp_password</em> para setar a nova senha do usuário &#8216;sa&#8217;:</p>
<blockquote><p>sp_password @old = null, @new = &#8216;novasenha&#8217;,  @loginame =&#8217;sa&#8217;<br />
go</p></blockquote>
<p style="padding-left: 30px;">3. Basta sair usando o <em>exit</em> e testar o login:</p>
<blockquote><p>exit</p>
<p>sqlcmd -U sa</p></blockquote>
<h3> _</h3>
<h3>Setar a senha sem o acesso pela autenticação do Windows</h3>
<p>No meu caso, algum problema que desconheço impediu o login no banco via Windows Authentication e eu não tinha o acesso do usuário &#8216;sa&#8217;. Pesquisei um pouco e consegui recuperar o acesso via login e senha. Seguem algumas possibilidades e solução de entraves.</p>
<h4> _</h4>
<h4>» Acesso ao SQL Server em modo local ou <em>single-user mode</em></h4>
<p>Startando o serviço do SQL Server em modo <em>single-user</em> permite que qualquer administrador do servidor conecte ao banco como um <em>sysadmin</em>. Isso pode ser feito executando o comando:</p>
<blockquote><p>C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn&gt;sqlservr.exe -m</p></blockquote>
<p>Com o parâmetro <em>-m</em> o administrador do servidor poderá logar no banco através da Autenticação do Windows (seja por linha de comando ou pela interface do gerenciador), mesmo se ela não tiver sido configurada previamente.</p>
<blockquote><p>sqlcmd -E</p></blockquote>
<p>Através desse acesso, pode-se alterar a senha conforme o item anterior.</p>
<h4> _</h4>
<h4>» Alteração da senha através do MS SQL Server Password Unlocker</h4>
<p>Mesmo sem poder acessar o SQL Server, é possível forçar uma nova senha para um dado usuário usando o <a title="MS SQL Server Password Unlocker" href="http://www.passwordunlocker.com/sql-server-password-recovery.html" target="_blank">MS SQL Server Password Unlocker</a>. É uma aplicação paga, mas para os meus testes usei uma versão &#8220;alternativa&#8221;&#8230;</p>
<p>A instalação é bem direta e não requer nada de especial. Depois de instalado, deve abrir o <em>master.mdf</em> e será exibido os usuários cadastrados. No meu caso, o local do arquivo era:</p>
<blockquote><p>C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf</p></blockquote>
<p>Basta alterar a senha e pronto!</p>

<a href="http://blog.jesjobom.com/wp-content/gallery/outros/mssqlsvr_pwd_unlocker.jpg" title="" class="shutterset_singlepic20" >
	<img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/cache/20__320x240_mssqlsvr_pwd_unlocker.jpg" alt="MS SQL Server Password Unlocker" title="MS SQL Server Password Unlocker" />
</a>

<h4> _</h4>
<h4>» Mudar o método de autenticação ao servidor com acesso pela autenticação do Windows</h4>
<p>Mesmo alterando a senha do usuário, não será possível logar se o servidor estiver configurado para permitir apenas a <em>Windows Authentication</em>. Nesse modo, qualquer tentativa de login, mesmo com a senha correta, dará um simples &#8220;<em>Login failed for user &#8216;sa&#8217;&#8221;. </em>Essa configuração poderá ser feita pela interface do gerenciador (SQL Server Manegement Studio). Caso necessário, inicie o servidor em <em>single-user mode</em>.</p>
<p>Nessa interface, para chegar até a opção do tipo de autenticação, basta:</p>
<ol>
<li><em>right-click</em> na instância/servidor (no meu caso é &#8220;localhost (SQL Server 10.0.1600 &#8211; sa)&#8221;);</li>
<li><em>&#8220;Properties&#8221;</em>;</li>
<li><em>&#8220;Security&#8221;</em>;</li>
<li>Em &#8220;<em>Server authentication&#8221;</em> marque a opção &#8220;<em>SQL Server and Windows Authentication mode&#8221;.</em></li>
<li>Reinicie o serviço.</li>
</ol>

<a href="http://blog.jesjobom.com/wp-content/gallery/outros/properties_mssqlsvr_0.jpg" title="" class="shutterset_singlepic21" >
	<img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/cache/21__320x240_properties_mssqlsvr_0.jpg" alt="SQL Server - Propriedades - Authentication Mode" title="SQL Server - Propriedades - Authentication Mode" />
</a>

<h4> _</h4>
<h4>» Mudar o método de autenticação ao servidor nenhum acesso ao mesmo</h4>
<p>Essa façanha pode ser feita através da edição de registro do Windows. o_O&#8217;</p>
<p>Abra o <em>regedit </em>do Windows e navegue até os registros do SQL Server. No meu caso o caminho é:</p>
<blockquote><p>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer</p></blockquote>
<p>Deverá haver o registro &#8220;<em>LoginMode&#8221; </em>no painel da direita. Se não encontrar o caminho correto, faça uma busca geral (CTRL+F) por &#8220;<em>LoginMode&#8221; </em>e deverá achar.</p>

<a href="http://blog.jesjobom.com/wp-content/gallery/outros/regedit_mssqlsvr.jpg" title="" class="shutterset_singlepic18" >
	<img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/cache/18__320x240_regedit_mssqlsvr.jpg" alt="Windows RegEdit - SQL Server Authentication Mode" title="Windows RegEdit - SQL Server Authentication Mode" />
</a>

<p>Edite esse registro com o valor hexadecimal &#8220;2&#8243;. O valor &#8220;1&#8243; significa que o SQL Server está em <em>Windows Authentication Mode</em> apenas. Colocando &#8220;2&#8243; será usado o &#8221;<em>SQL Server and Windows Authentication mode&#8221;. </em>Reinicie o serviço para aplicar a alteração.</p>
<p>Por hora é isso. Espero que ajude alguém em momentos de desespero. =P</p>
<p>Fontes:<br />
<a title="Suporte Microsoft" href="http://support.microsoft.com/kb/322336/pt-br" target="_blank">Suporte Microsoft</a><br />
<a title="MSDN Library" href="http://msdn.microsoft.com/en-us/library/ms165702.aspx" target="_blank">MSDN Library</a><br />
<a title="MS SQL Password Unlocker" href="http://www.passwordunlocker.com/knowledge/change-sql-server-password.html" target="_blank">MS SQL Password Unlocker</a><br />
<a title="MSDN Forum" href="http://social.msdn.microsoft.com/Forums/en/sqlsecurity/thread/67516616-a377-46b3-a0f8-b64e2bef9660" target="_blank">MSDN Forum</a><br />
<a title="MSDN Library" href="http://msdn.microsoft.com/en-us/library/ms188236.aspx" target="_blank">MSDN Library</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.jesjobom.com%2F2012%2F03%2Fsql-server-resetar-senha-do-usuario-sa%2F&amp;title=SQL%20Server%20%E2%80%93%20Resetar%20Senha%20do%20Usu%C3%A1rio%20%E2%80%98sa%E2%80%99" id="wpa2a_6"><img src="http://blog.jesjobom.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2012/03/sql-server-resetar-senha-do-usuario-sa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Luminolaser – Eletrônica e Arduino na Prática 2</title>
		<link>http://blog.jesjobom.com/2011/08/luminolaser-eletronica-na-pratica-2/</link>
		<comments>http://blog.jesjobom.com/2011/08/luminolaser-eletronica-na-pratica-2/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 02:24:00 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Laser]]></category>
		<category><![CDATA[LDR]]></category>
		<category><![CDATA[Luminolaser]]></category>
		<category><![CDATA[Protótipo]]></category>
		<category><![CDATA[Servomotor]]></category>
		<category><![CDATA[Transistor]]></category>
		<category><![CDATA[Vídeo]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=209</guid>
		<description><![CDATA[Seguindo com as publicações de meus protótipos com o Arduino, hoje mostro o Luminolaser. Será nos mesmos moldes da última publicação, resumido e direto (ou seja, conhecimento prévio se fará necessário). O objetivo do Luminolaser foi, principalmente, estudar o uso de Servo Motores e o controle sob eles. Sempre tentando criar algo um pouco além [...]]]></description>
			<content:encoded><![CDATA[<p>Seguindo com as publicações de meus protótipos com o <a title="Arduino Wiki" href="http://pt.wikipedia.org/wiki/Arduino" target="_blank">Arduino</a>, hoje mostro o Luminolaser. Será nos mesmos moldes da <a title="Colorino – Eletrônica e Arduino na Prática 1" href="http://blog.jesjobom.com/2011/06/colorino-eletronica-e-arduino-na-pratica-1/" target="_blank">última publicação</a>, resumido e direto (ou seja, conhecimento prévio se fará necessário).</p>
<p>O objetivo do Luminolaser foi, principalmente, estudar o uso de <a title="Servo Motor Wiki" href="http://pt.wikipedia.org/wiki/Servomotor" target="_blank">Servo Motores</a> e o controle sob eles. Sempre tentando criar algo um pouco além do simples exemplo, procurei fazer uma espécie de scanner de ambiente que identifica o ponto mais luminoso (eu só tinha um sensor de luminosidade &#8211; LDR &#8211; a disposição) e marca esse ponto com um <em>laser pointer</em>.</p>
<p>Posteriormente incrementei um pouco mais de modo que fosse possível controlar o laser através de um controle analógico.<span id="more-209"></span></p>
<p>Bem, vamos aos materiais usados:</p>
<ul>
<li>Arduino &#8220;Brasileirino&#8221; (Duemilanove) ATMega328 [<a title="Arduino Uno" href="http://arduino.cc/en/Main/ArduinoBoardUno" target="_blank">Arduino Uno</a>];</li>
<li>Bateria recarregável de 9V [<a title="MAXUSS Rechargeable Ni-MH 9V 260mAh Battery" href="http://www.dealextreme.com/p/maxuss-rechargeable-ni-mh-9v-260mah-battery-54456" target="_blank">Deal Extreme</a>];</li>
<li>Bateria de 4V de alta descarga para alimentar o módulo laser;</li>
<li>Bateria de 7,4V de alta descarga para os servos;</li>
<li>2 Mini Servos Motores [<a title="TowerPro SG90 9G Mini Servo with Accessories" href="http://www.dealextreme.com/p/towerpro-sg90-9g-mini-servo-with-accessories-12859" target="_blank">Deal Extreme</a>];</li>
<li>Módulo de laser vermelhor 5mW [<a title="Red Laser Module - Focused Dot (3.5V~4.5V 9mm 5mW)" href="http://www.dealextreme.com/p/red-laser-module-focused-dot-3-5v-4-5v-9mm-5mw-5900" target="_blank">Deal Extreme</a>];</li>
<li>Botão de lanterna para mudar a função do protótipo [<a title="Clicky Switch for Flashlights (11.8mm 5-Pack)" href="http://www.dealextreme.com/p/clicky-switch-for-flashlights-11-8mm-5-pack-5604" target="_blank">Deal Extreme</a>];</li>
<li>Muitos fios conectores para protoboard [<a title="Breadboard Jumper Wires for Electronic DIY (70-Cable Pack)" href="http://www.dealextreme.com/p/breadboard-jumper-wires-for-electronic-diy-70-cable-pack-80208" target="_blank">Deal Extreme</a>];</li>
<li>Analógico do PSP [<a title="Replacement PSP Analog Switch Button Module Black" href="http://www.dealextreme.com/p/replacement-psp-analog-switch-button-module-black-3373" target="_blank">Deal Extreme</a>];</li>
<li>LDR (sensor de luminosidade) [<a title="LDR Wiki" href="http://pt.wikipedia.org/wiki/LDR" target="_blank">Wiki</a>].</li>
<li>Transistor NPN Tip122 [<a title="Transistor Wiki" href="http://pt.wikipedia.org/wiki/Trans%C3%ADstor" target="_blank">Wiki</a>];</li>
</ul>
<p>Como pode-se notar, existem muitos componentes <em>from China</em>. Realmente acredito que valha a pena, principalmente quando não existe pressa para receber os produtos.</p>
<p>À esquemática:</p>

<a href="http://blog.jesjobom.com/wp-content/gallery/arduino/lumino_laser.jpg" title="" class="shutterset_singlepic17" >
	<img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/cache/17__320x240_lumino_laser.jpg" alt="lumino_laser" title="lumino_laser" />
</a>

<p>Observem que, por não ter uma imagem do controle analógico para o <a title="Fritzing" href="http://fritzing.org/" target="_blank">Fritzing</a>, acabei substituindo por 2 potenciômetros rotatórios&#8230; Até porque são equivalentes. Assim como o Led vermelho da imagem simboliza o módulo do laser.</p>
<p>E para simplificar a visualização, incluí apenas 1 servo motor na esquemática e separei os componente. Na versão final o laser e o LDR ficam juntos na ponta do segundo servo.</p>
<p>O botão incluí para alterar o modo de controle dos servos entre automático (busca o ponto mais luminoso do ambiente) e manual (permitindo o direcionamento do laser através do controle analógico).</p>
<p><em>Now it&#8217;s time to code!</em></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;Servo.h&gt; </span>
&nbsp;
Servo servo_base<span style="color: #339933;">;</span>
Servo servo_upper<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Posição dos servos inferior e superior</span>
<span style="color: #993333;">int</span> servo_base_pos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> servo_upper_pos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Posição para onde os servos devem se mover</span>
<span style="color: #666666; font-style: italic;">//para apontar onde está a mais forte fonte de luz</span>
<span style="color: #993333;">int</span> final_base_pos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> final_upper_pos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Pinos dos servos, sensor ldr e sinal do laser</span>
<span style="color: #993333;">int</span> servo_base_pin <span style="color: #339933;">=</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> servo_upper_pin <span style="color: #339933;">=</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> ldr_pin <span style="color: #339933;">=</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> laser_pin <span style="color: #339933;">=</span> <span style="color: #0000dd;">13</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Pinos do analógico e do botão</span>
<span style="color: #993333;">int</span> dpad_x <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> dpad_y <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> button_pin <span style="color: #339933;">=</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span> 
  servo_base.<span style="color: #202020;">attach</span><span style="color: #009900;">&#40;</span>servo_base_pin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servo_upper.<span style="color: #202020;">attach</span><span style="color: #009900;">&#40;</span>servo_upper_pin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>laser_pin<span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>button_pin<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span> 
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>verificaClick<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Função de direcionamento manual do laser</span>
    ligarLaser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    readAnalogPad<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    direcionaLaser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Busca automática pela maior luminosidade</span>
    desligaLaser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    buscaMaiorLuminosidade_1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    direcionaLaser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    ligarLaser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">10000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Percorre todo o alcance dos servos buscando a maior luminosidade</span>
<span style="color: #666666; font-style: italic;">//detectada pelo LDR e salva essa posição para mover depois</span>
<span style="color: #993333;">void</span> buscaMaiorLuminosidade_1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">int</span> maior_luminosidade <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>servo_base_pos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> servo_base_pos <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">180</span><span style="color: #339933;">;</span> servo_base_pos <span style="color: #339933;">+=</span> <span style="color: #0000dd;">20</span><span style="color: #009900;">&#41;</span> 
  <span style="color: #009900;">&#123;</span>
    servo_base.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span>servo_base_pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>servo_upper_pos <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> servo_upper_pos <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">180</span><span style="color: #339933;">;</span> servo_upper_pos <span style="color: #339933;">+=</span> <span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
      servo_upper.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span>servo_upper_pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>verificaClick<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//Se o botão foi clicado, encerra a busca</span>
        <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
      <span style="color: #993333;">int</span> ldr <span style="color: #339933;">=</span> obtemLuminosidade<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>ldr <span style="color: #339933;">&gt;</span> maior_luminosidade<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        maior_luminosidade <span style="color: #339933;">=</span> ldr<span style="color: #339933;">;</span>
        final_base_pos <span style="color: #339933;">=</span> servo_base_pos<span style="color: #339933;">;</span>
        final_upper_pos <span style="color: #339933;">=</span> servo_upper_pos<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    servo_upper.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  servo_base.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> obtemLuminosidade<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> analogRead<span style="color: #009900;">&#40;</span>ldr_pin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> direcionaLaser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  servo_upper.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span>final_upper_pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servo_base.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span>final_base_pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> ligarLaser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>laser_pin<span style="color: #339933;">,</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> desligaLaser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>laser_pin<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
boolean verificaClick<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> digitalRead<span style="color: #009900;">&#40;</span>button_pin<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> HIGH<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Obtem a leitura do controle analógico.</span>
<span style="color: #666666; font-style: italic;">//Devido à baixa qualidade do mesmo, não foi possível fazer </span>
<span style="color: #666666; font-style: italic;">//simplesmente um mapeamento do sinal de entrada para a posição final.</span>
<span style="color: #993333;">void</span> readAnalogPad<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">int</span> analog_x <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span>dpad_x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> analog_y <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span>dpad_y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #993333;">int</span> y <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> x <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>analog_y <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">620</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    y <span style="color: #339933;">=</span> analog_y <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">680</span> <span style="color: #339933;">?</span> <span style="color: #0000dd;">5</span> <span style="color: #339933;">:</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>analog_y <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">540</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    y <span style="color: #339933;">=</span> analog_y <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">480</span> <span style="color: #339933;">?</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">5</span>  <span style="color: #339933;">:</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    y <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>analog_x <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">330</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    x <span style="color: #339933;">=</span> analog_x <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">380</span> <span style="color: #339933;">?</span> <span style="color: #0000dd;">5</span> <span style="color: #339933;">:</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>analog_x <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">280</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    x <span style="color: #339933;">=</span> analog_x <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">190</span> <span style="color: #339933;">?</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">5</span> <span style="color: #339933;">:</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    x <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  final_upper_pos <span style="color: #339933;">=</span> final_upper_pos <span style="color: #339933;">+</span> y<span style="color: #339933;">;</span>
  final_base_pos <span style="color: #339933;">=</span> final_base_pos <span style="color: #339933;">-</span> x<span style="color: #339933;">;</span>
&nbsp;
  final_upper_pos <span style="color: #339933;">=</span> final_upper_pos <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">180</span> <span style="color: #339933;">?</span> <span style="color: #0000dd;">180</span> <span style="color: #339933;">:</span> final_upper_pos<span style="color: #339933;">;</span>
  final_upper_pos <span style="color: #339933;">=</span> final_upper_pos <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">?</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">:</span> final_upper_pos<span style="color: #339933;">;</span>
&nbsp;
  final_base_pos <span style="color: #339933;">=</span> final_base_pos <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">180</span> <span style="color: #339933;">?</span> <span style="color: #0000dd;">180</span> <span style="color: #339933;">:</span> final_base_pos<span style="color: #339933;">;</span>
  final_base_pos <span style="color: #339933;">=</span> final_base_pos <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">?</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">:</span> final_base_pos<span style="color: #339933;">;</span>
&nbsp;
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Existem algumas melhorias para serem feitas no código, mas uma funcionalidade adicional que quero implementar é a capacidade de seguir. Imagino que seja possível fazer isso através de micro ajustes (ou micro buscas em uma área menor). Assim, teoricamente, seria possível seguir a fonte de luz mesmo se houver deslocamento da mesma. Além disso, pretendo trocar o sensor de luminosidade por um sensor de infra vermelho e, se funcionar como eu espero, poder detectar e seguir fontes de calor, como o corpo humano.</p>
<p>Bem, por fim vamos ao resultado final atual:</p>

<!-- YouTube Embed v2.7 | http://www.artiss.co.uk/youtube-embed -->
<!-- An error occurred accessing the YouTube API for video ID 6bPUj58ctBw - Body: name lookup timed out -->
<p>The video cannot be shown at the moment. Please try again later.</p>
<!-- End of YouTube Embed code -->

<p>Por hora é só&#8230; Quando eu tiver tempo de dar um upgrade nesse protótipo, edito esse post para incluir as alterações.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.jesjobom.com%2F2011%2F08%2Fluminolaser-eletronica-na-pratica-2%2F&amp;title=Luminolaser%20%E2%80%93%20Eletr%C3%B4nica%20e%20Arduino%20na%20Pr%C3%A1tica%202" id="wpa2a_8"><img src="http://blog.jesjobom.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2011/08/luminolaser-eletronica-na-pratica-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Colorino – Eletrônica e Arduino na Prática 1</title>
		<link>http://blog.jesjobom.com/2011/06/colorino-eletronica-e-arduino-na-pratica-1/</link>
		<comments>http://blog.jesjobom.com/2011/06/colorino-eletronica-e-arduino-na-pratica-1/#comments</comments>
		<pubDate>Sun, 05 Jun 2011 04:26:49 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Colorino]]></category>
		<category><![CDATA[Led RGB]]></category>
		<category><![CDATA[Potenciômetro]]></category>
		<category><![CDATA[Protótipo]]></category>
		<category><![CDATA[Transistor]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=192</guid>
		<description><![CDATA[Depois de muuuito tempo inativo aqui no blog, volto para tentar tirar a poeira com uma nova área para mim e para muitos amigos &#8220;computeiros&#8221;: a eletrônica. Mais especificamente, o Arduino. Nos últimos meses estive consideravelmente ocupado (e preguiçoso) para voltar a escrever, principalmente devido ao padrão de post gigantes que habitam esse blog. Por [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de muuuito tempo inativo aqui no blog, volto para tentar tirar a poeira com uma nova área para mim e para muitos amigos &#8220;computeiros&#8221;: a eletrônica. Mais especificamente, o <a title="Arduino Wiki" href="http://pt.wikipedia.org/wiki/Arduino" target="_blank">Arduino</a>.</p>
<p>Nos últimos meses estive consideravelmente ocupado (e preguiçoso) para voltar a escrever, principalmente devido ao padrão de post gigantes que habitam esse blog. Por isso, dessa vez, tentarei fazer algo mais resumido e, conseqüentemente, voltado a quem já possui o mínimo de conhecimento sobre o assunto.</p>
<p>Vou me ater a apresentar o protótipo que fiz, a esquemática e código fonte sem entrar em maiores explicações de funcionamento.<span id="more-192"></span></p>
<p>Bem, o Colorino, como foi nomeado pelo meu caro amigo <a title="João Paulo Twittter" href="http://twitter.com/#!/jopss" target="_blank">@jopss</a>, é um experimento que fiz com o Arduino para aprender sobre e testar um led RGB que comprei do Deal Extreme usando resistores variáveis, transistores e uma programação bastante simples. O objetivo era controlar a intensidade de cada cor do led (vermelho, verde e azul) através dos resistores deslizantes. Através do uso de transistores, pude controlar a intensidade da corrente através do sinal digital do Arduino.</p>
<p>Primeiramente vamos ao componentes usados:</p>
<ul>
<li>1 Arduino Duemilanove ATMega328 (&#8220;Brasileirino&#8221;) [<a title="Arduino Uno" href="http://arduino.cc/en/Main/ArduinoBoardUno" target="_blank">Arduino Uno</a>];</li>
<li>1 Led RGB 5W 70 Lumen [<a title="Led RGB DX" href="http://www.dealextreme.com/p/5-watt-70-lumen-rgb-led-emitter-20999" target="_blank">Deal Extreme</a>];</li>
<li>3 Potenciômetros deslizantes 20 kΩ [<a title="Potenciômetro Google Images" href="http://www.google.com.br/search?q=potenci%C3%B4metro+deslizante&amp;hl=pt-BR&amp;safe=off&amp;prmd=ivns&amp;tbm=isch&amp;tbo=u&amp;source=univ&amp;sa=X&amp;ei=RuTqTYGxGci3tweZzaSYAQ&amp;ved=0CEQQsAQ&amp;biw=1366&amp;bih=677" target="_blank">Google Images</a>] [<a title="Potenciômetro Wiki US" href="http://en.wikipedia.org/wiki/Potentiometer" target="_blank">Wiki US</a>];</li>
<li>3 Transistores NPN Tip122 [<a title="Transistor Wiki" href="http://pt.wikipedia.org/wiki/Trans%C3%ADstor" target="_blank">Wiki</a>];</li>
<li>1 Bateria 4V de alta descarga (pode ser uma bateria de 3,7V de celular)*;</li>
<li>1 Bateria 9V convencional para alimentar o Arduino (opcional) [<a title="Bateria 9V Google Images" href="http://www.google.com.br/search?q=bateria%209v&amp;um=1&amp;ie=UTF-8&amp;tbm=isch&amp;source=og&amp;sa=N&amp;hl=pt-BR&amp;tab=wi&amp;biw=1366&amp;bih=677" target="_blank">Google Images</a>];</li>
<li>Muitos fios.</li>
</ul>
<p>* No caso da bateria de alta descarga, usei uma de 4V (de lítio) de um fone de ouvido bluetooth que eu tinha. Uma bateria de celular pode ser usada se retirado o limitador de descarga (fusível). Considerando uma fonte de 5V, o Led de 5W consumiria 1A (ampér), o que é bastante. Na prática, cheguei ao máximo de 0,5A.</p>
<p>Agora vamos à esquemática dos componentes.</p>
<p style="text-align: center;"><a href="http://blog.jesjobom.com/wp-content/gallery/arduino/colorino_bb.jpg" target="_blank"><img class="ngg-singlepic ngg-center aligncenter" src="http://blog.jesjobom.com/wp-content/gallery/arduino/colorino_bb.jpg" alt="colorino_esquema" width="430" height="347" /></a></p>
<p style="text-align: left;">Espero ter feito um bom trabalho ao desenhar esse esquema com o <em><a title="Fritzing" href="http://fritzing.org/" target="_blank">Fritzing</a></em>.</p>
<p style="text-align: left;">Hora do código fonte feito na <a title="Arduino Software" href="http://www.arduino.cc/en/Main/Software" target="_blank">IDE do Arduino</a>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Define as portas analógicas de entrada dos potenciômetros</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> pot_r <span style="color: #000080;">=</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> pot_g <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> pot_b <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//Define as portas PWM de saída analógica para os transistores</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> led_r <span style="color: #000080;">=</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> led_g <span style="color: #000080;">=</span> <span style="color: #0000dd;">5</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> led_b <span style="color: #000080;">=</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//Flag para ativar o debug pelo monitor da porta serial</span>
<span style="color: #0000ff;">const</span> boolean debug <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> setup<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  pinMode<span style="color: #008000;">&#40;</span>led_r, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  pinMode<span style="color: #008000;">&#40;</span>led_g, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  pinMode<span style="color: #008000;">&#40;</span>led_b, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>debug<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> Serial.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> loop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  <span style="color: #666666;">//Obtem a leitura dos potenciômetros nas portas analógicas</span>
  <span style="color: #0000ff;">int</span> pot_r_signal <span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>pot_r<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">int</span> pot_g_signal <span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>pot_g<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">int</span> pot_b_signal <span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>pot_b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #666666;">//Converte os sinais dos potenciômetros para a escala de escrita das PWM</span>
  <span style="color: #666666;">//O led vermelho recebe menos energia por ser naturalmente mais forte</span>
  <span style="color: #0000ff;">int</span> pot_r_digital <span style="color: #000080;">=</span> map<span style="color: #008000;">&#40;</span>pot_r_signal, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">1023</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">150</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">int</span> pot_g_digital <span style="color: #000080;">=</span> map<span style="color: #008000;">&#40;</span>pot_g_signal, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">1023</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">int</span> pot_b_digital <span style="color: #000080;">=</span> map<span style="color: #008000;">&#40;</span>pot_b_signal, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">1023</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #666666;">//Escreve o sinal convertido para os transistores que deverão liberar</span>
  <span style="color: #666666;">//a quantia equivalente de corrente ao led</span>
  analogWrite<span style="color: #008000;">&#40;</span>led_r, pot_r_digital<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  analogWrite<span style="color: #008000;">&#40;</span>led_g, pot_g_digital<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  analogWrite<span style="color: #008000;">&#40;</span>led_b, pot_b_digital<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>debug<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;RED: &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>pot_r_signal<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; =&gt; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">println</span><span style="color: #008000;">&#40;</span>pot_r_digital<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;GREEN: &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>pot_g_signal<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; =&gt; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">println</span><span style="color: #008000;">&#40;</span>pot_g_digital<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;BLUE: &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>pot_b_signal<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; =&gt; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    Serial.<span style="color: #007788;">println</span><span style="color: #008000;">&#40;</span>pot_b_digital<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    delay<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: left;">Finalmente o resultado.</p>

<!-- YouTube Embed v2.7 | http://www.artiss.co.uk/youtube-embed -->
<!-- An error occurred accessing the YouTube API for video ID MtrYlR1_gAA - Body: name lookup timed out -->
<p>The video cannot be shown at the moment. Please try again later.</p>
<!-- End of YouTube Embed code -->

<p style="text-align: left;">Por hora é só. Espero voltar logo com outro pequeno projeto de Arduino voltado a estudo de componentes. Fui!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.jesjobom.com%2F2011%2F06%2Fcolorino-eletronica-e-arduino-na-pratica-1%2F&amp;title=Colorino%20%E2%80%93%20Eletr%C3%B4nica%20e%20Arduino%20na%20Pr%C3%A1tica%201" id="wpa2a_10"><img src="http://blog.jesjobom.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2011/06/colorino-eletronica-e-arduino-na-pratica-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Novas Políticas de RH</title>
		<link>http://blog.jesjobom.com/2010/07/novas-politicas-de-rh/</link>
		<comments>http://blog.jesjobom.com/2010/07/novas-politicas-de-rh/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 15:04:18 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Descontração]]></category>
		<category><![CDATA[Piada]]></category>
		<category><![CDATA[Recursos Humanos]]></category>
		<category><![CDATA[RH]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=180</guid>
		<description><![CDATA[Como, aparentemente, certos lugares não oferecem liberdade para disseminação de pequenas piadas visando uma rápida descontração no trabalho, posto aqui fugindo um pouco do padrão do blog. ^^ Com as novas regras vigentes no mercado e a necessidade de adaptação, tanto por parte das empresas quanto dos funcionários, informamos aos nossos colaboradores as novas regras [...]]]></description>
			<content:encoded><![CDATA[<p>Como, aparentemente, certos lugares não oferecem liberdade para disseminação de pequenas piadas visando uma rápida descontração no trabalho, posto aqui fugindo um pouco do padrão do blog. ^^</p>
<p>Com as novas regras vigentes no mercado e a necessidade de adaptação, tanto por parte das empresas quanto dos funcionários, informamos aos nossos colaboradores as novas regras aprovadas pelo RH de nossa empresa, e vigente a partir desta data:<span id="more-180"></span></p>
<p><strong><span style="color: #003366;">AUSÊNCIA DEVIDO À ENFERMIDADE:</span></strong><br />
Não vamos mais aceitar uma carta do médico como prova de enfermidade.<br />
Se o funcionário tem condições de ir até o consultório médico, pode vir trabalhar.</p>
<p><strong><span style="color: #003366;">CIRURGIA:</span></strong><br />
As cirurgias são proibidas. Enquanto o funcionário trabalhar nesta empresa precisará de todos os seus órgãos, portanto, não deve pensar em remover nada. Nós o contratamos inteiro. Remover algo constitui quebra de contrato.</p>
<p><strong><span style="color: #003366;">AUSÊNCIAS DEVIDO A MOTIVOS PESSOAIS:</span></strong><br />
Cada funcionário receberá 104 dias para assuntos pessoais a cada ano&#8230;<br />
Chamam-se sábado e domingo.</p>
<p><strong><span style="color: #003366;">AUSÊNCIA DEVIDO À SUA PRÓPRIA MORTE:</span></strong><br />
Isto será aceito como desculpa. Entretanto, exigimos pelo menos 15 dias de aviso prévio, visto que cabe ao funcionário treinar o seu substituto.</p>
<p><strong><span style="color: #003366;">O USO DO WC:</span></strong><br />
Os funcionários estão passando tempo demais no toalete. No futuro, seguiremos o sistema de ordem alfabética. Por exemplo, todos os funcionários cujos nomes começam com a letra &#8216;A&#8217;  irão entre 8:00 e<br />
8:20, aqueles com a letra &#8216;B&#8217; entre 8:20 e 8:40, etc. Se não puder ir na hora designada, será preciso esperar a sua vez, no dia seguinte. Em caso de emergência, os funcionários poderão trocar o seu horário com um colega.<br />
Os supervisores dos funcionários deverão aprovar essa troca, por escrito.<br />
Adicionalmente: agora há um limite estritamente máximo de 3 minutos no banheiro.<br />
Acabando esses 3 minutos, um alarme irá tocar, o rolo de papel higiênico será recolhido, a porta do banheiro abrirá e uma foto será tirada. Se for repetente, a foto será fixada no quadro de avisos da empresa sob o título: &#8220;Infrator Crônico&#8221;.</p>
<p><strong><span style="color: #003366;">INDUMENTÁRIA:</span></strong><br />
Informamos que o funcionário deverá trabalhar vestido de acordo com o seu salário.<br />
Se o percebermos calçando um tênis Nike de R$ 350,00 e carregando uma bolsa Gucci de R$ 600,00 presumiremos que vai bem de finanças e, portanto, não precisa de aumento.<br />
Se ele se vestir de forma pobre, será um sinal de que precisa aprender a controlar melhor o seu dinheiro para que possa comprar roupas melhores e, portanto, não precisa de aumento.<br />
E, se ele se vestir no meio termo, estará perfeito e, portanto, não precisa de aumento.</p>
<p><strong><span style="color: #003366;">A HORA DO ALMOÇO:</span></strong><br />
Os magros têm 30 minutos para o almoço, porque precisam comer mais para parecerem saudáveis. As pessoas de tamanho normal têm 15 minutos para comer uma refeição balanceada que sustente o seu corpo mediano. Os gordos têm 5 minutos, porque é tudo que precisam para tomar um &#8220;Slim Fast&#8221; e um remédio de regime.</p>
<p>Muito obrigado pela sua fidelidade à nossa empresa. Estamos aqui para proporcionar uma experiência empregatícia positiva. Portanto, toda dúvida, comentário, preocupação, reclamação, frustração, irritação, agravo, insinuação, alegação, acusação, observação, consternação e &#8220;input&#8221; deverá ser dirigida para qualquer outro lugar.</p>
<p>Atenciosamente,</p>
<p>Setor de Recursos Humanos</p>
<p>Fonte: <a title="Vila Vilão Viola Violão" href="http://vilavilaoviolaviola.blogspot.com/search?updated-max=2010-07-22T13:22:00-04:00&amp;max-results=10" target="_blank">Vila Vilão Viola Violão</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.jesjobom.com%2F2010%2F07%2Fnovas-politicas-de-rh%2F&amp;title=Novas%20Pol%C3%ADticas%20de%20RH" id="wpa2a_12"><img src="http://blog.jesjobom.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2010/07/novas-politicas-de-rh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Munin: Configurações Avançadas de Plugins – parte 1</title>
		<link>http://blog.jesjobom.com/2010/05/munin-configuracoes-avancadas-de-plugins-parte-1/</link>
		<comments>http://blog.jesjobom.com/2010/05/munin-configuracoes-avancadas-de-plugins-parte-1/#comments</comments>
		<pubDate>Mon, 17 May 2010 20:46:00 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Ferramenta]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Munin]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=166</guid>
		<description><![CDATA[Voltando com mais um post atrasado e começando uma nova pequena série, venho apresentar alguns plugins do Munin (comentado no post anterior) muito legais e as suas configurações. Apesar de ter dito anteriormente que a instalação de um plugin basea-se na simples criação de um link simbólico, alguns plugins dependem de configurações específicas e, muitas [...]]]></description>
			<content:encoded><![CDATA[<p>Voltando com mais um post atrasado e começando uma nova pequena série, venho apresentar alguns plugins do Munin (comentado no <a title="Ferramentas Gratuitas para Manutenção de Servidores – Parte 1 (Munin)" href="http://blog.jesjobom.com/2010/01/ferramentas-gratuitas-para-manutencao-de-servidores/" target="_self">post anterior</a>) muito legais e as suas configurações. Apesar de ter dito anteriormente que a instalação de um plugin basea-se na simples criação de um link simbólico, alguns plugins dependem de configurações específicas e, muitas vezes, complexas.</p>
<p>Diferentemente do post anterior, terei que me ater a um ambiente específico, mas informarei quais as aplicações envolvidas e suas versões quando for o caso. No geral, utilizei o CentOS 5.3 para a instalação e configuração do Munin e seus plugins.</p>
<p>Desde já, informo que, na maioria das vezes, ler a documentação de um determinado plugin com problemas me ajudou muito. Geralmente a documentação está junto ao código, no próprio plugin. Então basta abri-lo com algum editor de textos.<span id="more-166"></span></p>
<h3>1. Conceitos Básicos:</h3>
<p>Não é necessário saber desenvolver plugins para conseguir instalá-los corretamente, mas alguns conceitos ajudarão muito a entender a documentação e os requisitos.</p>
<p>Primeiramente, os plugins são desenvolvidos em Perl. Com isso em mente, muitas vezes a solução de algum problema é simplesmente a instalação do pacote apropriado, como o perl-DBD-Pg para conexões com o PostgreSQL. USE O &#8216;<em>YUM SEARCH</em>&#8216; (ou &#8216;<em>apt-get</em>&#8216; ou <em>whatever</em>)!</p>
<p>Em alguns casos, serão necessários &#8220;variáveis de ambiente&#8221; para a correta execução do plugin. Por exemplo, um plugin para banco de dados precisa do usuário e senha de acesso; um plugin para o Tomcat precisará da porta de acesso.</p>
<p>Essas variáveis deverão ser configuradas no arquivo &#8216;<em>/etc/munin/plugin-conf.d/munin-node</em>&#8216;. Por padrão, algumas configurações e documentações já estão inclusas. E cada configuração relaciona-se ao plugin através do nome. Por exemplo:</p>
<blockquote>
<pre>[mysql*]
user root
group wheel
env.mysqladmin /usr/bin/mysqladmin
env.mysqlopts -u munin -pmunin1234</pre>
</blockquote>
<p>As configurações acima servirão para todos os plugins cujo nome comece com &#8220;<em>mysql</em>&#8220;. Esse plugin rodará como o usuário <em>root</em> e terá as permissões de super usuário. Além disso, fornecemos ao plugins alguns dados através de variáveis de ambiente (<em>env.</em>). No caso, o plugin usará o <em>mysqladmin </em>do local informado e usará o usuário &#8216;munin&#8217; para obter as informações necessárias.</p>
<p>Na documentação dos plugins geralmente é informado quais variáveis de ambiente devem ou podem ser setadas.</p>
<p>Além de configurações, existem alguns comandos úteis no processo de configuração de plugins. Através do &#8220;<em>munin-run</em>&#8221; podemos executar o plugin na hora, obtendo um valor numérico, se bem configurado, ou &#8216;<em>U</em>&#8216; se ocorrer algum problema interno. Por exemplo:</p>
<blockquote>
<pre># munin-run  tomcat_jvm
free.value 42133328
used.value 301537456
max.value 775487488</pre>
</blockquote>
<p>Adicione o argumento &#8220;<em>autoconf</em>&#8221; para receber uma resposta booleana:</p>
<blockquote>
<pre># munin-run mysql_queries autoconf
yes</pre>
</blockquote>
<h3>2. Plugin: MySQL</h3>
<p>Tratarei aqui sobre as configurações dos plugins &#8220;<em>mysql_queries</em>&#8221; e &#8220;<em>mysql_threads</em>&#8220;. O primeiro apresenta a quantidade de requisições ao banco por tipo (selects, updates, deletes, etc); o segundo mostra a quantidade de threads criadas internamento no MySQL.</p>
<p style="text-align: center;"><img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/redes/mysql_queries.png" alt="mysql_queries" /><br />
mysql_queries</p>
<p style="text-align: center;"><img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/redes/mysql_threads.png" alt="mysql_threads" /><br />
mysql_threads</p>
<p>Essencialmente, precisamos apenas criar um usuário do MySQL sem permissão alguma e informar os dados de acesso ao plugin. Então criemos um usuário:</p>
<blockquote>
<pre>mysql -uroot -p -e 'CREATE USER munin IDENTIFIED BY "munin1234"'</pre>
</blockquote>
<p>Adicione as informações de acesso no arquivo &#8216;<em>/etc/munin/plugin-conf.d/munin-node</em>&#8216;:</p>
<blockquote>
<pre>[mysql*]
user root
group wheel
env.mysqladmin /usr/bin/mysqladmin
env.mysqlopts -umunin -pmunin1234</pre>
</blockquote>
<p>Através desse usuário o plugin obterá os dados necessários para geração do gráfico. Utilize o comando &#8220;<em>munin-run</em>&#8221; para testar:</p>
<blockquote>
<pre># munin-run mysql_queries
delete.value 35756
insert.value 231054
replace.value 20
select.value 10460090
update.value 5261807
cache_hits.value 52529748</pre>
</blockquote>
<blockquote>
<pre># munin-run mysql_threads
threads.value 14</pre>
</blockquote>
<p>Simples, não? Muitas vezes a dificuldade não é configurar, mas sim descobrir o que configurar.</p>
<h3>3. Plugin: PostgreSQL</h3>
<p>Dessa vez falarei sobre um plugin para PostgreSQL, o &#8220;<em>postgres_connections_db</em>&#8220;. Ele gera um gráfico com os valores de conexões por banco de dados.</p>
<p style="text-align: center;"><img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/redes/postgres_connections_db.png" alt="postgres_connections_db" /><br />
postgres_connections_db</p>
<p>Dessa vez, além de criar um novo usuário para o Munin, temos que liberar o acesso livre desse usuário a partir do servidor. Então, primeiramente, criamos o usuário com senha aleatória (segura):</p>
<blockquote>
<pre>psql -U postgres -c "CREATE ROLE munin NOSUPERUSER NOCREATEDB
NOCREATEROLE NOINHERIT LOGIN ENCRYPTED PASSWORD 'LjkJ9JUha2';"</pre>
</blockquote>
<p>Utilizamos uma senha segura porque não usaremos ela na configuração do plugin. Ao invés disso, liberaremos o acesso sem senha para o usuário &#8220;munin&#8221; a partir do servidor para uma determinada tabela. Então, abriremos para edição o arquivo &#8220;<em>/var/lib/pgsql/data/pg_hba.conf</em>&#8221; e adicionamos a linha:</p>
<blockquote>
<pre>local   template1   munin   trust</pre>
</blockquote>
<p>Com isso, todas as conexões para o usuário &#8220;munin&#8221; na tabela &#8220;template1&#8243; a partir do servidor local serão aceitas sem a necessidade de senha. Basta dar um reload no postgre e podemos incluir as configurações do plugin no arquivo &#8220;<em>/var/lib/pgsql/data/pg_hba.conf</em>&#8221; :</p>
<blockquote>
<pre>[postgres*]
user munin
env.dbuser munin</pre>
</blockquote>
<p>Depois disso, basta testar:</p>
<blockquote>
<pre># munin-run postgres_connections_db
postgres.value 0
template1.value 0
...</pre>
</blockquote>
<p>Bem. Acredito que seja o suficiente por hora&#8230; Espero voltar logo com a continuação apresentando outros Plugins para o Munin, incluindo um plugin não oficial para monitorar memória usada pelo Passenger (RoR).</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.jesjobom.com%2F2010%2F05%2Fmunin-configuracoes-avancadas-de-plugins-parte-1%2F&amp;title=Munin%3A%20Configura%C3%A7%C3%B5es%20Avan%C3%A7adas%20de%20Plugins%20%E2%80%93%20parte%201" id="wpa2a_14"><img src="http://blog.jesjobom.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2010/05/munin-configuracoes-avancadas-de-plugins-parte-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ferramentas Gratuitas para Manutenção de Servidores – Parte 1 (Munin)</title>
		<link>http://blog.jesjobom.com/2010/01/ferramentas-gratuitas-para-manutencao-de-servidores/</link>
		<comments>http://blog.jesjobom.com/2010/01/ferramentas-gratuitas-para-manutencao-de-servidores/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 20:34:55 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Monitoramento]]></category>
		<category><![CDATA[Munin]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=148</guid>
		<description><![CDATA[Após muuuito tempo sem escrever, volto tentando reanimar escrevendo algo um pouco diferente do usual. Irei apresentar algumas ferramentas gratuitas que podem ajudar bastante no gerenciamento e manutenção de servidores.

Estou há alguns poucos meses trabalhando nessa área, mas aprendi muito. Perdi o medo que tinha do Linux e agora configuro e monitoro servidores utilizando ferramentas que, uma vez configuradas corretamente, tornam a vida muito mais simples.

Não irei me focar em ensinar a configurar cada uma visto que as configurações variam de OS para OS e  existem tutoriais no site oficial da respectiva ferramenta e no Google. Simplesmente darei um <em>overview</em> apresentando as principais características, prós, contras e outras observações pertinentes.

Dividirei os posts, apresentando uma aplicação de cada vez. E começarei com o Munin.]]></description>
			<content:encoded><![CDATA[<p>Após muuuito tempo sem escrever, volto tentando reanimar escrevendo algo um pouco diferente do usual. Irei apresentar algumas ferramentas gratuitas que podem ajudar bastante no gerenciamento e manutenção de servidores.</p>
<p>Estou há alguns poucos meses trabalhando nessa área, mas aprendi muito. Perdi o medo que tinha do Linux e agora configuro e monitoro servidores utilizando ferramentas que, uma vez configuradas corretamente, tornam a vida muito mais simples.</p>
<p>Não irei me focar em ensinar a configurar cada uma visto que as configurações variam de OS para OS e  existem tutoriais no site oficial da respectiva ferramenta e no Google. Simplesmente darei um <em>overview</em> apresentando as principais características, prós, contras e outras observações pertinentes.</p>
<p>Dividirei os posts, apresentando uma aplicação de cada vez. E começarei com o Munin.</p>
<h3><span id="more-148"></span></h3>
<h2>1. Munin (<a title="Munin" href="http://munin.projects.linpro.no/" target="_blank">http://munin.projects.linpro.no/</a>)</h2>
<p>É uma aplicação bastante simples de monitoramento de recursos de servidores. Permite a visualização via navegador de diversos gráficos referentes à uso de memória, espaço em disco, uso de CPU, tráfego de saída e entrada de dados, e outros. Sendo que cada fonte de dados, por padrão, é compilada em quatro gráficos (diário, semanal, mensal e anual). A coleta de dados é realizada através de um agendamento no <em>cron</em> do sistema, criado na instalação do Munin.</p>
<p><img class="ngg-singlepic ngg-right" src="http://blog.jesjobom.com/wp-content/gallery/redes/munin1.jpg" alt="munin1" /></p>
<p><img class="ngg-singlepic ngg-right" src="http://blog.jesjobom.com/wp-content/gallery/redes/munin2.jpg" alt="munin2" /></p>
<h3>a. Instalação e configuração</h3>
<p>No próprio site existe um <a title="Munin - Guia Instalação Linux" href="http://munin.projects.linpro.no/wiki/LinuxInstallation" target="_blank">guia</a> abrangendo a instalação do Munin em diversas distribuições do Linux e até mesmo para o <a title="Munin - Guia Instalação MacOS" href="http://munin.projects.linpro.no/wiki/DarwinInstallation" target="_blank">MacOS</a> (<em>no donuts for you, Windows users</em>). Após esse processo, basta configurar o grupo e nome do servidor (como mostrado <a title="Munin - Configuração Inicial" href="http://munin.projects.linpro.no/wiki/munin.conf" target="_blank">aqui</a>) e configurar o Apache para permitir acesso ao &#8220;home&#8221; da aplicação (por padrão <em>/var/www/munin/ </em>) através de algum URL.</p>
<p>O Munin é baseado em plugins, sendo que cada conjunto de gráficos é um plugin que pode ser instalado ou desinstalado fácil e independentemente. Basta criar ou excluir um link simbólico (atalho) na pasta <em>/etc/munin/plugins </em>do plugin desejado localizado em <em>/usr/share/munin/plugins</em>.</p>
<p>Além disso, é possível facilmente <a title="Munin - Configuração Alertas" href="http://munin.projects.linpro.no/wiki/HowToContact" target="_blank">configurar</a> o Munin para emitir alertas em certas condições como, por exemplo, quando o uso de CPU for maior que 80%. Isso pode ser feito integrando com o <a title="Nagios" href="http://www.nagios.org/" target="_blank">Nagios</a> ou enviando e-mail através de do serviço <em>sendmail</em> ou um script externo.</p>
<h3>b. Prós</h3>
<ul>
<li>Simples, direto e rápido;</li>
<li>Fácil configuração e permite a edição de plugins ou criação de novos;</li>
<li>Possui opção de alertas em determinadas condições.</li>
</ul>
<h3>c. Contras</h3>
<ul>
<li>A configuração do envio de alertas é muito básica, não permitindo controlar a quantidade ou a periodicidade dos envios. Se utilizado o Nagios, é possível configurá-lo para isso;</li>
<li>Depende da disponibilidade do sistema para realizar o monitoramento. Se o servidor travar do nada, o Munin ficará travado também;</li>
<li>Documentação online bagunçada e muitas vezes insuficiente para orientar novos usuários.</li>
</ul>
<h3>d. Observações adicionais</h3>
<p>Por padrão, o Munin não apresenta um sistema de segurança para o acesso às suas informações. Uma forma bastante simples de fazer essa segurança é configurando o Apache para utilizar um arquivo de autenticação:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="apache" style="font-family:monospace;">    &lt;<span style="color: #000000; font-weight:bold;">Directory</span> /var/www/html/munin&gt;
        <span style="color: #00007f;">Order</span> <span style="color: #00007f;">deny</span>,<span style="color: #00007f;">allow</span>
        <span style="color: #00007f;">Deny</span> from <span style="color: #0000ff;">all</span>
        <span style="color: #00007f;">Allow</span> from 127.0.0.1
&nbsp;
        <span style="color: #00007f;">AuthType</span> Basic
        <span style="color: #00007f;">AuthName</span> <span style="color: #7f007f;">&quot;My Server Munin&quot;</span>
        <span style="color: #00007f;">AuthUserFile</span> /var/www/html/.htpasswd
        <span style="color: #00007f;">require</span> valid-<span style="color: #00007f;">user</span>
&nbsp;
        <span style="color: #00007f;">Satisfy</span> Any
    &lt;/<span style="color: #000000; font-weight:bold;">Directory</span>&gt;</pre></td></tr></table></div>

<p>Então é isso. ^^ </p>
<p>Espero em breve voltar com outro post sobre outra aplicação para o gerenciamento de servidores ou dando continuidade à série &#8220;Java para Web&#8221; =P</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2010/01/ferramentas-gratuitas-para-manutencao-de-servidores/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Maven em um Teclado Virtual</title>
		<link>http://blog.jesjobom.com/2009/08/maven-em-um-teclado-virtual/</link>
		<comments>http://blog.jesjobom.com/2009/08/maven-em-um-teclado-virtual/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 03:12:36 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Applet]]></category>
		<category><![CDATA[Codificação]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[MD5]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=122</guid>
		<description><![CDATA[Para quem não sabe, <a title="Apache Maven" href="http://maven.apache.org/" target="_blank">Maven</a> é uma excelente ferramenta para o gerenciamento de projetos, principalmente por facilitar <strong>muito </strong>o controle de dependências e automatizar o processo de inclusão dessas. Mas o seu papel não se limita a essa tarefa; uma grande ajuda dada pelo Maven é a automatização de outras tarefas como descompactar um determinado arquivo ou publicar um jar. De certa forma, pode-se até comparar o Maven com o velho Ant.

Neste post iremos ver como o Maven pode ajudar tanto na inclusão de dependências como em outras tarefas antes realizadas manualmente. Como o foco não será o projeto em si, utilizaremos o projeto do <a title="Applet de um Teclado Virtual" href="http://blog.jesjobom.com/2009/05/applet-de-um-teclado-virtual/" target="_self">Teclado Virtual</a> do post anterior.

Ao final do post existirão links para um pacote compactado com o projeto do tutorial e um exemplo (parcial) online do mesmo.

Ah... Quando criei esse blog alguns amigos de trabalho me disseram que logo logo eu pederia o ânimo pra postar... Pois é... &#62;.&#60;]]></description>
			<content:encoded><![CDATA[<p>Para quem não sabe, <a title="Apache Maven" href="http://maven.apache.org/" target="_blank">Maven</a> é uma excelente ferramenta para o gerenciamento de projetos, principalmente por facilitar <strong>muito </strong>o controle de dependências e automatizar o processo de inclusão dessas. Mas o seu papel não se limita a essa tarefa; uma grande ajuda dada pelo Maven é a automatização de outras tarefas como descompactar um determinado arquivo ou publicar um jar. De certa forma, pode-se até comparar o Maven com o velho Ant.</p>
<p>Neste post iremos ver como o Maven pode ajudar tanto na inclusão de dependências como em outras tarefas antes realizadas manualmente. Como o foco não será o projeto em si, utilizaremos o projeto do <a title="Applet de um Teclado Virtual" href="http://blog.jesjobom.com/2009/05/applet-de-um-teclado-virtual/" target="_self">Teclado Virtual</a> do post anterior.</p>
<p>Ao final do post existirão links para um pacote compactado com o projeto do tutorial e um exemplo (parcial) online do mesmo.</p>
<p>Ah&#8230; Quando criei esse blog alguns amigos de trabalho me disseram que logo logo eu pederia o ânimo pra postar&#8230; Pois é&#8230; &gt;.&lt;<br />
<span id="more-122"></span><br />
<h3>1. Ambiente e Criação do Projeto</h3>
<p>Primeiramente, utilizarei o NetBeans 6.5 com o plugin do Maven (basta buscar por &#8220;Maven&#8221; no filtro de plugin). E o Tomcat 6 (inclua-o no NetBeans). O código do teclado virtual será o mesmo do post anterior, com algumas pequenas alterações. Então vamos lá!</p>
<p>Tendo o plugin do Maven instalado, crie um novo projeto para o novo teclado virtual (Novo Projeto -&gt; Maven -&gt; Maven Project). Escolha o &#8220;<em>Maven Quickstart Archetype</em>&#8221; mesmo. Nomeei o meu projeto de &#8220;teclado-mvn&#8221; e coloquei o &#8220;Group Id&#8221; e o &#8220;Package&#8221; como &#8220;br.com.teclado.virtual.mvn&#8221;. Finalize.</p>
<p>Será criado um projeto java já nos moldes do Maven. Observe na pasta &#8220;Project Files&#8221; o arquivo &#8220;pom.xml&#8221;. Ele é o centro das configurações do Maven no seu projeto. Dentro da tag &#8220;dependency&#8221; haverá algumas entradas referentes ao &#8220;junit&#8221;. Isso quer dizer que o seu novo projeto é dependente do JUnit e tentará baixar o .jar referente do repositório padrão do Maven quando você for realizar algum teste (neste caso é em testes devido ao &#8220;scope&#8221; da dependência).</p>
<p>Agora vamos efetivamente &#8220;recriar&#8221; o teclado virtual. Apague as classes criadas automaticamente nos pacotes do projeto e copie a classe &#8220;TecladoVirtual.java&#8221; do projeto do post anterior para o pacote principal do novo projeto. Diversos erros deverão ser visíveis e, se você leu o post anterior, deverá saber o porquê.</p>
<p>No projeto original do teclado virtual, tínhamos que manualmente copiar o plugin.jar da pasta do JRE instalado para podermos utilizar a classe JSObject. Agora utilizaremos o Maven para fazer isso de uma maneira mais &#8220;elegante&#8221;.</p>
<h3>2. Instalação e Utilização de Nova Dependência</h3>
<p>Abra o &#8220;pom.xml&#8221; e vamos customizar a construção (<em>build</em>) do projeto. Em suma, o que faremos, é instalar o &#8220;plugin.jar&#8221; no repositório local e adicionar essa dependência ao teclado.</p>
<p>Para deixar mais claro, o que o Maven faz é, artravés do arquivo de configurações dele (pom.xml), identificar as dependências do projeto e baixar os seus <em>jars</em> do <a title="Maven Repository" href="http://www.mvnrepository.com/" target="_blank">repositório remoto</a> para uma pasta local na própria máquina (é chamado de &#8220;Repositório Local&#8221;). Então temos que incluir o &#8220;plugin.jar&#8221; no repositório local para podermos utilizá-lo.</p>
<p>No &#8220;pom.xml&#8221; adicione o seguinte treço dentro da tag <strong>&lt;project&gt;</strong>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.apache.maven.plugins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-install-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>generate-sources<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>generate-sources<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;inherited<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/inherited<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>java.plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.6.0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jar<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/packaging<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;file<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>${env.JAVA_HOME}/jre/lib/plugin.jar<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/file<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>install-file<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
               <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-compiler-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.0.2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.5<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.5<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-compiler-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.0.2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;encoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>ISO-8859-1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/encoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-resources-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;encoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>ISO-8859-1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/encoding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Observando apenas a primeira tag <strong>&lt;plugin&gt;</strong>, temos que durante a <a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html" target="_blank">fase (<strong>&lt;phase&gt;</strong>) do clico de vida de construção do projeto</a> &#8220;generate-sources&#8221; (antes da compilação), irá executar a tarefa (<strong>&lt;goal&gt;</strong>) &#8220;install-file&#8221; da entidade (<strong>&lt;artifactId&gt;</strong>) &#8220;maven-install-plugin&#8221;. O arquivo a ser instalado (<strong>&lt;file&gt;</strong>) será o &#8220;plugin.jar&#8221; da JRE instalada e referenciada pela variável de ambiente &#8220;JAVA_HOME&#8221;. Após instalado, o jar poderá ser encontrado no repositório local pelo grupo &#8220;java.plugin&#8221;, artefato &#8220;plugin&#8221; e versão &#8220;1.6.0&#8243;.</p>
<p>Os plugins restantes na tag &#8220;build&#8221; são necessário para a execução completa do ciclo de vida da compilação feita pelo Maven.</p>
<p>Agora dê um &#8220;Limpar e Construir&#8221; (Clean and Build) no projeto e verifique se os erros no TecladoVirtual.java permanecem. Se sim, então está correto! =P</p>
<p>O que nós fizemos foi incluir o &#8220;plugin.jar&#8221; no repositório local, mas ainda não o incluimos no projeto. Antes disso, vamos conhecer o repositório local. Abra no Windows a sua pasta do &#8220;Documents and Settings&#8221; (C:\Documents and Settings\Usuario) e verá uma pasta &#8220;.m2&#8243;. Nela está o seu repositório local do Maven. Todas as dependências de projeto são baixadas para esta pasta de modo que não seja necessário baixar tudo novamente caso um novo projeto seja criado. Se você tentou construir o nosso novo projeto do teclado virtual, então já deve exisitir a pasta &#8220;.m2\repository\java\plugin\plugin\1.6.0&#8243; com o &#8220;plugin-1.6.0.jar&#8221;. Agora, adicione esta dependência ao projeto.</p>
<p>No &#8220;pom.xml&#8221;, dentro da tag <strong>&lt;dependencies&gt;</strong>:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>java.plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.6.0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Salve, limpe, compile e veja os erros do TecladoVirtual.java sumirem. Caso algum erro tenha ocorrido até este ponto, verifique se a variável de ambiente &#8220;JAVA_HOME&#8221; está devidamente setada e o caminho no &#8220;pom.xml&#8221; até o &#8220;plugin.jar&#8221; está correto.</p>
<p>Uma pequena alteração deve ser feita em relação ao projeto anterior do teclado virtual. Através do Windows, crie a pasta &#8220;resources&#8221; (&#8220;teclado-mvn\src\main\resources&#8221;) no novo projeto e copie as imagens do teclado para esta pasta. No NetBeans deverá aparecer a pasta &#8220;Other Sources&#8221;. E no &#8220;TecladoVirtual.java&#8221; altere o caminho à imagem de &#8220;/resources/teclado1.JPG&#8221; para &#8220;/teclado1.JPG&#8221;.</p>
<p>Veja a imagem de como ficou:<br />
<a class="shutterset_" href="http://blog.jesjobom.com/wp-content/gallery/java/teclado-mvn-status1.jpg"><img class="ngg-singlepic ngg-center" src="http://blog.jesjobom.com/wp-content/gallery/java/thumbs/thumbs_teclado-mvn-status1.jpg" alt="teclado-mvn-status1" /></a></p>
<p style="text-align: center;"><a href="http://blog.jesjobom.com/wp-content/gallery/java/teclado-mvn-status1.jpg" target="_blank">(abrir em nova janela)</a></p>
<p style="text-align: left;">
<h3 style="text-align: left;">3. Codificação da Senha do Teclado</h3>
<p>O que faremos agora é uma alteração no código do teclado virtual para que a senha copiada ao campo oculto do formulário HTML seja previamente codificada com <a title="MD5 Wikipédia" href="http://pt.wikipedia.org/wiki/MD5" target="_blank">MD5</a> impossibilitando a obtenção da senha original mesmo que o valor do campo oculto seja lido.</p>
<p>Mas antes precisamos incluir uma dependência ao projeto; é o &#8220;commons-codec&#8221;. Se você está utilizando o NetBeans e ainda não descobriu a grande vantagem da IDE sobre a edição de XMLs, tente usar agora o auto-completar (CTRL+espaço) para encontrar o <strong>&lt;groupId&gt;</strong> e o <strong>&lt;artifactId&gt;</strong> desta nova dependência. Assim que o projeto foi criado, o plugin do Maven deve ter baixado (ou tentado baixar) um índice de dependências do repositório remoto contendo os grupos e artefatos disponíveis. A única demora deverá ser para encontrar as versões (<strong>&lt;version&gt;</strong>) disponíveis, pois ele precisará procurar em tempo real no repositório remoto.</p>
<p>Então adicione dentro da tag <strong>&lt;dependencies&gt;</strong>:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;">    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>commons-codec<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>commons-codec<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dependency<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Com isso, podemoremos usar o pacote &#8220;<em>java.security.MessageDigest</em>&#8221; para codificar a senha. Sem maiores explicações (para não fugir do foco e para não me estender demais), o métodos para codigicação de Strings em MD5 deverá ficar assim:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">   <span style="color: #008000; font-style: italic; font-weight: bold;">/**
    * Encripta um texto em MD5
    *
    * @param texto
    * @return String
    */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> md5Encrypt<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> texto<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
       <span style="color: #003399;">String</span> encripted <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
       <span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
          <span style="color: #003399;">MessageDigest</span> md <span style="color: #339933;">=</span> <span style="color: #003399;">MessageDigest</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;MD5&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          md.<span style="color: #006633;">update</span><span style="color: #009900;">&#40;</span> texto.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #003399;">BigInteger</span> hash <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BigInteger</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">1</span>, md.<span style="color: #006633;">digest</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          encripted <span style="color: #339933;">=</span> hash.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">16</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
       <span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">NoSuchAlgorithmException</span> ns<span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span>
          ns.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
       <span style="color: #000000; font-weight: bold;">return</span> encripted<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Agora basta utilizar este método codificar a senha no momento de enviar ao HTML:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;">    win.<span style="color: #006633;">eval</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;recebeSenha('&quot;</span> <span style="color: #339933;">+</span> md5Encrypt<span style="color: #009900;">&#40;</span>senha<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;',&quot;</span> <span style="color: #339933;">+</span> senha.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>4. Criação do Projeto Web para Utilização do Teclado Virtual</h3>
<p>Vamos criar outro projeto Maven seguindo os mesmos passos do projeto anterior, mas escolheremos &#8220;<em>Maven Webapp Archetype</em>&#8221; depois de Arquivo -&gt; Novo Projeto -&gt; Maven -&gt; Maven Project. Os nomes que utilizei foram &#8220;teste-teclado-mvn&#8221; no nome e &#8220;br.com.teclado.virtual.mvn&#8221; como nome de grupo e empacotamento.</p>
<p>Alguém notou alguma semelhança dos dados que incluímos na criação de um projeto Maven com os dados utilizados para a adição de uma dependência? Pois é, quando compilamos um projeto, uma das fases executada é a instalação desse projeto no repositório local, sob o Grupo e Artefato utilizados na criação do mesmo. Assim, outros projetos podem ser dependentes do projeto instalado. Mas não é exatamente este o caso da relação Teclado Virtual &#8211; Projeto Web.</p>
<p>O projeto web não é exatamente dependente do Teclado Virtual para realizar alguma tarefa ou utilizar algum método. O jar do teclado deve apenas estar presente para que o navegador do usuário possa baixar e executá-lo. Então, ao invés de simplesmente adicioná-lo como um dependência, iremos copiar o jar que se encontra no repositório local para uma pasta do projeto web, tornando-o diponível ao usuário.</p>
<p>Sem mais enrolação, insira o trecho a seguir dentro da tag <strong>&lt;project&gt;</strong> do &#8220;pom.xml&#8221; do projeto web.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"> <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;finalName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>teste-teclado-mvn<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/finalName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.apache.maven.plugins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>maven-dependency-plugin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>2.1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
             <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>compile<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phase<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>copy-teclado<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/id<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;inherited<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/inherited<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactItems<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactItem<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>br.com.teclado.virtual.mvn<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>teclado-mvn<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.0-SNAPSHOT<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;destFileName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>teclado-mvn.jar<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/destFileName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactItem<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactItem<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>commons-codec<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/groupId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>commons-codec<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactId<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.3<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;destFileName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>commons-codec.jar<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/destFileName<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactItem<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/artifactItems<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;overWriteIfNewer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/overWriteIfNewer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;overWriteSnapshots<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/overWriteSnapshots<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;overWriteReleases<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/overWriteReleases<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;outputDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/src/main/webapp/applet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/outputDirectory<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/configuration<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>copy<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goal<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
                <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/goals<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
             <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/execution<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
          <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/executions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugin<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plugins<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/build<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Em suma, durante a fase (<strong>&lt;phase&gt;</strong>) de compilação o Maven irá copiar (<strong>&lt;goal&gt;</strong>) as dependências (<strong>&lt;artifactItems&gt;</strong>) referentes ao projeto do Teclado Virtual e ao pacote do &#8220;commons-codec&#8221;, renomeando-os para &#8220;teclado-mvn.jar&#8221; e &#8220;commons-codec.jar&#8221;, para a pasta (<strong>&lt;outputDirectory&gt;</strong>) &#8220;/src/main/webapp/applet&#8221;. Esta pasta estará no mesmo nível do &#8220;index.jsp&#8221; do projeto.</p>
<p>O &#8220;commons-codec&#8221; teve que ser copiado também pois onde o jar do teclado executará (no navegador do usuário) nem sempre existe esta biblioteca. Se quiser testar sem a instrução para copiar este pacote, não tem problema, a princípio.</p>
<p>Por último, podemos alterar o &#8220;index.jsp&#8221; para utilizar o Teclado Virtual. Vamos simplesmente copiar o código do HTML de teste do post sobre o Teclado Virtual, lembrando de alterar os valores da variáveis &#8220;clazz&#8221; e &#8220;jar&#8221; para &#8220;br.com.teclado.virtual.mvn.TecladoVirtual.class&#8221; (ou como você nomeou sua classe/pacote) e &#8220;applet/teclado-mvn.jar&#8221;, respectivamente.</p>
<p>Se deu tudo certo, ao executar o projeto web, deverá aparecer o teclado virtual e, ao submeter a página, no endereço da mesma deverão estar o nome do usuário e a senha codificada.</p>
<p>Então é isso! Finalmente consegui publicar um post depois de tanto tempo! \o/</p>
<p>Para encontrar outras operações disponíveis pelo Maven, tente o <a title="Google.com" href="http://www.google.com.br/" target="_blank">Oráculo</a> ou tente explorar os artefatos do Grupo &#8220;org.apache.maven.plugins&#8221; (incluso em ambas operações descritas anteriormente).</p>
<p>cya.</p>
<p>Projeto do Teclado Virtual com Maven compactado e configurado no NetBeans: <a href="http://blog.jesjobom.com/wp-content/uploads/2009/08/teclado-mvn.rar">teclado-mvn</a></p>
<p>Exemplo Online do teclado com a codificação da senha: <a title="Exemplo Online do Teclado Virtual criado com Maven" href="http://jesjobom.com/files/blog/teclado_mvn/" target="_blank">teclado-mvn-online</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2009/08/maven-em-um-teclado-virtual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workshop de Mídias Sociais em Campo Grande – MS</title>
		<link>http://blog.jesjobom.com/2009/08/134/</link>
		<comments>http://blog.jesjobom.com/2009/08/134/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 22:22:50 +0000</pubDate>
		<dc:creator>jesjobom</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Mídia Social]]></category>
		<category><![CDATA[Workshop]]></category>

		<guid isPermaLink="false">http://blog.jesjobom.com/?p=134</guid>
		<description><![CDATA[Nos dias 20 e 21 de agosto, vai rolar em Campo Grande – MS o Workshop de Mídias Sociais no Auditório do Sebrae. Vai ter palestras com gente que manja do assunto como Luli Radfahrer, Interney e Marcelo Tas. Você pode Conferir uma das palestras do Luli aqui no blog do focezar mesmo, enjoy! O Evento: [...]]]></description>
			<content:encoded><![CDATA[<p>Nos dias 20 e 21 de agosto, vai rolar em Campo Grande – MS o Workshop de Mídias Sociais no Auditório do Sebrae.</p>
<p>Vai ter palestras com gente que manja do assunto como <a href="http://www.luli.com.br/" target="_blank">Luli Radfahrer</a>, <a href="http://www.interney.net/" target="_blank">Interney</a> e <a href="http://marcelotas.blog.uol.com.br/" target="_blank">Marcelo Tas</a>.</p>
<p>Você pode Conferir uma das palestras do Luli <a href="http://blog.fernandocezar.net/2009/02/03/luli-radfahrer-para-que-serve-uma-monocotiledonea-nerds-midias-sociais-e-a-escola-do-seculo-21/" target="_blank">aqui</a> no <a href="http://blog.fernandocezar.net/tag/luli-radfahrer/" target="_blank">blog</a> do <a title="Blog do Focezar" href="http://blog.fernandocezar.net/" target="_blank">focezar</a> mesmo, enjoy!<span id="more-134"></span></p>
<p>O Evento:</p>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://wsms2009.files.wordpress.com/"><img title="Workshop de Mídias Sociais" src="http://wsms2009.files.wordpress.com/2009/08/blog-banner.jpg" alt="Workshop de Mídias Sociais" width="400" height="166" /></a><p class="wp-caption-text">Workshop de Mídias Sociais</p></div>
<p>A programação do Evento está <a href="http://wsms2009.wordpress.com/2009/08/05/programacao/" target="_blank">aqui</a>!</p>
<p>E as inscrições para as palestras gratuitas podem ser feitas por <a href="http://intranet.ms.sebrae.com.br/crie_cadastro/">aqui</a>! (Tem que fazer inscrição para cada uma das palestras desejadas)</p>
<p>A palestra do Marcelo Tas custa 30 reais, 15 reais para estudantes, e os ingressos podem ser adquiridos direto no Sebrae.</p>
<p>Além das palestras, vão ocorrer oficinas de diversos temas.</p>
<p>É isso, até lá!</p>
<p>PS: Post <em><a title="Definição de &quot;kibar&quot;" href="http://desciclo.pedia.ws/wiki/Descion%C3%A1rio:Kibar" target="_blank">kibado</a> </em>do focezar ^^</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.jesjobom.com%2F2009%2F08%2F134%2F&amp;title=Workshop%20de%20M%C3%ADdias%20Sociais%20em%20Campo%20Grande%20%E2%80%93%20MS" id="wpa2a_16"><img src="http://blog.jesjobom.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.jesjobom.com/2009/08/134/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
