<?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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Boaglio.comBoaglio.com</title>
	
	<link>http://www.boaglio.com</link>
	<description />
	<lastBuildDate>Sun, 16 Dec 2012 22:48:33 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/boaglio" /><feedburner:info uri="boaglio" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>usa Jenkins e não encontrou o que precisa? Faça o seu plugin!</title>
		<link>http://feedproxy.google.com/~r/boaglio/~3/XboUmqjJsYo/</link>
		<comments>http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/#comments</comments>
		<pubDate>Sun, 16 Dec 2012 22:42:28 +0000</pubDate>
		<dc:creator>Fernando Boaglio</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.boaglio.com/?p=1053</guid>
		<description><![CDATA[Não consigo imaginar hoje um projeto em Java com qualidade que não tenha o Jenkins para garantir a integração continua com robustez e determinação. Recentemente participei de primeiro encontro de Jenkins do Brasil, e além da presença do Bruno Kinoshita que falou de como criar um plugin para o Jenkins e do Tony Lâmpada sobre [...]]]></description>
				<content:encoded><![CDATA[<p>Não consigo imaginar hoje um projeto em Java <em>com qualidade</em> que não tenha o <a href="http://www.boaglio.com/go.php?http://jenkins-ci.org/" target="_blank" title="(111 hits)">Jenkins</a> para garantir a integração continua com robustez e determinação.</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/jenkinslogo1/" rel="attachment wp-att-1064" title="(88 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/12/jenkinsLogo1-217x300.png" alt="jenkinsLogo1" width="217" height="300" class="alignnone size-medium wp-image-1064" /></a></p>
<p>Recentemente participei de primeiro <a href="http://www.boaglio.com/go.php?http://www.meetup.com/jenkinsmeetup/events/91744672/" target="_blank" title="(98 hits)">encontro de Jenkins do Brasil</a>, e além da presença do <a href="http://www.boaglio.com/go.php?http://www.kinoshita.eti.br" target="_blank" title="(117 hits)">Bruno Kinoshita</a> que falou de como <em>criar um plugin para o Jenkins</em> e do <a href="http://www.boaglio.com/go.php?http://dicasdolampada.wordpress.com/2012/12/15/jenkis-meetup-video-da-palestra-de-liquibase/" target="_blank" title="(95 hits)">Tony Lâmpada</a> sobre o <a href="http://www.boaglio.com/go.php?http://www.liquibase.org/" target="_blank" title="(102 hits)">Liquibase</a> (a palestra dele toda feita em giz de cera foi uma das melhores que já vi, ele mesmo comentou que demorou quase um mês para desenhar tudo) , contamos com a participação ilustre de nada mais nada menos que o criador do Jenkins, o <a href="http://www.boaglio.com/go.php?http://kohsuke.org/" target="_blank" title="(129 hits)">Kohsuke Kawaguchi</a>.</p>
<p>O Kohsuke é um cara que foge ao padrão dos &#8220;japas tradicionais&#8221;&#8230; pra começar ele é gigante, tem dois metros de altura&#8230; ele viu minha camiseta de <a href="http://www.boaglio.com/go.php?http://blog.us.playstation.com/2012/07/23/hideo-kojima-reflects-on-25-years-of-metal-gear/" target="_blank" title="(105 hits)">25 anos do Metal Gear para MSX</a> e comentou: &#8220;<strong>ah, eu não tinha um desses, mas morava do lado de uma loja cheia de jogos para MSX</strong>&#8220;. </p>
<p>Mas foi quando começou a palestra dele que a plateia ficou na dúvida&#8230; quem está falando agora, é o <strong>Kohsuke ou o Pavarotti</strong> ?</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/kohsuke-ou-pavarotti/" rel="attachment wp-att-1056" title="(87 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/12/kohsuke-ou-pavarotti-300x148.png" alt="kohsuke-ou-pavarotti" width="300" height="148" class="alignnone size-medium wp-image-1056" /></a></p>
<p>Aqui tem a <a href="http://www.boaglio.com/go.php?http://www.youtube.com/playlist?list=PLN7ajX_VdyaMlDRHRpQP3eHL_OgqhEKVU" target="_blank" title="(79 hits)">lista completa dos vídeos das palestras do Jenkins Meetup São Paulo</a>.</p>
<p>Depois da palestra do Bruno eu tentei criar um plugin e consegui sem muita complicação.<br />
A ideia é testar o tempo de conexão ao banco de dados (Oracle,MySQL, SQL Server), que pode ser exibida, por exemplo, antes de um build ou um de rodar os testes. </p>
<p>Para você criar o seu plugin, siga o <a href="http://www.boaglio.com/go.php?https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial" title="(90 hits)">tutorial</a> que é bem tranquilo, mas vou usar o meu como exemplo.</p>
<p>Eu comecei usando o <a href="http://www.boaglio.com/go.php?http://plugin-generator.jenkins-ci.org/" title="(110 hits)">site do gerado de plugin</a>&#8230; acessei, escolhi o nome <em>database-connection-speed</em> e cliquei em <strong>Generate</strong>. Depois de poucos segundos foi gerado um zip com o projeto de exemplo de plugin inteiro, basta eu descompactar dentro do workspace do Eclipse. </p>
<p>O segundo passo foi rodar o plugin&#8230; aí com o Maven facilitou bastante, não preciso instalar nada na minha máquina, o que eu preciso fazer é ir no diretório do projeto e rodar:  <strong>mvn clean install hpi:run </strong> , ele baixará todas as dependências necessárias para rodar o Jenkins local.</p>
<p>Todo plugin que você usa tem as configurações globais e as específicas de cada job, certo?</p>
<p>No seu plugin, o Jenkins utiliza o <a href="http://www.boaglio.com/go.php?http://commons.apache.org/jelly/" target="_blank" title="(79 hits)">framework Jelly</a> para trabalhar com essas informações.</p>
<p>No meu exemplo, essa tela de configuração geral:</p>
<p> <a href="http://www.boaglio.com/go.php?http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/dcs-config-gerais/" rel="attachment wp-att-1059" title="(93 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/12/dcs-config-gerais.png" alt="dcs-config-gerais" width="924" height="454" class="alignnone size-full wp-image-1059" /></a></p>
<p>É representada por esse XML: </p>
<pre class="brush: xml; title: ; notranslate">
&lt;j:jelly xmlns:j=&quot;jelly:core&quot; xmlns:st=&quot;jelly:stapler&quot; xmlns:d=&quot;jelly:define&quot; xmlns:l=&quot;/lib/layout&quot; xmlns:t=&quot;/lib/hudson&quot; xmlns:f=&quot;/lib/form&quot;&gt;
  &lt;f:section title=&quot;Database Connection Speed Test&quot;&gt;
    &lt;f:entry title=&quot;detalhes&quot; field=&quot;detalhes&quot;
      description=&quot;Exibir acesso ao banco de dados com detalhes&quot;&gt;
      &lt;f:checkbox /&gt;
    &lt;/f:entry&gt;
  &lt;/f:section&gt;
&lt;/j:jelly&gt;
</pre>
<p>E essas configurações de cada job:</p>
<p> <a href="http://www.boaglio.com/go.php?http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/dcs-config-do-job/" rel="attachment wp-att-1060" title="(95 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/12/dcs-config-do-job.png" alt="dcs-config-do-job" width="891" height="505" class="alignnone size-full wp-image-1060" /></a></p>
<p>São representadas por esse XML: </p>
<pre class="brush: xml; title: ; notranslate">
&lt;j:jelly xmlns:j=&quot;jelly:core&quot; xmlns:st=&quot;jelly:stapler&quot; xmlns:d=&quot;jelly:define&quot; xmlns:l=&quot;/lib/layout&quot; xmlns:t=&quot;/lib/hudson&quot; xmlns:f=&quot;/lib/form&quot;&gt;
  &lt;f:entry name=&quot;dbType&quot; title=&quot;Tipo de banco de dados&quot; field=&quot;dbType&quot;&gt;
    &lt;select name=&quot;dbType&quot;&gt;
        &lt;option value=&quot;mysql&quot;&gt;MySQL&lt;/option&gt;
        &lt;option value=&quot;oracle&quot;&gt;Oracle&lt;/option&gt;
        &lt;option value=&quot;sqlserver&quot;&gt;SQL Server&lt;/option&gt;
    &lt;/select&gt;
&lt;/f:entry&gt;
  &lt;f:entry title=&quot;url&quot; field=&quot;url&quot;&gt;
    &lt;f:textbox /&gt;
  &lt;/f:entry&gt;
  &lt;f:entry title=&quot;usuario&quot; field=&quot;usuario&quot;&gt;
    &lt;f:textbox /&gt;
  &lt;/f:entry&gt;
  &lt;f:entry title=&quot;senha&quot; field=&quot;senha&quot;&gt;
    &lt;f:password /&gt;
  &lt;/f:entry&gt;
&lt;/j:jelly&gt;
</pre>
<p>Então, só falta ler esses valores e mostrar o resultado.<br />
Tudo isso é feito na classe abaixo, os valores entram pelo construtor e no método <strong>perform</strong> você implementa o que o seu plugin realmente faz:</p>
<pre class="brush: java; title: ; notranslate">
public class ConnectionTestBuilder extends Builder {

        ...

	@DataBoundConstructor
	public ConnectionTestBuilder(String dbType,String url,String usuario,String senha) {
		this.dbType = dbType;
		this.url = url;
		this.usuario = usuario;
		this.senha = senha;
	}

	...

	@Override
	public boolean perform(AbstractBuild build,Launcher launcher,BuildListener listener) {

		try {
			TestConnection.inicia(url,usuario,senha,dbType,getDescriptor().getDetalhes(),listener);
			listener.getLogger().println(&quot; Tempo: &quot; + TestConnection.diff() + &quot; milisegundos  &quot;);
			TestConnection.finaliza();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return true;
	}
		 
</pre>
<p>Disso temos o resultado sem detalhes:</p>
<p> <a href="http://www.boaglio.com/go.php?http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/dcs-job-sem-detalhes/" rel="attachment wp-att-1062" title="(75 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/12/dcs-job-sem-detalhes.png" alt="dcs-job-sem-detalhes" width="807" height="235" class="alignnone size-full wp-image-1062" /></a></p>
<p>E com detalhes:</p>
<p> <a href="http://www.boaglio.com/go.php?http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/dcs-job-com-detalhes/" rel="attachment wp-att-1063" title="(76 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/12/dcs-job-com-detalhes.png" alt="dcs-job-com-detalhes" width="744" height="289" class="alignnone size-full wp-image-1063" /></a></p>
<p>Todo o código do plugin está <a href="http://www.boaglio.com/go.php?https://github.com/boaglio/jenkins-plugin-database-connection-speed" target="_blank" title="(95 hits)">disponível no github</a>.</p>
<p><strong>Uma observação: </strong>como a licença do driver da Oracle não é livre, ela não pode ficar em nenhum repositório na Internet, você precisa baixar <a href="http://www.boaglio.com/go.php?http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html" target="_blank" title="(311 hits)"> o driver (ojdbc6.jar)</a> e depois instalar em seu repositório local com o comando: </p>
<p><code>mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6  -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true</code></p>
<p>Fernando Boaglio, para a comunidade =)</p>
<p><map name='google_ad_map_1053_74531d4cc4df7f28'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/1053?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_1053_74531d4cc4df7f28' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=1053&amp;url= http%3A%2F%2Fwww.boaglio.com%2Findex.php%2F2012%2F12%2F16%2Fusa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin%2F' /></p>]]></content:encoded>
			<wfw:commentRss>http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.boaglio.com/index.php/2012/12/16/usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=usa-jenkins-e-nao-encontrou-o-que-precisa-faca-o-seu-plugin</feedburner:origLink></item>
		<item>
		<title>migre suas aplicações Java para nuvem Heroku</title>
		<link>http://feedproxy.google.com/~r/boaglio/~3/-1sQNKoey9Q/</link>
		<comments>http://www.boaglio.com/index.php/2012/10/28/migre-suas-aplicacoes-java-para-nuvem-heroku/#comments</comments>
		<pubDate>Sun, 28 Oct 2012 22:31:19 +0000</pubDate>
		<dc:creator>Fernando Boaglio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.boaglio.com/?p=746</guid>
		<description><![CDATA[Uma das grandes vantagens de usar o serviço de nuvem não é ficar na moda ou usar a última tecnologia disponível, é sim usar somente o que precisa, nada a mais e pagar apenas pelo que usa. Alguns afirmam que a tecnologia em nuvem é o maior avanço desde a criação das redes elétricas e [...]]]></description>
				<content:encoded><![CDATA[<p>Uma das grandes vantagens de usar o serviço de nuvem não é <em>ficar na moda</em> ou usar <em>a última tecnologia disponível</em>, é sim usar somente o que precisa, nada a mais e pagar apenas pelo que usa. </p>
<p>Alguns afirmam que a tecnologia em nuvem é <a href="http://www.boaglio.com/go.php?http://www.revolutioncloud.com/about/" target="_blank" title="(66 hits)">o maior avanço desde a criação das redes elétricas e distribuidoras de energia prestando serviço de distribuição</a>.</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/10/conta-de-luz-cara.jpg" title="(164 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/10/conta-de-luz-cara.jpg" alt="" title="conta-de-luz-cara" width="220" height="234"  /></a></p>
<p>Imagine se você tivesse que pagar <strong>300 reais</strong> por mês de energia elétrica, independente se gastasse mais ou menos que isso. Um absurdo, não ? Mas é o que acontece com um serviço de hospedagem do seu site&#8230; você contrata uma tecnologia, escolhe um plano e usando ou não você paga por aquilo.</p>
<p>Existem excelentes serviços de nuvem que permitem que você use uma quota <strong>gratuita</strong> e se passar ultrapassar, paga uma taxa proporcional pelo serviço utilizado. </p>
<p>Isso é <strong>exatamente o que eu procurava</strong> e vou mostrar aqui com detalhes &#8230;</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/10/heroku.png" title="(183 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/10/heroku-300x211.png" alt="" title="heroku" width="300" height="211" /></a></p>
<p>Eu tirei o meu site dessa situação:</p>
<ul>
<li><a href="http://www.boaglio.com/go.php?http://www.dailyrazor.com/java-jsp-hosting" target="_blank" title="(95 hits)">Hospedagem Java cobrando 7 dólares por mês</a></li>
<li> 50 banco de dados MySQL</li>
<li> Aplicação Java com limite da JVM de 64Mb</li>
</ul>
<p>Para essa:</p>
<ul>
<li><a href="http://www.boaglio.com/go.php?http://www.heroku.com/" target="_blank" title="(78 hits)">Hospedagem Developer cobrando nada!</a></li>
<li> Banco de dados PostgreSQL limitado a 10000 linhas </li>
<li> Aplicação Java com limite da JVM de 512Mb</li>
</ul>
<p>Para fazer isso na sua aplicação, os passos são simples:</p>
<ol>
<li>Heroku &#8211;  faça o cadastro e acesse o <a href="http://www.boaglio.com/go.php?https://devcenter.heroku.com/articles/java" target="_blank" title="(110 hits)">tutorial para aplicações Java</a></li>
<li>Maven &#8211; <a href="http://www.boaglio.com/go.php?http://www.drdobbs.com/open-source/making-the-move-to-maven-3/230800045" target="_blank" title="(82 hits)">migre sua aplicação para Maven 3</a></li>
<li>Banco de dados &#8211;  migre sua base para PostgreSQL</li>
</ol>
<p>Provavelmente a sua base está em MySQL, então vale a pena seguir os dois <a href="http://www.boaglio.com/go.php?http://en.wikibooks.org/w/index.php?title=Programming:Converting_MySQL_to_PostgreSQL" target="_blank" title="(77 hits)">tutoriais</a> <a href="http://www.boaglio.com/go.php?http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQL" target="_blank" title="(89 hits)">disponíveis</a>.</p>
<p>Duas dicas para essa conversão de MySQL para PostgreSQL:</p>
<ol>
<li>tipos booleanos não são convertidos</li>
<li>coloque o nome das tabelas em minúsculo para evitar o erro <em>relation &#8220;[tabela]&#8221; does not exist</em></li>
</ol>
<p>É importante saber também que o PostgreSQL é um banco de dados open source bem robusto e que possui características semelhantes ao Oracle Database, o que pode ser algo positivo para o seu caso. Além disso, ele acompanha a excelente ferramenta cliente <a href="http://www.boaglio.com/go.php?http://www.pgadmin.org/" target="_blank" title="(52 hits)">pgAdmin</a>, que é pau para toda obra.</p>
<p>O interessante também é que o <a href="http://www.boaglio.com/go.php?http://www.heroku.com/how/deploy" target="_blank" title="(58 hits)">Heroku foi feito para facilitar o deploy das aplicações</a>, ele fornece uma <a href="http://www.boaglio.com/go.php?https://toolbelt.heroku.com/" target="_blank" title="(83 hits)">ferramenta cliente</a> para fazer todas as operações: atualizar a aplicação, atualizar a base, subir a aplicação, entre outras coisas.  </p>
<p>Exemplo de alguns comandos:</p>
<p><code><br />
<strong>fb@cascao ~/ > heroku pg:info HEROKU_POSTGRESQL_AQUARIUS</strong><br />
=== HEROKU_POSTGRESQL_AQUARIUS (DATABASE_URL)<br />
Connections: 0<br />
Created:     2012-06-08 02:15 UTC<br />
Data Size:   10.6 MB<br />
Fork/Follow: Unavailable<br />
PG Version:  9.1.5<br />
Plan:        Dev<br />
Rows:        4797/10000 (In compliance)<br />
Status:      available<br />
Tables:      46</p>
<p><strong>fb@cascao ~/ > heroku ps</strong></p>
<p>=== web: `java $JAVA_OPTS -jar target/dependency/jetty-runner.jar --port $PORT target/*.war`<br />
web.1: up for 20h</p>
<p><strong>fb@cascao ~/ > heroku logs -t</strong></p>
<p>2012-10-28T21:42:56+00:00 heroku[nginx]: 201.80.25.250 - - [28/Oct/2012:21:42:56 +0000] "GET / HTTP/1.1" 200 455 "http://www.google.com.br/url?sa=t&#038;rct=j&#038;q=&#038;esrc=s&#038;source=web&#038;cd=2&#038;ved=0CDAQFjAB&#038;url=http%3A%2F%2%2F&#038;ei=3aWNUM7yAoSm8gS0voDgAw&#038;usg=AFQjCNHdT6664yXVdBOWUIZEZ0URPwC7KQ&#038;sig2=-gSGuQSfmuy4j76IYUI7wQ" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"<br />
2012-10-28T21:42:56+00:00 heroku[nginx]: 201.80.25.250 - - [28/Oct/2012:21:42:56 +0000] "GET /js/browser.js HTTP/1.1" 200 502 "http://www.meusite.com.br/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4" www.meusite.com.br<br />
2012-10-28T21:42:56+00:00 heroku[router]: GET www.meusite.com.br/js/browser.js dyno=web.1 queue=0 wait=1ms service=49ms status=200 bytes=502<br />
2012-10-28T21:42:57+00:00 app[web.1]: DEBUG [qtp744814285-29 - /games/index-home] (IndexAction.java:77) - iniciando IndexAction HOME...<br />
2012-10-28T21:42:57+00:00 app[web.1]:  INFO [qtp7<br />
44814285-29 - /games/index-home] (InfoHelper.java:106) - usuario anonimo!<br />
2012-10-28T21:42:57+00:00 app[web.1]:  INFO [qtp744814285-29 - /games/index-home] (TelaDeJogoDAO.java:125) - [trazendo a lista ...]:<br />
</code></p>
<p>Depois de sua aplicação migrada, é possível ver as opções gratuitas contratadas:</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/10/heroku2.png" title="(150 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/10/heroku2-300x211.png" alt="" title="heroku2" width="300" height="211"  /></a></p>
<p>Se, por exemplo, o seu sistema precisar de algo mais, sempre é possível contratar serviços adicionais em <a href="http://www.boaglio.com/go.php?https://addons.heroku.com/" target="_blank" title="(72 hits)">https://addons.heroku.com/</a> , como por exemplo o serviço de envio de email <a href="http://www.boaglio.com/go.php?https://addons.heroku.com/mailgun" target="_blank" title="(83 hits)">MailGun</a>, que também possui uma cota gratuita de 300 mensagens por dia, se sua aplicaçào envia menos que isso, o serviço ficará de graça! </p>
<p>Também é possível registrar o domínio do seu site da Heroku aqui no Brasil <a href="http://www.boaglio.com/go.php?http://i.ndigo.com.br/2012/04/registro-br-e-heroku-configurando-dns/" target="_blank" title="(102 hits)">pela Registro.br</a> ou lá fora, por exemplo <a href="http://www.boaglio.com/go.php?http://stackoverflow.com/questions/7170664/how-to-configure-heroku-application-dns-to-godaddy-domain" target="_blank" title="(67 hits)">pela GoDaddy</a>. </p>
<p><strong>Fernando Boaglio, para a comunidade!</strong></p>
<p><map name='google_ad_map_746_74531d4cc4df7f28'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/746?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_746_74531d4cc4df7f28' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=746&amp;url= http%3A%2F%2Fwww.boaglio.com%2Findex.php%2F2012%2F10%2F28%2Fmigre-suas-aplicacoes-java-para-nuvem-heroku%2F' /></p>]]></content:encoded>
			<wfw:commentRss>http://www.boaglio.com/index.php/2012/10/28/migre-suas-aplicacoes-java-para-nuvem-heroku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.boaglio.com/index.php/2012/10/28/migre-suas-aplicacoes-java-para-nuvem-heroku/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=migre-suas-aplicacoes-java-para-nuvem-heroku</feedburner:origLink></item>
		<item>
		<title>Ajude quem te ajuda</title>
		<link>http://feedproxy.google.com/~r/boaglio/~3/1OJuXxqBpm8/</link>
		<comments>http://www.boaglio.com/index.php/2012/05/27/ajude-quem-te-ajuda/#comments</comments>
		<pubDate>Sun, 27 May 2012 14:11:49 +0000</pubDate>
		<dc:creator>Fernando Boaglio</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.boaglio.com/?p=735</guid>
		<description><![CDATA[Você chega numa empresa nova ou num cliente novo para prestar serviços, o seu chefe te diz: - O suporte formatou a máquina, pode instalar as suas coisas e depois a gente conversa. A primeira coisa que você vai instalar será o JDK e segunda será sua IDE preferida, e existe uma boa chance dela [...]]]></description>
				<content:encoded><![CDATA[<p>Você chega numa empresa nova ou num cliente novo para prestar serviços, o seu chefe te diz:</p>
<p>- O suporte formatou a máquina, pode instalar as suas coisas e depois a gente conversa.</p>
<p>A primeira coisa que você vai instalar será o JDK e segunda será sua IDE preferida, e existe uma <strong>boa chance dela ser o Eclipse</strong>.</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/05/homerclipse.png" title="(1122 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/05/homerclipse.png" alt="" title="Eu amo o Eclipse!" width="450" height="408" class="aligncenter size-full wp-image-741" /></a><br />
<script type="text/javascript">google_ad_client = "pub-3816383189082763";google_ad_slot = "2926270854";google_ad_width = 468;google_ad_height = 60;</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></p>
<p>Eu digo isso pois o meu artigo que escrevi em 2003 de instalação do <a href="http://www.boaglio.com/go.php?http://www.boaglio.com/index.php/tutoriais/instalando-o-eclipse-no-windows/" title="(193 hits)">Eclipse no Windows</a> e <a href="http://www.boaglio.com/go.php?http://www.boaglio.com/index.php/tutoriais/instalando-o-eclipse-no-linux/" title="(140 hits)">no Linux</a> tem acesso todo dia.</p>
<p>Você parou para pensar se o Eclipse <strong>fosse pago</strong> ? A resposta quase que automática é: &#8220;<em>ah, eu usaria outra coisa de graça</em>&#8220;.</p>
<p>Certo, é bem provavel que usaria uma opção open source, mas sua produtividade seria a mesma ? Aquele projeto que você atualiza em dias não poderia facilmente levar semanas ? </p>
<p>Quanto o Eclipse já te ajudou nisso? E se ao invés de pago, ele exibisse banners de propaganda, já imaginou isso ? Você clica no botão de debug e abre uma propaganda na tela inteira! Isso seria terrível, não?</p>
<p>Então, eu acredito que por não conseguir desenvolver sem essa ferramenta por todos esses anos eu posso ajudar de duas maneiras: contribuindo <strong>financeiramente</strong> ou <a href="http://www.boaglio.com/go.php?http://wiki.eclipse.org/Development_Resources#Users:_Contributing_To_A_Project" title="(142 hits)">desenvolvendo algo para o projeto</a>.  </p>
<p><a href="http://www.boaglio.com/go.php?http://www.eclipse.org/donate/" target="_blank" title="(138 hits)">Agora ficou mais fácil ajudar financeiramente&#8230; além de poder doar o que quiser existe um pequeno benefício para quem quiser doar mais do que 35 dólares</a>.</p>
<p>Contribuindo ali você estará ajudando:</p>
<ol>
<li>mais banda para upload/download para você e os committers</li>
<li>compra de mais servidores para os projetos do Eclipse</li>
<li>enviar estudantes ao <a href="http://www.boaglio.com/go.php?http://www.eclipsecon.org" target="_blank" title="(100 hits)">EclipseCon</a></li>
<li>ajudar a bancar mais eventos para a comunidade do Eclipse </li>
</ol>
<p>Se doar mais que 35 dólares você se torna um <strong>Eclipse Friend</strong>, que permite duas coisas.<br />
A primeira é colocar esse logo no seu site pessoal:</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/05/friendslogo.jpg" title="(852 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/05/friendslogo.jpg" alt="" title="friendslogo" width="275" height="146" class="aligncenter size-full wp-image-742" /></a></p>
<p>E a segunda é baixar o Eclipse dos servidores com prioridade. Isso não é interessante para as versões estáveis, que já estão espalhadas nos servidores ao redor do mundo, e sim para as versões <a href="http://www.boaglio.com/go.php?http://www.eclipse.org/projects/project-plan.php?projectid=eclipse#release_milestones" title="(73 hits)">Milestone</a> ou Release Candidade, que ficam apenas no servidor principal.</p>
<p>O download normal é assim:</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/05/eclipse-download2.png" title="(949 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/05/eclipse-download2.png" alt="" title="eclipse-download2" width="493" height="600" class="aligncenter size-full wp-image-739" /></a></p>
<p>O download com o mirror do <em>Eclipse Friend</em> fica assim:</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/05/eclipse-download1.png" title="(872 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/05/eclipse-download1.png" alt="" title="Eclipse Friend mirror" width="529" height="465" class="aligncenter size-full wp-image-738" /></a></p>
<p>Portanto , confira a <a href="http://www.boaglio.com/go.php?http://eclipse.org/donate/donorlist.php" target="_blank" title="(174 hits)">lista e as mensagens dos doadores</a> (ou <a href="http://www.boaglio.com/go.php?http://eclipse.org/donate/donorlist.php?showAll=0" target="_blank" title="(198 hits)">apenas dos Eclipse Friends</a>) e faça a sua parte!</p>
<p>E não se esqueça que não é só de Java que existe o Eclipse, ele possui opções diversas desde <a href="http://www.boaglio.com/go.php?http://www.eclipse.org/projects/listofprojects.php" title="(118 hits)"> desenvolvimento de diversas linguagens e outros projetos interessantes</a> que usam a engine, como por exemplo para <a href="http://www.boaglio.com/go.php?http://www.xmind.net/" target="_blank" title="(108 hits)">mapas mentais</a>.</p>
<p><strong>Fernando Boaglio, para a comunidade =)</strong></p>
<p><map name='google_ad_map_735_74531d4cc4df7f28'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/735?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_735_74531d4cc4df7f28' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=735&amp;url= http%3A%2F%2Fwww.boaglio.com%2Findex.php%2F2012%2F05%2F27%2Fajude-quem-te-ajuda%2F' /></p>]]></content:encoded>
			<wfw:commentRss>http://www.boaglio.com/index.php/2012/05/27/ajude-quem-te-ajuda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.boaglio.com/index.php/2012/05/27/ajude-quem-te-ajuda/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ajude-quem-te-ajuda</feedburner:origLink></item>
		<item>
		<title>Nova referência de Java em português</title>
		<link>http://feedproxy.google.com/~r/boaglio/~3/gMmuMapM-60/</link>
		<comments>http://www.boaglio.com/index.php/2012/05/01/nova-referencia-de-java-em-portugues/#comments</comments>
		<pubDate>Tue, 01 May 2012 16:53:17 +0000</pubDate>
		<dc:creator>Fernando Boaglio</dc:creator>
				<category><![CDATA[Análise de livro]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.boaglio.com/?p=719</guid>
		<description><![CDATA[O mercado Java cresceu traumatizado com as literaturas em português. No meio de traduções bizarras e ter que esperar um mês para o seu livro da Amazon chegar ao Brasil, o profissional se acostumou com isso nas últimas décadas e a reação esperada ao pegar uma literatura é no mínimo uma leve desconfiança do conteúdo. [...]]]></description>
				<content:encoded><![CDATA[<p>O mercado Java cresceu traumatizado com as literaturas em português. No meio de traduções bizarras e ter que esperar um mês para o seu livro da Amazon chegar ao Brasil, o profissional se acostumou com isso nas últimas décadas e a reação esperada ao pegar uma literatura é no mínimo uma leve desconfiança do conteúdo.</p>
<p>Naturalmente eu também fiquei desconfiado, mas como conheço pessoalmente alguns dos <a href="http://www.boaglio.com/go.php?http://www.arquiteturajava.com.br/#autores" title="autores (222 hits)" target="_blank">autores</a>, comprei o livro de <strong><a href="http://www.boaglio.com/go.php?http://www.arquiteturajava.com.br/" target="_blank" title="(222 hits)">Introdução à arquitetura e design de software &#8211; uma visão sobre a plataforma Java</a></strong>.</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/04/capa-livro.png" title="(555 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/04/capa-livro.png" alt="" title="capa-livro" width="340" height="500" class="aligncenter size-full wp-image-724" /></a></p>
<p>Para minha surpresa, mesmo para quem tem experiência no assunto, é uma leitura bem agradável e rica em exemplos, dou destaques aos capítulos 2 da <a href="http://www.boaglio.com/go.php?http://www.arquiteturajava.com.br/livro/principios-de-garbage-collection.pdf" title="2 (83 hits)" target="_blank">Java Virtual Machine</a> , o 6 de <a href="http://www.boaglio.com/go.php?http://www.arquiteturajava.com.br/livro/domine-sua-ferramenta-de-mapeamento-objeto-relacional.pdf" title="6 (78 hits)" target="_blank">decisões arquiteturais</a> e o 7 de REST. </p>
<p>Não é nada fácil fazer um livro desse tipo, que envolve diversos conceitos, comparações , assuntos que não são triviais para explicar.</p>
<p>Vou listar alguns <strong>pontos positivos</strong> do livro:</p>
<ul>
<li>objetivo</li>
<li>bem organizado</li>
<li>conteúdo bem atual e com exemplos interessantes</li>
<li><a href="http://www.boaglio.com/go.php?http://www.arquiteturajava.com.br/livro/referencias.pdf" title="Referências (75 hits)" target="_blank">rico repositório de referências</a></li>
<li>interessante <a href="http://www.boaglio.com/go.php?http://www.arquiteturajava.com.br/livro/prefacio.pdf" target="_blank" title="(71 hits)">prefácio de Jim Weber</a></li>
</ul>
<p>Estou com a primeira edição e não vi a segunda, mas acredito que existam alguns <strong>pontos para melhorar</strong>:</p>
<ul>
<li>Diminuir os erros de digitação</li>
<li>Faltou detalhamento da visão geral de performance de um sistema Java</li>
<li>Não encontrei os links para as referências no site que o livro descreve </li>
<li>Faltou um texto sobre ambiente em cluster, o comportamento Java nessa arquitetura</li>
</ul>
<p>Algumas pessoas que leram o livro reclamaram que existe muita referência aos frameworks criados pela Caelum.  Eu não entendo qual o drama disso, afinal os autores são de lá e o livro originou-se <a href="http://www.boaglio.com/go.php?http://www.caelum.com.br/curso/fj91" title="curso (79 hits)" target="_blank">do curso deles</a>. Percebam que é perfeitamente comum você ler um texto de Java da Oracle e eles mencionarem o JDeveloper, ou um texto da IBM que mencione o DB2. </p>
<p>No geral é uma leitura obrigatória para qualquer profissional Java, eu recomendo.</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2012/04/thumbs-up.png" title="(444 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2012/04/thumbs-up.png" alt="" title="thumbs-up" width="180" height="199" class="aligncenter size-full wp-image-727" /></a></p>
<p>Espero que os autores encontrem mais tempo para novas literaturas, pois a comunidade brasileira precisa de bom conteúdo tecnológico.</p>
<p>Fernando Boaglio, para a comunidade. </p>
<p><map name='google_ad_map_719_74531d4cc4df7f28'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/719?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_719_74531d4cc4df7f28' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=719&amp;url= http%3A%2F%2Fwww.boaglio.com%2Findex.php%2F2012%2F05%2F01%2Fnova-referencia-de-java-em-portugues%2F' /></p>]]></content:encoded>
			<wfw:commentRss>http://www.boaglio.com/index.php/2012/05/01/nova-referencia-de-java-em-portugues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.boaglio.com/index.php/2012/05/01/nova-referencia-de-java-em-portugues/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=nova-referencia-de-java-em-portugues</feedburner:origLink></item>
		<item>
		<title>A corrida Oracle:procedure,Java stored proc,JDBC Thin e OCI,quem ganha?</title>
		<link>http://feedproxy.google.com/~r/boaglio/~3/uPL9tlQQx8M/</link>
		<comments>http://www.boaglio.com/index.php/2011/11/14/a-corrida-oracleprocedurejava-stored-procjdbc-thin-e-ociquem-ganha/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 00:47:13 +0000</pubDate>
		<dc:creator>Fernando Boaglio</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.boaglio.com/?p=700</guid>
		<description><![CDATA[Nesse artigo vou fazer um comparativo das opções de implementação com Oracle e Java, usando uma rotina que vai ler umas tabelas para buscar o CEP e depois fazer a carga em outra. As opções que temos: - Antes de existir Java: a velha e boa stored procedure em PL/SQL &#8230; é um código pré-compilado [...]]]></description>
				<content:encoded><![CDATA[<p>Nesse artigo vou fazer um comparativo das opções de implementação com Oracle e Java, usando uma rotina que vai ler umas tabelas para buscar o <a href="http://www.boaglio.com/go.php?http://www.coisasuteis.com.br/2009/06/banco-de-cep-em-formatos-mysql-e-access/" title="(222 hits)">CEP</a> e depois fazer a carga em outra.</p>
<p><img src="http://www.boaglio.com/wp-content/uploads/2011/11/GreyhoundRace.jpg" alt="" title="corrida" width="609" height="340" class="aligncenter size-full wp-image-705" /><br />
<script type="text/javascript">google_ad_client = "pub-3816383189082763";google_ad_slot = "0931072200";google_ad_width = 468;google_ad_height = 60;</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script> </p>
<p>As opções que temos:</p>
<p>- Antes de existir Java: a velha e boa stored procedure em PL/SQL &#8230; é um código pré-compilado em p-code que fica armazenado dentro do banco de dados&#8230; acesso local e nativo aos dados.</p>
<p>- Java client com <a href="http://www.boaglio.com/go.php?http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html" title="(311 hits)">driver JDBC Thin</a> &#8211; acesso remoto aos dados.</p>
<p>- Java client com <a href="http://www.boaglio.com/go.php?http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html" title="(311 hits)">driver OCI Thin</a> &#8211; acesso remoto e nativo aos dados.</p>
<p>- Java em stored procedure &#8211; desde o Oracle 8i temos uma engine em Java dentro do banco, o que nos possibilita executar rotinas em Java dentro do banco, com acesso local e nativo aos dados.</p>
<p>É impressionante a quantidade de profissionais Java que trabalha há anos com Oracle não conhece metade das opções existentes. </p>
<p>A implementação mais usada é a <strong>JDBC Thin</strong>, pois é a mais fácil de configurar, mas de acordo com a Oracle é a mais lenta de todas.</p>
<p>O <strong>Oracle OCI</strong> (<a href="http://www.boaglio.com/go.php?http://www.orafaq.com/wiki/Oracle_Call_Interfaces" title="(142 hits)">Oracle Call Interface</a>) é a maneira nativa que os clients utilizam para se conectar ao banco de dados, essa maneira nativa pode ser feita em várias linguagens (C, Cobol , <a href="http://www.boaglio.com/go.php?http://www.orafaq.com/wiki/JDBC#OCI_driver" title="(160 hits)">Java</a>) utilizando as bibliotecas do Oracle Client para acessar o banco de dados. Isso significa que para usar OCI, a instalação do Oracle client é obrigatória.</p>
<p>Ferramentas como Oracle SQL*Plus, <a href="http://www.boaglio.com/go.php?http://www.allroundautomations.com/plsqldev.html" target="_blank" title="(139 hits)">PL/SQL Developer</a> são rápidas porque usam OCI para acessar o banco de dados.</p>
<p>A configuração adequada do OCI pode ser complicada a primeira vez, e somente nesse fórum russo eu encontrei <a href="http://www.boaglio.com/go.php?http://www.sql.ru/forum/actualthread.aspx?tid=849644" title="(485 hits)">um simples resumo que explica como configurar o seu ambiente para usar OCI</a> (depois de instalado o Oracle Client):</p>
<p>Em plataforma Windows:</p>
<p><em><br />
- Adicione  [ORACLE_HOME] \ jdbc \ lib \ ojdbc5.jar ao CLASSPATH para JDK 1.5 ou<br />
            [ORACLE_HOME] \ jdbc \ lib \ ojdbc6.jar para JDK 1.6.<br />
- Adicione  [ORACLE_HOME] \ jlib \ orai18n.jar ao CLASSPATH.<br />
- Adicione  [ORACLE_HOME] \ bin ao PATH (que fica nas variáveis de ambiente, nas configurações avançadas do Sistema)<br />
</em></p>
<p>Em plataforma Unix:</p>
<p><em>- Adicione  [ORACLE_HOME] / jdbc / lib / ojdbc5.jar ao CLASSPATH para JDK 1.5 ou<br />
            [ORACLE_HOME] / jdbc / lib / ojdbc6.jar para JDK 1.6.<br />
- Adicione  [ORACLE_HOME] / jlib / orai18n.jar ao CLASSPATH.<br />
- Adicione  [ORACLE_HOME] / jdbc / lib ao LD_LIBRARY_PATH<br />
</em></p>
<p>Para trabalhar com <strong>Oracle Stored Procedures</strong>, você precisa primeiro ter uma ferramenta como <a href="http://www.boaglio.com/go.php?http://www.eclipse.org" target="_blank" title="(1484 hits)">Eclipse</a> para desenvolver suas rotinas, e depois gerar suas classes com compatibilidade para JDK 1.5 (se for Oracle 11i) e JDK 1.4 (se for Oracle 10g). </p>
<p>Além disso, a opção de Java deve estar ativa no banco de dados, verifique com o SQL:</p>
<pre class="brush: sql; title: ; notranslate">
SQL&gt; select value from V$option where parameter='Java';

VALUE
-------------------------------------------------------
TRUE
</pre>
<p>Essa opção Java não está disponível no Oracle Express Edition, é preciso instalar uma versão Personal Oracle, Standard ou Enterprise Edition. </p>
<p>Para <a href="http://www.boaglio.com/go.php?http://download.oracle.com/docs/cd/B12037_01/java.101/b12021/storproc.htm" target="_blank" title="(219 hits)">carregar as classes em Java no banco</a> é utilizado o loadjava, como por exemplo para carregar a nossa classe para o teste da corrida:</p>
<pre class="brush: sql; title: ; notranslate">
C:\workspace\corridaOracle\bin\&gt;loadjava -user=boaglio1/boaglio1@boaglio1 -verbose TesteDeInternalProcedure.class

arguments: '-user' 'boaglio1/***@boaglio1' '-verbose' 'TesteDeInternalProcedure.
class'
creating : class com/boaglio/corridaOracle/TesteDeInternalProcedure
loading  : class com/boaglio/corridaOracle/TesteDeInternalProcedure
Classes Loaded: 1
Resources Loaded: 0
Sources Loaded: 0
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0
</pre>
<p>E depois amarramos essa classe com uma procedure, dessa maneira:</p>
<pre class="brush: sql; title: ; notranslate">
create or replace procedure teste_java
 as
 language java 
 name 'com/boaglio/corridaOracle/TesteDeInternalProcedure.main(java.lang.String[])';
</pre>
<p>Bom, vamos falar agora do processo de carga&#8230; temos o primeiro exemplo que é executado inteiramente em PL/SQL:</p>
<pre class="brush: sql; title: ; notranslate">
 create or replace procedure teste_proc
is
 cursor todos_ceps is select * from cep;
 id_corrida integer;
begin

select corrida.nextval into id_corrida from dual;

for linha in todos_ceps loop
 if loweR(linha.cidade) like '%paulo%' then
  INSERT INTO TESTE_PROCEDURE (ID,UF,CIDADE,BAIRRO,ENDERECO_CEP,LOGRADOURO,ID_CORRIDA)
  VALUES (seq1.nextval,linha.uf,linha.cidade,linha.bairro,linha.endereco_cep,linha.logradouro,id_corrida);
 end if;
end loop;
  
end teste_proc;
</pre>
<p>Depois temos o outro exemplo que será chamado por todas as outras classes Java: </p>
<pre class="brush: java; title: ; notranslate"> 
package com.boaglio.corridaOracle;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CargaDeDadosDoCEP {

	static final String todos_ceps = &quot;select * from cep&quot;;

	static final int DRIVER_JDBC_THIN=1;
	static final int DRIVER_JDBC_OCI=2;
	public  static final int INTERNAL_JAVA_PROC=3;

	public static void runLoad(Connection conexao,int tipoDeDriver) {

		Statement stmt = null;
		ResultSet rset = null;
		try {
			int idCorrida = buscaIdCorrida(conexao);
			stmt = conexao.createStatement();
			rset = stmt.executeQuery(todos_ceps);
			while (rset.next())
				validaDados(rset,conexao,tipoDeDriver,idCorrida);
		} catch (Exception ignore) {
		} finally {
			try {
				rset.close();
				stmt.close();
				if (tipoDeDriver!=CargaDeDadosDoCEP.INTERNAL_JAVA_PROC)
				   conexao.close();
			} catch (Exception ignore) {
			}
		}
	}

	private static int buscaIdCorrida(Connection conexao) {

		Statement stmt = null;
		ResultSet rset = null;
		int idCorrida =0;
		try {
			stmt = conexao.createStatement();
			rset = stmt.executeQuery(&quot;select corrida.nextval from dual&quot;);
			while (rset.next())
				idCorrida = rset.getInt(1);
		} catch (Exception ignore) {
		} finally {
			try {
				rset.close();
				stmt.close();
			} catch (Exception ignore) {
			}
		}
		return idCorrida;
	}

	private static void validaDados(ResultSet rset,Connection conexao,int tipoDeDriver,int idCorrida) throws SQLException {

		String cidade = rset.getString(&quot;cidade&quot;);
		String busca = &quot;paulo&quot;;

		String SQL_CARGA=&quot;&quot;;
		if (tipoDeDriver==DRIVER_JDBC_THIN) {
			SQL_CARGA=&quot;INSERT INTO TESTE_DRIVER_THIN             (ID,UF,CIDADE,BAIRRO,ENDERECO_CEP,LOGRADOURO,ID_CORRIDA) &quot;+
            &quot;VALUES (seq2.nextval,?,?,?,?,?,?)&quot;;
		} else if (tipoDeDriver==DRIVER_JDBC_OCI) {
			SQL_CARGA=&quot;INSERT INTO TESTE_DRIVER_OCI (ID,UF,CIDADE,BAIRRO,ENDERECO_CEP,LOGRADOURO,ID_CORRIDA) &quot;+
			&quot;VALUES (seq3.nextval,?,?,?,?,?,?)&quot;;
		} else	if (tipoDeDriver==INTERNAL_JAVA_PROC) {
			SQL_CARGA=&quot;INSERT INTO TESTE_JAVA_PROC (ID,UF,CIDADE,BAIRRO,ENDERECO_CEP,LOGRADOURO,ID_CORRIDA) &quot;+
	        &quot;VALUES (seq4.nextval,?,?,?,?,?,?)&quot;;
		}
		if (cidade==null) return;
		if (cidade.toLowerCase().indexOf(busca)&gt;=0) {
			PreparedStatement pstmt = null;
			try {
			        pstmt = conexao.prepareStatement(SQL_CARGA);
				pstmt.setString(1,rset.getString(&quot;uf&quot;));
				pstmt.setString(2,cidade);
				pstmt.setString(3,rset.getString(&quot;bairro&quot;));
				pstmt.setString(4,rset.getString(&quot;endereco_cep&quot;));
				pstmt.setString(5,rset.getString(&quot;logradouro&quot;));
				   pstmt.setInt(6,idCorrida);
				pstmt.executeUpdate();

			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
				pstmt.close();
				} catch (Exception ignore) {
				}
			}
		}
	}
}
</pre>
<p>Em ambos os casos temos o mesmo processo: buscar em uma View de todos os endereços do Brasil os que contém &#8220;paulo&#8221; no nome da cidade e armazenar em uma tabela separada. </p>
<p>Temos 57789 de 699307 registros (8,25%) em cada execução da rotina.</p>
<p>O cálculo foi feito da diferença do primeiro e o último insert (o tempo de 57789 inserções na base).</p>
<p>O teste foi feito sem envolver rede, no próprio servidor para tirar essa dúvida da nossa corrida.  </p>
<p>Em todos os quatro casos as rotinas foram executadas dez vezes, com a seguinte performance:</p>
<p><a href="http://www.boaglio.com/go.php?http://www.boaglio.com/wp-content/uploads/2011/11/now-what-wecansolveit-gorejpg.jpeg" title="(776 hits)"><img src="http://www.boaglio.com/wp-content/uploads/2011/11/now-what-wecansolveit-gorejpg.jpeg" alt="" title="now-what-wecansolveit-gorejpg" width="289" height="229" class="aligncenter size-full wp-image-711" /></a></p>
<ol>
<li>Em primeiro lugar não é nenhuma surpresa que foi o PL/SQL, com tempo mínimo de 10 segundos, máximo de 12 e médio de 11.3</li>
<li>Em segundo lugar, pertinho vieram as stored procedures em Java, com tempo mínimo de 23 segundos, máximo de 25 e médio de 23,9</li>
<li>Em terceiro lugar, bem atrás vieram os drivers JDBC Thin, com tempo mínimo de 59 segundos, máximo de 79 e médio de 67</li>
<li>Em último lugar vieram os drivers JDBC OCI, com tempo mínimo de 64 segundos, máximo de 95 e médio de 71,9</li>
</ol>
<p>Vamos fazer algumas comparações com os tempos médios&#8230; <strong>a mesma rotina em PL/SQL roda 2 vezes mais rápido que uma stored procedure Java e 6 vezes mais rápido uma rotina de OCI, isso mesmo 6 vezes</strong>!</p>
<p>O interessante é que a Oracle recomenda usar o driver Thin para maior portabilidade e o driver OCI para melhor performance, mas nessa minha corrida e <a href="http://www.boaglio.com/go.php?http://oreilly.com/catalog/jorajdbc/chapter/ch19.html" target="_blank" title="(151 hits)">em outras literaturas dizem exatamente o oposto</a>.</p>
<p>Quer testar você mesmo? Acesse o <a href="http://www.boaglio.com/go.php?https://github.com/boaglio/corridaOracle/downloads" target="_blank" title="(151 hits)">fonte do projeto</a> e tire suas próprias conclusões!</p>
<p><map name='google_ad_map_700_74531d4cc4df7f28'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/700?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_700_74531d4cc4df7f28' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=700&amp;url= http%3A%2F%2Fwww.boaglio.com%2Findex.php%2F2011%2F11%2F14%2Fa-corrida-oracleprocedurejava-stored-procjdbc-thin-e-ociquem-ganha%2F' /></p>]]></content:encoded>
			<wfw:commentRss>http://www.boaglio.com/index.php/2011/11/14/a-corrida-oracleprocedurejava-stored-procjdbc-thin-e-ociquem-ganha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.boaglio.com/index.php/2011/11/14/a-corrida-oracleprocedurejava-stored-procjdbc-thin-e-ociquem-ganha/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=a-corrida-oracleprocedurejava-stored-procjdbc-thin-e-ociquem-ganha</feedburner:origLink></item>
	</channel>
</rss>
