<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-22964612</id><updated>2012-01-20T11:52:21.829-08:00</updated><category term='JasperReports'/><category term='Programação'/><category term='ws'/><category term='JBoss Seam'/><category term='SpringRoo'/><category term='SpringMVC'/><category term='Thread'/><category term='web'/><category term='vm'/><category term='Hibernate'/><category term='GO'/><category term='Security'/><category term='bash'/><category term='Oracle'/><category term='OO'/><category term='Java'/><category term='RichFaces'/><category term='TDC'/><category term='Google'/><category term='JavaFX'/><category term='Globalcode'/><category term='Swing'/><category term='Gwt'/><category term='Tomcat'/><category term='JDK7'/><category term='jpa'/><category term='python'/><category term='Maven'/><category term='Django'/><category term='Linux'/><category term='infra'/><category term='Pessoal'/><category term='YaW'/><category term='Eventos'/><category term='JSF'/><category term='Spring'/><category term='Facelets'/><category term='Artigo'/><category term='Portlets'/><category term='svn'/><title type='text'>edermag, só de boa</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>94</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-22964612.post-936256613235221865</id><published>2012-01-20T11:49:00.000-08:00</published><updated>2012-01-20T11:52:21.837-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='YaW'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Como redirecionar URL com Django</title><content type='html'>Implementar o redirecionamento de url's com &lt;a href="https://www.djangoproject.com/"&gt;Django&lt;/a&gt; é extremamente simples! Basta utilizar a função&amp;nbsp;&lt;a href="https://docs.djangoproject.com/en/dev/ref/generic-views/#django-views-generic-simple-redirect-to"&gt;django.views.generic.simple.redirect_to&lt;/a&gt;&amp;nbsp;no arquivo de configurações para urls (ROOT_URLCONF).&lt;br /&gt;&lt;br /&gt;Um exemplo do site da &lt;a href="http://www.yaw.com.br/"&gt;yaw&lt;/a&gt;:&lt;br /&gt;&lt;pre class="python" name="code"&gt;from django.views.generic.simple import redirect_to&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;urlpatterns = patterns('',&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt; (r'^treinamentos/academiaJava.html/$', redirect_to, {'url': '/treinamentos/academia_java/'}),&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dessa forma quando a url &lt;a href="http://www.yaw.com.br/treinamentos/academiaJava.html"&gt;http://www.yaw.com.br/treinamentos/academiaJava.html&lt;/a&gt; for requisitada o Django retorna para o browser o código &lt;a href="http://en.wikipedia.org/wiki/HTTP_301"&gt;http 301&lt;/a&gt; (&lt;span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: x-small; line-height: 16px;"&gt;Moved Permanently)&lt;/span&gt;, redirecionando para a página&amp;nbsp;&lt;a href="http://www.yaw.com.br/treinamentos/academia_java"&gt;http://www.yaw.com.br/treinamentos/academia_java&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Simples!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag" style="background-color: white; color: #992211; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px; text-decoration: none;"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/" style="background-color: white; color: #992211; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px; text-decoration: none;"&gt;www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-936256613235221865?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/936256613235221865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=936256613235221865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/936256613235221865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/936256613235221865'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2012/01/como-redirecionar-url-com-django.html' title='Como redirecionar URL com Django'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-914949634277980059</id><published>2011-11-17T11:21:00.001-08:00</published><updated>2012-01-20T11:50:58.729-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JDK7'/><title type='text'>Instalação (manual) do Java 7 no Ubuntu 11 64 bits</title><content type='html'>&lt;br /&gt;Roteiro para instalar o Kit de desenvolvimento do Java (JDK) 7 no Ubuntu 11 64 bits, de forma manual, baixando o pacote do jdk7 direto do site da Oracle.&lt;br /&gt;&lt;br /&gt;Baixe o &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;tar&lt;/span&gt; com o pacote de binários do &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html"&gt;site da Oracle&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Depois é só colocar o arquivo na pasta &lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;/usr/lib/jvm&lt;/span&gt; &lt;/span&gt;e extrair o &lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;tar&lt;/span&gt;&lt;/span&gt;, por exemplo &lt;span style="font-size: x-small;"&gt;(meu arquivo é &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;jdk-7u1-linux-x64.tar.gz&lt;/span&gt;)&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;sudo mv /home/yaw/Download/jdk-7u1-linux-x64.tar.gz /usr/lib/jvm/jdk-7u1-linux-&lt;/span&gt;&lt;span style="font-size: small;"&gt;x64.tar.gz&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;tar -zvxf jdk-7u1-linux-x64.tar.gz&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Próxima etapa é configurar o ambiente, isso pode ser feito também de forma manual editando o arquivo &lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;bashrc&lt;/span&gt;&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;sudo vim /home/yaw/.bashrc &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Outra opção seria realizar a configuração através do comando update-alternatives. A seguir a instrução que abre o menu com opções de atualização do Java.&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; display: inline !important; float: none; font-family: 'Courier New', Courier, Fixed; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;sudo update-alternatives --config java&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Provavelmente existem três, começando com a &lt;i&gt;Selection 0&lt;/i&gt;, não selecione nenhuma, saia com enter.&lt;br /&gt;&lt;br /&gt;O comando a seguir cria a quarta opção, &lt;i&gt;Selection 3&lt;/i&gt;, apontando para a pasta do Java 7:&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; display: inline !important; float: none; font-family: 'Courier New', Courier, Fixed; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0/jre/bin/java&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; color: black; font-family: 'Courier New', Courier, Fixed; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rode novamente o comando para atualizar o Java:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; display: inline !important; float: none; font-family: 'Courier New', Courier, Fixed; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;sudo update-alternatives --config java&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Escolha a &lt;i&gt;Selection 3&lt;/i&gt; (a mesma que vc criou para o Java 7).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pronto, fácil. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: #992211; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: -webkit-auto; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: #992211; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: -webkit-auto; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-914949634277980059?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/914949634277980059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=914949634277980059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/914949634277980059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/914949634277980059'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/11/instalacao-manual-do-java-7-no-ubuntu.html' title='Instalação (manual) do Java 7 no Ubuntu 11 64 bits'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-796948158517216170</id><published>2011-11-03T05:29:00.000-07:00</published><updated>2012-01-20T11:51:26.232-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Globalcode'/><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='TDC'/><category scheme='http://www.blogger.com/atom/ns#' term='YaW'/><title type='text'>O TDC2011 foi tri-sucesso</title><content type='html'>Não poderia deixar de escrever sobre a tri-participação da YaW no &lt;b&gt;The Developer’s Conference 2011&lt;/b&gt;, conhecido como o TDC2011. Copiando uma frase da &lt;a href="http://twitter.com/#%21/yarasenger"&gt;Yara&lt;/a&gt;: &lt;i&gt;“somos 100% TDC2011”&lt;/i&gt;, presentes na edição &lt;a href="http://edermag.blogspot.com/2011/07/como-foi-o-tdc2011-um-pequeno-resumo.html"&gt;São Paulo&lt;/a&gt;, Florianópolis e Goiânia.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Florianópolis&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O evento em &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/index.html#florianopolis"&gt;Florianópolis&lt;/a&gt; contou com 12 trilhas em 2 dias, 20 e 21 de Agosto, em sua 4a edição. Muito conteúdo, ótima organização, e uma galera bastante interessada no evento, em trocar idéias e fazer networking. Fiquei impressionado com o número de pessoas presentes no encerramento: um sábado, passando das 19 horas o auditório estava completamente lotado, impressionante!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6YpOBfJXTbk/TrBG154yPYI/AAAAAAAAAJg/FJK2kr9qPfQ/s1600/tdc_palestra_eder.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-6YpOBfJXTbk/TrBG154yPYI/AAAAAAAAAJg/FJK2kr9qPfQ/s320/tdc_palestra_eder.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lá apresentei a palestra com as &lt;a href="http://www.slideshare.net/edermag/java7-tdc2011"&gt;mudanças e novidades do Java 7&lt;/a&gt; e junto com o &lt;a href="http://twitter.com/#%21/rafanunes"&gt;Rafael Nunes&lt;/a&gt; a palestra sobre &lt;a href="http://www.slideshare.net/edermag/arquiteturas-java-ee-no-google-app-engine"&gt;Arquiteturas JavaEE no Google App Engine&lt;/a&gt;, ambas na trilha Java. No domingo como congressista, assisti diversas palestras em várias trilhas. O Rafael Nunes foi o coordenador da trilha &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/florianopolis/trilha-soa-cloud#programacao"&gt;SOA/Cloud&lt;/a&gt;, em parceria com o Felipe Oliveira (SOAExpert).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Hm-Fh4BxPB4/TrBHKNyW7vI/AAAAAAAAAJo/JbvjzLo7HHU/s1600/tdc_soa_rafael.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-Hm-Fh4BxPB4/TrBHKNyW7vI/AAAAAAAAAJo/JbvjzLo7HHU/s320/tdc_soa_rafael.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Goiânia&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Eu não conhecia Goiânia, adorei a cidade, muito bonita com um povo muito simpático. Falando sobre o evento, foi um sucesso, mais de 500 pessoas estiveram presentes nos dois dias do &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/index.html#goiania"&gt;TDC2011 Goiânia&lt;/a&gt;, 29 e 30 de outubro. Foi a primeira edição do evento na região, que contou com 13 trilhas, e muita gente fera das comunidades presentes.&lt;br /&gt;&lt;br /&gt;No mesmo espírito TDC, a galera estava 100% interessada no evento, rolando muita troca de informação e networking. Revi vários amigos, conheci uma galera muito gente boa e bastante prestativa. No primeiro dia, como congressista, assisti palestras nas trilhas: &lt;i&gt;Empreendedorimo&lt;/i&gt;, &lt;i&gt;Arduíno&lt;/i&gt; e &lt;i&gt;Java&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-W4I8hJKUdwE/TrBIbCXoVlI/AAAAAAAAAJw/hL87DWklPpo/s1600/tdcgoiania2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-W4I8hJKUdwE/TrBIbCXoVlI/AAAAAAAAAJw/hL87DWklPpo/s320/tdcgoiania2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;No domingo fui o coordenador da &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/goiania/trilha-mobile#programacao"&gt;trilha Mobile&lt;/a&gt;, e tenho muito a agradecer aos palestrantes dessa trilha que simplesmente arrebentaram, com palestras excelentes em diversos assuntos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Como tirar proveito de uma plataforma Cloud (Google App Engine) em desenvolvimento Mobile, com o &lt;i&gt;Rafael Nunes&lt;/i&gt;;&lt;/li&gt;&lt;li&gt;Soluções da Nokia para desenvolvimento mobile: Windows Phone e Symbia, com o &lt;i&gt;Heitor Repolho&lt;/i&gt;;&lt;/li&gt;&lt;li&gt;As alternativas e o mercado de mobilidade, com Marcelo Quinta;&lt;/li&gt;&lt;li&gt;Os desafios no desenvolvimento de sites para mobile, com &lt;i&gt;Marcelo Quinta&lt;/i&gt; e &lt;i&gt;André Vilas Boas&lt;/i&gt;;&lt;/li&gt;&lt;li&gt;Uma visão completa de como funciona o programa de desenvolvedor iOS (iPhone, iPod, iPad), com &lt;i&gt;Edson Luiz&lt;/i&gt;;&lt;/li&gt;&lt;li&gt;Reuso de código Android com as ferramentas BugSense e PushLink, com &lt;a href="http://twitter.com/#%21/celiohc"&gt;Célio Vasconcelos&lt;/a&gt;;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Destaque para a palestra do &lt;a href="http://twitter.com/#%21/rafaelcdev"&gt;Rafael Costa&lt;/a&gt;, um GAROTO de 13 anos atualmente com 9 aplicativos publicados no Apple Store! O Rafa falou sobre desenvolvimento iOS com o framework GameKit, e impressionou a galera com seu conhecimento, desenvoltura e habilidade na apresentação da palestra. No fim da palestra ele interagiu com o público, respondendo com muita boa vontade todas as perguntas e curiosidades da galera.&lt;br /&gt;&lt;br /&gt;Agradecimento mais do que especial para o &lt;a href="http://twitter.com/#%21/mrquinta"&gt;Marcelo Quinta&lt;/a&gt;, grande profissional, gente finíssima, me ajudou muito na formação de conteúdo da trilha.&lt;br /&gt;&lt;br /&gt;O Rafael Nunes, além de apresentar a palestra na trilha Mobile, foi o&lt;br /&gt;coordenador da trilha SOA/Cloud, novamente em parceira com o Felipe Oliveira.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8H-5fMLN_6E/TrBInAQvTYI/AAAAAAAAAJ4/7ISn__qI32A/s1600/tdc_goiania1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-8H-5fMLN_6E/TrBInAQvTYI/AAAAAAAAAJ4/7ISn__qI32A/s320/tdc_goiania1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Outro destaque do TDC2011 Goiânia foram os happy’s e as baladinhas, rolou muita diversão, com direito até a uma canja do &lt;a href="http://twitter.com/#%21/sauloarruda"&gt;Saulo Arruda&lt;/a&gt;: o cara arrebentou, manda muito bem no violão!&lt;br /&gt;&lt;br /&gt;O TDC já foi consolidado com um dos melhores e principais eventos sobre desenvolvimento de software do Brasil, seu formato inovou e agradou as diversas comunidades que apoiaram e seguiram proposta do evento. O TDC2011, no meu caso, foi uma oportunidade para:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Compartilhar um pouco do que eu conheço;&lt;/li&gt;&lt;li&gt;Aprender mais e renovar minhas inspirações;&lt;/li&gt;&lt;li&gt;Conhecer pessoas de diferentes estilos, com foco em conteúdo;&lt;/li&gt;&lt;li&gt;Conhecer lugares interessantes;&lt;/li&gt;&lt;li&gt;Muita diversão, com happy’s regados a muita cerveja e excelentes conversas;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Uma pena que TDC2011 acabou, mas já na expectativa pois logo logo chega a vez do TDC2012! Parabéns a Globalcode e a empresas que atuaram na organização das 3 edições do TDC2011, foi incrível.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: #992211; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: -webkit-auto; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: #992211; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: -webkit-auto; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-796948158517216170?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/796948158517216170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=796948158517216170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/796948158517216170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/796948158517216170'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/11/o-tdc2011-foi-tri-sucesso.html' title='O TDC2011 foi tri-sucesso'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-6YpOBfJXTbk/TrBG154yPYI/AAAAAAAAAJg/FJK2kr9qPfQ/s72-c/tdc_palestra_eder.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-178983889675388897</id><published>2011-10-14T16:09:00.000-07:00</published><updated>2011-10-14T16:10:01.658-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle linguistic sort: desconsiderar letras minúsculas/maiúsculas e acentuação</title><content type='html'>A partir da versão 10g o Oracle passou a suportar a busca em String utilizando classificação&amp;nbsp;linguística &lt;i&gt;(linguistic sort)&lt;/i&gt;. O que na prática permite a busca em um campo String desconsiderando diferenças, por exemplo, entre letras&amp;nbsp;minúsculas&amp;nbsp;e&amp;nbsp;maiúsculas&amp;nbsp;ou o uso de acentuação.&lt;br /&gt;&lt;br /&gt;Os comandos a seguir habilitam, na sessão do usuário, a comparação por&amp;nbsp;linguística&amp;nbsp;e a classificação binária desconsiderando acentuação e case insensitive:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;ALTER SESSION SET NLS_SORT='BINARY_AI';&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;ALTER SESSION SET NLS_COMP='LINGUISTIC';&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;CREATE TABLE teste (texto VARCHAR2(10));&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;INSERT INTO teste VALUES('Macaco');&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;INSERT INTO teste VALUES('maça');&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;INSERT INTO teste VALUES('maçarico');&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;INSERT INTO teste VALUES('MAÇONARIA');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;select texto from teste where texto like 'mac%';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;TEXTO&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;---------&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Macaco&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;maça&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;maçarico&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;MAÇONARIA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O mesmo resultado é processado com a seguinte instrução:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;select texto from teste where texto like 'MAÇ%';&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mesmo informando o acento, como no segundo comando, registros sem acentuação são Macaco sem acento é retornado.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O Oracle também suporta a busca ordena por um idioma:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;SELECT texto FROM teste&amp;nbsp;ORDER BY NLSSORT(texto, 'NLS_LANG = PT');&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Outra funcionalidade, apresentar a descrição da data em um determinado idioma:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SQL&amp;gt;SELECT to_char(sysdate, 'DD/MON/YYYY', 'nls_date_language = French') from dual;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/ch5lingsort.htm#i1005902"&gt;Link&lt;/a&gt; para a documentação online dessas funcionalidades.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-178983889675388897?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/178983889675388897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=178983889675388897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/178983889675388897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/178983889675388897'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/10/oracle-linguistic-sort-desconsiderar.html' title='Oracle linguistic sort: desconsiderar letras minúsculas/maiúsculas e acentuação'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-5783158262002572158</id><published>2011-08-23T11:24:00.000-07:00</published><updated>2011-08-23T11:24:38.214-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JDK7'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Solução em Java 7 para a prova do Google Developer Day 2011</title><content type='html'>Semana passada me diverti um pouco com a prova para o Google Developer Day 2011. A prova não é obrigatória, na verdade faz parte do processo de inscrição e dever ser utilizada como filtro para identificar as pessoas que se adequema o público alvo do evento: Developers.&lt;br /&gt;&lt;br /&gt;A prova era composta por 5 questões, todas em torno de 2 textos do idioma &lt;b&gt;Googlon&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Regras do idioma &lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Letras e ordem do idioma: &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;t w d c r z p s v h m k l n f x q j b g&lt;/span&gt;&lt;span id="internal-source-marker_0.3997991697220785" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Esse idioma estipula grupos de letras:&lt;br /&gt;&amp;nbsp; - letras tipo &lt;i&gt;foo&lt;/i&gt;: &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;g&lt;/b&gt;, &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;f&lt;/b&gt;, &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;z&lt;/b&gt;, &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;t&lt;/b&gt; e &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;s&lt;/b&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; - letras tipo &lt;i&gt;bar&lt;/i&gt;: todas as outras.&lt;br /&gt;&lt;br /&gt;As preposições são identificadas com a seguinte regra: palavras com &lt;b&gt;3 letras &lt;/b&gt;que terminam com uma letra do tipo &lt;i&gt;bar&lt;/i&gt;, mas que não pode ser &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;m&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;A regra para identificar verbos: palavras de &lt;b&gt;7&lt;/b&gt; ou&lt;b&gt; mais letras&lt;/b&gt; que terminam com uma letra do tipo &lt;i&gt;bar&lt;/i&gt;. Caso a palavra seja um verbo e começe com uma letra do tipo &lt;i&gt;bar&lt;/i&gt;, deve ser considerado um verbo de primeira pessoa.&lt;br /&gt;&lt;br /&gt;E os números? As palavras são números. Esses números são formados em &lt;b&gt;base 20&lt;/b&gt;, onde cada letra é uma digito ordenado do menos para o mais significativo (contrário do binário). Dessa forma a primeira posição é 1, a segunda é 20, a terceira é 400 e assim por diante. Outro detalhe importante: cada letra tem um valor (posição) conforme a ordem do alfabeto, por exemplo &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;t&lt;/b&gt; é 0, &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;w&lt;/b&gt; é 1, &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;d&lt;/b&gt; é 2, etc. Ainda para os números, existem uma classificação de números bonitos. Em Googlon um &lt;i&gt;número bonito&lt;/i&gt; deve ser maior ou igual a &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;502344&lt;/b&gt; e &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;divisível por 4&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Questões&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Todas as questões contavam com uma dica do Google, elas eram respondidas levando em consideração a o texto A, mas o participante deveria responder considerando o texto B.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Qual a quantidade preposições no &lt;i&gt;texto B&lt;/i&gt;?&lt;/li&gt;&lt;li&gt;Quantos verbos existem no &lt;i&gt;texto B&lt;/i&gt;?&lt;/li&gt;&lt;li&gt;Quantos verbos em 1a pessoa existem no &lt;i&gt;texto B&lt;/i&gt;?&lt;/li&gt;&lt;li&gt;Imprimir o texto B colocando as palavras na ordem alfabética do Googlon.&lt;/li&gt;&lt;li&gt;Quantos &lt;i&gt;números bonitos&lt;/i&gt; existem no &lt;i&gt;texto B&lt;/i&gt;?&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;A solução&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Na semana passada estava focado em terminar demos e a apresentação que fiz no TDC2011 em Floripa, sobre Java 7. Aproveitei o embalo pra implementar a solução da prova do GDD usando Java, mas com um detalhe especial: primeiro programa utilizando Java 7. Coloquei as letras na ordem do Googlon em um List e fiz um split do texto (uma String). Dessa forma iteirei sob as palavras para encontrar as preposições, verbos (1a pessoa tb) e números, além de aplicar a ordenação Googlon.&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;import java.util.Arrays;&lt;br /&gt;import java.util.Comparator;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.TreeSet;&lt;br /&gt;&lt;br /&gt;import static java.lang.System.out;&lt;br /&gt;&lt;br /&gt;public class Googlon {&lt;br /&gt;&lt;br /&gt;  static List&amp;lt;Character&amp;gt; alf_ordem = &lt;br /&gt;    Arrays.asList( new Character[] {'t','w','d','c','r','z','p','s','v','h',&lt;br /&gt;      'm','k','l', 'n','f','x','q','j','b','g'} );&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;    String textoB = "prm pmqcf flqk mblz fzrr ..."; //um pedaco do texto B&lt;br /&gt;&lt;br /&gt;    int preposicoes = 0, verbos = 0, verbos1Pessoa = 0, numerosBonitos = 0;&lt;br /&gt;    //determina as letras do tipo foo&lt;br /&gt;    List&amp;lt;Character&amp;gt; foo = &lt;br /&gt;      Arrays.asList( new Character[]{'g','f','z','t','s'} );&lt;br /&gt;&lt;br /&gt;    //treeset com comparator resolvendo a ordem as palavras (questao 3)&lt;br /&gt;    TreeSet&amp;lt;String&amp;gt; listaEmOrdem = new TreeSet&amp;lt;&amp;gt;(new Comparator&amp;lt;String&amp;gt;(){&lt;br /&gt;      @Override&lt;br /&gt;      public int compare(String s1, String s2) {&lt;br /&gt;        int len1 = s1.length(), len2 = s2.length();&lt;br /&gt;        int lim = Math.min(len1, len2);&lt;br /&gt;        char chars1[] = s1.toCharArray(), chars2[] = s2.toCharArray();&lt;br /&gt;&lt;br /&gt;        int i = 0;&lt;br /&gt;        while (i &amp;lt; lim) {&lt;br /&gt;          char c1 = chars1[i];&lt;br /&gt;          char c2 = chars2[i];&lt;br /&gt;          if (c1 != c2) {&lt;br /&gt;            return alf_ordem.indexOf(c1) - alf_ordem.indexOf(c2);&lt;br /&gt;          }&lt;br /&gt;          i++;&lt;br /&gt;        }&lt;br /&gt;        return len1 - len2;&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    //aqui percorro todas palavras, para ordernar e validar&lt;br /&gt;    for (String s: textoB.split(" ")) {&lt;br /&gt;      listaEmOrdem.add(s);&lt;br /&gt;&lt;br /&gt;      if (isNumeroBonito(converteParaNumero(s))) {&lt;br /&gt;        numerosBonitos++;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (s.length() == 3) {&lt;br /&gt;        if (!foo.contains(s.charAt(s.length()-1)) &amp;amp;&amp;amp; s.indexOf('m') == -1) {&lt;br /&gt;          preposicoes++;&lt;br /&gt;        }&lt;br /&gt;        continue;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (s.length() &amp;gt;= 7) {&lt;br /&gt;        if (!foo.contains(s.charAt(s.length()-1))) {&lt;br /&gt;          verbos++;&lt;br /&gt;          if (!foo.contains(s.charAt(0))) {&lt;br /&gt;            verbos1Pessoa++;&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    StringBuilder textoOrdenadoTeste = new StringBuilder();&lt;br /&gt;    for (String s: listaEmOrdem) {&lt;br /&gt;      textoOrdenadoTeste.append(s).append(" ");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    out.println("1a resposta, qtde de preposicoes: "+preposicoes);&lt;br /&gt;    out.println("2a resposta, qtde de verbos: "+verbos);&lt;br /&gt;    out.println("3a resposta, qtde de verbos 1a pessoa: "+verbos1Pessoa);&lt;br /&gt;    out.println("4a resposta, o texto ordenado: "+ textoOrdenadoTeste);&lt;br /&gt;    out.println("5a resposta, qtde de numeros bonitos? "+numerosBonitos);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private static long converteParaNumero(String palavra) {&lt;br /&gt;    int n = 0;&lt;br /&gt;    long total = 0;&lt;br /&gt;    for (char c: palavra.toCharArray()) {&lt;br /&gt;      int codigo = alf_ordem.indexOf(c);&lt;br /&gt;      total += codigo * (long) Math.pow(20,n++);&lt;br /&gt;    }&lt;br /&gt;    return total;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private static boolean isNumeroBonito(long numero) {&lt;br /&gt;    //literal int com separador _ e a literal 4 em binario&lt;br /&gt;    return numero &amp;gt;= 502_344 &amp;amp;&amp;amp; numero % 0b100 == 0;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para rodar essa classe em versões anteriores do Java é muito simples, na ordem:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;defina a tipagem de String na instância do objeto TreeSet no lugar do operador diamond.&lt;/li&gt;&lt;li&gt;dentro do método isNumeroBonito, na linha 92, remova o "_" entre o número 502304 e utiliza 4 em decimal ao invés de binário (0b100).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;a href="http://twitter.com/edermag" style="color: #992211; text-decoration: none;"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/" style="color: #992211; text-decoration: none;"&gt;www.yaw.com.br&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-5783158262002572158?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/5783158262002572158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=5783158262002572158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5783158262002572158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5783158262002572158'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/08/solucao-em-java-para-prova-do-google.html' title='Solução em Java 7 para a prova do Google Developer Day 2011'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-4016316108148001630</id><published>2011-08-05T14:50:00.000-07:00</published><updated>2011-08-05T14:54:05.192-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='infra'/><title type='text'>Como mudar o encoding de arquivo com conteúdo para UTF-8 no Linux</title><content type='html'>Alguns dias atrás trabalhei um projeto para customizar um portal para China. Nada muito complicado, afinal era só usar a estrutura do projeto já implementado no Brasil, EUA e outros países para a China.&lt;br /&gt;&lt;br /&gt;Mas.... o portal foi projetado com o padrão de charset ISO-8859-1, que não suporta os caracteres do mandarim. A solução então era migrar a estrutura atual, em &lt;a href="http://pt.wikipedia.org/wiki/ISO_8859-1"&gt;ISO-8859-1&lt;/a&gt; para &lt;a href="http://www.utf8.com/"&gt;UTF-8&lt;/a&gt;, mas o buraco era mais embaixo!&lt;br /&gt;&lt;br /&gt;São vários detalhes para resolver, por exemplo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Configuração do ambiente servidor e desenvolvimento;&lt;/li&gt;&lt;li&gt;Configuração de &lt;i&gt;web-server&lt;/i&gt;, &lt;i&gt;application server&lt;/i&gt; e &lt;i&gt;database&lt;/i&gt;;&lt;/li&gt;&lt;li&gt;Outros...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Aqui vou falar apenas de: arquivos texto com algum conteúdo/caractere especial.&lt;br /&gt;&lt;br /&gt;O que fazer com os milhares de arquivos Java, JSP, HTML, JS, PHP e outros com algum caractere especial que foram transformados em �? &lt;br /&gt;&lt;br /&gt;Lembrando que por se tratar de um projeto já implementado qualquer arquivo com caractere especial em ISO-8859-1 aberto em UTF-8 fica assim: �. Mudar o texto na mão, arquivo a arquivo era completamente fora de cogitação!&lt;br /&gt;&lt;br /&gt;Ainda bem que o Linux quebrou nosso galho, e converteu a codificação dos caracteres especiais de um charset para outro, com o mínimo de esforço! Graças ao programa: &lt;a href="http://en.wikipedia.org/wiki/Iconv"&gt;iconv&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como utilizar o &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;iconv&lt;/span&gt;&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt; iconv -f [charset original] -t [charset desejado] &amp;lt; [arquivo original] &amp;gt; [novo arquivo charset desejado]&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;gt; iconv -f ISO-8859-1 -t UTF-8 &amp;lt; htmlEspecial.html &amp;gt; htmlEspecialNovo.html&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O iconv considera o conteúdo do arquivo atual (original) no charset indicado e converte o conteúdo, no caso o(s) caractere(s) especial para o novo charset indicado. Portanto, o arquivo &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;htmlEspecialNovo.html&lt;/span&gt;&lt;/span&gt; não vai conter o símbolo �, e sim o caractere na formatação correta.&lt;br /&gt;&lt;br /&gt;Ficou fácil, mas executar o iconv arquivo a arquivo também seria muito trabalhoso, além de que o objetivo era substituir o arquivo para o novo charset sem criar um novo arquivo.&lt;br /&gt;&lt;br /&gt;Pra ficar mais fácil ainda meu brother Gimenez, bolou um script bash para executar processar o iconv para todos os arquivos a partir de uma pasta com filtro na extensão do arquivo.&lt;br /&gt;&lt;br /&gt;&lt;pre class="javascript" name="code"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;ICONVBIN='/usr/bin/iconv'&lt;br /&gt;&lt;br /&gt;if [ $# -lt 3 ]&lt;br /&gt;then&lt;br /&gt;    echo "$0 from_charset to_charset extesion"&lt;br /&gt;    exit&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;for f in `find ./ -name "*.$3" -exec file --mime {} \; | grep $1 | cut -f 1 -d :`&lt;br /&gt;do&lt;br /&gt;    if test -f $f&lt;br /&gt;    then&lt;br /&gt;        echo -e "\nConvertendo $f"&lt;br /&gt;        /bin/mv $f $f.old&lt;br /&gt;        RETMV=$?&lt;br /&gt;        if [ $RETMV -gt 0 ]; then&lt;br /&gt;          echo -e "\n Atencao erro no mv"&lt;br /&gt;          exit 1&lt;br /&gt;        fi&lt;br /&gt;&lt;br /&gt;        $ICONVBIN -f $1 -t $2 $f.old &amp;gt; $f&lt;br /&gt;        RETICONV=$?&lt;br /&gt;        if [ $RETICONV -gt 0 ]; then&lt;br /&gt;          echo -e "\n Atencao erro no iconv"&lt;br /&gt;          exit 2&lt;br /&gt;        fi&lt;br /&gt;&lt;br /&gt;        /bin/rm $f.old&lt;br /&gt;        RETRM=$?&lt;br /&gt;        if [ $RETRM -gt 0 ]; then&lt;br /&gt;          echo -e "\n Atencao erro no rm"&lt;br /&gt;          exit 3&lt;br /&gt;        fi&lt;br /&gt;    else&lt;br /&gt;        echo -e "\nArquivo $f nao convertido";&lt;br /&gt;    fi&lt;br /&gt;done&lt;br /&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;A execução do script &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;convert&lt;/span&gt;&lt;/span&gt; seria algo do tipo:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; convert iso-8859-1 utf8 java&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;a href="http://twitter.com/edermag" style="color: #992211; text-decoration: none;"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/" style="color: #992211; text-decoration: none;"&gt;www.yaw.com.br&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-4016316108148001630?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/4016316108148001630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=4016316108148001630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/4016316108148001630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/4016316108148001630'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/08/como-mudar-o-encoding-de-arquivo-com.html' title='Como mudar o encoding de arquivo com conteúdo para UTF-8 no Linux'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-7313877617820071786</id><published>2011-07-21T07:15:00.000-07:00</published><updated>2011-07-21T08:34:30.045-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Globalcode'/><category scheme='http://www.blogger.com/atom/ns#' term='Eventos'/><category scheme='http://www.blogger.com/atom/ns#' term='TDC'/><category scheme='http://www.blogger.com/atom/ns#' term='YaW'/><title type='text'>Como foi o #TDC2011, um pequeno resumo</title><content type='html'>&lt;div style="text-align: justify;"&gt;Novamente tenho a satisfação em escrever sobre o The Developer's Conference, um evento criado e realizado pela &lt;a href="http://www.globalcode.com.br/"&gt;Globalcode&lt;/a&gt;. Vou resumir como foi a participação da &lt;a href="http://www.yaw.com.br/"&gt;YaW&lt;/a&gt; a 5a edição do &lt;a href="http://www.thedevelopersconference.com.br/#geral"&gt;The Developer's Conference&lt;/a&gt;, o TDC2011. Essa é a nossa 5a participação, nessa última edição colaborando na organização de 2 trilhas!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O evento seguiu a mesma estratégia do ano, organizado em &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/index.html#saopaulo"&gt;diversas trilhas&lt;/a&gt;, com uma diferença: esse ano foram &lt;b&gt;25 trilhas dividas em 5 dias de evento&lt;/b&gt;, rolando muito conteúdo, networking, trabalho e diversão. O mix entre as 25 comunidades foi sensacional, com certeza esse é um dos principais diferenciais da conferência.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Primeiro dia do TDC2011: Coordenação&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Trabalhei junto com o &lt;a href="http://twitter.com/#%21/netomarin"&gt;Neto Marin&lt;/a&gt; na coordenação/organização da &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-android#programacao"&gt;trilha Android&lt;/a&gt;. Foram 8 palestras nos mais variados níveis, falando sobre arquitetura do Android; boas práticas e dicas de performance no desenvolvimento para Android; como devemos pensar em relação as interface gráfica tanto para smartphones quanto para os tablets; um pouco sobre desenvolvimento de Games em Android e até a integração de APIs para Android com redes sociais. Essa trilha contou com a presença de alguns palestrantes do Google, como o ilustre &lt;a href="http://twitter.com/#%21/timbray"&gt;Tim Bray&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-GRKJPqedFbs/TiQ7_DxctVI/AAAAAAAAlXU/GCTWGZL67gw/s720/IMG_3358.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-GRKJPqedFbs/TiQ7_DxctVI/AAAAAAAAlXU/GCTWGZL67gw/s320/IMG_3358.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Ainda no primeiro dia do TDC2011 o &lt;a href="http://twitter.com/#%21/rafanunes"&gt;Rafael Nunes&lt;/a&gt; atuou, também, na coordenação/organização na &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-cloud#programacao"&gt;trilha Cloud&lt;/a&gt;, junto com o &lt;a href="http://twitter.com/#%21/brjavaman"&gt;Bruno Souza&lt;/a&gt; (JavaMan). Nessa trilha além de uma boa visão sobre as tecnologias para desenvolvimento em Cloud, muito se falou sobre oportunidades de negócios para soluções em Cloud Computing.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--3xkIQLdwo4/TiQ2ymtDHYI/AAAAAAAAk8Q/o-p5zi_ZSIc/s720/IMG_3447.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/--3xkIQLdwo4/TiQ2ymtDHYI/AAAAAAAAk8Q/o-p5zi_ZSIc/s320/IMG_3447.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Segundo dia do TDC2011: Palestra&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Quinta-feira foi um dia mais que especial para nós da comunidade Java, nesse dia rolou o lançamento oficial do Java 7. O &lt;a href="http://www.oracle.com/webapps/events/ns/EventsDetail.jsp?p_eventId=134208&amp;amp;src=7299693&amp;amp;src=7299693&amp;amp;Act=18"&gt;lançamento&lt;/a&gt; foi mundial, ocorreu simultaneamente em São Francisco, &amp;nbsp;Londres e em São Paulo durante o TDC2011.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Nesse dia participamos na &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-java#programacao"&gt;trilha Java&lt;/a&gt; com a palestra do &lt;a href="http://twitter.com/#%21/wrpinheiro"&gt;Wellington Pinheiro&lt;/a&gt; e o &lt;a href="http://twitter.com/#%21/mcastroinfo"&gt;Marcelo Castro&lt;/a&gt; (instrutor da Globalcode Alphaville) sobre as novidades do Java 7, com vários exemplos das novidades que tornam o Java uma linguagem mais simples e relativamente menos verbosa. Estive nessa trilha como congressista.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CdLNq-t1xwU/TiEJbfnSrVI/AAAAAAAAi9Y/zcH_q-cQzOM/s720/IMG_7238.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-CdLNq-t1xwU/TiEJbfnSrVI/AAAAAAAAi9Y/zcH_q-cQzOM/s320/IMG_7238.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Terceiro dia do TDC2011: Congressista&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Na sexta-feira participei da &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-mobile#programacao"&gt;trilha Mobile&lt;/a&gt; como congressista, assisti palestras com Roger Brinkley falando um pouco sobre o que a Oracle tem feito com o Java ME (Mobile &amp;amp; Embedded), assisti &amp;nbsp;palestras com o pessoal da Nokia, e Daniel Galpin do Google apresentando licenciamento e como fazer negócio no Android Marketing.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Tive a oportunidade de conhecer um pouco sobre o desenvolvimento da plataforma mobile da Microsoft, o Windows Phone, gostei do conceito de interface gráficas com metro, mas acho que eles tem muito a fazer pra chegar perto do Android e OS. No final do dia ainda assisti a ótima palestra do Felipe Rodrigues na &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-ruby#programacao"&gt;trilha Ruby&lt;/a&gt;, falando sobre "Starting up", com foco empreendedor em fazer acontecer. Depois só diversão, happy hour com os amigos!&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-H9_kGyGxV7U/TiRYxOQ1rtI/AAAAAAAApuE/3ne0bHo52uw/s720/IMG_5400.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-H9_kGyGxV7U/TiRYxOQ1rtI/AAAAAAAApuE/3ne0bHo52uw/s320/IMG_5400.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quarto dia do TDC2011: Palestra&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No sábado participei da &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-javaee#programacao"&gt;trilha Java EE&lt;/a&gt;, que contou com a presença ilustre do Arun Gupta da Oracle. Apresentei a palestra "&lt;a href="http://www.slideshare.net/edermag/richfaces-4-desenvolvimento-jsf-mais-rico"&gt;RichFaces 4: Desenvolvimento Web com JSF2 mais rico&lt;/a&gt;", demonstrando alguns componentes da suíte de componentes JSF da JBoss.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-M4-IiXNXpUQ/TiD8UKR0v0I/AAAAAAAAhQg/MNP1HzbSzl0/s720/IMG_5462.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-M4-IiXNXpUQ/TiD8UKR0v0I/AAAAAAAAhQg/MNP1HzbSzl0/s320/IMG_5462.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Último dia do TDC2011: Diversão&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Domingão e eu ja estava bem cansado, nem por isso deixei de ir no dia mais "relax" do TDC2011, era a vez da &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-arduino#programacao"&gt;trilha Arduíno&lt;/a&gt; e a &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-games#programacao"&gt;trilha Games&lt;/a&gt;. Fiquei como congressista no auditório, participando da trilha Stadium, com um resumo das principais palestras do dia.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pensa que acabou, não...&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;As manifestações no twitter foram constantes e bem interessantes, hashtag &lt;a href="http://twitter.com/#%21/search/tdc2011"&gt;#TDC2011&lt;/a&gt; bombou! A conta &lt;a href="http://twitter.com/#%21/TheDevConf"&gt;TheDevConf&lt;/a&gt; mantinha o timeline sempre atualizado com informações das palestras e feedback do evento. Outra característica genial do evento foi a transmissão GRATUITA via web, para quem não pode vir para Sampa. A Globalcode fez uma parceria com o &lt;a href="http://blog.globalcode.com.br/2011/06/tdc2011-vai-ter-almoco.html"&gt;Subway&lt;/a&gt;, em todos os dias os participantes podiam comer sem nenhum custo adicional dentro da Faculdade Anhembi Morumbi.&lt;/div&gt;&lt;br /&gt;Muitas palestras foram filmadas, logo logo a Globalcode deve disponibilizar o acessos a esses vídeos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tem mais?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;E agora é a vez do &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/index.html#florianopolis"&gt;TDC2011 em Floripa&lt;/a&gt; que acontece nos dias 20 e 21 de Agosto. As trilhas foram definidas e já é possível &lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/florianopolis/trilhas"&gt;submeter propostas&lt;/a&gt; de palestras. Nós da YaW estamos super motivados em participar!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Parabéns a &lt;a href="http://twitter.com/#%21/yarasenger"&gt;Yara&lt;/a&gt; e &lt;a href="http://twitter.com/#%21/vsenger"&gt;Vinicius&lt;/a&gt;, a toda equipe da Globalcode, as&lt;a href="http://www.thedevelopersconference.com.br/tdc/2011/patrocinadores"&gt; empresas parceiras&lt;/a&gt; na organização do evento, os palestrantes e congressistas.&amp;nbsp;Veja mais &lt;a href="https://picasaweb.google.com/globalcodebrasil"&gt;fotos do TDC2011&lt;/a&gt; aqui.&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial,Tahoma,Helvetica,FreeSans,sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;a href="http://twitter.com/edermag" style="color: #992211; text-decoration: none;"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/" style="color: #992211; text-decoration: none;"&gt;www.yaw.com.br&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-7313877617820071786?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/7313877617820071786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=7313877617820071786' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7313877617820071786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7313877617820071786'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/07/como-foi-o-tdc2011-um-pequeno-resumo.html' title='Como foi o #TDC2011, um pequeno resumo'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-GRKJPqedFbs/TiQ7_DxctVI/AAAAAAAAlXU/GCTWGZL67gw/s72-c/IMG_3358.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-5774126299492150055</id><published>2011-07-14T12:03:00.000-07:00</published><updated>2011-07-14T12:03:47.886-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringMVC'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringRoo'/><category scheme='http://www.blogger.com/atom/ns#' term='JasperReports'/><title type='text'>Emissão de relatórios no Spring Roo e MVC com Jasper Reports</title><content type='html'>O Spring MVC é uma das tecnologias que mais gostamos e usamos na YaW. Quando uso o termo "gostar" na verdade me refiro a uma tecnologia que atendeu as nossas espectativas do ponto de vista de implementação e mais importante, supriu as necessidades e objetivos do nosso cliente. A nossa experiência com Spring MVC tem sido bem interessante, por isso faz parte de nosso portfólio de soluções.&lt;br /&gt;&lt;br /&gt;Nesse post demonstro como intregrar uma aplicação Web desenvolvida pelo Spring MVC com o JasperReports para emissão de relatórios. A integração entre o Spring MVC e JasperReports não tem nenhuma relação com o Spring Roo, mas para facilitar a criação e o desenvolvimento do projeto vou assumir o uso do Spring Roo.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dependências&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Além da biblioteca do JasperReports, dependendo do caso precisamos de outras libs complementares:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spring Support&lt;/li&gt;&lt;li&gt;iText (pdf)&lt;/li&gt;&lt;li&gt;POI&amp;nbsp; (xls)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;A seguir o trecho do pom.xml (Maven) com configuração dos artefatos. No trecho abaixo também coloco as configurações para o plugin do Maven que automatiza a compilcação dos relatórios jrxml para o formato jasper, utilizado pelo JasperReports:&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;...&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;spring-context-support&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;${spring.version}&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;net.sf.jasperreports&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;jasperreports&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;4.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;com.lowagie&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;itext&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;2.1.7&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;org.apache.poi&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;poi&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;3.6&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;&lt;br /&gt;  &amp;lt;optional&amp;gt;true&amp;lt;/optional&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;jasperreports-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;configuration&amp;gt;&lt;br /&gt;    &amp;lt;sourceDirectory&amp;gt;src/main/webapp/WEB-INF/reports&amp;lt;/sourceDirectory&amp;gt;&lt;br /&gt;    &amp;lt;outputDirectory&amp;gt;src/main/webapp/WEB-INF/reports&amp;lt;/outputDirectory&amp;gt;&lt;br /&gt;  &amp;lt;/configuration&amp;gt;&lt;br /&gt;  &amp;lt;executions&amp;gt;&lt;br /&gt;    &amp;lt;execution&amp;gt;&lt;br /&gt;      &amp;lt;goals&amp;gt;&lt;br /&gt;        &amp;lt;goal&amp;gt;compile-reports&amp;lt;/goal&amp;gt;&lt;br /&gt;      &amp;lt;/goals&amp;gt;&lt;br /&gt;    &amp;lt;/execution&amp;gt;&lt;br /&gt;  &amp;lt;/executions&amp;gt;&lt;br /&gt;  &amp;lt;dependencies&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;jasperreports&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;jasperreports&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;3.5.3&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;      &amp;lt;groupId&amp;gt;org.apache.log4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;      &amp;lt;artifactId&amp;gt;com.springsource.org.apache.log4j&amp;lt;/artifactId&amp;gt;&lt;br /&gt;      &amp;lt;version&amp;gt;1.2.15&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Próxima etapa é configurar no xml do MVC (webmvc-config.xml) o viewResolver do Spring que indica o properties com as configurações de cada relatório.&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;bean id=&amp;quot;viewResolver&amp;quot; &lt;br /&gt;  class=&amp;quot;org.springframework.web.servlet.view.ResourceBundleViewResolver&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;property name=&amp;quot;basename&amp;quot; value=&amp;quot;relatorios&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;O arquivo relatorios.properties (na raiz do diretório de classes) armazena qual a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;classe&lt;/span&gt; que estipula o formato de geração do relatório, a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;url&lt;/span&gt; com o caminho do arquivo do relatório.&lt;br /&gt;&lt;br /&gt;No exemplo estou usando o arquivo compilado, o &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;.jasper&lt;/span&gt;, mas o Spring aceita a extensão &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;jrxml&lt;/span&gt;. A propriedade &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;reportKeyData&lt;/span&gt; (opcional) indica o apelido para o &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;DataSource&lt;/span&gt; com os dados que o relatório depende. Já o valor &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;relatorioPedidos&lt;/span&gt; usado como base das 3 chaves é o identificador do relatório, usamos no retorno do método da Controller que processa o relatório.&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;relatorioPedidos.(class)=&lt;br /&gt;org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView&lt;br /&gt;relatorioPedidos.url=/WEB-INF/reports/pedidos.jasper&lt;br /&gt;relatorioPedidos.reportDataKey=pedidosDS&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A classe &lt;a href="http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/web/servlet/view/jasperreports/JasperReportsMultiFormatView.html"&gt;JasperReportsMultiFormatView&lt;/a&gt; é indicada em relatórios que podem ser emitidos em mais de um formato, ou seja, o mesmo relatório gerado em &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;xls&lt;/span&gt; e &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;pdf&lt;/span&gt;. Outra alternativa seria utilizar &lt;a href="http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/web/servlet/view/jasperreports/JasperReportsPdfView.html"&gt;JasperReportsPdfView&lt;/a&gt;, nesse caso a emissão ocorre só em &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;pdf&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Pra fechar o método da &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Controller&lt;/span&gt; que processa os dados para emissão do relatório:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;...&lt;br /&gt;@RequestMapping("/report")&lt;br /&gt;@Controller&lt;br /&gt;public class ReportController {&lt;br /&gt;&lt;br /&gt;  @RequestMapping(value ="/pedido/pdf", method = RequestMethod.GET)&lt;br /&gt;  public String processaRelatorioPedidos(&lt;br /&gt;     @RequestParam String de, @RequestParam String ate,&lt;br /&gt;     ModelMap modelMap) &lt;br /&gt;  {&lt;br /&gt;    JRBeanCollectionDataSource ds =&lt;br /&gt;      new JRBeanCollectionDataSource(Pedido.findPedidosByDataGeracao(de, ate),false);&lt;br /&gt;    modelMap.put("pedidosDS", ds);&lt;br /&gt;    return "relatorioPedidos";&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A documentação oficial do Spring disponibiliza um capítulo sobre a integração do &lt;a href="http://static.springsource.org/spring/docs/3.0.x/reference/view.html#view-jasper-reports"&gt;Spring MVC com o JasperReports&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-5774126299492150055?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/5774126299492150055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=5774126299492150055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5774126299492150055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5774126299492150055'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/07/emissao-de-relatorios-no-spring-roo-e.html' title='Emissão de relatórios no Spring Roo e MVC com Jasper Reports'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-1838574415379497327</id><published>2011-02-15T08:18:00.000-08:00</published><updated>2011-02-15T08:33:08.520-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Spring: Como definir BasicDataSource usando arquivo properties</title><content type='html'>Definir um &lt;a href="http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/BasicDataSource.html"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;BasicDataSource&lt;/span&gt;&lt;/a&gt; usando as configurações do database definidas em arquivo properties é bem simples, basta definir um &lt;a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;PropertyPlaceholderConfigurer&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Arquivo &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;database.properties&lt;/span&gt;&lt;/span&gt;, com as configurações JDBC:&lt;br /&gt;&lt;pre class="xml" name="code"&gt;#usando mysql nesse exemplo&lt;br /&gt;db.driver=com.mysql.jdbc.Driver&lt;br /&gt;db.host=localhost&lt;br /&gt;db.name=yawdb&lt;br /&gt;db.username=yaw&lt;br /&gt;db.password=yaw&lt;br /&gt;db.port=3306&lt;br /&gt;db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;spring-config.xml&lt;/span&gt;&lt;/div&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans" ...&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;bean id="dbProperties"&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="location" value="br/com/yaw/spring/database.properties" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;bean id="myDataSource"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="driverClassName" value="${db.driver}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="url" value="${db.url}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="username" value="${db.username}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="password" value="${db.password}" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pronto!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-1838574415379497327?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/1838574415379497327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=1838574415379497327' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1838574415379497327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1838574415379497327'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/02/spring-como-definir-basicdatasource.html' title='Spring: Como definir BasicDataSource usando arquivo properties'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-1653984226118480597</id><published>2011-02-07T11:57:00.000-08:00</published><updated>2011-02-07T11:57:13.758-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Habilitando conexão Https c/ Java 'ignorando' o certificado</title><content type='html'>Frequentemente&amp;nbsp;escrevo um código para realizar requisições entre aplicativos, seja para WS/REST ou mesmo um simples HttpClient, usando &lt;a href="http://en.wikipedia.org/wiki/HTTP_Secure"&gt;Https&lt;/a&gt;&amp;nbsp;com Java. Como fazer uma requisição SSL sem registrar o &lt;a href="http://edermag.blogspot.com/2009/03/importar-certificado-jvm.html"&gt;certificado na JVM&lt;/a&gt;, ou mesmo um 'bypass' em certificado desconhecido? &lt;br /&gt;&lt;br /&gt;Aqui deixo um exemplo de como realizar um requisição Https com Java ignorando o certificado. Usando &lt;a href="http://download.oracle.com/javase/6/docs/api/javax/net/ssl/X509TrustManager.html"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;X509TrustManager&lt;/span&gt;&lt;/a&gt; [&lt;a href="http://download.oracle.com/javase/1.5.0/docs/guide/security/cert3.html#inside"&gt;mais sobre X509Certificate&lt;/a&gt;] e &lt;a href="http://download.oracle.com/javase/6/docs/api/javax/net/ssl/HostnameVerifier.html"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HostnameVerifier&lt;/span&gt;&lt;/a&gt; de fachada. Na verdade o uso do HostnameVerifier seria pra evitar &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;b&gt;java.io.IOException: HTTPS hostname wrong:  should be ...&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #444444;"&gt;,&lt;/span&gt;&lt;/b&gt; já que o nome do certificado não bate com o domínio.&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;package br.com.yaw.client.ssl.main;&lt;br /&gt;&lt;br /&gt;import java.security.cert.X509Certificate;&lt;br /&gt;&lt;br /&gt;import javax.net.ssl.HostnameVerifier;&lt;br /&gt;import javax.net.ssl.HttpsURLConnection;&lt;br /&gt;import javax.net.ssl.SSLContext;&lt;br /&gt;import javax.net.ssl.SSLSession;&lt;br /&gt;import javax.net.ssl.TrustManager;&lt;br /&gt;import javax.net.ssl.X509TrustManager;&lt;br /&gt;//...&lt;br /&gt;&lt;br /&gt;public class TestSecureRequest {&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args) throws Exception  {&lt;br /&gt;    final X509TrustManager cert = new X509TrustManager() {&lt;br /&gt;      public X509Certificate[] getAcceptedIssuers() {&lt;br /&gt;        return null;&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      public void checkServerTrusted(X509Certificate[] certs,&lt;br /&gt;        String authType)&lt;br /&gt;      throws java.security.cert.CertificateException {&lt;br /&gt;        return;&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      public void checkClientTrusted(X509Certificate[] certs,&lt;br /&gt;        String authType)&lt;br /&gt;      throws java.security.cert.CertificateException {&lt;br /&gt;        return;&lt;br /&gt;      }&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    //cria socket ssl&lt;br /&gt;    SSLContext sc = SSLContext.getInstance("SSL");&lt;br /&gt;    sc.init(null, new TrustManager[] { cert }, null);&lt;br /&gt;&lt;br /&gt;    //ativa o socket para a requisicao&lt;br /&gt;    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());&lt;br /&gt;    &lt;br /&gt;    final HostnameVerifier hv = new HostnameVerifier() {&lt;br /&gt;      public boolean verify(String urlHostName, SSLSession session) {&lt;br /&gt;        return true;&lt;br /&gt;      }&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    HttpsURLConnection.setDefaultHostnameVerifier(hv);&lt;br /&gt;&lt;br /&gt;    // daqui pra frente o codigo que acionar WS/REST, ou um simples HttpClient&lt;br /&gt;    //...&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Peace of cake.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;@edermag&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-1653984226118480597?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/1653984226118480597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=1653984226118480597' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1653984226118480597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1653984226118480597'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/02/habilitando-conexao-https-c-java.html' title='Habilitando conexão Https c/ Java &apos;ignorando&apos; o certificado'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-6583645521474977072</id><published>2011-01-20T11:02:00.000-08:00</published><updated>2011-01-20T11:17:30.152-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Acessar properties a partir de uma classe no mesmo jar</title><content type='html'>Mais um post da série: "É melhor anotar! Afinal, vai que, você sabe...."&lt;br /&gt;&lt;br /&gt;Como acessar um arquivo properties, ou qualquer tipo de arquivo, a partir de uma classe definida dentro do mesmo jar?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A estrutura do arquivo aplicacao.jar seria algo mais ou menos assim:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #444444; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;| META-INF/&lt;br /&gt;| META-INF/conf.properties&lt;br /&gt;| br/&lt;br /&gt;| br/com/&lt;br /&gt;| br/com/yaw/&lt;br /&gt;| br/com/yaw/LeProperties.class&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Simples, através do &lt;a href="http://download.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getResourceAsStream%28java.lang.String%29"&gt;getResourceAsStream&lt;/a&gt; do ClassLoader da classe LeProperties:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;public class LeProperties {&lt;br /&gt;&amp;nbsp; static {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties p = new Properties();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.load(LeProperties.class.getClassLoader().getResourceAsStream("META-INF/conf.properties"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;@edermag&lt;/a&gt;&lt;br /&gt;http://www.yaw.com.br/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-6583645521474977072?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/6583645521474977072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=6583645521474977072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6583645521474977072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6583645521474977072'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2011/01/acessar-properties-partir-de-uma-classe.html' title='Acessar properties a partir de uma classe no mesmo jar'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-6560493317315270174</id><published>2010-12-14T16:50:00.000-08:00</published><updated>2010-12-14T16:50:31.315-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringRoo'/><title type='text'>SpringRoo com Segurança e Repositório Usuários em BD Relacional</title><content type='html'>Apesar do &lt;a href="http://www.springsource.org/roo"&gt;Spring Roo&lt;/a&gt; não contar com nenhum &lt;a href="http://static.springsource.org/spring-roo/reference/html-single/index.html#base"&gt;add-on&lt;/a&gt; no módulo de segurança pra configurar um repositório de usuários em Banco de Dados Relacional, isso é muito simples de resolver.&lt;br /&gt;&lt;br /&gt;Basta informar ao Spring que ele deve usar o &lt;a href="http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/authentication/dao/DaoAuthenticationProvider.html"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;DaoAuthenticationProvider&lt;/span&gt;&lt;/a&gt; como provedor de autenticação no &lt;a href="http://static.springsource.org/spring-security/site/"&gt;Security&lt;/a&gt;. No &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;applicationContext-security.xml&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;authentication-manager alias="authenticationManager"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;authentication-provider ref="daoAuthenticationProvider"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/authentication-manager&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Depois é só definir o &lt;i&gt;bean&lt;/i&gt; do &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;DaoAuthenticationProvider&lt;/span&gt;, vincular o &lt;i&gt;bean&lt;/i&gt; &lt;a href="http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/core/userdetails/jdbc/JdbcDaoImpl.html"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;JdbcDaoImpl&lt;/span&gt;&lt;/a&gt; como service, com o &lt;i&gt;DataSource&lt;/i&gt; e &lt;i&gt;Queries&lt;/i&gt; mapeadas. No &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;applicationContext.xml&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="userDetailsService" ref="jdbcUserDetailsService"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;bean id="jdbcUserDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="dataSource" ref="?"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="usersByUsernameQuery" value="?"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authoritiesByUsernameQuery" value="?"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Na &lt;i&gt;property&lt;/i&gt; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dataSource&lt;/span&gt; informe respectivo DataSource do projeto, a &lt;i&gt;query&lt;/i&gt; para busca de usuários em &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;usersByUsernameQuery&lt;/span&gt; e a busca de perfis em &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;authoritiesByUsernameQuery&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Veja também mais &lt;a href="http://blog.globalcode.com.br/search/label/Spring%20Roo"&gt;sobre Spring Roo no Globalcoders&lt;/a&gt; e &lt;a href="http://edermag.blogspot.com/search/label/SpringRoo"&gt;aqui no blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-6560493317315270174?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/6560493317315270174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=6560493317315270174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6560493317315270174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6560493317315270174'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/12/springroo-com-seguranca-e-repositorio.html' title='SpringRoo com Segurança e Repositório Usuários em BD Relacional'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-2644138615143760103</id><published>2010-12-13T14:39:00.000-08:00</published><updated>2010-12-14T13:16:30.264-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringMVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringRoo'/><title type='text'>Aplicando Segurança no Spring Roo através do Spring Security</title><content type='html'>Como aplicar/habilitar mecanismo de segurança em aplicativo desenvolvido com Spring Roo? Ou melhor, como usar &lt;a href="http://static.springsource.org/spring-security/site/"&gt;Spring Security&lt;/a&gt; com o &lt;a href="http://www.springsource.org/roo"&gt;Spring Roo&lt;/a&gt;? Esse post responde essas perguntas.&lt;br /&gt;&lt;br /&gt;A instalação e configuração do Spring Security é a mesma de um aplicativo que já usa &lt;a href="http://www.springsource.org/webflow"&gt;Spring Web MVC&lt;/a&gt;. MAS o pulo do gato é resolver isso através do shell do Spring Roo, com mais um comando esperto.&lt;br /&gt;&lt;br /&gt;Comece &lt;a href="http://static.springsource.org/spring-roo/reference/html/beginning.html#beginning-step-1"&gt;definindo a estrutura do aplicativo no Spring Roo&lt;/a&gt;, depois execute o comando:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;_&amp;gt; security setup&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Altere o arquivo applicationContext-security.xml indicando o padrão de url que aciona o mecanismo de segurança segurança, por exemplo:&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;intercept-url pattern="/pastaProtegida/**" access="isAuthenticated()" /&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pronto! É só empacotar [&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;perform package&lt;/span&gt;] e rodar a aplicação [&lt;code class="plain plain"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;mvn tomcat:run&lt;/span&gt;]&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mas... o que o Roo faz por trás das cortinas?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Primeiro configura a dependência do Spring Security (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;pom.xml&lt;/span&gt;);&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Depois cria um arquivo xml com as diretrizes de segurança: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;applicationContext-security.xml&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="xml" name="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;http auto-config="true" use-expressions="true"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;form-login &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;login-processing-url="/resources/j_spring_security_check" &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;login-page="/login" &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;authentication-failure-url="/login?login_error=t"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;logout logout-url="/resources/j_spring_security_logout"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- primeiro so admin, segundo qualquer autenticado, terceiro e quarto nao precisa de login --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;intercept-url pattern="/restrito/**" access="isAuthenticated()" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;intercept-url pattern="/free/**" access="permitAll" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;intercept-url pattern="/**" access="permitAll" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/http&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- define o mecanismo de seguranca simples (estatico) com os usuarios: admin/admin e user/user --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;authentication-manager alias="authenticationManager"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;authentication-provider&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;password-encoder hash="sha-256"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;user-service&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;user name="admin" password="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918" authorities="ROLE_ADMIN"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;user name="user" password="04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb" authorities="ROLE_USER"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/user-service&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/authentication-provider&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/authentication-manager&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cria uma página com formulário de login:&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: x-small;"&gt;Trecho de&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; /WEB-INF/views/login.jspx &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form action="/static/resources/j_spring_security_check" method="POST"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="j_username"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;spring:message code="security_login_form_name" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/label&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input id="j_username" type='text' name='j_username' /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="j_password"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;spring:message code="security_login_form_password" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/label&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input id="j_password" type='password' name='j_password' /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Configura a página de login no arquivo view.xml (usado pelo &lt;a href="http://tiles.apache.org/"&gt;Tiles&lt;/a&gt;):&lt;/li&gt;&lt;/ul&gt;&lt;pre class="xml" name="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;definition extends="public" name="login"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;put-attribute name="body" value="/WEB-INF/views/login.jspx"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/definition&amp;gt;&amp;nbsp; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Declara o filtro do Spring Security (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;springSecurityFilterChain&lt;/span&gt;) no &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;web.xml&lt;/span&gt;:&lt;/li&gt;&lt;/ul&gt;&lt;pre class="xml" name="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter-name&amp;gt;springSecurityFilterChain&amp;lt;/filter-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter-class&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.springframework.web.filter.DelegatingFilterProxy&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/filter-class&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/filter&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Configura a página de login no &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;webmvc-config.xml&lt;/span&gt;:&lt;/li&gt;&lt;/ul&gt;&lt;pre class="xml" name="code"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;mvc:view-controller path="/login"/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Veja &lt;a href="http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html"&gt;mais sobre Spring Security&lt;/a&gt;.&lt;br /&gt;Veja também mais &lt;a href="http://blog.globalcode.com.br/search/label/Spring%20Roo"&gt;sobre Spring Roo no Globalcoders&lt;/a&gt; e &lt;a href="http://edermag.blogspot.com/search/label/SpringRoo"&gt;aqui no blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Spring Roo: Mais agilidade com qualidade!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-2644138615143760103?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/2644138615143760103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=2644138615143760103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2644138615143760103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2644138615143760103'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/12/aplicando-seguranca-no-spring-roo.html' title='Aplicando Segurança no Spring Roo através do Spring Security'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-5940892442524669192</id><published>2010-09-20T10:48:00.000-07:00</published><updated>2010-12-14T08:29:07.144-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='SpringRoo'/><title type='text'>Configurar DataSource [Hibernate + Oracle + Tomcat 6] aplicação c/ Spring Roo</title><content type='html'>Criar e configurar um aplicativo c/ &lt;a href="http://www.springsource.org/roo"&gt;Spring Roo&lt;/a&gt; para usar JPA c/ Hibernate no Oracle é muito simples. Pelo terminal no "prompt" do &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Roo&lt;/span&gt;, inicialmente, são 5 comandos:&lt;br /&gt;&lt;br /&gt;_&amp;gt; mkdir projetoteste&lt;br /&gt;_&amp;gt; cd projetoteste&lt;br /&gt;_&amp;gt; roo&amp;nbsp;&amp;nbsp;&amp;nbsp; //assumindo que o roo ja estava instalado&lt;br /&gt;_&amp;gt; project --toplevelPackage br.com.yaw&lt;br /&gt;_&amp;gt; persistence setup --provider HIBERNATE --database ORACLE --username eder --password 123&lt;br /&gt;&lt;br /&gt;Esse último comando vai gerar um warning com a informação de que não foi possível encontrar o jar do &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Oracle&lt;/span&gt; no repositório &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;, a instalação do driver será manual.&lt;br /&gt;&lt;br /&gt;Na realidade o&lt;a href="http://static.springsource.org/spring-roo/reference/html/base-persistence.html#d4e1231"&gt; Roo define a conexão com o banco de dados&lt;/a&gt; dentro do aplicativo, veja os arquivos &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;META-INF/spring/database.properties&lt;/span&gt; e &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;META-INF/spring/applicationContext.xml&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Simples assim! Agora seria usar outros comandos para criar as entidades, controladores e as telas, executando por exemplo no &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Tomcat 6&lt;/span&gt;. &lt;a href="http://www.springsource.org/roo/start"&gt;Veja a demo do Roo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mas como utilizar um &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;DataSource &lt;/span&gt;definido no &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Tomcat&lt;/span&gt;? Nesse wiki algumas dicas de &lt;a href="http://wiki.apache.org/tomcat/UsingDataSources"&gt;como configurar o DataSource no Tomcat&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A forma mais dificil de configurar o &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;DataSource &lt;/span&gt;no projeto é ir ao arquivo &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;META-INF/spring/applicationContext.xml&lt;/span&gt; e substituir&amp;nbsp; a definição do bean dataSource [BasicDataSource] por:&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;property name="jndiName" value="java:comp/env/jdbc/MeuOracleDS"/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt; &lt;br /&gt;&lt;br /&gt;Ou via "prompt" do &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Roo &lt;/span&gt;no comando &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;persistence setup&lt;/span&gt;:&lt;br /&gt;_&amp;gt; persistence setup --provider HIBERNATE --database ORACLE --username eder --password 123 --jndiDataSource jdbc/MeuOracleDS&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-5940892442524669192?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/5940892442524669192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=5940892442524669192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5940892442524669192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5940892442524669192'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/09/configurar-datasource-hibernate-oracle.html' title='Configurar DataSource [Hibernate + Oracle + Tomcat 6] aplicação c/ Spring Roo'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-6539112708149628567</id><published>2010-09-14T11:49:00.000-07:00</published><updated>2010-12-13T14:30:24.511-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ws'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Consumir WebService com autenticação usando o wsimport</title><content type='html'>O &lt;a href="http://download.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html#Overview"&gt;wsimport&lt;/a&gt; é uma ferramenta bem simples, aquelas de linha de comando, disponibilizada no &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;jdk&lt;/a&gt;. Sua função é criar a infra-estrutura necessária para "consumir" Web Services a partir do &lt;a href="http://www.w3.org/TR/wsdl"&gt;wsdl&lt;/a&gt;, sem muita dor de cabeça. Na realidade o wsimport gera o código baseado no &lt;a href="https://jax-ws.dev.java.net/nonav/2.1.1/docs/customizations.html"&gt;JAX-WS&lt;/a&gt; resolvendo a burocracia para acionar o Web Service com o mínimo de esforço.&lt;br /&gt;&lt;br /&gt;Um exemplo de como usar o wsimport:&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;wsimport -p br.com.yaw.ws -s src -d bin http://url.servico/xpto?wsdl&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O parametro &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-p&lt;/span&gt;&lt;/span&gt; indica o pacote para a geração das classes java, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;-s&lt;/span&gt; o diretório dos fontes e &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-d&lt;/span&gt;&lt;/span&gt; conteúdo output (binário por exemplo). Por fim, o mais importante, a caminho do &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;wsdl&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;O código gerado não é complexo e depende só do jdk, sem a necessidade de outra API ou de algum container JEE. Simples assim, é só criar uma classe c/ main e com código acionando o webservice...&lt;br /&gt;&lt;br /&gt;De forma geral o wsimport gera uma classe &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: x-small;"&gt;Service&lt;/span&gt; que representa o webservice no cliente, factory do &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Proxy&lt;/span&gt;&lt;/span&gt; que faz a comunicação c/ o EndPoint.&lt;br /&gt;Um "pseudo-código" para consumir um catalogo de produtos seria:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;CatalogoProdutosService service = new CatalogoProdutosService();&lt;br /&gt;CatalogoProdutos proxy = service.getCatalogoProdutosPort();&lt;br /&gt;List&amp;lt;Produtoto&amp;gt; produtos = proxy.getProdutos();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;E se o EndPoint exige autenticação? Muito simples, o objeto &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Proxy&lt;/span&gt;&lt;/span&gt; (CatalogoProdutos é uma interface) também implementa BindingProvider que provê acesso ao protocolo e contexto vinculado. Através dela configuro o usuário e senha, o código ficaria:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;CatalogoProdutosService service = new CatalogoProdutosService();&lt;br /&gt;CatalogoProdutos proxy = service.getCatalogoProdutosPort();&lt;br /&gt;//dados para o login &lt;br /&gt;((BindingProvider)proxy).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "jose");((BindingProvider)proxy).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "123");&lt;br /&gt;List&amp;lt;Produtoto&amp;gt; produtos = proxy.getProdutos();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para usar Web Service com Http(s) primeiro é necessário &lt;a href="http://edermag.blogspot.com/2009/03/importar-certificado-jvm.html"&gt;importar o certificado&lt;/a&gt; e alterar a url do &lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;wsdl&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-6539112708149628567?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/6539112708149628567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=6539112708149628567' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6539112708149628567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6539112708149628567'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/09/consumir-webservice-com-autenticacao.html' title='Consumir WebService com autenticação usando o wsimport'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-6661801419267261397</id><published>2010-09-02T22:02:00.000-07:00</published><updated>2010-09-07T15:16:52.185-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Globalcode'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaFX'/><category scheme='http://www.blogger.com/atom/ns#' term='TDC'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='YaW'/><category scheme='http://www.blogger.com/atom/ns#' term='Gwt'/><title type='text'>A participação da YaW no TDC2010</title><content type='html'>Nos dias 20, 21 e 22 de Agosto aconteceu a 4a Edição do &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/index.html"&gt;The Developers  Conference, o TDC2010&lt;/a&gt;, evento de desenvolvedores para desenvolvedores, organizado pela &lt;a href="http://www.globalcode.com.br/home"&gt;Globalcode&lt;/a&gt;. Nesse  ano a Globalcode inovou trazendo &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/sp/programacao"&gt;variedade de assuntos com 13 trilhas&lt;/a&gt;, em parceria com  outras Empresas/Grupos/Profissionais Independentes, aumentando o &lt;i&gt;"menu"&lt;/i&gt; tornando o evento completo a um valor simbólico. E de quebra com transmissão online, favorecendo  principalmente o pessoal fora de SP.&lt;br /&gt;&lt;br /&gt;O evento foi incrível, uma mistura  fantástica de assuntos e comunidades em uma vibe bem interessante com muita troca de informação e networking, além da chance de rever vários amigos, quem  foi sabe o que estou falando. Pra quem não foi pode ter uma idéia do que  rolou nos diversos posts &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/sp/resumo"&gt;resumindo o que rolou&lt;span style="color: red;"&gt;&lt;/span&gt; no TDC2010&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Um detalhe que tornou nossa (eu e o &lt;a href="http://twitter.com/rafanunes"&gt;Rafael Nunes&lt;/a&gt;) participação ainda mais especial é que esse foi a nossa  primeira participação como &lt;a href="http://www.yaw.com.br/"&gt;YaW&lt;/a&gt;. Apoiamos e participamos de várias  palestras em diferentes trilhas como ouvintes e palestrantes  trocando um pouco de nossa experiencia com a galera. Outro ponto foi que no TDC2010 apresentamos mais 10 demonstrações, afinal evento de desenvolvedores nada melhor que código. &lt;br /&gt;&lt;br /&gt;Na sexta logo após a abertura do evento, apresentei a primeira  palestra da &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/sp/trilha-javaee"&gt;Trilha de JavaEE&lt;/a&gt; falando sobre a evolução do JSF, melhorias e  o amadurecimento da versão 2.0 com a possibilidade de adotar suítes de  componentes customizadas. Fiz demonstrações com as suites PrimeFaces,  RichFaces e ICEFaces todas incorporadas ao &lt;a href="http://blog.globalcode.com.br/search/label/SCrumToys"&gt;ScrumToys&lt;/a&gt;. Na sequência o  Rafael apresentou como desenvolver com JSF no Google App Engine.&lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_5059164" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/edermag/jsf2-tirando-prove" title="JSF2 c/ PrimeFaces, RichFaces e ICEfaces"&gt;JSF2 c/ PrimeFaces, RichFaces e ICEfaces&lt;/a&gt;&lt;/b&gt;&lt;object height="355" id="__sse5059164" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsf2primefacesrichfacesicefaces-100826052650-phpapp02&amp;stripped_title=jsf2-tirando-prove" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5059164" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jsf2primefacesrichfacesicefaces-100826052650-phpapp02&amp;stripped_title=jsf2-tirando-prove" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/edermag"&gt;Eder Magalhães&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;A tarde, na &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/sp/trilha-spring"&gt;Trilha de Spring&lt;/a&gt;, apresentei palestra falando sobre  opções de desenvolvimento RIA com o Spring Framework junto com o Rafael.  Comentei sobre o &lt;a href="http://code.google.com/intl/webtoolkit/webtoolkit/"&gt;GWT&lt;/a&gt;, pontos fortes e fracos, e de como ele poderia ser  integrado ao Spring em mais de uma opção de arquitetura com uma  demonstração usando &lt;span id="goog_908367205"&gt;&lt;/span&gt;&lt;a href="http://technophiliac.wordpress.com/2008/08/24/giving-gwt-a-spring-in-its-step/"&gt;GwtRPCController&lt;/a&gt;. O Rafael demonstrou como é possível integrar Adobe Flex com Spring MVC.&lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_5068045" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/edermag/spring-riacomgwt" title="Desenvolvimento RIA com GWT e Spring"&gt;Desenvolvimento RIA com GWT e Spring&lt;/a&gt;&lt;/b&gt;&lt;object height="355" id="__sse5068045" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=spring-ria-com-gwt-100827082555-phpapp01&amp;stripped_title=spring-riacomgwt" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5068045" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=spring-ria-com-gwt-100827082555-phpapp01&amp;stripped_title=spring-riacomgwt" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/edermag"&gt;Eder Magalhães&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Depois disso, na &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/sp/trilha-mobile"&gt;Trilha Mobile&lt;/a&gt;, assisti a palestra do amigo &lt;a href="http://twitter.com/fribeiro1"&gt;Fernando  Ribeiro&lt;/a&gt; contando um pouco dos desafios e as  oportunidades desenvolvimento BlackBerry para o mercado  Corporativo com muito bom humor e riqueza de conteúdo, característico do Fribeiro. Ainda na trilha Mobile, no fim do dia, rolou um painel  com representantes das principais plataformas mobile e o ponto de  vista de cada um em relação a oportunidades e inovação.&lt;br /&gt;&lt;br /&gt;Já no sábado pela manhã, assisti algumas palestras na &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/sp/trilha-nosql"&gt;Trilha de  NOSQL&lt;/a&gt;, como leigo no assunto estou naquela fase de descoberta e  novidades. Valeu muito para adquirir um pouco mais de conhecimento além de pegar várias dicas e referências para estudo. Depois do almoço, na &lt;a href="http://www.thedevelopersconference.com.br/tdc/2010/sp/trilha-java"&gt;Trilha Java&lt;/a&gt;, apresentei  uma palestra sobre JavaFX partindo de um ponto de vista &lt;i&gt;divertido&lt;/i&gt;, aonde  destrinchei um jogo de Quebra-Cabeças aonde as peças são montadas dinâmicamente a partir de uma imagem. Não poderia faltar algo mais  "corporativo", demonstrei um CRUD puro com JavaFX, um outro exemplo de  CRUD usando JPA reaproveitando uma estrutura em Java e por fim um  exemplo de integração com serviço na Web no Google App Engine acessado via REST.&lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_5087768" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/edermag/javafx-abordagem-prtica" title="JavaFX: Abordagem Prática"&gt;JavaFX: Abordagem Prática&lt;/a&gt;&lt;/b&gt;&lt;object height="355" id="__sse5087768" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=javafxabordagempratica-100830055107-phpapp01&amp;stripped_title=javafx-abordagem-prtica" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5087768" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=javafxabordagempratica-100830055107-phpapp01&amp;stripped_title=javafx-abordagem-prtica" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/edermag"&gt;Eder Magalhães&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Depois assisti uma ótima palestra sobre linguagens dinâmicas na JVM, onde fui apresentado ao &lt;a href="http://blog.globalcode.com.br/2010/08/php-mais-uma-alternativa-na-plataforma.html"&gt;Quercus&lt;span style="color: red;"&gt;&lt;/span&gt; &lt;/a&gt;uma alternativa de integrar PHP com Java, apresentado pelo &lt;a href="http://twitter.com/jeffprestes"&gt;Jefferson Prestes&lt;/a&gt;. Pra fechar o dia uma passada rápida na Trilha de Ruby, e mais bate-papo com amigos que encontrei no evento.&lt;br /&gt;&lt;br /&gt;Já no Domingo não estive presente fisicamente acompanhei o TDC2010  pelo twitter. Aliás a hash &lt;a href="http://twitter.com/#search?q=%23tdc2010"&gt;#TDC2010&lt;/a&gt; foi um sucesso no twitter, ficamos  até no &lt;a href="http://twitter.com/TrendsBR/status/21826799979"&gt;TrendsBR&lt;/a&gt;, um ótimo foto on-line do evento outra  oportunidade para quem não foi acompanhar o que estava rolando!&lt;br /&gt;&lt;br /&gt;O TDC2010 foi único, gostei a definição/analogia que o Jorge Diz fez &lt;a href="http://twitter.com/jorgediz/status/21931748627"&gt;aqui&lt;/a&gt;. Deixou saudades!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-6661801419267261397?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/6661801419267261397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=6661801419267261397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6661801419267261397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6661801419267261397'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/09/participacao-da-yaw-no-tdc2010.html' title='A participação da YaW no TDC2010'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-7652862314687546651</id><published>2010-06-18T08:27:00.000-07:00</published><updated>2010-06-18T08:27:55.539-07:00</updated><title type='text'>i18n de Portlets em JSF e JSP com JSTL</title><content type='html'>Existem várias formas p/ internacionalizar labels no desenvolvimento de Portlets, no post comento sobre 2 alternativas: básico com JSP e JSTL, outra opção é JavaServer Faces.&lt;br /&gt;&lt;br /&gt;No caso de JSP e JSTL é só usar as tags &lt;a href="http://download.oracle.com/docs/cd/E17477_01/javaee/1.4/tutorial/doc/JSTL6.html"&gt;&lt;i&gt;fmt:setBundle&lt;/i&gt; e fmt:&lt;i&gt;message&lt;/i&gt; da taglib de formatação&lt;/a&gt;, da mesma forma que uma aplicação web comum (sem portlets).&lt;br /&gt;&lt;br /&gt;E o JavaServer Faces?&lt;br /&gt;&lt;br /&gt;O mecanismo nativo de i18n do JSF funciona para portlets, é só definir os idiomas suportados no faces-config.xml, usar a tag &lt;i&gt;f:loadBundle&lt;/i&gt; e por fim outputText e/ou outputFormat indicando o bundle e chave da label.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Em ambas alternativas, JSF ou JSP/JSTL, existe uma limitação: o &lt;i&gt;title&lt;/i&gt; do portlet, que &lt;a href="http://jcp.org/aboutJava/communityprocess/review/jsr168/"&gt;normalmente é definido no descritor portlet.xml&lt;/a&gt;, não se encaixa nos modelos de i18n descritos.&lt;br /&gt;&lt;br /&gt;A solução é bem simples, no caso do JSTL a alternativa que encontrei foi apelar para a própria API de Portlets. No portlet.xml mapeio como &lt;i&gt;title&lt;/i&gt; a chave que corresponde ao título no arquivo de i18n, já no código java do portlet sobreescrevo o método &lt;a href="http://portals.apache.org/pluto/portlet-api/apidocs/javax/portlet/GenericPortlet.html#getTitle%28javax.portlet.RenderRequest%29"&gt;&lt;i&gt;getTitle&lt;/i&gt; (herança de GenericPortlet)&lt;/a&gt; pegando a informação do xml e &lt;i&gt;na raça&lt;/i&gt; acessando o bundle indicando a chave, o código seria próximo a esse:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;portlet.xml&lt;/span&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;portlet-app ... &amp;gt;&lt;br /&gt;  &lt;br /&gt;    &amp;lt;portlet&amp;gt;&lt;br /&gt;      ...&lt;br /&gt;&lt;br /&gt;      &amp;lt;portlet-info&amp;gt;&lt;br /&gt;        &amp;lt;title&amp;gt;meu.portlet.titulo&amp;lt;/title&amp;gt;&lt;br /&gt;      &amp;lt;/portlet-info&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/portlet&amp;gt;&lt;br /&gt;&lt;br /&gt;    ...&lt;br /&gt;  &amp;lt;/portlet-app&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;messages_pt_BR.properties:&lt;/span&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;...&lt;br /&gt;  meu.portlet.titulo=Testando i18n em Portlet c/ JSTL&lt;br /&gt;  ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;trecho do código java do Portlet:&lt;/span&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;protected String getTitle(RenderRequest request) {&lt;br /&gt;    String key = super.getTitle(request);&lt;br /&gt;    try {&lt;br /&gt;      ResourceBundle bundle = ResourceBundle.getBundle("messages",&lt;br /&gt;          request.getLocale(),getClass().getClassLoader());&lt;br /&gt;      return bundle.getString(key);&lt;br /&gt;    } catch (Exception ex) {&lt;br /&gt;      //log4j&lt;br /&gt;      log.error("Valor ["+key+"] (i18n) p/ titulo nao encontrado", ex);&lt;br /&gt;      return key;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A solução no JSF é mais simples! Coloque a chave &lt;i&gt;javax.portlet.title&lt;/i&gt; com o respectivo valor dentro do arquivo de i18n do aplicativo. Mas existe um macete, no portlet.xml também é preciso indicar o arquivo i18n e os idiomas suportados. A seguir um exemplo de como isso é feito.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;messages_pt_BR.properties:&lt;/span&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;...&lt;br /&gt;  javax.portlet.title=Testando i18n em Portlet c/ JSF&lt;br /&gt;  ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;portlet.xml &lt;/span&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;portlet-app ... &amp;gt;&lt;br /&gt;  &lt;br /&gt;    &amp;lt;portlet&amp;gt;&lt;br /&gt;      ...&lt;br /&gt;&lt;br /&gt;      &amp;lt;supported-locale&amp;gt;pt_BR&amp;lt;/supported-locale&amp;gt;&lt;br /&gt;      &amp;lt;supported-locale&amp;gt;en_US&amp;lt;/supported-locale&amp;gt;&lt;br /&gt;      &amp;lt;resource-bundle&amp;gt;messages&amp;lt;/resource-bundle&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/portlet&amp;gt;&lt;br /&gt;&lt;br /&gt;    ...&lt;br /&gt;  &amp;lt;/portlet-app&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Importante: Sobre o que foi descrito em relação a JSF, o portlet roda no JBoss Portal com JBoss Portlet Bridge.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-7652862314687546651?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/7652862314687546651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=7652862314687546651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7652862314687546651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7652862314687546651'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/06/i18n-de-portlets-em-jsf-e-jsp-com-jstl.html' title='i18n de Portlets em JSF e JSP com JSTL'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-415401554000843227</id><published>2010-05-05T20:56:00.000-07:00</published><updated>2010-09-02T22:08:38.020-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Globalcode'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='YaW'/><category scheme='http://www.blogger.com/atom/ns#' term='Artigo'/><title type='text'>Aprendendo JSF 2.0 com ScrumToys na JavaMagazine - edição 78</title><content type='html'>Já esta nas bancas a&lt;a href="http://www.devmedia.com.br/javamagazine/"&gt; Java Magazine edição numero 78&lt;/a&gt; com artigo (da capa) &lt;a href="http://www.devmedia.com.br/post-16559-JSF-2-0.html"&gt;JSF 2.0: Aprendendo JSF 2.0 com ScrumToys&lt;/a&gt; escrito por mim e pelo Vinicius Nunes, instrutor da Globalcode de Floripa.&lt;br /&gt;&lt;br /&gt;A proposta do artigo é comentar sobre as mudanças do JSF 2, mas além disso uma preocupação nossa foi colocar conteúdo para quem ainda não teve contato com a tecnologia, seja profissional experinte ou iniciante. É que o artigo ficou um pouquinho grande (rs).&lt;br /&gt;&lt;br /&gt;Para mostrar a implementação dos recursos do JSF utilizamos os fontes do &lt;a href="http://blog.globalcode.com.br/2009/10/jsf-20-e-scrumtoys.html"&gt;ScrumToys&lt;/a&gt;, criado justamente para o aprendizado na tecnologia.&lt;br /&gt;&lt;br /&gt;No &lt;a href="http://blog.globalcode.com.br/"&gt;blog da Globalcode&lt;/a&gt; fiz uma experiencia, usei o &lt;a href="http://www.primefaces.org/"&gt;PrimeFaces &lt;/a&gt;com JSF 2. Na realidade configurei o &lt;a href="http://blog.globalcode.com.br/2010/03/primefaces-com-jsf2-no-scrumtoys.html"&gt;PrimeFaces no ScrumToys&lt;/a&gt; e utilizei o datatable, fácil, simples e funcionou perfeitamente!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-415401554000843227?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/415401554000843227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=415401554000843227' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/415401554000843227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/415401554000843227'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/05/aprendendo-jsf-20-com-scrumtoys-na.html' title='Aprendendo JSF 2.0 com ScrumToys na JavaMagazine - edição 78'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-419896504427479986</id><published>2010-04-25T19:39:00.000-07:00</published><updated>2010-04-26T10:53:18.327-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Configurando o Hibernate 3.5 com Maven</title><content type='html'>No fim do mês de Março foi lançado o Hibernate 3.5 com novas funcionalidades e a partir dessa versão compatível a &lt;a href="http://jcp.org/en/jsr/detail?id=317"&gt;JPA2&lt;/a&gt;, agora um concorrente ao &lt;a href="http://www.eclipse.org/eclipselink/"&gt;EclipseLink a implementação de referência&lt;/a&gt;. No &lt;a href="http://www.globalcode.com.br/noticias/jsf2scrumdemo"&gt;ScrumToys - projeto da Globalcode exemplo no Netbeans 6.8 -&lt;/a&gt; utilizamos o EclipseLink como provider JPA.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maven.apache.org/what-is-maven.html"&gt;O Maven simplifica bastante a vida do desenvolvedor java&lt;/a&gt;, isso é indiscutível afinal ficar controlando dependências &lt;i&gt;na mão&lt;/i&gt; ficou fora de moda a um  tempo. Mesmo quem esta começando usar Java pode tornar essa experiencia mais produtiva, mão na massa sem se preocupar com a burocracia dos jars.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://docs.jboss.org/hibernate/stable/core/reference/en/html/tutorial.html#tutorial-firstapp-setup"&gt;documentação do Hibernate mostra a configuração exemplo de projeto usando o maven&lt;/a&gt;, mas esse mapeamento não funciona por não definir a tag version na dependency, por isso montei um exemplo de pom.xml para utilizar o Hibernate 3.5:&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;&lt;br /&gt;  &amp;lt;groupId&amp;gt;br.com.globalcode&amp;lt;/groupId&amp;gt;&lt;br /&gt;  &amp;lt;artifactId&amp;gt;hibernate-exemplo&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;&lt;br /&gt;  &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;&lt;br /&gt;  &amp;lt;name&amp;gt;hibernate-exemplo&amp;lt;/name&amp;gt;&lt;br /&gt;  &amp;lt;url&amp;gt;http://maven.apache.org&amp;lt;/url&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;repositories&amp;gt;&lt;br /&gt;    &amp;lt;repository&amp;gt;&lt;br /&gt;        &amp;lt;url&amp;gt;http://repository.jboss.com/maven2/&amp;lt;/url&amp;gt;&lt;br /&gt;        &amp;lt;id&amp;gt;hibernate-support&amp;lt;/id&amp;gt;&lt;br /&gt;        &amp;lt;layout&amp;gt;default&amp;lt;/layout&amp;gt;&lt;br /&gt;        &amp;lt;name&amp;gt;Repository for library Library[hibernate-support]&amp;lt;/name&amp;gt;&lt;br /&gt;    &amp;lt;/repository&amp;gt;&lt;br /&gt;  &amp;lt;/repositories&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;dependencies&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;hibernate-annotations&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;3.5.0-Final&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;hibernate-core&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;3.5.0-Final&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;org.hibernate&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;hibernate-entitymanager&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;3.5.0-Final&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;javassist&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;javassist&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;3.8.0.GA&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;slf4j-log4j12&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;1.5.10&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;mysql&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;mysql-connector-java&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;5.0.5&amp;lt;/version&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;3.8.1&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;    &amp;lt;/dependency&amp;gt;&lt;br /&gt;  &amp;lt;/dependencies&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Agora é só mandar bala com recursos do hibernate.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-419896504427479986?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/419896504427479986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=419896504427479986' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/419896504427479986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/419896504427479986'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/04/configurando-o-hibernate-35-com-maven.html' title='Configurando o Hibernate 3.5 com Maven'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-8743817422804390569</id><published>2010-01-24T14:29:00.000-08:00</published><updated>2010-04-26T10:52:36.062-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pessoal'/><category scheme='http://www.blogger.com/atom/ns#' term='Globalcode'/><category scheme='http://www.blogger.com/atom/ns#' term='YaW'/><title type='text'>2009 passou voando! Mas relembrando...</title><content type='html'>O começo de 2009 foi um tanto quanto apreensivo, a expectativa sobre os impactos da crise econômica por aqui eram preocupantes. Ainda bem que as previsões mais pessimistas ficaram pra trás e de uma forma geral conseguimos passar por essa turbulência.&lt;br /&gt;&lt;br /&gt;Pra mim 2009 começou com &lt;b&gt;mudança&lt;/b&gt; de emprego, quem me conhece sabe que isso é um pouco difícil mim. Novos desafios, ambiente mais complexo, tecnologias diferentes, uma equipe de alto nível técnico entre outros, foram os motivadores para encarar essa nova jornada na Superbid.&lt;br /&gt;&lt;br /&gt;Mão na massa, trabalhei com as seguintes tecnologias em diversos projetos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spring MVC&lt;/li&gt;&lt;li&gt;GWT&lt;/li&gt;&lt;li&gt;JBoss Portal&lt;/li&gt;&lt;li&gt;JBoss Bridge&lt;/li&gt;&lt;li&gt;JSF 1.2 c/ RichFaces&lt;/li&gt;&lt;li&gt;Python - Genshi&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Alguns legados em PHP e PL-SQL.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Na &lt;a href="http://www.globalcode.com.br/"&gt;Globalcode&lt;/a&gt; 2009 foi um ano incrível, repleto de &lt;b&gt;realizações&lt;/b&gt;. Trabalhei c/ muitas turmas, conheci pessoas de diferentes perfis e espectativas em relação tecnologia Java. Foram turmas de &lt;a href="http://www.globalcode.com.br/site/treinamentos/carreira.seam?id=779"&gt;Academia Java&lt;/a&gt;, &lt;a href="http://www.globalcode.com.br/site/treinamentos/carreira.seam?id=725"&gt;Academia Web Developer&lt;/a&gt;, &lt;a href="http://www.globalcode.com.br/site/treinamentos/handson.seam"&gt;hands-on&lt;/a&gt; e vários &lt;a href="http://www.globalcode.com.br/site/gratuitos/miniCursos.seam"&gt;minicursos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A Globalcode promoveu vários eventos para comunidade Java, estive presente em todos em alguns apresentei algum tema:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.profissaojava.com.br/profissaoJava2009.seam"&gt;Profissão Java&lt;/a&gt;: primeiro evento sobre carreira voltado ao profissional que trabalha ou                 quer trabalhar com Java, com palestrantes apresentando conteúdo de ponta (ex.: TV Digital) em alto nível para comunidade. Evento gratuito!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.thedevelopersconference.com.br/opentdc/2009/sp/index.seam"&gt;Open TDC&lt;/a&gt;: outro evento gratuito, que aconteceu em Sampa e Floripa! O evento contou com importantes figuras da comunidade de desenvolvimento, com palestras de diversos temas e qualidade de ponta. Apresentei junto com o Rafael Nunes e o Mauricio Leal uma Painel sobre opções RIA p/ Web: &lt;i&gt;&lt;b&gt;JavaFX, Adobe Flex e GWT&lt;/b&gt;&lt;/i&gt;. O Vinicius apresentou os projetos relacionados a &lt;a href="http://www.globalcode.com.br/site/treinamentos/curso.seam?id=765"&gt;Robótica da Globalcode&lt;/a&gt;, além do novo treinamento: &lt;a href="http://www.globalcode.com.br/site/treinamentos/carreira.seam?id=747"&gt;Academia do Programador&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.thedevelopersconference.com.br/tdc/2009/sp/programacao.seam"&gt;TDC&lt;/a&gt; : o maior e principal evento Java do país, trouxe em sua terceira edição palestrantes internacionais de peso da Sun, Oracle, Google e JBoss. Apresentei uma Lightning Talk sobre as tecnologias open da Google para desenvolvimento Java: &lt;i&gt;&lt;b&gt;GWT e Google Guice&lt;/b&gt;&lt;/i&gt;. &lt;a href="http://edermag.blogspot.com/2009/11/developers-conference-simplesmente.html"&gt;Aqui&lt;/a&gt; um resumo do evento que foi fantástico! Em 2009 além de São Paulo e Floripa, o TDC teve sua versão Guanabara, a estreia no Rio de Janeiro.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;A Globalcode retomou o Casual Class, que &lt;a href="http://www.casualclass.com.br/home.seam"&gt;promove um bate-papo descontraído sobre tecnologia c/ Pizza + Cerveja + Vinho&lt;/a&gt;. Uma oportunidade de aproximar e fomentar a comunidade! Vários assuntos em pauta, como JavaOne 2009, Robótica, Java EE 6 e Cloud Computing.&lt;br /&gt;&lt;br /&gt;Foi no Casual Class de &lt;a href="http://www.casualclass.com.br/edicoes/javaee6/index.seam"&gt;Java EE 6&lt;/a&gt; que fui apresentado ao &lt;a href="http://www.globalcode.com.br/site/noticias/painel.seam?chave=jsf2scrumdemo"&gt;Scrum Toys, projeto open source da Globalcode demo de JSF2 dentro Netbeans 6.8&lt;/a&gt;. Conversei com a Yara sobre algumas coisas interessantes que poderiam ser feitas no projeto como o suporte a &lt;i&gt;bookmarkable&lt;/i&gt;, c/ seu apoio abracei a causa colaborando com algumas features. Foi uma experiência enriquecedora, mais detalhes sobre minha participação &lt;a href="http://www.globalcode.com.br/site/noticias/painel.seam?chave=entrevistaScrumWhiteboard"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Bastante coisa, mas ainda tem mais. Em 2009 tive a oportunidade de &lt;b&gt;criar&lt;/b&gt; e apresentar 2 minicursos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.globalcode.com.br/site/gratuitos/minicurso.seam?id=715"&gt;Introdução ao Google Web Toolkit&lt;/a&gt;: conteúdo necessário para quem quer saber o que é ou iniciar o desenvolvimento com essa ótima alternativa para Rich Internet Application criado pelo Google. &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.globalcode.com.br/site/gratuitos/minicurso.seam?id=767"&gt;Introdução ao Google GO&lt;/a&gt;: apresentando características da nova linguagem do Google, explorando alguns recursos interessantes. O GO seria uma mistura de C++ e Python.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ainda mais próximo da comunidade de desenvolvimento, foi lançado o &lt;a href="http://blog.globalcode.com.br/"&gt;Globalcoders, o blog do time Globalcode&lt;/a&gt;. Um espaço &lt;b&gt;democrático&lt;/b&gt; para Informação + Colaboração + Discussão. Posts relacionados a tecnologia, num formato objetivo, claro e prático em uma linguagem de fácil compreensão. &lt;a href="http://blog.globalcode.com.br/search/label/Eder"&gt;Bloguei&lt;/a&gt; sobre Facelets com um post para &lt;a href="http://blog.globalcode.com.br/2009/08/facelets-uma-forma-mais-agil-para.html"&gt;uso de templates&lt;/a&gt; e outro para &lt;a href="http://blog.globalcode.com.br/2009/10/facelets-ainda-mais-divertido-parte-ii.html"&gt;criação de componentes&lt;/a&gt;. Outro post foi um pouco de &lt;a href="http://blog.globalcode.com.br/2009/11/compilador-gwt-nao-se-preocupe-com.html"&gt;como funciona o compilador (mágico) do GWT&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Uma dica bem legal é a lista do time Globalcode no &lt;a href="http://twitter.com/globalcode/globalcode-team"&gt;twitter&lt;/a&gt;. Ótima oportunidade pra ficar pro dentro das &lt;b&gt;novidades&lt;/b&gt; que estão rolando e no que estamos trabalhando.&lt;br /&gt;&lt;br /&gt;A Globalcode disponibilizou um vídeo bem legal com um resumo, ou melhor uma &lt;a href="http://www.globalcode.com.br/site/noticias/painel.seam?chave=feliz2010"&gt;retrospectiva 2009&lt;/a&gt; e de quão &lt;b&gt;intenso&lt;/b&gt; foi esse ano.&lt;br /&gt;&lt;br /&gt;E pra encerrar iniciamos a realização de um projeto que há tempos vinhamos planejando, a &lt;a href="http://www.yaw.com.br/"&gt;YaW&lt;/a&gt;! &lt;a href="http://www.globalcode.com.br/site/unidades/cursosjavaemabc.seam"&gt;Unidade da Globalcode no Grande ABC&lt;/a&gt;. Mas isso eu vou descrever em outro post.&lt;br /&gt;&lt;br /&gt;Expectativas para 2010 são as melhores, muita determinação e vontade pra enfrentar mais desafios! Trabalho e tesão não faltam.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/edermag"&gt;http://twitter.com/edermag&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yaw.com.br/"&gt;http://www.yaw.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-8743817422804390569?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/8743817422804390569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=8743817422804390569' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8743817422804390569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8743817422804390569'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2010/01/2009-passou-voando-mas-relembrando.html' title='2009 passou voando! Mas relembrando...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-3626709204225153669</id><published>2009-12-06T14:27:00.000-08:00</published><updated>2009-12-07T05:13:22.290-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GO'/><category scheme='http://www.blogger.com/atom/ns#' term='Programação'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Como Instalar Google GO no Ubuntu e Mac Os</title><content type='html'>Vou descrever quais são as etapas necessarias para instalação do &lt;b&gt;&lt;i&gt;&lt;a href="http://golang.org/"&gt;Google GO&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;, a nova linguagem de programação do Google, no &lt;b&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Ubuntu 9.10&lt;/span&gt;&lt;/b&gt; e no &lt;span style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Mac OS 10.5&lt;/b&gt; &lt;/span&gt;(Leopard).&lt;br /&gt;&lt;br /&gt;Pré-requisitos para instalar e usar o &lt;span style="font-family: Verdana,sans-serif;"&gt;GO&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mercurial.selenic.com/" style="font-family: Verdana,sans-serif;"&gt;Mercurial&lt;/a&gt;: ferramenta para controle de fontes (repositório) distribuído.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://gcc.gnu.org/" style="font-family: Verdana,sans-serif;"&gt;GCC&lt;/a&gt;: compilador &lt;span style="font-family: Verdana,sans-serif;"&gt;C&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;O &lt;span style="font-family: Verdana,sans-serif;"&gt;Python&lt;/span&gt; é pré-requisito para o &lt;span style="font-family: Verdana,sans-serif;"&gt;Mercurial&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Uma vez que essas ferramentas tenham sido instaladas, a proxima etapa seria configurar algumas variáveis de ambiente que o GO usa:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GOROOT&lt;/span&gt;: diretório raiz da instalação do &lt;span style="font-family: Verdana,sans-serif;"&gt;GO&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GOBIN&lt;/span&gt;: diretório com conteúdo binário.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GOOS&lt;/span&gt;: sistema operacional.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GOARCH&lt;/span&gt;: indica qual arquitetura para compilação.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;A próxima etapa seria baixar e compilar os fontes do &lt;span style="font-family: Verdana,sans-serif;"&gt;GO&lt;/span&gt;, depois é começar a programar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;b&gt;No Ubuntu&lt;/b&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Os comandos para instalação do &lt;span style="font-family: Verdana,sans-serif;"&gt;Mercurial&lt;/span&gt; e &lt;span style="font-family: Verdana,sans-serif;"&gt;GCC&lt;/span&gt; são:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ sudo apt-get install mercurial&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ sudo apt-get install bison gcc libc6-dev ed make&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Na sequencia é preciso criar a estrutura de diretórios e configurar as variáveis de ambiente (no arquivo&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; ~/.bashrc&lt;/span&gt;):&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ mkdir $HOME/go&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ mkdir $HOME/go/bin&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ mkdir $HOME/go/src&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;export GOROOT=$HOME/go/src&lt;br /&gt;export GOBIN=$HOME/go/bin&lt;br /&gt;export GOOS=linux&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;export GOARCH=386&lt;br /&gt;export PATH=$PATH:$HOME/go/bin&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Para baixar os fontes do &lt;span style="font-family: Verdana,sans-serif;"&gt;GO&lt;/span&gt;, use o seguinte comando:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Para compilar os fontes do &lt;span style="font-family: Verdana,sans-serif;"&gt;GO&lt;/span&gt; (a partir do dirétorio src):&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ cd $GOROOT/src&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ ./all.bash &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ambiente configurado no &lt;span style="font-family: Verdana,sans-serif;"&gt;Ubuntu&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;b&gt;No Mac OS&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Baixe o &lt;span style="font-family: Verdana,sans-serif;"&gt;Mercurial&lt;/span&gt; &lt;a href="http://mercurial.berkwood.com/"&gt;aqui&lt;/a&gt;, e instale o dmg.&lt;br /&gt;Caso ainda não tenha o &lt;span style="font-family: Verdana,sans-serif;"&gt;xCode&lt;/span&gt;, baixe &lt;a href="http://developer.apple.com/technology/xcode.html"&gt;aqui&lt;/a&gt; para resolver o &lt;span style="font-family: Verdana,sans-serif;"&gt;GCC&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;A seguir a criação das pastas e configuração das variáveis de ambiente no arquivo &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;.bash_profile&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ mkdir $HOME/go&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ mkdir $HOME/go/bin&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ mkdir $HOME/go/src&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;export GOROOT=$HOME/go/src&lt;br /&gt;export GOBIN=$HOME/go/bin&lt;br /&gt;export GOOS=darwin&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;export GOARCH=386&lt;br /&gt;export PATH=$PATH:$HOME/go/bin&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Para baixar os fontes do &lt;span style="font-family: Verdana,sans-serif;"&gt;GO&lt;/span&gt;, use o seguinte comando:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Para compilar os fontes do &lt;span style="font-family: Verdana,sans-serif;"&gt;GO&lt;/span&gt; (a partir do dirétorio src):&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ cd $GOROOT/src&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ ./all.bash &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pronto! Agora é só partir pro &lt;i&gt;Hello World&lt;/i&gt;, veja um &lt;a href="http://golang.org/doc/go_tutorial.html#tmp_17"&gt;exemplo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-3626709204225153669?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/3626709204225153669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=3626709204225153669' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/3626709204225153669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/3626709204225153669'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/12/como-instalar-google-go-no-ubuntu-e.html' title='Como Instalar Google GO no Ubuntu e Mac Os'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-8519478267189734321</id><published>2009-11-21T06:50:00.000-08:00</published><updated>2009-11-21T10:09:35.814-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Globalcode'/><category scheme='http://www.blogger.com/atom/ns#' term='TDC'/><title type='text'>The Developers Conference 2009 simplesmente incrivel!</title><content type='html'>Nos dias 06 e 07 de Novembro em São Paulo aconteceu &lt;b&gt;The Developers Conference 2009&lt;/b&gt;, terceira edição do maior e melhor evento Java do Brasil promovido e organizado pela &lt;a href="http://www.globalcode.com.br/"&gt;Globalcode&lt;/a&gt;. As 2 edições anteriores foram excelentes, mas esse ano o evento foi fantástico, com uma grade e palestrantes de altíssimo nível, como por exemplo Rod Johnson o pai/guru do Spring. &lt;br /&gt;&lt;br /&gt;O TDC 09 foi realizado também na Guanabara prestigiando o galera do Rio de Janeiro (&lt;a href="http://tecnologia.proac.uff.br/"&gt;UFF&lt;/a&gt;), depois de passar por Florianópolis (&lt;a href="http://www.voffice.com.br/"&gt;V.Office&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Outra novidade foram os &lt;b&gt;&lt;i&gt;Lightning Talks&lt;/i&gt;&lt;/b&gt;, apresentações rápidas (+ ou - 15 minutos) com demonstrações práticas que aconteceram no decorrer das palestras. Tive a oportunidade de apresentar sobre GWT e Guice, bem introdutório mas focando no quanto o Google aposta na comunidade Java.&lt;br /&gt;&lt;br /&gt;Falando um pouco mais sobre os palestrantes, além de Rod Johnson também tivemos a oportunidade de ver Mike Keith (&lt;i&gt;Oracle&lt;/i&gt;) co-líder da especificação de JPA, Ed Burns (&lt;i&gt;Sun&lt;/i&gt;) líder da especificação de JSF 2, Alejandro Guizer engenheiro de Software da &lt;i&gt;Red Hat&lt;/i&gt; e Francisco da &lt;i&gt;Google&lt;/i&gt; substituindo Chris Schalk, e outras personalidades da comunidade nacional. Foi uma oportunidade ímpar para fazer networking.&lt;br /&gt;&lt;br /&gt;As palestras superaram as expectativas! No primeiro dia, Rod Johnson em seu Keynote comentou sobre o &lt;i&gt;Futuro do Java EE&lt;/i&gt; como plataforma e as linguagens mais alto nível operando por cima, outra tendência é o Java como plataforma no universo &lt;i&gt;Cloud Computing&lt;/i&gt;. Na sequência Ed Burns, Mike e Rod comentaram um pouco sobre o início de suas vidas profissionais, depois passaram valiosas dicas para quem esta começando a traçar carreira.&lt;br /&gt;&lt;br /&gt;Na volta do almoço Mike Keith apresentou detalhes sobre o&lt;i&gt; Java EE 6&lt;/i&gt;, a plataforma cada vez mais robusta, madura e simples para o desenvolvimento dia-a-dia. Ed Burns apresentou a padronização da nova forma de criar telas com JSF2 abusando de reutilização e composição, &lt;i&gt;Composite Components&lt;/i&gt;. Na sequência Yara e Spock apresentaram o projeto demonstração do NetBeans e GlassFish mantido pela Globalcode, o &lt;i&gt;Scrum Toys&lt;/i&gt;, uma case mostrando a força da comunidade brasileira!&lt;br /&gt;&lt;br /&gt;Já no sábado fiquei muito empolgado com a palestra do Rod sobre o &lt;i&gt;Spring 3.0&lt;/i&gt;, a evolução da consagrada suite de tecnologias para desenvolvimento, o que mais me chamou a atenção foi &lt;i&gt;Spring Roo&lt;/i&gt; como uma alternativa para Rails. Depois do almoço Mike apresentou detalhes da especificação JPA 2.0, mostrou os novos recursos dessa JSR.&lt;br /&gt;&lt;br /&gt;Francisco (Google) e Rafael apresentaram sobre a plataforma Cloud do Google o &lt;i&gt;App Engine&lt;/i&gt;. Francisco comentando sobre a nova possibilidade de desenvolvimento de software com Cloud e um pouco da estratégia do Google nesse segmento. Rafael apresentou exemplo de como rodar JSF2 no Cloud, algo novo até então, outro ponto positivo pra comunidade brasileira! &lt;br /&gt;&lt;br /&gt;Fechando o evento tivemos o &lt;i&gt;Debate Cloud Computing na visão dos Players&lt;/i&gt;: Google (Francisco) + Oracle (Mike) + Sun (Ed) + Spring Source (Rod) + Yahoo (Bene) + JBoss Red Hat (Alejandro) mediado pelo Júlio (Globalcode). Esse bate-papo bem descontraído teve como objetivo mostrar do ponto de vista de cada um qual é a expectativa sobre o Cloud Computing, o que isso pode trazer como solução e/ou serviços para nós desenvolvedores.&lt;br /&gt;&lt;br /&gt;Gostei muitos dos Lightning Talks, principalmente "&lt;i&gt;Boas práticas com Spring&lt;/i&gt;" apresentado pelo Jun, "&lt;i&gt;WebBeans/Context Dependency Injection na prática com Weld&lt;/i&gt;" - novo Seam - da JBoss e "&lt;i&gt;Melhorando performance de JPA com Spring Web Flow&lt;/i&gt;" do Spock com dicas preciosas para o desenvolvimento com JSF.&lt;br /&gt;&lt;br /&gt;Durante o evento o Vinicius Senger despertou o lado Prof. Pardal da galera, apresentando vários Robôs usando o Arduíno, mostrando um pouco do que a Globalcode pretende realizar: como pode ser simples e divertido usar robótica, fique por dentro no blog &lt;a href="http://www.eletronlivre.com.br/"&gt;Elétron Livre&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;O evento foi incrível, além de muito conteúdo, networking e diversão tive a oportunidade de rever velhos amigos e conhecer pessoalmente grandes figuras como o Bene (Benedicto Franco) da Yahoo. Conheci o pessoal do Rio (Universidade Federal Fluminense) e uma galera de Uberlândia. No ano que vem vou estar presente nas versões do TDC!&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Vejas Fotos do Evento &lt;a href="http://picasaweb.google.com/comunidade.globalcode/TDC2009SaoPaulo"&gt;aqui&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.thedevelopersconference.com.br/tdc/2009/index.seam"&gt;Site&lt;/a&gt; do Evento&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-8519478267189734321?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/8519478267189734321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=8519478267189734321' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8519478267189734321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8519478267189734321'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/11/developers-conference-simplesmente.html' title='The Developers Conference 2009 simplesmente incrivel!'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-9215415767032738456</id><published>2009-10-17T20:29:00.000-07:00</published><updated>2009-10-17T20:56:28.706-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Client Subversion com Python</title><content type='html'>Existem vários clients e plugins disponíveis para acessar e manipular o respositório do &lt;a href="http://subversion.tigris.org/"&gt;subversion&lt;/a&gt;. Uma categoria de clients chamada &lt;font style="font-style: italic;"&gt;Subversion Language Bindings&lt;/font&gt; permite o acesso ao svn via API, com suporte a linguagens como Java, Python, C++, veja mais detalhes &lt;a href="http://subversion.tigris.org/links.html#bindings"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Abaixo um exemplo de código em Python usando o extensão &lt;a href="http://pysvn.tigris.org/"&gt;pysvn&lt;/a&gt; que faz uso desse mecanismo e monta um relatório da quantidade de recursos manipulados agrupados por Desenvolvedor/Autor e por Data.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="python"&gt;import sys, pysvn, re&lt;br /&gt;from datetime import date&lt;br /&gt;import datetime&lt;br /&gt;&lt;br /&gt;def repos(work_path):&lt;br /&gt;    "Get the svn repository url"&lt;br /&gt;    info = pysvn.Client().info(work_path)&lt;br /&gt;&lt;br /&gt;    if info.repos:&lt;br /&gt;        return info.repos&lt;br /&gt;&lt;br /&gt;    # special case - checked out the trunk&lt;br /&gt;    if info.url.endswith("/trunk"):&lt;br /&gt;        return re.sub(r"/trunk$", "", info.url)&lt;br /&gt;&lt;br /&gt;    # default to the current dir's url&lt;br /&gt;    return info.url&lt;br /&gt;&lt;br /&gt;def arg(index):&lt;br /&gt;    # find argument, if doesnt exists return None&lt;br /&gt;    args = sys.argv[1:]&lt;br /&gt;    try:&lt;br /&gt;        return args[index]&lt;br /&gt;    except IndexError:&lt;br /&gt;        return None&lt;br /&gt;&lt;br /&gt;def dayBeforeToday(d):&lt;br /&gt;    try:&lt;br /&gt;        diff = datetime.timedelta(days=int(d))&lt;br /&gt;        return date.today() - diff&lt;br /&gt;    except:&lt;br /&gt;        return None&lt;br /&gt;&lt;br /&gt;def query(repos, author, days):&lt;br /&gt;    print "get in: "+repos&lt;br /&gt;&lt;br /&gt;    logs = []&lt;br /&gt;    for l in pysvn.Client().log(repos, discover_changed_paths=True):&lt;br /&gt;        logs.append({"author": l["author"], "date": date.fromtimestamp(l["date"]), "changed_count": len(l["changed_paths"])})&lt;br /&gt;&lt;br /&gt;    if not (author in [None, "-", "." ]):&lt;br /&gt;        logs = list(filter_logs(logs, lambda k, v: k == "author" and v == author))&lt;br /&gt;&lt;br /&gt;    dt = dayBeforeToday(days)&lt;br /&gt;    if not (dt in [None, "-", ".",  "0"]):&lt;br /&gt;        logs = list(filter_logs(logs, lambda k, v: k == "date" and v &gt;= dt))&lt;br /&gt;&lt;br /&gt;    return logs&lt;br /&gt;&lt;br /&gt;def filter_logs(logs, where=lambda k, v: True):&lt;br /&gt;    #apply filter in log results&lt;br /&gt;    for l in logs:&lt;br /&gt;        for k, v in l.items():&lt;br /&gt;            if where(k, v):&lt;br /&gt;                yield l&lt;br /&gt;&lt;br /&gt;def format2cols(items):&lt;br /&gt;    if len(items) == 0:&lt;br /&gt;        return "\n"&lt;br /&gt;    max_width = max(len(str(x)) for (x,y) in items)&lt;br /&gt;    template = "%%%ds %%s" % max_width&lt;br /&gt;    return "\n".join(template % (x, y) for (x, y) in items)&lt;br /&gt;&lt;br /&gt;def sort_uniq_c(seq):&lt;br /&gt;    "Duplicate unix's 'sort | uniq -c | sort -nr'"&lt;br /&gt;    count_first = ((y,x) for (x,y) in histogram(seq, ["author", "date"]).items())&lt;br /&gt;    return format2cols(sorted(count_first, reverse=True))&lt;br /&gt;&lt;br /&gt;def histogram(logs, groupBy):&lt;br /&gt;    result = {}&lt;br /&gt;    for l in logs:&lt;br /&gt;        k = ""&lt;br /&gt;        for s in groupBy:&lt;br /&gt;            k += str(l[s])+" "&lt;br /&gt;        result.setdefault(k,0)&lt;br /&gt;        result[k] += l["changed_count"]&lt;br /&gt;&lt;br /&gt;    return result&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    _author = arg(1)&lt;br /&gt;    _days = arg(2)&lt;br /&gt;    print sort_uniq_c(query(repos(work_path = "."), _author, _days))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Na realidade usei &lt;a href="http://code.activestate.com/recipes/497011/"&gt;esse&lt;/a&gt; script python como base, nesse script além dos filtros por Autor e/ou Dias a contagem é realizada por resources no(s) commit, a saída é agrupada por autor e data de commit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-9215415767032738456?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/9215415767032738456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=9215415767032738456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/9215415767032738456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/9215415767032738456'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/10/client-subversion-com-python.html' title='Client Subversion com Python'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-3650093940885336867</id><published>2009-08-29T15:12:00.000-07:00</published><updated>2009-08-30T09:00:26.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlets'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss Seam'/><title type='text'>JSF e Portlets no JBoss Portal</title><content type='html'>Dias atrás estive envolvido em um "projeto case", com o propósito de experimentar a arquitetura de Portais e Portlets. O software portal escolhido foi o &lt;a href="http://www.jboss.org/jbossportal/"&gt;JBoss Portal&lt;/a&gt; versão 2.7, que além do &lt;span style="font-style: italic;"&gt;Portlet Container&lt;/span&gt; possui elementos bem interessantes, como o modulo de &lt;span style="font-style: italic;"&gt;CMS&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;Portlet Bridge&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;É possível instalar o JBoss Portal em JBoss AS existente. Fiz isso na versão 4.2, a única configuração necessária no meu caso foi o datasource do portal, mas isso pode ser mais complexo dependendo de como esta configuração de bibliotecas do servidor! A documentação é boa, existem vários exemplos de portlet e o próprio fonte do portal - implementado sob JSF e Hibernate - de fácil customização.&lt;br /&gt;&lt;br /&gt;Um recurso que me chamou a atenção foi o &lt;a href="http://labs.jboss.com/portletbridge/"&gt;JBoss Portlet Bridge&lt;/a&gt;, que permitir criar portlets utilizando JavaServer Faces (v 1.2) + &lt;a href="http://seamframework.org/"&gt;Seam&lt;/a&gt; + &lt;a href="http://www.jboss.org/richfaces"&gt;RichFaces&lt;/a&gt;, com suporte Facelets. Com isso é possível criar um aplicação composta por portlets com todos os benefícios do JSF, sem se preocupar com a API e curva de aprendizado de Portlet, PortletContainer e Portais.&lt;br /&gt;&lt;br /&gt;Montei um aplicativo relativamente simples, utilizando Facelets + RichFaces c/ JBoss Bridge, gerenciado pelo JBoss Portal dentro do JBoss AS 4.2. Nessa estrutura a programação é a mesma de um aplicativo &lt;span style="font-style: italic;"&gt;MVC&lt;/span&gt; comum, ou seja, criação de telas com Facelets usando as tags JSF e RichFaces, o Managed Bean resolvendo a integração do View com Model. Na camada model utilizei Pojos com &lt;a href="https://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;. O único portlet utilizado na aplicação foi o &lt;span style="font-family: courier new;"&gt;javax.portlet.faces.GenericFacesPortlet&lt;/span&gt;, e no JSF o ViewHandler &lt;span style="font-family: courier new;"&gt;org.jboss.portletbridge.application.PortletViewHandler&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Encontrei pequenos problemas nessa integração, principalmente com alguns componentes do RichFaces, mas todos foram revertidos. Acredito que &lt;span style="font-style: italic;"&gt;mistura&lt;/span&gt; tenha funcionado justamente por todos os componentes serem JBoss.&lt;br /&gt;&lt;br /&gt;Java EE define 2 especificações para portlet: &lt;a href="http://jcp.org/en/jsr/detail?id=168"&gt;JSR 168&lt;/a&gt;, &lt;a href="http://jcp.org/en/jsr/detail?id=286"&gt;JSR 286&lt;/a&gt;. O JBoss Portlet Bridge é um draft para outras 2 especificações a &lt;a href="http://jcp.org/en/jsr/detail?id=301"&gt;JSR 301&lt;/a&gt; e a &lt;a href="http://jcp.org/en/jsr/detail?id=329"&gt;JSR 329&lt;/a&gt; que visam padronizar a integração entre Portlet e JSF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-3650093940885336867?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/3650093940885336867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=3650093940885336867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/3650093940885336867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/3650093940885336867'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/08/jsf-e-portlets-no-jboss-portal.html' title='JSF e Portlets no JBoss Portal'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-1911465685641600913</id><published>2009-07-09T11:06:00.000-07:00</published><updated>2009-07-09T11:30:47.257-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBoss Seam'/><title type='text'>Seam Component x Contextos</title><content type='html'>Complementando o ótimo &lt;a href="http://blog.spock.com.br/2008/07/sobre-os-contextos-do-jboss-seam.html"&gt;post&lt;/a&gt; do Dr. Spock, na sequência coloco os tipos de &lt;span style="font-style: italic;"&gt;Seam Component&lt;/span&gt; e quais contextos do Seam podem ou devem ser usados:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Session Stateful (EJB) - por default &lt;em&gt;é&lt;/em&gt; mantido em &lt;span style="font-style: italic;"&gt;APPLICATION&lt;/span&gt;. Nunca devem ser associados a &lt;span style="font-style: italic;"&gt;STATELESS&lt;/span&gt; ou &lt;span style="font-style: italic;"&gt;PAGE&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Session Stateless (EJB) - sempre mantido em STATELESS. Toda cada vez que requisitado o Seam busca uma instância (lookup).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;JPA Entity class - por default &lt;em&gt;é&lt;/em&gt; mantido em &lt;span style="font-style: italic;"&gt;CONVERSATION&lt;/span&gt;, nunca devem ser usados em STATELESS já que em algum momento devem ser sincronizados na base de dados.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;JavaBean / POJO - por default ficam em &lt;span style="font-style: italic;"&gt;EVENT&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Message Driven Bean - atua como uma listerner para &lt;span style="font-style: italic;"&gt;Topic&lt;/span&gt; ou &lt;span style="font-style: italic;"&gt;Queue&lt;/span&gt;, não &lt;em&gt;é&lt;/em&gt; mantido em contexto Seam.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-1911465685641600913?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/1911465685641600913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=1911465685641600913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1911465685641600913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1911465685641600913'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/07/seam-component-x-contextos.html' title='Seam Component x Contextos'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-1972023870307441500</id><published>2009-07-05T20:49:00.000-07:00</published><updated>2010-04-26T10:54:38.909-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Testando Google Wave</title><content type='html'>Essa semana fui um dos vários convidados para testar o Google Wave. A ferramenta esta em fase de testes, vários ajustes e melhorias devem ser efetuados, na minha opn&lt;i&gt;ião&lt;/i&gt; o conceito da ferramenta  eh show de bola. Principalmente a ideia de plataforma aonde vc consegue criar/estender elementos e &lt;span style="font-style: italic;"&gt;rodar no wave&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Veja &lt;a href="http://code.google.com/intl/pt-BR/apis/wave/extensions/"&gt;essa&lt;/a&gt; p&lt;i&gt;á&lt;/i&gt;gina que comenta sobre extensões do Wave:&lt;br /&gt;&lt;br /&gt;Vc tem 2 alternativas para criar elementos para o Wave:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Robots - robô que atua como um participante/convidado de uma determinada Wave, como por exemplo um corretor ortográfico.&lt;/li&gt;&lt;li&gt;Gadgets - pequenos aplicativos que rodam dentro da Wave, e compartilham seu estado para todos os participantes da mesma Wave, como por exemplo um mapa com a rota para uma balada.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-1972023870307441500?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/1972023870307441500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=1972023870307441500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1972023870307441500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1972023870307441500'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/07/testando-google-wave.html' title='Testando Google Wave'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-7772982368806548357</id><published>2009-07-05T20:36:00.000-07:00</published><updated>2010-04-26T10:55:36.594-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBoss Seam'/><title type='text'>JBoss Seam Timeout Conversation</title><content type='html'>Essa semana estava fussando bastante no Seam, e de repente pintou uma questão:&lt;br /&gt;Qual é o timeout default do conversation caso o usuário não aciona uma requisição para o método @End? Será a mesma da Session?&lt;br /&gt;&lt;br /&gt;A resposta é &lt;span style="font-weight: bold;"&gt;10 minutos&lt;/span&gt; por default, encontrei isso no livro &lt;i&gt;Seam In Action &lt;/i&gt;(pag. 300), ótimo por sinal!&lt;br /&gt;&lt;br /&gt;Vc pode sobreescrever no &lt;span style="font-style: italic;"&gt;component.xml&lt;/span&gt;, usando a tag:&lt;br /&gt;core:manager timeout="600000"&lt;br /&gt;&lt;br /&gt;Uma outra opção é usar a property &lt;span style="font-style: italic;"&gt;timeout&lt;/span&gt; da tag page no mapeamento de view's (&lt;span style="font-style: italic;"&gt;pages.xml&lt;/span&gt;):&lt;br /&gt;page id="/cadastro.xhtml" timeout="300000"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-7772982368806548357?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/7772982368806548357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=7772982368806548357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7772982368806548357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7772982368806548357'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/07/jboss-seam-timeout-conversation.html' title='JBoss Seam Timeout Conversation'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-584475505605019006</id><published>2009-06-21T20:06:00.000-07:00</published><updated>2010-04-26T10:56:26.112-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Hibernate Performance</title><content type='html'>Ótima &lt;a href="http://www.infoq.com/presentations/Scaling-Hibernate-Emmanuel-Bernard-Max-Ross"&gt;apresentação&lt;/a&gt; do &lt;a href="http://blog.emmanuelbernard.com/"&gt;Emmanuel Bernard&lt;/a&gt; - co-autor de &lt;span style="font-style: italic;"&gt;Hibernate Search in Action&lt;/span&gt; - mostrando algumas práticas e observações para escalar c/ Hibernate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-584475505605019006?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/584475505605019006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=584475505605019006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/584475505605019006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/584475505605019006'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/06/hibernate-performance.html' title='Hibernate Performance'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-1877966389800446489</id><published>2009-06-14T20:12:00.000-07:00</published><updated>2010-04-26T10:57:13.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Thread'/><title type='text'>Concorrência - Iterar HashSet</title><content type='html'>Na sequência um exemplo de código que encapsula acesso a um &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html"&gt;HashSet&lt;/a&gt; de forma segura (nem tanto...):&lt;br /&gt;&lt;br /&gt;&lt;pre class="Java" name="code"&gt;public class IteracaoVulneravel {&lt;br /&gt;&lt;br /&gt;  private Set palavras = new HashSet();&lt;br /&gt;&lt;br /&gt;  public synchronized void removePalavra(String palavra) {&lt;br /&gt;    palavras.remove(palavra);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public synchronized void addPalavra(String palavra) {&lt;br /&gt;    palavras.add(palavra);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  //pode lançar java.util.ConcurrentModificationException&lt;br /&gt;  public void print() {&lt;br /&gt;    System.out.println("Palavras = "+palavras);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;O detalhe fica no método print, o compilador implicitamente cria código para navegar na coleção usando o &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html"&gt;Iterator&lt;/a&gt;, para realizar o print dos elementos. &lt;br /&gt;Durante a iteração no elementos ninguém garante que uma outra thread acione o método &lt;span style="font-style: italic;"&gt;addPalavra&lt;/span&gt;. Caso isso aconteça uma java.util.ConcurrentModificationException será lançada!&lt;br /&gt;&lt;br /&gt;Para evitar isso o recomendado seria sincronizar a coleção, &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Collections.html#synchronizedSet%28java.util.Set%29"&gt;veja&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Interessante observação do livro &lt;span style="font-weight: bold;"&gt;Java Concurrency in Practice&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-1877966389800446489?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/1877966389800446489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=1877966389800446489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1877966389800446489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1877966389800446489'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/06/concorrencia-interar-hashset.html' title='Concorrência - Iterar HashSet'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-1829797911518564341</id><published>2009-05-31T18:32:00.000-07:00</published><updated>2010-04-26T10:57:36.899-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Gwt'/><title type='text'>Extensões GWT</title><content type='html'>Essa semana estava finalizando a estrutura para o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;mini&lt;/span&gt;-curso de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Gwt&lt;/span&gt;, já esta quase fechado!&lt;br /&gt;Um outro detalhe interessante a respeito dessa tecnologia eh a possibilidade de criar ou usar bibliotecas/extensões de Componentes Visuais (UI), tornando  o desenvolvimento bem mais produtivo.&lt;br /&gt;&lt;br /&gt;Desenvolvendo com &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;gwt&lt;/span&gt; tive experiência com a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;extensão&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;GXT&lt;/span&gt;&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Gwt&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Ext&lt;/span&gt;&lt;/span&gt;  através do &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;gwt&lt;/span&gt; usa o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;framework&lt;/span&gt; javascript &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Ext&lt;/span&gt;, que sem duvida é uma suite bem completa e "rica". Veja o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;show&lt;/span&gt; case &lt;a href="http://extjs.com/explorer"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Essa semana encontrei uma outra alternativa um concorrente chamado &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;SmartGwt&lt;/span&gt;&lt;/span&gt;. Os componentes são bem parecidos com o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;GXT&lt;/span&gt;, mas na minha &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;opinião&lt;/span&gt; a grande vantagem é a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;licença&lt;/span&gt;, além de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;open&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;source&lt;/span&gt; o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;SmartGwt&lt;/span&gt; eh &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;LGPL&lt;/span&gt;. Compare, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;acesse&lt;/span&gt; o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;show&lt;/span&gt; case &lt;a href="http://www.smartclient.com/smartgwt/showcase/"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Gosto muito do conceito de bibliotecas visuais, provavelmente por usar essa ideia quando trabalhava com &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Delphi&lt;/span&gt;. Um outro exemplo que dispensa comentarios é o &lt;span style="font-weight: bold;"&gt;JSF&lt;/span&gt; que no seu core foi projeto para isso, confira &lt;a href="http://www.jsfmatrix.net/"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-1829797911518564341?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/1829797911518564341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=1829797911518564341' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1829797911518564341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1829797911518564341'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/05/extensoes-gwt.html' title='Extensões GWT'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-7257753604155056221</id><published>2009-05-24T19:13:00.000-07:00</published><updated>2010-04-26T10:58:52.315-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Globalcode'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Gwt'/><title type='text'>GWT no OpenTDC</title><content type='html'>&lt;a href="http://www.thedevelopersconference.com.br/opentdc/2009/sp/programacao.seam"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OpenTDC&lt;/span&gt;&lt;/a&gt; foi demais, só pra variar a &lt;a href="http://www.globalcode.com.br/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Globalcode&lt;/span&gt;&lt;/a&gt; detonando em mais um evento. Curti a palestra de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Arquiteturas&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;JSF&lt;/span&gt;, principalmente pela abordagem na &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;visão&lt;/span&gt; de sistemas corporativos, maiores. As palestras sobre &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Agile&lt;/span&gt; e TV Digital foram &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;show&lt;/span&gt; de bola!&lt;br /&gt;&lt;br /&gt;No fim do &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;eventou&lt;/span&gt; rolou um painel de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;JavaFX&lt;/span&gt;(&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;Maurício&lt;/span&gt; Leal), &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Flex&lt;/span&gt;(Rafael Nunes) e &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;GWT&lt;/span&gt;(Eu). Foi interessante falar do &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;GWT&lt;/span&gt; apesar do tempo ter ficado apertado.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;Parabéns&lt;/span&gt; pra &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Globalcode&lt;/span&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-7257753604155056221?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/7257753604155056221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=7257753604155056221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7257753604155056221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7257753604155056221'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/05/gwt-no-opentdc.html' title='GWT no OpenTDC'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-7770400778737613774</id><published>2009-05-24T18:41:00.000-07:00</published><updated>2009-05-24T19:28:49.325-07:00</updated><title type='text'>RIA pra cá, RIA pra lá...</title><content type='html'>Faz um certo &lt;a href="http://edermag.blogspot.com/2006/09/loucura-total_21.html"&gt;tempo&lt;/a&gt; que venho me dedicando bastante  em soluções RIA, principalmente em pesquisa e experimento das principais alternativas. Trabalhei em projetos c/ JSF (RichFaces - Facelets), Flex, e nos últimos dias com GWT, sem contar nas pesquisas e testes com JavaFx (nada em produção).&lt;br /&gt;&lt;br /&gt;Na minha opinião classifico o Flex e JavaFx trazem um conceito de RIA muito mais "rich" do que  boa parte das aplicações corporativas de hoje. Essas tecnologias tem um poder de iteratividade incrível, me questiono em relação a sistemas comuns, CRUD, "precisam dessa riqueza"? Acho que o JavaFX venha pra substituir a proposta Swing + Java WebStart, abraçando o mobile.&lt;br /&gt;&lt;br /&gt;Nenhuma dessas tecnologias resolve tudo (silver bullet), mas é interessante ter experiência aonde nossa tecnologia preferida, no meu caso especificamente o JSF, pode não ser a melhor solução para tal cenário. No ultimo projeto que atuei o escolhido foi o GWT, a equipe já tinha uma experiência com Swing, só pra variar o tempo era curto o risco grande e não tinha como cobrir o risco em adotar JSF sem nenhum contado anterior.&lt;br /&gt;&lt;br /&gt;Essa experiência foi interessante, além de aumentar o conhecimento, o melhor foi enxergar do outro lado do muro. Adquirir mais argumentos para comparações e levantar pontos fracos e fortes de ambos os lados. Um ponto interessante, precisa de um outro post, é qtde de legados e diversas opções que vão ficar por ai... Já pensou daqui uns 10 anos?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-7770400778737613774?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/7770400778737613774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=7770400778737613774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7770400778737613774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7770400778737613774'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/05/ria-pra-ca-ria-pra-la.html' title='RIA pra cá, RIA pra lá...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-8065915173436796090</id><published>2009-05-10T16:04:00.000-07:00</published><updated>2009-05-10T16:05:38.952-07:00</updated><title type='text'>De Java para Python</title><content type='html'>Algumas &lt;a href="http://wordoholic.com/blog/2009/04/java-python-different-parts"&gt;dicas&lt;/a&gt; que podem ajudar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-8065915173436796090?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/8065915173436796090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=8065915173436796090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8065915173436796090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8065915173436796090'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/05/de-java-para-python.html' title='De Java para Python'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-4421368773344610682</id><published>2009-05-01T08:35:00.000-07:00</published><updated>2010-04-26T11:01:52.923-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Globalcode'/><title type='text'>Open TDC 2009</title><content type='html'>&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;&lt;/span&gt;&lt;br /&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;Inscrições Abertas para o OpenTDC 2009 - Um Evento Java Gratuito realizado pela Globalcode com o objetivo de difundir o conhecimento e fortalecer ainda mais a comunidade de profissionais que trabalham com Java.&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); min-height: 14px; "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;O evento vai abordar algumas tendências em desenvolvimento como TV Digital, JavaFX e Flex, Arquiteturas Java EE com JSF, JBoss Seam e Spring e, também, uma palestra muito interessante sobre o uso de Java e Robótica aplicados à automação residencial e ao ensino de programação.&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); min-height: 14px; "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;Não perca tempo, inscreva-se e participe !&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); min-height: 14px; "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;Data: 17/05/2009 (Domingo)&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;Local: Universidade Anhembi Morumbi Campus Vila Olímpia. Rua Casa do Ator, 275, Itaim Bibi, São Paulo-SP&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(0, 54, 207); "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;&lt;span xsscleaned="color: #141414"&gt;Inscrições: &lt;a href="http://www.thedevelopersconference.com.br/opentdc/2009/sp" target="_blank"&gt;&lt;span xsscleaned="text-decoration: underline ; color: #0036cf"&gt;http://www.thedevelopersconference.com.br/opentdc/2009/sp&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(20, 20, 20); min-height: 14px; "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div xsscleaned="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; font: normal normal normal 12px/normal Arial; color: rgb(0, 54, 207); "&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;&lt;span xsscleaned="color: #141414"&gt;Outras informações: &lt;a href="http://www.globalcode.com.br/" target="_blank"&gt;&lt;span xsscleaned="text-decoration: underline ; color: #0036cf"&gt;http://www.globalcode.com.br&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;N&lt;/span&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;ã&lt;/span&gt;&lt;span xsscleaned="color: #141414"&gt;o perca!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" xsscleaned="color: rgb(20, 20, 20); font-family: 'Lucida Grande'; font-size: 11px; line-height: 14px; "&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-4421368773344610682?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/4421368773344610682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=4421368773344610682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/4421368773344610682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/4421368773344610682'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/05/open-tdc-2009.html' title='Open TDC 2009'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-4886176883736832235</id><published>2009-04-26T19:22:00.000-07:00</published><updated>2009-04-26T19:23:50.912-07:00</updated><title type='text'>Web Beans chegando...</title><content type='html'>Primeiro preview liberado!&lt;br /&gt;&lt;a href="http://in.relation.to/Bloggers/FirstPreviewOfWebBeansAvailable"&gt;Veja&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-4886176883736832235?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/4886176883736832235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=4886176883736832235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/4886176883736832235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/4886176883736832235'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/04/web-beans-chegando.html' title='Web Beans chegando...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-6794578839303677899</id><published>2009-04-18T11:22:00.000-07:00</published><updated>2009-06-14T17:35:27.736-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><title type='text'>Salvando entidades além do convencional</title><content type='html'>Outro dia encontrei algumas referencias comentando/procurando uma solução simples a respeito da persistência de entidades que possuem relacionamentos com certa complexidade (além do CRUD básico) com JPA/Hibernate, algo normal ao usar "domain model".&lt;br /&gt;&lt;br /&gt;Pra não voltar aos DTO's, uma abordagem - questionável é claro - seria usar o id do objeto de origem para resgatar uma outra instância sob o escopo do EntityManager/Session e setar os "pedaços"/dados modificados no objeto origem na referencia gerenciada.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;...&lt;br /&gt;//recuperando instância gerenciada&lt;br /&gt;Pedido pedidoGerenciado = getPedidoById(pedidoOrigem.getId());&lt;br /&gt;&lt;br /&gt;//passando informações desejadas...&lt;br /&gt;pedidoGerenciado.setDataEntrega(pedidoOrigem.getDataEntrega());&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ao encerrar a transação ou acionar o flush as alterações serão propagadas ao Banco.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-6794578839303677899?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/6794578839303677899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=6794578839303677899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6794578839303677899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6794578839303677899'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/04/outro-dia-encontrei-algumas-referencias.html' title='Salvando entidades além do convencional'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-8775214523088130896</id><published>2009-04-12T16:36:00.000-07:00</published><updated>2009-04-18T11:39:46.958-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vm'/><title type='text'>Sunday Reference</title><content type='html'>Domingão resolvi dar uma revisada na API do Java que trata referencias de objetos (Heap + GC). Semana passada me deparei com algumas delas nos testes que estava fazendo (post anterior).&lt;br /&gt;&lt;br /&gt;Na realidade brinquei um pouco as especializações de &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html"&gt;java.lang.ref.Reference&lt;/a&gt;. Representam o modelo de referencia de objetos do Java e influenciando a execução do Garbage Collector (GC). São elas:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html"&gt;WeakReference&lt;/a&gt;: um wrapper de uma referencia (qualquer objeto) "fraca", quando necessario o GC ira eliminar.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html"&gt;SoftReference&lt;/a&gt;: outro wrapper, mas numa situação intermediaria nem tao fraca e nem tao forte. Na pratica tem uma durabilidade maior do que weak, mas qdo necessario - se necessário - o GC vai eliminar. Uma alternativa interessante para cache.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html"&gt;PhantomReference&lt;/a&gt;: o wrapper mais "frágil", o objeto já recebeu sua doze letal sem chance de escapar da pena de morte. Não há recuperação, o método get sempre retorna null.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Além dessas 3, temos outras classes nessa API:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html"&gt;ReferenceQueue&lt;/a&gt;: mantém as referencias elegíveis enfileiradas.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/java/util/WeakHashMap.html"&gt;WeakHashMap&lt;/a&gt;: Map composto pela chave WeakReference e valor a referencia, que sabe eliminar a chave&lt;weakreference&gt; qdo o valor&lt;referencia&gt; for coletada pelo GC. Em outras coleções o WeakReference (ou os outros) não são removidos, apenas a referencia encapsulada.&lt;/referencia&gt;&lt;/weakreference&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Acesse o &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ref/package-summary.html#reachability"&gt;javadoc&lt;/a&gt; e confira.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-8775214523088130896?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/8775214523088130896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=8775214523088130896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8775214523088130896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8775214523088130896'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/04/sunday-reference.html' title='Sunday Reference'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-6743393517314742427</id><published>2009-04-11T12:26:00.000-07:00</published><updated>2009-04-18T11:40:27.053-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vm'/><title type='text'>JVM - "Caixa Preta"</title><content type='html'>Gerenciar e monitorar os componentes e recursos utilizados por uma aplicação é uma tarefa complexa. Descobrir a causa de OutOfMemory não é algo simples, vc pode encontrar varios sites comentando sobre o problema e tentando apresentar uma solucao. O  óbvio seria fazer uma analise da sua aplicação, mas como fazer um "top" para o Java?&lt;br /&gt;&lt;br /&gt;Pra isso temos o "profile", ferramente que monitora "de cabo a rabo" o que o aplicativo esta fazendo e consumindo. Na teoria a ferramenta é perfeita, mas na pratica o uso pode ser inviável. Alguns colegas até brincam dizendo que "profile é perfeito, desde que vc não use em produção"! Por mais que vc tenha replicas do ambiente de produção, uma ótima cobertura de testes de stress/utilização, infelizmente alguns comportamentos só ocorrem no ambiente real! E agora?&lt;br /&gt;&lt;br /&gt;Junto com a evolução da linguagem Java, a JVM também vem evoluindo bastante no quesito rastreabilidade e monitoramento, no Java 6 foram incorporadas algumas ferramentas com essas características. Na semana passada gastei um tempo estudando e testando algumas dessas ferramentas:&lt;br /&gt;- jmap: faz um dump dos objetos da memória em arquivo físico: &gt; jmap -dump:file=heap.bin&lt;br /&gt;- jhat: ferramenta usada para fazer analise do dump: &gt; jhat -J-mx512m heap.bin&lt;br /&gt;- VisualVM: ferramenta gráfica para acompanhar/monitorar sua aplicação durante a execução. Mais funcionalidades do que o JConsole.&lt;br /&gt;&lt;br /&gt;A partir da versão 6, é possível usar um parâmetro solicitando um "dump automático" da memória no caso de um OutOfMemory. Adicione o parâmetro &lt;em&gt;-XX:HeapDumpPath=path_to_file&lt;/em&gt; no comando java (avalie o custo).&lt;br /&gt;&lt;br /&gt;Tomara que com a evolução da plataforma no geral, essas ferramentas continuem melhorando, simplificando a vida de quem desenvolve e cuida do ambiente Java.&lt;br /&gt;&lt;br /&gt;Mas, em casos mais complexos talvez vc tenha que apelar para o Profile, pagando o preço. Atualmente estou trabalhando com o Introscope da CA, uma ferramenta bem completa com consumo razoável, funciona sem "derrubar" o servidor.&lt;br /&gt;&lt;br /&gt;Tive algumas experiencias com JProfile e YourKit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-6743393517314742427?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/6743393517314742427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=6743393517314742427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6743393517314742427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6743393517314742427'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/04/jvm-caixa-preta.html' title='JVM - &quot;Caixa Preta&quot;'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-5541311652871428626</id><published>2009-04-02T18:44:00.000-07:00</published><updated>2009-04-18T11:41:00.574-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>JSessionId em múltiplos contextos</title><content type='html'>Quando 2 aplicações dentro de um mesmo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;host&lt;/span&gt;/domínio usam sessão, se permitido, um &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;cookie que armazena o jsessionid&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;será&lt;/span&gt; gerado na maquina do cliente. Apenas um cookie ja que a criaç&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_35"&gt;ã&lt;/span&gt;o &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_50"&gt;é&lt;/span&gt; por dominio e n&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_35"&gt;ã&lt;/span&gt;o por contexto&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;/span&gt;. Aparentemente nenhum problema, mas isso pode gerar um comportamento estranho e &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;difícil&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;identicar&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;No &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;server&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;side&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;container&lt;/span&gt;) para as 2 aplicações teremos 2 &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_18"&gt;instâncias&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;HttpSession&lt;/span&gt; um por  contexto, da forma que deve ser. O &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;jboss&lt;/span&gt; sabe mapear a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;request&lt;/span&gt; com o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;HttpSession&lt;/span&gt; do contexto correto, sem problemas.&lt;br /&gt;&lt;br /&gt;Mas e se ...? O problema:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_23"&gt;aplicação&lt;/span&gt; X, com o erro &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_24"&gt;intermitente&lt;/span&gt;, tem um &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;time&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;out&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;session&lt;/span&gt; de 5 minutos. &lt;/li&gt;&lt;li&gt;X possui uma tela faz busca em outro contexto, a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_28"&gt;aplicação&lt;/span&gt; Y. &lt;/li&gt;&lt;li&gt;O &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;host&lt;/span&gt; de Y eh o mesmo de X, e o seu &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;time&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;out&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_50"&gt;é&lt;/span&gt; de 2 minutos por exemplo.&lt;/li&gt;&lt;li&gt;O &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;usuario&lt;/span&gt; ao autenticar em X e abrir a tela que &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;aciona&lt;/span&gt; Y, sem saber possui 2 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;sessions&lt;/span&gt;, uma para cada &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_35"&gt;aplicação&lt;/span&gt;, mas somente um &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;cookie&lt;/span&gt;!&lt;/li&gt;&lt;li&gt;Caso o &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_37"&gt;usuário&lt;/span&gt; depois ficasse 2 minutos trocando uma id&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_50"&gt;é&lt;/span&gt;ia no msn ou tomando um caf&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_50"&gt;é&lt;/span&gt;zinho, ao voltar pra tela que aciona Y, uma nova &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;session&lt;/span&gt; seria gerada, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_40"&gt;já&lt;/span&gt; que a anterior &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_41"&gt;&lt;/span&gt; expirou. Nova &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;session&lt;/span&gt;, novo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;jsessionid&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;novo cookie&lt;/span&gt;!&lt;/li&gt;&lt;li&gt;Ao fazer uma &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;request&lt;/span&gt; para X, o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;container&lt;/span&gt; ira receber um &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;jsessionid&lt;/span&gt; desconhecido para o contexto, e ai adivinha? &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;Session&lt;/span&gt; "perdida".&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ficamos quase uma semana de cabelo em &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_50"&gt;pé&lt;/span&gt;, para descobrir o &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;porque&lt;/span&gt; do "&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_52"&gt;sumiço&lt;/span&gt;" da &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;session&lt;/span&gt; Demorou pra se ligar nesse detalhe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-5541311652871428626?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/5541311652871428626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=5541311652871428626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5541311652871428626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5541311652871428626'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/04/jsessionid-em-multiplos-contextos.html' title='JSessionId em múltiplos contextos'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-6174454885532999487</id><published>2009-03-22T17:57:00.000-07:00</published><updated>2009-04-18T11:41:23.385-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>AOP em JavaScript</title><content type='html'>Usando AOP em JavaScript, &lt;a href="http://trephine.org/t/index.php?title=Aspect_Oriented_JavaScript"&gt;aqui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-6174454885532999487?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/6174454885532999487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=6174454885532999487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6174454885532999487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/6174454885532999487'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/03/aop-em-javascript.html' title='AOP em JavaScript'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-5372521860258746615</id><published>2009-03-11T20:36:00.000-07:00</published><updated>2009-04-18T11:41:50.168-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Swing'/><title type='text'>Spring Rich Client</title><content type='html'>Essa é a bola da vez...&lt;br /&gt;&lt;a href="http://opensource.atlassian.com/confluence/spring/display/RCP/User+Documentation"&gt;Aqui&lt;/a&gt; a documentação, muito superficial por sinal. Nao imagina que o spring tinha "uma extensão" pra isso. Bem legal a swingueira!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-5372521860258746615?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/5372521860258746615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=5372521860258746615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5372521860258746615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5372521860258746615'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/03/spring-rich-client.html' title='Spring Rich Client'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-2945351345124534840</id><published>2009-03-11T20:31:00.000-07:00</published><updated>2011-02-07T11:56:18.960-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='vm'/><title type='text'>Importar certificado JVM</title><content type='html'>Pra guardar...&lt;br /&gt;Abaixo comando de import do certificado digital para jvm:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span dir="ltr"&gt;keytool -import -trustcacerts -keystore &amp;lt;%JAVA_HOME%&amp;gt;\jre\security\lib\&lt;wbr&gt;&lt;/wbr&gt;cacerts -storepass changeit -noprompt -alias mycert -file mycert.cer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;mycert=nome do certificado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-2945351345124534840?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/2945351345124534840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=2945351345124534840' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2945351345124534840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2945351345124534840'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/03/importar-certificado-jvm.html' title='Importar certificado JVM'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-1021375400248790963</id><published>2009-03-06T17:27:00.001-08:00</published><updated>2009-04-18T11:42:39.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><title type='text'>Class x Prototype</title><content type='html'>Ótima comparação entre conceito de Classes (O.O.) versus Prototipação, &lt;a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model#Class-Based_vs._Prototype-Based_Languages"&gt;mozilla&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-1021375400248790963?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/1021375400248790963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=1021375400248790963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1021375400248790963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1021375400248790963'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/03/class-x-prototype.html' title='Class x Prototype'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-3104617120172054341</id><published>2009-02-28T17:53:00.001-08:00</published><updated>2009-04-18T11:43:12.199-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>MooTools</title><content type='html'>+ um &lt;a href="http://mootools.net/"&gt;frame&lt;/a&gt; js.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-3104617120172054341?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/3104617120172054341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=3104617120172054341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/3104617120172054341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/3104617120172054341'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/02/mootools.html' title='MooTools'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-2534643168664154848</id><published>2009-02-26T17:33:00.000-08:00</published><updated>2010-04-26T10:59:48.643-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='RichFaces'/><title type='text'>Richfaces + Spring</title><content type='html'>&lt;a href="http://java.dzone.com/articles/jboss-richfaces-spring"&gt;Artigo&lt;/a&gt; de Richfaces (muito bom) com Spring (as coisas mudam).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-2534643168664154848?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/2534643168664154848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=2534643168664154848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2534643168664154848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2534643168664154848'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/02/richfaces-spring.html' title='Richfaces + Spring'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-1138429784617941434</id><published>2009-02-25T08:40:00.000-08:00</published><updated>2009-02-25T08:41:05.666-08:00</updated><title type='text'>10 Things Every Software Architect Should Know</title><content type='html'>&lt;a href="http://www.oreillynet.com/pub/e/1250"&gt;see&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-1138429784617941434?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/1138429784617941434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=1138429784617941434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1138429784617941434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/1138429784617941434'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/02/10-things-every-software-architect.html' title='10 Things Every Software Architect Should Know'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-602209611319608509</id><published>2009-02-25T07:45:00.001-08:00</published><updated>2010-04-26T11:06:54.608-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facelets'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><title type='text'>JEE c/ Produtividade</title><content type='html'>Já faz um tempo que me dedico (pesquisa + trabalho) na &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;construção&lt;/span&gt; aplicações web em Java c/ produtividade e qualidade. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Trabalho com &lt;span style="font-style: italic;"&gt;JSF&lt;/span&gt; &lt;/span&gt;desde 2006, no in&lt;i&gt;í&lt;/i&gt;cio como qualquer tecnologia foi bem complicado, mas com o passar do tempo a "coisa" evoluiu.&lt;br /&gt;&lt;br /&gt;Definindo o t&lt;i&gt;ú&lt;/i&gt;nel tempo, nos primórdios tinhamos o &lt;span style="font-style: italic;"&gt;Servlet&lt;/span&gt; para gerar o "html din&lt;i&gt;â&lt;/i&gt;mico", depois veio &lt;span style="font-style: italic;"&gt;JSP&lt;/span&gt; com a flexibilidade de custom tags, que na verdade não pegou. O sucesso do &lt;span style="font-style: italic;"&gt;Struts&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Webwork&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Spring MVC&lt;/span&gt; e outros, vem com a demanda de produtividade, qualidade e a experi&lt;i&gt;ê&lt;/i&gt;ncia do mercado e da comunidade.&lt;br /&gt;&lt;br /&gt;Depois de um tempo chegou o JSF, que na minha opnião traz conceitos bem interessantes, não s&lt;i&gt;ó&lt;/i&gt; em padronizar o MVC mas tambem no apelo de componentes U(ser) I(nterface). Conceito adotado antigamente por ferramentas como &lt;span style="font-style: italic;"&gt;Delphi&lt;/span&gt; (velhos tempos) e &lt;span style="font-style: italic;"&gt;VB&lt;/span&gt; (.NET), com foco na produtividade. Fico com a impressão que JSF e JSP, numa abordagem inicial mais simples, não "alavanca" a tal produtividade.&lt;br /&gt;&lt;br /&gt;Dos &lt;i&gt;ú&lt;/i&gt;ltimos 2 projetos que liderei com &lt;span style="font-style: italic;"&gt;JSF&lt;/span&gt;, o primeiro usando &lt;span style="font-style: italic;"&gt;JSP&lt;/span&gt; e o segundo c/ &lt;span style="font-style: italic;"&gt;Facelets&lt;/span&gt; (xhtml), foi realmente &lt;span style="font-size: 100%;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;not&lt;/span&gt;&lt;/span&gt;á&lt;span style="font-size: 100%;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;vel&lt;/span&gt;&lt;/span&gt; aumento de produtividade e qualidade no 2 projeto. Alem dos templates, que trazem uma grande agilidade e reuso, o que mais me impressionou foi a simplicidade de criação de componentes, like tag file, que o &lt;span style="font-style: italic;"&gt;Facelets&lt;/span&gt; prove. Inicialmente vc "perde" um tempo customizando os componentes, mas depois a agilidade acaba valendo muito a pena.&lt;br /&gt;&lt;br /&gt;Alguns dos varios componetes que customizamos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;bot&lt;i&gt;õ&lt;/i&gt;es&lt;/li&gt;&lt;li&gt;colunas&lt;br /&gt;&lt;/li&gt;&lt;li&gt;colunas c/ links&lt;/li&gt;&lt;li&gt;links&lt;br /&gt;&lt;/li&gt;&lt;li&gt;datatable&lt;/li&gt;&lt;li&gt;modal message&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Com o facelets o JSF realmente mostra seu poder de fogo!&lt;br /&gt;Na &lt;a href="http://www.globalcode.com.br/"&gt;Globalcode&lt;/a&gt; temos um ótimo mini-curso falando sobre o assunto, "JSF e Facelets um casamento perfeito".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-602209611319608509?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/602209611319608509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=602209611319608509' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/602209611319608509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/602209611319608509'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2009/02/jee-c-produtividade.html' title='JEE c/ Produtividade'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-2857083112568408063</id><published>2008-11-15T21:31:00.000-08:00</published><updated>2008-11-15T21:33:14.631-08:00</updated><title type='text'>largado...</title><content type='html'>Tanta coisa legal pra postar... mas estou sem tempo e saco! So um resumo:&lt;br /&gt;  - yahoo blueprint&lt;br /&gt;  - facelets&lt;br /&gt;  - python&lt;br /&gt;&lt;br /&gt;quem sabe...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-2857083112568408063?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/2857083112568408063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=2857083112568408063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2857083112568408063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2857083112568408063'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2008/11/largado.html' title='largado...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-5029704216501490511</id><published>2007-10-14T15:06:00.001-07:00</published><updated>2007-10-14T15:14:11.773-07:00</updated><title type='text'>MacBook na Internet c/ Nokia 5200(Claro) via BlueTooth</title><content type='html'>Adquiri a pouco tempo um &lt;a href="http://www.nokia.com.br/nokia/0,8764,97780,00.html"&gt;Nokia 5200&lt;/a&gt;, ótimo aparelho, e quebrei um pouco a cabeça pra conectar meu macbook na net pelo Nokia (Claro) via bluetooth. Na realidade &lt;a href="http://www.robteix.com/pt/2007/09/24/usando-o-celular-da-claro-para-conectar-se-a-internet/"&gt;esse&lt;/a&gt; link mostra todos os passos necessários, o único problema eh o tal do CID. Na tentativa e erro consegui conectar mas com o seguinte CID: &lt;span style="font-weight: bold;"&gt;*99***1#&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Não encontrei nenhuma informação pertinente ao CID na operadora e na Nokia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-5029704216501490511?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/5029704216501490511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=5029704216501490511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5029704216501490511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/5029704216501490511'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/10/macbook-na-internet-c-nokia-5200claro.html' title='MacBook na Internet c/ Nokia 5200(Claro) via BlueTooth'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-3361862699200136566</id><published>2007-10-14T14:57:00.000-07:00</published><updated>2007-10-14T15:05:41.802-07:00</updated><title type='text'>mac - alfabetizacao parte 2</title><content type='html'>&lt;a href="http://aurelio.net/mac/"&gt;Aqui&lt;/a&gt; ótimas dicas para mac.&lt;br /&gt;download do ruby: www.ruby-lang.org/en/downloads&lt;br /&gt;download do gem (facilita muito no mac): rubyforge.org/frs/?group_id=126&lt;br /&gt;com o gem instalado, pra instalar o rails eh soh executar a seguinte linha:&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 51);font-family:courier new;" &gt;  gem install rails&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;pra terminal indico o &lt;a href="http://iterm.sourceforge.net"&gt;iTerm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-3361862699200136566?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/3361862699200136566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=3361862699200136566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/3361862699200136566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/3361862699200136566'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/10/aqui-timas-dicas-para-mac.html' title='mac - alfabetizacao parte 2'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-2990334466655080818</id><published>2007-09-20T18:19:00.000-07:00</published><updated>2007-09-20T20:16:39.436-07:00</updated><title type='text'>mac - alfabetizacao parte 1</title><content type='html'>Agora adepto a macmania, vou registrar (tentar) as descobertas e quebras de vícios:&lt;br /&gt;&lt;br /&gt;Teclado&lt;br /&gt;        -&gt; tecla &lt;span style="font-style: italic; font-weight: bold;"&gt;command&lt;/span&gt;: desenho da apple, antes do space.&lt;br /&gt;        -&gt; tecla &lt;span style="font-style: italic; font-weight: bold;"&gt;option&lt;/span&gt; depois da ctrl antes da command.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;atalhos&lt;/span&gt;:&lt;br /&gt;        -&gt; encerrar aplicacao: &lt;span style="font-style: italic;"&gt;command + q&lt;/span&gt;&lt;br /&gt;        -&gt; caso vc tenha dual boot para selecionar na inicialização eh soh manter &lt;span style="font-style: italic;"&gt;option pressionada&lt;/span&gt; no start da maquina.&lt;br /&gt;        -&gt; abrir killer de aplicacoes rodando (menos o finder): &lt;span style="font-style: italic;"&gt;command + option + esc&lt;/span&gt;&lt;br /&gt;        -&gt; tirar uma foto da tela atual: &lt;span style="font-style: italic;"&gt;command + shift + 3&lt;/span&gt;&lt;br /&gt;        -&gt; ir para uma pasta diretor sem abrir o Find normal, como /etc: &lt;span style="font-style: italic;"&gt;shift + command + G&lt;/span&gt; (no escopo do Finder!) &lt;span style="font-style: italic;"&gt;+ path&lt;/span&gt; da pasta&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;VirtueDesktops&lt;/span&gt;: app show de bola que permite o trabalho com múltiplos desktops, com o esquema de movimentos das telas parecido com o ubuntu.&lt;br /&gt;        -&gt; movimentacao do desktop via teclado: &lt;span style="font-style: italic;"&gt;shift + ctrl + direcao&lt;/span&gt; (esquerda-direita-norte-sul)&lt;br /&gt;        -&gt; tela de manipulação do &lt;span style="font-weight: bold;"&gt;VirtueDesktops&lt;/span&gt; no desktop atual:  &lt;span style="font-style: italic;"&gt;command + option + O&lt;/span&gt;&lt;br /&gt;        -&gt; mostrar um agrupador dos desktops centralizado:&lt;span style="font-style: italic;"&gt; fn + option + tab&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;em bash:&lt;br /&gt;        -&gt;  &lt;span style="font-family: monospace;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;$ system_profiler -detailLevel -2&lt;/span&gt; : mostra conteudo da pagina sobre do apple via mesa.&lt;br /&gt;&lt;br /&gt;        -&gt;&lt;span style="font-family: monospace;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;$ open ~/Library/Preferences/com.apple.finder.plist&lt;/span&gt; : abre o OmniOutline pra customizar as opções do Finder.&lt;br /&gt;&lt;br /&gt;Obs.: '+' igual a 'e'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-2990334466655080818?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/2990334466655080818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=2990334466655080818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2990334466655080818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2990334466655080818'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/09/mac-alfabetizacao-parte-1.html' title='mac - alfabetizacao parte 1'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-7067579742965883221</id><published>2007-05-31T12:01:00.000-07:00</published><updated>2007-05-31T12:26:13.376-07:00</updated><title type='text'>Jmeter com JSF</title><content type='html'>Quebrei um pouco a cabeça pra fazer o jmeter "testar" uma aplicação feita em JavaServer Faces. &lt;a href="http://forum.java.sun.com/thread.jspa?threadID=664673"&gt;Esse&lt;/a&gt; site indicou o caminho das pedras... Mas mesmo assim precisei seguir alguns passos, pra resumir:&lt;br /&gt;&lt;br /&gt;1º Criar um &lt;span style="color: rgb(102, 0, 0);"&gt;HTTP Proxy Server&lt;/span&gt; abaixo de &lt;span style="color: rgb(102, 0, 0);"&gt;WorkBench&lt;/span&gt;, configurar a porta e indicar o &lt;span style="font-style: italic;"&gt;proxy &lt;/span&gt;no navegador. Este proxy deve rodar &lt;span style="font-style: italic;"&gt;no server&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;2º Ao requisitar uma pagina que passe pelo &lt;span style="font-style: italic;"&gt;proxy&lt;/span&gt;, todos os dados enviados do &lt;span style="font-style: italic;"&gt;client &lt;/span&gt;para o &lt;span style="font-style: italic;"&gt;server &lt;/span&gt;são armazenados, como &lt;span style="color: rgb(102, 0, 0);"&gt;HTTP Request&lt;/span&gt;, com o respectivo &lt;span style="font-style: italic;"&gt;método http&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;parametros enviados&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;3º Ainda não é suficiente... Com as requisições na mão (na sequencia que foram solicitadas) é necessário criar &lt;span style="color: rgb(102, 0, 0);"&gt;XPath Extractor&lt;/span&gt; dentro da primeira request para descobrir qual o valor do  controle de estado do faces, o "&lt;span style="font-weight: bold;"&gt;javax.faces.ViewState&lt;/span&gt;". Este cara é armazenado em um &lt;span style="font-style: italic;"&gt;inputHidden &lt;/span&gt;em cada página. A query para descobrir o valor é  &lt;span style="color: rgb(0, 102, 0);"&gt;//input[@id='javax.faces.ViewState']/@value&lt;/span&gt;. Além da query é necessário definir &lt;span style="color: rgb(102, 0, 0);"&gt;Reference Name&lt;/span&gt;, o qual valor será utilizado por outras request's um exemplo seria &lt;span style="font-style: italic; color: rgb(102, 0, 0);"&gt;view&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;4º Agora é o momento de usar a variável definida no &lt;span style="color: rgb(102, 0, 0);"&gt;XPath&lt;/span&gt;. Isso na segunda request feita para um mesma página (via post). Para isso é colocar o parametro javax.faces.ViewState com o valor &lt;span style="font-style: italic; color: rgb(102, 0, 0);"&gt;${view}&lt;/span&gt; na configuração do &lt;span style="color: rgb(102, 0, 0);"&gt;HTTP Request&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;5º Por fim é necessário criar uma &lt;span style="color: rgb(102, 0, 0);"&gt;HTTP Cookie Manager&lt;/span&gt; abaixo do Thread Group, e nele adicionar um valor de cookie, neste caso o JSessionID. O name deve ficar com o valor &lt;span style="font-style: italic; color: rgb(102, 0, 0);"&gt;jsessionid&lt;/span&gt;, um valor default e o domínio devem ser preenchido.&lt;br /&gt;&lt;br /&gt;Depois é rodar o teste.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-7067579742965883221?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/7067579742965883221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=7067579742965883221' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7067579742965883221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7067579742965883221'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/05/jmeter-com-jsf.html' title='Jmeter com JSF'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-4847772830177575753</id><published>2007-05-25T05:25:00.000-07:00</published><updated>2007-05-25T05:36:11.263-07:00</updated><title type='text'>JMeter em um diretório com espaços...</title><content type='html'>Outro dia estava aplicando um teste de stress em um &lt;span style="font-style: italic;"&gt;EJB&lt;/span&gt;, mas ao fazer o &lt;span style="font-style: italic;"&gt;lookup &lt;/span&gt;do bean o jmeter lançava a seguinte exception:&lt;br /&gt;&lt;br /&gt;Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested ex&lt;br /&gt;ception is:&lt;br /&gt;        java.net.MalformedURLException: no protocol: de&lt;br /&gt;        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:282)&lt;br /&gt;        at sun.rmi.transport.Transport$1.run(Transport.java:153)&lt;br /&gt;        at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;        at sun.rmi.transport.Transport.serviceCall(Transport.java:149)&lt;br /&gt;        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:4&lt;br /&gt;66)&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Quebrei um pouco a cabeça, e foi ai que caiu a ficha, o jmeter estava instalado em:&lt;br /&gt;  C:\Arquivos&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt; de &lt;/span&gt;Programas\...&lt;br /&gt;&lt;br /&gt;Pronto tai o problemas, o espaço no nome do diretório! Coloquei o jmeter em outro dir, sem espaço no nome, e teste foi executado com sucesso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-4847772830177575753?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/4847772830177575753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=4847772830177575753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/4847772830177575753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/4847772830177575753'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/05/jmeter-em-um-diretrio-com-espaos.html' title='JMeter em um diretório com espaços...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-2790929845774687090</id><published>2007-05-17T05:37:00.000-07:00</published><updated>2009-04-18T11:46:41.635-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vm'/><title type='text'>Informações da VM em jmx-console (jboss)</title><content type='html'>O jmx-console do jboss disponibiliza algumas informações sobre a VM, similar ao jconsole.&lt;br /&gt;&lt;br /&gt;Pra isso é só logar no jmx-console:&lt;br /&gt;   --&gt; em &lt;span style="font-weight: bold;"&gt;jboss.system&lt;/span&gt; selecionar &lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;type=Serverinfo&lt;/span&gt;&lt;br /&gt;   --&gt; no &lt;span style="font-style: italic;"&gt;JMX MBean View&lt;/span&gt; além dos atributos da VM, podemos invocar operações como por exemplo &lt;span style="font-style: italic; font-weight: bold;"&gt;listMemoryPools&lt;/span&gt;, que exibe as informações de uso de memória.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-2790929845774687090?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/2790929845774687090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=2790929845774687090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2790929845774687090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/2790929845774687090'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/05/informaes-da-vm-em-jmx-console-jboss.html' title='Informações da VM em jmx-console (jboss)'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-8249535409579052865</id><published>2007-05-08T13:23:00.000-07:00</published><updated>2007-05-31T12:00:29.153-07:00</updated><title type='text'>Maldito PermGen</title><content type='html'>&lt;a href="http://my.opera.com/karmazilla/blog/2007/03/13/good-riddance-permgen-outofmemoryerror"&gt;PermGen - outofmemory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://my.opera.com/karmazilla/blog/2007/03/13/good-riddance-permgen-outofmemoryerror"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://my.opera.com/karmazilla/blog/2007/03/15/permgen-strikes-back"&gt;+ PermGen&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-8249535409579052865?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/8249535409579052865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=8249535409579052865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8249535409579052865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/8249535409579052865'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/05/maldito-permgen.html' title='Maldito PermGen'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-7171865608519073528</id><published>2007-05-08T13:18:00.000-07:00</published><updated>2007-05-08T13:23:35.175-07:00</updated><title type='text'>jconsole no jboss</title><content type='html'>Pra acessar o jconsole no jboss, siga os passos:&lt;br /&gt;1º colocar as seguintes propriedades no run do jboss&lt;br /&gt;-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=&lt;span style="font-style: italic;"&gt;{nroPorta}&lt;/span&gt; -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false&lt;br /&gt;&lt;br /&gt;2º no jconsole informar o host e o &lt;span style="font-style: italic;"&gt;nroPorta &lt;/span&gt;que vc definiu no jboss.&lt;br /&gt;&lt;br /&gt;jmx é bala.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-7171865608519073528?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/7171865608519073528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=7171865608519073528' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7171865608519073528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/7171865608519073528'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/05/jconsole-no-jboss.html' title='jconsole no jboss'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-117206653485975293</id><published>2007-02-21T06:01:00.000-08:00</published><updated>2007-02-21T06:02:14.876-08:00</updated><title type='text'>SCBCD JEE 5 !!!!</title><content type='html'>+ 1 pra conta...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-117206653485975293?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/117206653485975293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=117206653485975293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/117206653485975293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/117206653485975293'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2007/02/scbcd-jee-5.html' title='SCBCD JEE 5 !!!!'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-116350622103100610</id><published>2006-11-14T04:06:00.000-08:00</published><updated>2006-11-14T05:17:35.726-08:00</updated><title type='text'>Ágil por MF</title><content type='html'>&lt;span style="font-style: italic;"&gt;UML Essencial:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"São processos voltados às pessoas. As estratégias ágeis presumem que o fator mais importante no sucesso de um projeto é qualidade das pessoas que estão envolvidas nele e o quão bem elas trabalham juntas, em termos humanos. Os processos e ferramentas que utilizam são estritamente efeitos de segunda ordem."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-116350622103100610?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/116350622103100610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=116350622103100610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/116350622103100610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/116350622103100610'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/11/gil-por-mf.html' title='Ágil por MF'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-116286460728906873</id><published>2006-11-06T17:48:00.000-08:00</published><updated>2010-04-26T11:11:24.991-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><title type='text'>JSF and JS</title><content type='html'>Apesar de ser conhecer bem pouco de javascript, ñ posso negar que esse negócio faz coisas incriveis com informações no browser. Ultimamente tenho pesquisado um pouco sobre criação de telas mais "ricas" na web, e tenho visto coisas fantasticas com o bendito do javascript! Uma delas é o &lt;a href="http://dojotoolkit.org/"&gt;dojo&lt;/a&gt;, um framework bem legal de javascript, permitindo fazer verdadeiras macumbas de uma forma mais simples. Senão me engano parece que é a galera do google que manda neste negócio.&lt;br /&gt;Achei mais legal ainda o esquema do &lt;a href="http://myfaces.apache.org/tomahawk/"&gt;Tomahawk &lt;/a&gt;,conjunto de componentes e utilitários do JSF que a especificação ñ cobre, agora tem um componente que permite a carga das libs do dojo na page, facilitando bastante a vida. Se já ñ existe, é bem provavel novos componentes tomahawk utilizem na sua renderização o dojo, para facilitar a vida e trazer novos recursos visuais com html.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-116286460728906873?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/116286460728906873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=116286460728906873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/116286460728906873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/116286460728906873'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/11/jsf-and-js.html' title='JSF and JS'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-116146567287768312</id><published>2006-10-21T13:50:00.000-07:00</published><updated>2010-04-26T11:12:26.218-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><title type='text'>JSF: Stateful</title><content type='html'>O protocolo HTTP de certa forma é limitado, e uma dessas limitações é justamente ser stateless não mantém o estado com o cliente, ou seja, não possível somente com o protocolo reconhecer um determinado cliente além de um processo de requisição (request).&lt;br /&gt;&lt;br /&gt;Em muitos sistemas web devemos driblar esta limitação, e usar alternativas do ambiente. Bom mas o que importa para este post, é que o faces trabalha mantendo o estado da view de um cliente, ou seja, é stateful. Justamente para efetuar todo o trabalho com Conversores + Validadores + Event / Action Listener. O faces tem 2 abordagens para stateful:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;server-side: usando o HttpSession para manter os dados.&lt;/li&gt;&lt;li&gt;client-side: campos hidden para guardar as informações. Esta abordagem é menos segura que a outra.&lt;/li&gt;&lt;/ol&gt;Por default o my-faces usa a primeira opção, mas é permitido trocar a abordagem informando um parametro ao Faces Servlet, no web.xml.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-116146567287768312?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/116146567287768312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=116146567287768312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/116146567287768312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/116146567287768312'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/10/jsf-stateful.html' title='JSF: Stateful'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-116093145984952000</id><published>2006-10-15T09:24:00.000-07:00</published><updated>2010-04-26T11:09:02.791-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><title type='text'>JSF - Request Lifecycle</title><content type='html'>Continuando na &lt;span style="font-style: italic;"&gt;"brincadeira"&lt;/span&gt; com faces, resolvi postar algo interessante do frame, o ciclo de vida da request, que é quem permite que várias features do frame tenham funcionalidade. Um detalhe importante, é que todo o esquema descrito abaixo, é possível pq o faces é &lt;span style="font-style: italic;"&gt;stateful &lt;/span&gt;com seus componetes.&lt;br /&gt;&lt;br /&gt;No geral, o ciclo de vida é executado de 2 formas:&lt;br /&gt;&lt;span style="color: #990000;"&gt;    a) &lt;/span&gt;Primeira requisição da página (&lt;span style="color: #000099;"&gt;View&lt;/span&gt;), o faces executa 2 fases:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Restore View&lt;/span&gt;: verifica que ainda não existe árvore de componentes UI para a &lt;span style="color: #000099;"&gt;View&lt;/span&gt;, portanto cria todos os &lt;span style="color: #000099;"&gt;componentes UI&lt;/span&gt; (javabean) e passa para a fase de &lt;span style="font-style: italic;"&gt;renderização&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Render Response&lt;/span&gt;: baseado na estado (dados) dos componentes na tree monta a renderização no formato esperado pelo cliente.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: #990000;"&gt;    b) &lt;/span&gt;Segunda requisição da mesma página, aonde a árvore existe e o fluxo de execução muda, é executado em &lt;span style="font-style: italic;"&gt;6 fases&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Restore View&lt;/span&gt;: retorna a árvore vinculada a &lt;span style="color: #000099;"&gt;View&lt;/span&gt;, passa para próxima fase.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Apply Request Values&lt;/span&gt;: captura os dados de input do cliente (param na request) e seta nas devidas properties dos&lt;span style="color: #000099;"&gt; componentes UI&lt;/span&gt;. Passa para a próxima fase.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Process Validations&lt;/span&gt;: cada &lt;span style="color: #000099;"&gt;componente UI&lt;/span&gt; poderá ser validado, portanto nessa fase a árvore de componentes da view e percorrida, componente a componente, verificando se o &lt;span style="color: #000099;"&gt;componente UI &lt;/span&gt;tem validador, caso tenha o mesmo é executado. Se algo estiver errado pula para a fase de &lt;span style="font-style: italic;"&gt;renderização&lt;/span&gt;, senão para a próxima.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Update Model Values&lt;/span&gt;: os componentes UI já possuem as properties atualizadas, mas os "dados de modelo", ou seja, atributos dos managed bean ainda não! É importante relembrar que todos os param da request são String, e as properties dos compoentes UI tbém. Nessa fase serão aplicados os conversores, qdo existirem, na mesma forma que os validadores. Se algo estiver errado pula para a fase de &lt;span style="font-style: italic;"&gt;renderização&lt;/span&gt;, senão para a próxima.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Invoke Application&lt;/span&gt;: nesta fase são executados os &lt;span style="color: #000099; font-style: italic;"&gt;actions listener&lt;/span&gt; registrados para os &lt;span style="color: #000099;"&gt;componentes Command&lt;/span&gt; (botões, links, ...) , e depois as &lt;span style="color: #000099; font-style: italic;"&gt;actions &lt;/span&gt;normais (managed bean). Executada a fase de &lt;span style="font-style: italic;"&gt;renderização&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Render Response&lt;/span&gt;: a mesma política, renderiza o conteúdo para o cliente.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-116093145984952000?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/116093145984952000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=116093145984952000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/116093145984952000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/116093145984952000'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/10/jsf-request-lifecycle.html' title='JSF - Request Lifecycle'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115889331047791361</id><published>2006-09-21T19:30:00.000-07:00</published><updated>2006-09-21T19:48:30.493-07:00</updated><title type='text'>Loucura total...</title><content type='html'>Tem gente que fala que nesse mundo Java temos várias siglas formando uma saborosa sopa de letrinhas. Bom e o pior é que realmente a coisa é feia! Estou fazendo uma pesquisa sobre o que adotar em novo projeto no trampo?&lt;br /&gt;&lt;br /&gt;O conceito de &lt;span style="font-weight: bold;"&gt;web 2.0&lt;/span&gt; é bem interessante, e cada dia que passa fico de boca mais aberta com as soluções em web que aparecem por ae...&lt;br /&gt;Bom mas o que eu queria dizer mesmo era que estou pesquisando vaaaaaarias dessas siglas bontinhas:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;JSF + AJAX + XHTML + AOP + Facelets + GWT + Ajax4jsf + DWR + JBoss SEAM...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Qdo chegar a alguma definição concreta posto  algo mais detalhado sobre aonde vou adotar alguma, se é que vou adotar, dessas &lt;span style="font-style: italic;"&gt;letrinhas&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115889331047791361?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115889331047791361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115889331047791361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115889331047791361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115889331047791361'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/09/loucura-total_21.html' title='Loucura total...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115707166586577468</id><published>2006-08-31T17:45:00.000-07:00</published><updated>2006-09-21T19:50:15.240-07:00</updated><title type='text'>Frase do Dia</title><content type='html'>&lt;blockquote&gt;&lt;span style="font-size:100%;"&gt;"Qualquer tolo escreve código que o computador enteda. Bons programadores escrevem códigos que humanos possam entender."&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;Martim Fowler &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115707166586577468?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115707166586577468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115707166586577468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115707166586577468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115707166586577468'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/08/frase-do-dia.html' title='Frase do Dia'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115609255490818705</id><published>2006-08-20T09:17:00.000-07:00</published><updated>2006-08-20T09:49:14.930-07:00</updated><title type='text'>Pq Java ?</title><content type='html'>Muitas vezes vejo pessoas comentando, que o desenvolvimento java é muito complicado. Ñ só a respeito das linhas de código, e sintaxe da linguagem, mas também em outros assuntos como Orientação à Objetos, Design Patterns, UML, Framework, Arquitetura, Camadas, etc...&lt;br /&gt;&lt;br /&gt;Normalmente as pessoas que fazem esses comentários vivam  um paradigma bem diferente de desenvolvimento de software, aonde as coisas eram um pouco mais simples, ñ existia uma preocupação com processo de desenvolvimento, reutilização, componentização, flexibilidade.&lt;br /&gt;O mundo evolui, TI evolui... As pessoas precisam evoluir!&lt;br /&gt;&lt;br /&gt;Comentários como: em php, ou até delphi, era muito mais fácil de fazer, me deixam um pouco incomodado. Concordo em que alguns cenários, a utilização do php poderia ser bem mais simples do que o Java com JSP e Servlets. O problema, na realidade, é saber reconhecer o cenário, a situação, e tentar aplicar a melhor solução.&lt;br /&gt;&lt;br /&gt;Um faz de contas:&lt;br /&gt;    Construção de um sistema, permitindo que o cliente faça pedidos a uma lanchonete na web. O sistema é bem simples, existem algumas restrições, o cliente deve possuir o cadastro na lanchonete com um código pessoal para poder efetuar o pedido, código esse que deverá ser informado na conclusão do pedido.&lt;br /&gt;&lt;br /&gt;Para este cenário o uso do php, seria perfeito. Ñ precisaria de java (jsp e servlets), e muito menos do uso de J2EE (EJB ...), talvez não necessite nem me preocupar com uma definição de domain model, oo, uml, o sistema é tão básico...&lt;br /&gt;Mas e se essa lanchonete, após alguns anos viesse a se tornar um McDonald's? Essa abordagem simplista (ao extremo) atenderia?&lt;br /&gt;&lt;br /&gt;Esse é um tema complexo para apenas um post, mas de qualquer forma o importante é ressaltar que as pessoas precisam evoluir, tentar acompanhar o que está acontecendo no mundo, e ñ apenas no seu dia-a-dia!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115609255490818705?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115609255490818705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115609255490818705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115609255490818705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115609255490818705'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/08/pq-java_20.html' title='Pq Java ?'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115573857132204530</id><published>2006-08-16T07:28:00.000-07:00</published><updated>2010-04-26T11:09:50.714-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><title type='text'>Converter Domain Model em JSF</title><content type='html'>&lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=41758"&gt;Aqui&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115573857132204530?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115573857132204530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115573857132204530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115573857132204530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115573857132204530'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/08/converter-domain-model-em-jsf.html' title='Converter Domain Model em JSF'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115555446738559533</id><published>2006-08-14T04:13:00.000-07:00</published><updated>2006-08-14T04:21:07.396-07:00</updated><title type='text'>Setando var's de ambiente no Ubuntu</title><content type='html'>Pra quem teve problema com o &lt;span style="color: rgb(0, 153, 0);"&gt;apt-get&lt;/span&gt; do ubuntu e ñ conseguiu atualizar a versão do java, assim como eu, aqui vai a dica pra fazer na "unha" :&lt;br /&gt;&lt;br /&gt;O arquivo aonde informamos as var's de ambiente é o /etc/bash.bashrc, portanto entre via terminal e digite: &lt;span style="color: rgb(0, 0, 153);"&gt;sudo gedit /etc/bash.bashrc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No fim do arquivo informe as  var's de ambiente (mais ou menos assim):&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;  JAVA_HOME="caminho" CLASSPATH="$JAVA_HOME:JAVA_HOME/lib:$."&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;  PATH="$JAVA_HOME/bin:$PATH" export JAVA_HOME CLASSPATH PATH&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115555446738559533?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115555446738559533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115555446738559533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115555446738559533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115555446738559533'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/08/setando-vars-de-ambiente-no-ubuntu.html' title='Setando var&apos;s de ambiente no Ubuntu'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115540899366987682</id><published>2006-08-12T11:47:00.000-07:00</published><updated>2006-08-12T11:56:33.680-07:00</updated><title type='text'>An Architect's Perspective on Application Quality: Part 2</title><content type='html'>Continuação, o &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=ArchAppQuality2"&gt;artigo &lt;/a&gt;enfatiza a questão do "processo". Gerenciar as exigências (funcionais e ñ funcionais) que o projeto deve satisfazer, é uma questão fundamental e deve ser avaliada com muita atenção. Conversar com o cliente sobre a estratégia na busca por qualidade, justificando a questões envolvendo custo,  estar bem preparado para avisar sobre os riscos e eventuais problemas caso o cliente ñ concorde em pagar por qualidade. Um outro ponto tocado (novamente), foi a questão de comunicação entre o time!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115540899366987682?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115540899366987682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115540899366987682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115540899366987682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115540899366987682'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/08/architects-perspective-on-application.html' title='An Architect&apos;s Perspective on Application Quality: Part 2'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115480005354021039</id><published>2006-08-05T10:30:00.000-07:00</published><updated>2006-08-05T10:47:33.553-07:00</updated><title type='text'>Faces no JBoss</title><content type='html'>Algum tempo atrás encontrei alguns problemas ao rodar &lt;span style="font-style: italic; color: rgb(0, 0, 102);"&gt;faces&lt;/span&gt; no &lt;span style="color: rgb(102, 102, 102); font-weight: bold;"&gt;&lt;a href="http://www.jboss.org"&gt;JBoss&lt;/a&gt;, &lt;/span&gt;sofri um pouco com este problema. A versão do &lt;span style="font-weight: bold; color: rgb(102, 102, 102);"&gt;JBoss &lt;/span&gt;era &lt;span style="font-style: italic;"&gt;4.0.2&lt;/span&gt;, e desenvolvimento faces com &lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;myfaces&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;. &lt;/span&gt;Mesmo empacotando o aplicativo com todas as lib's necessárias, ao rodar ñ funcionava. O problema é que para rodar faces no &lt;span style="font-weight: bold; color: rgb(102, 102, 102);"&gt;JBoss &lt;/span&gt;(Tomcat) é necessário a pasta &lt;span style="font-style: italic;"&gt;instance..\deploy\jbossweb-tomcat55.sar&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;\&lt;span style="color: rgb(0, 0, 153);"&gt;jsf-libs&lt;/span&gt;&lt;/span&gt; com os jars da implementação faces que vc estiver rodando, no meu caso &lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;myfaces&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;. Senão me engano a partir da versão &lt;span style="font-style: italic;"&gt;4.0.4&lt;/span&gt; do &lt;span style="font-weight: bold; color: rgb(102, 102, 102);"&gt;JBoss&lt;/span&gt;, esta estrutura é default, mas com os jars do &lt;span style="color: rgb(102, 0, 0); font-weight: bold;"&gt;myfaces&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Atualmente estou desenvolvendo com somente com o &lt;a style="color: rgb(0, 0, 153);" href="http://www.eclipse.org/callisto"&gt;WTP &lt;/a&gt;do &lt;span style="color: rgb(102, 51, 102);"&gt;Eclipse 3.2&lt;/span&gt;, e até o momento esta atendendo perfeitamente ao esperado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115480005354021039?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115480005354021039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115480005354021039' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115480005354021039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115480005354021039'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/08/faces-no-jboss.html' title='Faces no JBoss'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115460781330447472</id><published>2006-08-03T05:15:00.000-07:00</published><updated>2006-08-03T05:23:33.313-07:00</updated><title type='text'>Trabalho em equipe</title><content type='html'>Depois de ler este &lt;a href="http://helderdarocha.com.br/blog/2006/07/catedral-de-colnia.html"&gt;post &lt;/a&gt;no blog do &lt;a href="http://helderdarocha.com.br"&gt;Helder&lt;/a&gt;, sobre a Catedral de Colônia, fiquei impressionado com o processo de construção desse monumento. As obras foram iniciadas em 1248 e concluídas em 1880! Mais de 600 anos envolvendo este processo... muita coisa aconteceu, muito tempo se passou, mas mesmo assim o projeto foi concluído, com pequenas mudanças (acredito que não tão significativas) no projeto inicial.&lt;br /&gt;Fantástico, isso muda o meu conceito de trabalho em equipe, organização, fé e vontade na conclusão de algo que se considera importante. Se Deus quiser, algum dia caminharei sobre estes lugares.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115460781330447472?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115460781330447472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115460781330447472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115460781330447472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115460781330447472'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/08/trabalho-em-equipe.html' title='Trabalho em equipe'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115453870502867806</id><published>2006-08-02T09:59:00.000-07:00</published><updated>2006-08-02T10:11:45.050-07:00</updated><title type='text'>2 instâncias de jboss...</title><content type='html'>Rodar o &lt;span style="color: rgb(153, 51, 153);"&gt;JBOSS &lt;/span&gt;mais de uma instância na mesma máquina, simulando 2 ambientes, em um cenário distribuído ou não, não é tão complicado.&lt;br /&gt;Normalmente as 2 estruturas server's estarão abaixo de um mesmo %&lt;span style="font-style: italic;"&gt;JBOSS_home&lt;/span&gt;%\server. A grande sacada é adicionar mais um endereço IP para a máquina, além do atual. Imagine que já exista o IP &lt;span style="color: rgb(0, 0, 153);"&gt;10.0.0.1&lt;/span&gt;, no windows xp, vc iria até &lt;span style="color: rgb(0, 0, 153); font-style: italic;"&gt;Conexões Rede -&gt; Conexão Local -&gt; Propriedades -&gt; (selecione) Protocolo TCP/IP -&gt; Avançado&lt;/span&gt; ! Pronto, agora vc adiciona um novo IP, por exemplo &lt;span style="color: rgb(0, 0, 153);"&gt;10.0.0.2&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Depois disso é só informar em cada uma das instâncias (server) qual IP ela vai estar atuado, por exemplo:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    &gt;%JBOSS_home%\bin\run -c instancia1 --host=10.0.0.1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    &gt;%JBOSS_home%\bin\run -c instancia2 --host=10.0.0.2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bem melhor do que ter de mudar cada porta dos serviços do jboss, para subir em um mesmo ip...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115453870502867806?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115453870502867806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115453870502867806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115453870502867806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115453870502867806'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/08/2-instncias-de-jboss.html' title='2 instâncias de jboss...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115393155312853470</id><published>2006-07-26T07:48:00.000-07:00</published><updated>2006-07-26T09:32:33.186-07:00</updated><title type='text'>Modelo de Domínio ...</title><content type='html'>Um breve resumo:&lt;br /&gt;&lt;br /&gt;"Um modelo de domínio é uma representação de classes conceituais do mundo real, não de componentes de Software." &lt;br /&gt;Essa é a idéia-chave, aonde o modelo é um dicionário visual de abstrações que representem o negócio, sem detalhes voltados a implementação, em nível de software.&lt;br /&gt;&lt;br /&gt;Qdo falamos de negócio, ñ falamos de "Telas", ñ falamos de "Tabelas no Banco de Dados", esses são artefatos de software, ñ deveria ser uma preocupação inicial, ñ construímos um software para atender uma tela bonita e ou para efetuar SQL's eficientes, a intenção é (ou deveria ser) atender a uma necessidade de negócio. Parece um assunto estranho, pois todo munda acha que pensa certo. Mas na prática ñ é bem assim! O Modelo de Domínio mantem o foco no modelo de representação do negócio.&lt;br /&gt;&lt;br /&gt;O modelo contém:&lt;br /&gt;  - classes de conceito&lt;br /&gt;  - associações entre as classes&lt;br /&gt;  - atributos das classes&lt;br /&gt;&lt;br /&gt;Métodos normalmente ñ são expostos a esse modelo, a ñ ser que seja bem específico ao negócio, como uma pessoa realizando algum comportamento que seja importante ao negócio.&lt;br /&gt;&lt;br /&gt;No geral existem 2 formas para identificar as classes conceituais:&lt;br /&gt;  1ª - Usar lista de categoria. (como lugares, transações, eventos, ...)&lt;br /&gt;  2ª - Identificar substantivos ou frases que substituem substantivos. (abordagem menos segura)&lt;br /&gt;&lt;br /&gt;É comum colocar "coisas" a menos em uma primeira representação do modelo, mas com o tempo ele pode ser reajustado tentando evoluir a representação do sistema. Deve ser considerada boa prática incrementar com objetos à mais do que o necessário, partindo do princípio que é melhor ter um modelo rico que pode ser diluído do que um modelo pobre.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bom por enquanto é isso...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115393155312853470?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115393155312853470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115393155312853470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115393155312853470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115393155312853470'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/07/modelo-de-domnio.html' title='Modelo de Domínio ...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115348297533029399</id><published>2006-07-21T04:49:00.000-07:00</published><updated>2006-07-21T04:56:15.340-07:00</updated><title type='text'>An Architect's Perspective on Application Quality</title><content type='html'>Interessante alguns aspectos levantados no artigo.  Citando alguns pontos chave, sobre a espectativa e o significado de "qualidade". Comunicação entre o time, testes, monitorição são abordados como conjunto de pontos chaves para ter qualidade.&lt;br /&gt;&lt;br /&gt;"Quality begins in the team - not the application. " &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=ArchitectAppQuality"&gt;Leia mais...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115348297533029399?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115348297533029399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115348297533029399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115348297533029399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115348297533029399'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/07/architects-perspective-on-application.html' title='An Architect&apos;s Perspective on Application Quality'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115256833415732814</id><published>2006-07-10T14:46:00.000-07:00</published><updated>2006-07-10T14:52:14.176-07:00</updated><title type='text'>Head Rush Ajax</title><content type='html'>Terminei a leitura hoje, depois de quase um mês (vagabundo...) . &lt;a href="http://www.headfirstlabs.com/books/hrajax/"&gt;Head Rush Ajax&lt;/a&gt; é muito bom, assim como os outros da série Head First, além do ótimo conteúdo abordando o uso de Ajax de uma forma simples e prática, possui uma ótima didática.&lt;br /&gt;Vale muita a pena, afinal não é caro, &lt;a href="http://www.amazon.com/gp/product/0596102259/ref=nosim/002-2106925-7912064?n=283155"&gt;veja&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115256833415732814?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115256833415732814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115256833415732814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115256833415732814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115256833415732814'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/07/head-rush-ajax.html' title='Head Rush Ajax'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115228417572642943</id><published>2006-07-07T07:50:00.000-07:00</published><updated>2006-07-07T07:56:15.736-07:00</updated><title type='text'>Visão...</title><content type='html'>Um breve momento de reflexão...&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt; &lt;p&gt;“Um engenheiro, um físico e um matemático estão viajando de trem pela Escócia quanto vêem uma ovelha negra passar lá fora. &lt;/p&gt; &lt;p&gt;‘Interessante!’ diz o engenheiro. ‘As ovelhas escocesas eram negras.’&lt;/p&gt; &lt;p&gt;‘Você quer dizer que algumas ovelhas escocesas são negras, não?’ replica o físico.&lt;/p&gt; &lt;p&gt;‘Não’, responde o matemático. ‘Tudo o que sabemos é que há pelo menos uma ovelha na Escócia e que pelo menos um lado dessa ovelha referida é preto.’”&lt;/p&gt; &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115228417572642943?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115228417572642943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115228417572642943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115228417572642943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115228417572642943'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/07/viso.html' title='Visão...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115209604253902502</id><published>2006-07-05T03:35:00.000-07:00</published><updated>2006-07-05T03:40:42.553-07:00</updated><title type='text'>Eclipse 3.2 + Callisto</title><content type='html'>Já estou usando o Eclipse 3.2 com &lt;a href="http://www.eclipse.org/callisto/"&gt;Callisto&lt;/a&gt;. Muito bom, o Callisto é uma mão na roda, já agrupando alguns dos principais plugins (open) para desenvolvimento web. A instalação foi bem rápida, nem se compara com os primórdios, aonde era uma treta encontrar compatibilidade dos plugins em novas versões do eclipse.&lt;br /&gt;&lt;br /&gt;O &lt;a href="http://blog.urubatan.com.br/2006/07/03/eclipse_3_2_callisto_jsf.html"&gt;Urubatan&lt;/a&gt; blogou um passo a passo bem legal de como resolver possíveis problemas com a instalação.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115209604253902502?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115209604253902502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115209604253902502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115209604253902502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115209604253902502'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/07/eclipse-32-callisto.html' title='Eclipse 3.2 + Callisto'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115202117843928456</id><published>2006-07-04T06:50:00.000-07:00</published><updated>2006-07-04T06:52:58.450-07:00</updated><title type='text'>Comunidade Ruby</title><content type='html'>Foi criado o &lt;a href="http://www.rubyonbr.org/index.jf"&gt;RubyOnBr&lt;/a&gt;, uma comunidade Ruby made in Brasil!!! Preciso deixar de ser preguiçoso e começar a brincar com a criança.&lt;br /&gt;Muito bom...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115202117843928456?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115202117843928456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115202117843928456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115202117843928456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115202117843928456'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/07/comunidade-ruby.html' title='Comunidade Ruby'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115128465881608560</id><published>2006-06-25T18:12:00.000-07:00</published><updated>2006-06-25T18:17:38.830-07:00</updated><title type='text'>JBoss Seam</title><content type='html'>Entrei no no &lt;a href="http://java.sys-con.com/"&gt;JDJ&lt;/a&gt;, e encontrei um artigo interessante sobre o &lt;a href="http://labs.jboss.com/portal/jbossseam"&gt;JBoss Seam&lt;/a&gt;, esse &lt;a href="http://java.sys-con.com/read/180347.htm"&gt;aqui&lt;/a&gt;. Muito legal o autor da um exemplo interessante do uso desse framework, com a utilidade de unificar outras soluções como &lt;span style="font-style: italic; color: rgb(153, 0, 0);"&gt;Faces &lt;/span&gt;e &lt;span style="font-style: italic; color: rgb(153, 0, 0);"&gt;EJB 3.0 &lt;/span&gt;de uma maneira bem prática. Muito bom!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115128465881608560?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115128465881608560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115128465881608560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115128465881608560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115128465881608560'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/06/jboss-seam.html' title='JBoss Seam'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-115066446603066056</id><published>2006-06-18T13:35:00.000-07:00</published><updated>2006-06-18T14:01:06.040-07:00</updated><title type='text'>Caso de Uso</title><content type='html'>É um assunto que muito já ouvi falar, mas ultimamente tem se tornado mais necessário sua utilização no meu dia-a-dia. Confesso que acho a construção de casos de uso muito chato, descrever os atores e as funcionalidades que software provê, de uma maneira prática e direta, nem sempre é fácil. Devido ao cenário ao qual atuamos, algumas vezes descrever algo uma maneira simples, é complicado! Nos últimos dias, como sempre, tenho buscado literatura sobre o assunto, cheguei a conclusão de 2 guias, um é especificamente para Casos de Uso, o &lt;span style="font-style: italic;"&gt;Writting Effective Use Cases (Cockburn) &lt;/span&gt;e o segundo: &lt;span style="font-style: italic;"&gt;Applying UML and Design Patterns (Larman).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Atualmente estou lendo o segundo, que traz uma visão geral do desenvolvimento (R)UP, da fase de concepção a elaboração (com iterações). Muito bom o conteúdo do livro, no desenrolar dos assuntos são apontadas várias idéias de outros autores, como o próprio tio "&lt;span style="color: rgb(51, 0, 153);"&gt;Fowler&lt;/span&gt;". Vai aqui uma definição interessante de caso de uso (do livro):&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Casos de uso são um mecanismo para que visa tornar simples a maneira dos usuários (Clientes finais) enxergarem "seus" objetivos no sistema. A essência é descobrir e registrar requisitos funcionais do sistema, satisfazendo os objetivos dos interessados. Requisitos funcionais indicam o que o sistema fará, em um ponto de vista de negócio.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-115066446603066056?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/115066446603066056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=115066446603066056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115066446603066056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/115066446603066056'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/06/caso-de-uso.html' title='Caso de Uso'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114986340863248684</id><published>2006-06-09T06:59:00.000-07:00</published><updated>2006-06-09T07:30:17.210-07:00</updated><title type='text'>SOA</title><content type='html'>Nos últimos dias muito tem se falado sobre SOA, é um + uma sigla do mundo TI - Service Oriented Architecture. A itenção é resolver um "grande tabu" (pelo menos na minha visão) de desenvolvimento modularizado.&lt;br /&gt;&lt;br /&gt;A idéia é muito interessante, vc deixa de pensar em software como um todo, e começa a pensar em serviços. O software é "quebrado" em serviços (módulos) com fraco acoplamento, ou seja, os módulos ñ tem dependência estrutural um entre o outro.&lt;br /&gt;&lt;br /&gt;Um exemplo (idéia...) seria um sistema Contábil, com serviços de Contas  a Pagar, Contas a Receber, Emissão de Faturas, e outros. Tendo um outro software gerenciando esses serviços, para agregar vinculo entre esses módulos.&lt;br /&gt;&lt;br /&gt;Uma técnologia que prove isso, é Web Services. No cenário acima poderiamos ter cada módulo implementado com  uma Linguagem, ou seja, Contas a Pagar e Receber em Java e Emissão de Faturas em C++, e o "gerenciador" tbém em Java.&lt;br /&gt;&lt;br /&gt;Web Service, é muito interessante, mas seu uso deve ser estudado com cautela! Em um cenário aonde serviços pertencentes a empresa, feitos em uma mesma tecnologia, como Java, talvez ñ seja interessante a integração com Web Services. O custo de parsing de XML em Web Services é alto, e deve ser considerado! Talvez a adoção do puro RMI, com EJB (principalmente o 3) seja interessante.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114986340863248684?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114986340863248684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114986340863248684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114986340863248684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114986340863248684'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/06/soa.html' title='SOA'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114899491378935684</id><published>2006-05-30T06:14:00.000-07:00</published><updated>2006-06-09T06:59:21.626-07:00</updated><title type='text'>Dicas de Performance Java 5</title><content type='html'>&lt;span class="postbody"&gt;Aqui vai algumas dicas para performance, mais especificamente no Java 5:&lt;br /&gt;&lt;br /&gt;Fazer comparação ignorando maiúsculas e minúsculas...&lt;br /&gt;&lt;span style="color:darkred;"&gt;ao invés de&lt;/span&gt; &lt;span class="genmed"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;   &lt;pre&gt;s1.toUpperCase().equals(s2);&lt;/pre&gt;   &lt;/div&gt; &lt;span style="color:darkblue;"&gt;usamos&lt;/span&gt; &lt;span class="genmed"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;   &lt;pre&gt;s1.equalsIgnoreCase(s2);&lt;/pre&gt;   &lt;/div&gt; nesta versão não é necessário criar uma nova string (toUpperCase) disperdiçando CPU.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A mesma regra vale para:&lt;br /&gt;&lt;span style="color:darkred;"&gt;ao invés de&lt;/span&gt; &lt;span class="genmed"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;   &lt;pre&gt;new Integer(s).intValue();&lt;/pre&gt;   &lt;/div&gt; &lt;span style="color:darkblue;"&gt;usamos&lt;/span&gt; &lt;span class="genmed"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;   &lt;pre&gt;Integer.parseInt(s);&lt;/pre&gt;   &lt;/div&gt;&lt;i&gt;(isso vale para os outros wrappers de primitivos)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Adicionando conteúdo a uma StringBuilder&lt;br /&gt;&lt;span style="color:darkred;"&gt;ao invés de&lt;/span&gt; &lt;span class="genmed"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;   &lt;pre&gt;stringBuilder.append(s.substring(x,y));&lt;/pre&gt;   &lt;/div&gt; &lt;span style="color:darkblue;"&gt;usamos&lt;/span&gt; &lt;span class="genmed"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;   &lt;pre&gt;stringBuilder.append(s,x,y);&lt;/pre&gt;   &lt;/div&gt; além de mais bonito, ecomiza recursos passando a responsabilidade da separação de conteúdo para o StringBuilder, que por si só já é bem otimizado.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Imagine uma situação aonde temos uma lista já pronta e carregada, e queremos torna-la imutável.&lt;br /&gt;&lt;span style="color:darkred;"&gt;ao invés de&lt;/span&gt; de criarmos uma implementação de collection (no caso arrayList) e tratarmos os métodos lançando excessão...&lt;br /&gt;&lt;span style="color:darkblue;"&gt;usamos&lt;/span&gt; &lt;span class="genmed"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;   &lt;pre&gt;Collections.unmodifiableList(minhaLista);&lt;/pre&gt;   &lt;/div&gt; dessa forma colocamos uma wrapper sobre nosso objeto, evitando criação de &lt;i&gt;"mutretas"&lt;/i&gt; e código complexo. Essa técnica de &lt;i&gt;Wrapper&lt;/i&gt; é muito interessante, e pode ser usada em várias situações, como para código thread-safe por exemplo.&lt;br /&gt;&lt;br /&gt;É sempre importante a leitura do JavaDoc. As dicas de performance são sempre bem definidas.  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114899491378935684?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114899491378935684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114899491378935684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114899491378935684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114899491378935684'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/05/dicas-de-performance-java-5.html' title='Dicas de Performance Java 5'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114859049861997249</id><published>2006-05-25T13:50:00.000-07:00</published><updated>2006-05-25T13:54:58.630-07:00</updated><title type='text'>Strategy Pattern</title><content type='html'>&lt;span class="postbody"&gt;Mais um padrão &lt;b&gt;comportamental&lt;/b&gt;, em relação ao Business, assim como o &lt;b&gt;&lt;span style="color:darkBlue;"&gt;Visitor&lt;/span&gt;&lt;/b&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span class="postbody"&gt;&lt;br /&gt;Muito interessante: a idéia é usar &lt;i&gt;Composição&lt;/i&gt; ao invés de &lt;i&gt;Herança&lt;/i&gt;, ou seja, &lt;b&gt;ao invés de ser é melhor ter&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Quando você tem um representação (objeto de domínio) que possui um comportamento muito váriavel, ao invés de hierarquia de herança para resolver o problema com a variação, seria mais interessante passar essa responsabilidade para um outro objeto (objeto terceiro), deixando sua estrutura mais simples e focada no negócio.&lt;br /&gt;&lt;br /&gt;Em alguns casos,&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic; color: rgb(0, 0, 153);"&gt;ter &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 153);"&gt;é melhor do que &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic; color: rgb(0, 0, 153);"&gt;ser&lt;/span&gt;&lt;span style="font-style: italic;"&gt;!&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114859049861997249?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114859049861997249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114859049861997249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114859049861997249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114859049861997249'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/05/strategy-pattern.html' title='Strategy Pattern'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114804852392382906</id><published>2006-05-19T07:19:00.000-07:00</published><updated>2006-05-19T07:22:03.933-07:00</updated><title type='text'>SESINFO - IMS</title><content type='html'>Fazia tempo que não postava nada... Tava na correria com o Evento na Mêto, o 3º SESTINFO, no qual participei dando curso e palestra.&lt;br /&gt;&lt;br /&gt;Foi muito legal, descobri um lado interessante e que gostei muito. Quem sabe não começoa a levar a idéia de dar aula à sério???&lt;br /&gt;&lt;br /&gt;Muito legal, coloquei as fotos no meu &lt;a href="http://www.flickr.com/photos/21543201@N00/"&gt;flickr&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114804852392382906?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114804852392382906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114804852392382906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114804852392382906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114804852392382906'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/05/sesinfo-ims.html' title='SESINFO - IMS'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114659200408268191</id><published>2006-05-02T10:34:00.000-07:00</published><updated>2006-05-02T10:46:44.166-07:00</updated><title type='text'>Dica: StringBuilder</title><content type='html'>A partir do java 5 temos a classe &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuilder.html"&gt;StringBuilder&lt;/a&gt; . A utilização é bem similar a da já conhecida &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuffer.html"&gt;StringBuffer&lt;/a&gt;. Com a vantagem de ñ ser thread-safe, trazendo uma melhor performance. Na maioria dos cenários, é possível essa substituição !&lt;br /&gt;&lt;br /&gt;Aqui vai um simples implementação teste:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153); font-weight: bold;"&gt;import static&lt;/span&gt; java.lang.System.&lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;out&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;&lt;span style="font-weight: bold;"&gt;import&lt;/span&gt; &lt;/span&gt;java.io.IOException;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;public class &lt;/span&gt;TesteStringBuffer {&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: rgb(153, 51, 153); font-weight: bold;"&gt;public static void&lt;/span&gt; main(String[] args) &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;throws &lt;/span&gt;IOException {&lt;br /&gt;        &lt;span style="font-weight: bold; color: rgb(102, 51, 102);"&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;final&lt;/span&gt; &lt;/span&gt;Appendable buf = &lt;span style="font-weight: bold; color: rgb(102, 51, 102);"&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;new&lt;/span&gt; &lt;/span&gt;StringBuilder();&lt;br /&gt;        &lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;for&lt;/span&gt; &lt;/span&gt;(&lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;int &lt;/span&gt;i=0; i&lt;1024; i++) {&lt;br /&gt;            buf.append(Integer.&lt;span style="font-style: italic;"&gt;toString&lt;/span&gt;(i));&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="font-style: italic; color: rgb(51, 102, 255);"&gt;out&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;.&lt;/span&gt;print(buf);&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuilder.html"&gt;&lt;/a&gt;&lt;br /&gt;As 2 classes implementam &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Appendable.html" title="interface in java.lang"&gt;Appendable&lt;/a&gt;, &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/CharSequence.html" title="interface in java.lang"&gt;CharSequence&lt;/a&gt;.&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/CharSequence.html" title="interface in java.lang"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114659200408268191?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114659200408268191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114659200408268191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114659200408268191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114659200408268191'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/05/dica-stringbuilder.html' title='Dica: StringBuilder'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114627540743406322</id><published>2006-04-28T18:22:00.000-07:00</published><updated>2006-05-17T09:51:24.376-07:00</updated><title type='text'>Pattern - Business Interface (for EJB)</title><content type='html'>O pessoal reclama que &lt;span style="font-weight: bold;"&gt;EJB &lt;/span&gt;é um "saco", mas eu particulamente acredito em que alguns casos ainda &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;é possível justificar seu uso (&lt;a href="http://en.wikipedia.org/wiki/Session_Beans"&gt;&lt;span style="font-style: italic;"&gt;Session Bean&lt;/span&gt;&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Vou postar, sobre um &lt;span style="font-style: italic;"&gt;&lt;a href="http://pt.wikipedia.org/wiki/Design_Patterns"&gt;pattern&lt;/a&gt; &lt;/span&gt;bem simples que resolve um dos problemas chatos  de lidar com EJB. No caso o Business Interface !&lt;br /&gt;&lt;br /&gt;Que na realidade é apenas uma Interface intermediária qual o desenvolvedor implementa na classe Bean, e extende na &lt;span style="font-style: italic;"&gt;Interface Component&lt;/span&gt; (Remote/Local). Veja um exemplo de utilização:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;//Business Interface: define metodos de negocio, expondo um cenario remoto&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;public interface&lt;/span&gt; NegocioDef &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;extends&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt; &lt;/span&gt;Remote {&lt;br /&gt;   &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;public &lt;/span&gt;String excutaAlgo()  &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;throws &lt;/span&gt;NegocioException, RemoteException;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255); font-style: italic;"&gt;//Interface Component: implementação que o cliente utiliza, herdando de NegocioDef &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;public interface&lt;/span&gt; Negocio &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;extends &lt;/span&gt;NegocioDef, EJBObject {}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;//Bean: o que o provider vai definir&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153); font-weight: bold;"&gt;public class&lt;/span&gt; NegocioBean &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;implements &lt;/span&gt;NegocioDef, SessionBean {&lt;br /&gt;   &lt;span style="font-style: italic; color: rgb(51, 204, 0);"&gt;//metodos de ciclo de vida - outro saco...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;public &lt;/span&gt;String executaAlgo() &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;throws &lt;/span&gt;NegocioException {&lt;br /&gt;       &lt;span style="color: rgb(153, 51, 153); font-weight: bold;"&gt;return &lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;"algo"&lt;/span&gt;;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Bem simples, dessa forma o bean provider consegue fazer uma amarração de métodos em tempo de compilação, sem precisar se extressar com o "PAU NO DEPLOY".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114627540743406322?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114627540743406322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114627540743406322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114627540743406322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114627540743406322'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/04/pattern-business-interface-for-ejb.html' title='Pattern - Business Interface (for EJB)'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114606296209677611</id><published>2006-04-26T07:47:00.000-07:00</published><updated>2006-04-26T07:49:22.316-07:00</updated><title type='text'>+ 1 pra conta</title><content type='html'>Ontém consegui minha 3ª certificação, a SCBCD. Legal, agora é começar a me preparar para a certificação de arquiteto, tão aguardada !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114606296209677611?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114606296209677611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114606296209677611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114606296209677611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114606296209677611'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/04/1-pra-conta.html' title='+ 1 pra conta'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114600937642686402</id><published>2006-04-25T16:51:00.000-07:00</published><updated>2006-04-26T07:49:48.796-07:00</updated><title type='text'>Chega logo !!!</title><content type='html'>Puts, ñ tô aguentando de saudades da minha mulher... A distância (alemanha) realmente é algo que me consome de tristeza :&lt;span style=";font-family:trebuchet ms;font-size:85%;"  &gt;C&lt;/span&gt;&lt;br /&gt;Mas fazer o que, o único problema é que tá demorando d+ pro sabadão chegar !!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114600937642686402?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114600937642686402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114600937642686402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114600937642686402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114600937642686402'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/04/chega-logo.html' title='Chega logo !!!'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114550068623071426</id><published>2006-04-19T19:30:00.000-07:00</published><updated>2006-04-25T16:51:32.793-07:00</updated><title type='text'>Cade minha prova ?</title><content type='html'>Brincadeira, a quase um mês atrás marquei minha prova para SCBCD no site da prometric para o dia 21/04. Tah, eu sei que é feriado, mas existia opção para este dia no centro que escolhi, e para mim não teria problema algum.&lt;br /&gt;A estava na maior espectativa, e hoje me liga uma pessoal, do centro escolhido (ñ vou dizer qual !) me informando que infelizmente houve uma falha no cadastro de datas no site da prometric, e que no dia 21, ñ seria possível a realização da prova.&lt;br /&gt;Palhaçada, nos 45 do segundo tempo eles desmarcam ! Acho um absurdo, tiveram um mês, pois provavelmente, o centro deve receber um email da prometric informando assim que a escolha é efetuada, e deixam para a última hora. Mas isso é bem comum na nossa cultura.&lt;br /&gt;No fim das contas, minha prova foi remarcada para dia 25. No mais é aproveitar esses dias a mais para revisar a especifição e as referências.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114550068623071426?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114550068623071426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114550068623071426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114550068623071426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114550068623071426'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/04/cade-minha-prova.html' title='Cade minha prova ?'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114502853878903668</id><published>2006-04-14T08:25:00.000-07:00</published><updated>2006-04-14T08:28:58.800-07:00</updated><title type='text'>Sun Tech Days 2006</title><content type='html'>Este ano, só pra variar, estive no Sun Tech Days. No geral algumas palestras interessantes, outras nem tanto, nada fora do comum. Algo que me deixou completamente descontente (e alguns colegas), foi a fraca estrutura do evento !&lt;br /&gt;&lt;br /&gt;Neste ponto a Sun tem muito de aprender com a Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114502853878903668?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114502853878903668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114502853878903668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114502853878903668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114502853878903668'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/04/sun-tech-days-2006.html' title='Sun Tech Days 2006'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114287240563409356</id><published>2006-03-20T08:25:00.000-08:00</published><updated>2006-03-20T08:33:27.506-08:00</updated><title type='text'>Cry Wolf</title><content type='html'>Sabadão fui ao cinema, com a esposa. Nem sabiamos qual filmer assistir, na hora decidimos, ou melhor (ahn ahn) eu decidi, assistir a &lt;a href="http://br.movies.yahoo.com/filme/13107"&gt;Cry Wolf&lt;/a&gt;. Velha mania de ir apenas pelo cartaz !&lt;br /&gt;Não gostei muito, o começo parecia ser legal, mas no decorrer o filme ficou até meio chato. O final eu diria que foi "&lt;span style="font-style: italic;"&gt;legalzinho&lt;/span&gt;".&lt;br /&gt;Bom, sei lá, acho que vale a pena &lt;a href="http://br.movies.yahoo.com/filme/13368"&gt;Anjos da Noite - A Evolução&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114287240563409356?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114287240563409356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114287240563409356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114287240563409356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114287240563409356'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/03/cry-wolf.html' title='Cry Wolf'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114242099923789295</id><published>2006-03-15T02:47:00.000-08:00</published><updated>2006-03-15T03:09:59.270-08:00</updated><title type='text'>GregorianCalendar no Java 5 #$!?*</title><content type='html'>Ontem, no trabalho, encontramos um bug na &lt;span style="font-weight: bold;"&gt;GregorianCalendar&lt;/span&gt; do &lt;span style="font-style: italic;"&gt;java 5&lt;/span&gt; que causou um certo descontentamento.&lt;br /&gt;&lt;br /&gt;Um certo método no &lt;span style="color: rgb(51, 51, 255);"&gt;ejb&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;Session&lt;/span&gt;) estava lançando uma &lt;span style="font-weight: bold;"&gt;NullPointerException&lt;/span&gt;, foi verificado que o erro ocorria na execução do método add de um objeto &lt;span style="font-weight: bold;"&gt;GregorianCalendar&lt;/span&gt;. Este objeto era enviado de uma outra camada. A única mudanaça foi a atualização para &lt;span style="font-style: italic;"&gt;java 5&lt;/span&gt; na máquina.&lt;br /&gt;&lt;br /&gt;Voltamos a máquina de ejb para &lt;span style="font-style: italic;"&gt;java 1.4&lt;/span&gt;, e tudo voltou a funcionar... Resolvemos dar uma olhada nos fontes da versão &lt;span style="font-style: italic;"&gt;1.4&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;5&lt;/span&gt; !&lt;br /&gt;&lt;br /&gt;Triste mas na versão 5 existe um atributo '&lt;span class="postbody"&gt;calsys' que é &lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;transient&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt; &lt;span style="color: rgb(51, 51, 51);"&gt;(&lt;/span&gt;&lt;/span&gt;hummm). Este atributo é utilizado por um método interno que é acionado dentro de &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;add&lt;/span&gt;, que em determinado momento válida se é &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;null&lt;/span&gt;, mas em outro não !&lt;br /&gt;&lt;br /&gt;Bom, infelizmente um sistema é um pouco grande, e neste momento não é interessante modificar as referencias de &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;GregorianCalendar&lt;/span&gt; para &lt;span style="font-weight: bold;"&gt;Date &lt;/span&gt;por exemplo, mas o ideal para representar data é o utilizar o simples e prático &lt;span style="font-weight: bold;"&gt;Date&lt;/span&gt;, deixe o &lt;span style="font-weight: bold;"&gt;GregorianCalendar&lt;/span&gt; para situações mais específicas a instantes.&lt;br /&gt;&lt;br /&gt;Já existe um &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6365360"&gt;relatório &lt;/a&gt;indicando o bug, é só esperar pelo &lt;span style="font-style: italic; font-weight: bold; color: rgb(0, 102, 0);"&gt;Mustang&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.&lt;/span&gt;&lt;br /&gt;  &lt;span class="postbody"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114242099923789295?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114242099923789295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114242099923789295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114242099923789295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114242099923789295'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/03/gregoriancalendar-no-java-5.html' title='GregorianCalendar no Java 5 #$!?*'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114199203095728473</id><published>2006-03-10T03:58:00.000-08:00</published><updated>2006-03-10T04:00:30.973-08:00</updated><title type='text'>Enterprise</title><content type='html'>Até o momento esta sendo bem interessante o conteúdo do Academia do Enterprise, na &lt;span style="font-weight: bold;"&gt;globalcode&lt;/span&gt;. Agora vamos iniciar a leitura de  &lt;span style="font-style: italic;"&gt;Building Java Enterprise Applications Vol.1: Architecture&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114199203095728473?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114199203095728473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114199203095728473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114199203095728473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114199203095728473'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/03/enterprise.html' title='Enterprise'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114129636410145599</id><published>2006-03-02T02:44:00.000-08:00</published><updated>2006-03-02T02:46:04.103-08:00</updated><title type='text'>Acabou !</title><content type='html'>Ainda bem, chegamos ao fim de mais um "carnaval". Agora é voltar para a realidade, já estava com saudades do trabalho, enfim do dia-a-dia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114129636410145599?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114129636410145599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114129636410145599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114129636410145599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114129636410145599'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/03/acabou.html' title='Acabou !'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114105895368619671</id><published>2006-02-27T08:49:00.000-08:00</published><updated>2006-03-02T02:43:37.023-08:00</updated><title type='text'>Carnaval</title><content type='html'>&lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;Não gosto! &lt;/span&gt;&lt;/b&gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;Mas não deixa de ser uma ótima oportunidade para estudar. Vou aproveitar esses dias para ler um pouco mais sobre desenvolvimento de componentes, com o foco na prova de &lt;span style="font-weight: bold;"&gt;SCBCD&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:Verdana;font-size:10;"  &gt;Como base de estudos estou utilizando o &lt;span style="font-style: italic;"&gt;Head First EJB&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;Mastering Enterprise Java Beans&lt;/span&gt;. Bons livros, com ótimo conteúdo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114105895368619671?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114105895368619671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114105895368619671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114105895368619671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114105895368619671'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/02/carnaval.html' title='Carnaval'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22964612.post-114080158776018698</id><published>2006-02-24T09:13:00.000-08:00</published><updated>2006-02-24T09:19:47.766-08:00</updated><title type='text'>O início...</title><content type='html'>Bem, vamos lá !&lt;br /&gt;&lt;br /&gt;Entrando na "&lt;span style="font-style: italic;"&gt;onda&lt;/span&gt;" dos blog's, acredito que vai ser interessante.&lt;br /&gt;Espero ter algo para publicar com alguma frequencia, por enquanto esta é apenas uma mensagem de &lt;span style="font-weight: bold;"&gt;boas vindas&lt;/span&gt;.&lt;br /&gt;Estare abordando temas como desenvolvimento, arquitetura e projeto de software,  e assuntos de Tecnologia.&lt;br /&gt;&lt;br /&gt;Até lá.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22964612-114080158776018698?l=edermag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edermag.blogspot.com/feeds/114080158776018698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22964612&amp;postID=114080158776018698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114080158776018698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22964612/posts/default/114080158776018698'/><link rel='alternate' type='text/html' href='http://edermag.blogspot.com/2006/02/o-incio.html' title='O início...'/><author><name>Eder Magalhães</name><uri>http://www.blogger.com/profile/16632615900794490858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-frGMh4yAooo/TigVWfLgzqI/AAAAAAAAAIM/r6XtWquOgBg/s1600/DSC_3598_bigger.JPG'/></author><thr:total>0</thr:total></entry></feed>
