<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CØdeZØne! &#187; java</title>
	<atom:link href="http://leandrosilva.com.br/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://leandrosilva.com.br</link>
	<description>Coisas sobre desenvolvimento de software</description>
	<lastBuildDate>Mon, 23 Aug 2010 13:04:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>O quanto realmente importa a escolha de uma linguagem?</title>
		<link>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/</link>
		<comments>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 03:11:45 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=772</guid>
		<description><![CDATA[Há alguns meses perguntaram ao Rich Hickey: &#8220;How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?&#8221; E sua resposta foi: &#8220;I think it matters quite a bit. A good language is opinionated, and strives to make a particular [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns meses <a href="http://www.simple-talk.com/opinion/geek-of-the-week/rich-hickey-geek-of-the-week/" target="_blank">perguntaram</a> ao <a href="http://en.wikipedia.org/wiki/Rich_Hickey" target="_blank">Rich Hickey</a>:</p>
<blockquote><p><em>&#8220;How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?&#8221;</em></p></blockquote>
<p>E sua resposta foi:</p>
<blockquote><p><em>&#8220;I think it matters quite a bit. A good language is opinionated, and strives to make a particular style of programming easy and idiomatic. It only seems a matter of taste when you are comparing languages that are more similar than they are different, like Java/C# or Python/Ruby. Try something really different like Clojure, Haskell, or Erlang and the fact that it matters becomes readily apparent.&#8221;</em></p></blockquote>
<p>Eu acho que concordo bastante com sua opinião. Discutir se Java é melhor do que C#, por exemplo, é inútil, porque as duas linguagens são muito semelhantes. Nesse caso, o que acaba pesando mais na hora da escolha é o ecosistema no qual cada linguagem está inserida, que pode agradar mais a um ou a outro programador. É puro gosto.</p>
<p>O mesmo vale para Ruby e Python, como ele mesmo cita.</p>
<h4>Mundos diferentes</h4>
<p>Mas e se a comparação for entre Java e Ruby, por exemplo, como é que fica? Na minha humilde opinião, fica <em>no sense</em>. Porque Java e Ruby não são liguagens de mesma proposta; e mesmo sendo ambas de propósito geral, ambas tem objetivos claramente diferentes.</p>
<p><strong>Comparação entre mundos diferentes</strong></p>
<p>Agora vou, propositalmente, contradizer um pouco o que eu disse à cima: faz sentido, sim, você comparar Ruby com Java; Erlang com Python; F# com PHP. Sim, faz sentido.</p>
<p>Faz sentido quando você está escolhendo a linguagem que oferece a melhor solução para um dado domínio de problema.</p>
<blockquote><p><em>Super CRUD com Erlang? Não, acho que não.</em></p>
<p><em>Precisar de c</em><em>oncorrência massiva, tolerância a falhas, processos distribuídos, downtime mínimo? Humm, não sei não, mas será que não é de Erlang que você precisa?</em></p></blockquote>
<p>Entende? É nessa hora que <a href="http://al3x.net/2010/07/27/node.html" target="_blank">a escolha de uma linguagem</a> começa a pesar de verdade. Isso realmente importa.</p>
<p><strong>Mundos diferentes se complementam</strong></p>
<p>Tempos atrás, escrevendo programas Erlang/OTP, senti falta de uma ferramenta que me ajudasse a criar rapidamente a estrutura inicial do projeto e <a href="http://www.erlang.org/doc/design_principles/des_princ.html" target="_blank">umas coisas mais</a>. O que fiz? Criei uma ferramenta que faz isso: <a href="http://github.com/leandrosilva/otp_kickoff" target="_blank">otp_kickoff</a>. Em Erlang? Não, em Ruby. Fiz isso em poucas horas, usando <a href="http://github.com/wycats/thor" target="_blank">Thor</a>.</p>
<p>Pouco tempo depois, senti falta de uma ferramenta de build amigável. Novamente, o que fiz? Criei o <a href="http://github.com/leandrosilva/ebuilder" target="_blank">ebuilder</a>, usando Ruby/Thor.</p>
<p>Um outro exemplo de mundos diferentes que se complementam é o <a href="http://github.com/leandrosilva/jsparrow" target="_blank">JSparrow</a>, um cliente de <a href="http://pt.wikipedia.org/wiki/JMS" target="_blank">JMS</a> bem fluente, que fiz usando <a href="http://jruby.org/" target="_blank">JRuby</a>.</p>
<p>Essa é a ideia de tirar o melhor de cada linguagem!</p>
<p>Mesmo porque, dificilmente, você constroi um sistema de verdade <em>&#8211; que não seja um super CRUD &#8211;</em> com apenas uma única linguagem de programação. Na minha equipe mesmo, há sistemas desenvolvidos em C# .NET, que são <em>buildados, </em>testados e <em>deployados</em> com Ruby/Rake/Cucumber e usam Java/Ivy como repositório de assemblies. Isso sem falar em JavaScript, que também tem de monte.</p>
<p>Esse é o mundo real dos sistemas de verdade.</p>
<p><strong>Moral da história</strong></p>
<p>Isso me faz pensar que brigas de <em>fanboys</em> de linguagens <em>&#8211; em frenéticas buscas por prosélitos &#8211;</em> são uma verdadeira piada.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quer saber onde será seu próximo trabalho?</title>
		<link>http://leandrosilva.com.br/2009/07/30/quer-saber-onde-sera-seu-proximo-trabalho/</link>
		<comments>http://leandrosilva.com.br/2009/07/30/quer-saber-onde-sera-seu-proximo-trabalho/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 16:16:08 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[agilidade]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[ioke]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[trabalho]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=358</guid>
		<description><![CDATA[Então não deixe de visitar&#8230; O site é recém-nascido, mas já tem uns recursos bem legais, como sistema de pesquisa por palavras-chave, núvem de tags e entre outros. Vale a pena conferir e acompanhar sua evolução &#8211; e oportunidades de bons trabalhos. Mais uma iniciativa bem interessante da Caelum.]]></description>
			<content:encoded><![CDATA[<p><strong>Então não deixe de visitar&#8230;</strong></p>
<p><a href="http://ondetrabalhar.com"><img class="alignnone" src="http://ondetrabalhar.com/images/ondetrabalhar.png" alt="" width="475" height="118" /></a></p>
<p style="text-align: center;"><a href="http://ondetrabalhar.com"><img class="aligncenter" src="http://ondetrabalhar.com/images/mascote.png" alt="" width="333" height="612" /></a></p>
<p>O site é recém-nascido, mas já tem uns recursos bem legais, como sistema de <a href="http://ondetrabalhar.com/Ruby+or+Rails" target="_blank">pesquisa</a> por palavras-chave, núvem de tags e entre outros. Vale a pena conferir e acompanhar sua evolução <em>&#8211; e oportunidades de bons trabalhos.</em></p>
<p>Mais uma iniciativa bem interessante da <a href="http://blog.caelum.com.br/2009/07/29/ondetrabalharcom-uma-iniciativa-da-caelum/" target="_blank">Caelum</a>. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/07/30/quer-saber-onde-sera-seu-proximo-trabalho/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Então, falando em Java&#8230;</title>
		<link>http://leandrosilva.com.br/2009/05/25/entao-falando-em-java/</link>
		<comments>http://leandrosilva.com.br/2009/05/25/entao-falando-em-java/#comments</comments>
		<pubDate>Mon, 25 May 2009 23:59:11 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=328</guid>
		<description><![CDATA[Ontem aconteceu a terceira edição do já tradicional e indispensável evento Falando em Java, organizado pela Caelum em São Paulo. O evento, como tudo que a Caelum faz, foi muito bem organizado, num excelente espaço, com ótimos coffebreaks (eu perdi o do almoço, porque fui comer comida chinesa no Hong He. #fail) e boas pessoas. [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem aconteceu a terceira edição do já tradicional e indispensável evento <a href="http://falandoemjava.com.br" target="_blank">Falando em Java</a>, organizado pela <a href="http://www.caelum.com.br" target="_blank">Caelum</a> em São Paulo.</p>
<p>O evento, como tudo que a Caelum faz, foi muito bem organizado, num excelente espaço, com ótimos <em>coffebreaks</em> (eu perdi o do almoço, porque fui comer comida chinesa no Hong He. <em>#fail</em>) e boas pessoas. Afinal de contas, como disse o <strong>Sério Lopes</strong> e o <strong>Fábio Kung</strong> na abertura do evento, a Caelum são as pessoas.</p>
<p><strong>O que achei das apresentações?</strong></p>
<p>As duas apresentações do <strong>Jim Webber</strong> foram fantásticas, mostrando uma visão bem realista de SOA, ESB e outras <em>buzzworlds</em> do momento, e dando uma boa luz no caminho dos serviços baseados na Web, REST e microformatos. Com certeza foram palestras que me fizeram reafirmar uma antiga crença: Você aprende muito com seus erros; e mudar de opinião porque aprendeu um pouco mais sobre algo, não é demerido nenhum, muito pelo contrário, é sinal de amadurecimento. O Jim é um exemplo disso.</p>
<blockquote><p><em>Só tenho uma coisa a acrescentar, Jim: Quem mata gatinhos pequeninos quando alguém usa URL em lugar de URI, ou faz de um ESB um grande espaguete digno de festa do Bexiga, é o diabo, não Deus. Anote isso ai pra sua próxima aprensentação. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
</em></p></blockquote>
<p>A palestra do <strong>Guilherme Silveira</strong> junto com o <strong>Felipe Sabella</strong> teve uma ótima dinâmica, muito bem entrosada e com conteúdo homeopaticamente dosado. Nota 10. Mas infelizmente, nem todas as duplas tiveram o mesmo entrosamento, o que em alguns momentos acabou prejudicando bastante a mensagem das apresentações. Uma pela.</p>
<p>Destaque para o <strong>Paulo Silveira</strong> que, como sempre, não deixou a peteca cair e salvou a palestra; para o <strong>Ricardo Nakamura</strong>, que cativou a galera de primeira com sua revelação de que dorme com o pijama do Jaspion; e para o <strong>Kung</strong> que sempre tira uma carta ou duas sinistraças da manga.</p>
<p>O <strong>Sérgio</strong> e o <strong>Guilherme Moreira</strong>, no entanto, a pesar de dominarem o assunto que apresentaram, me deixaram um tanto decepcionado, porque a palestra não me pareceu muito condizente com o tema proposto. Por outro lado, devem ter feito vibrar os <em>hibernate buys</em>.</p>
<p>E claro, <em>hehehe</em>, eu não podia deixar de citar <span style="text-decoration: line-through;">o mico</span> o imprevisto do cluster com <a href="http://www.jboss.org/" target="_blank">JBoss</a> não funcionar na apresentação deles. Não por culpa do JBoss, é lógico, porque todos sabemos que há várias empresas mundo afora que rodam JBoss em cluster.</p>
<blockquote><p><em>Eu mesmo fui um dos que entrou na zueira, mesmo não tendo nada contra o JBoss. Muito pelo contrário, é um dos meus preferidos &#8211; </em><em>talvez por ainda não ter tentado colocá-lo em cluster. rsrs</em></p>
<p><em>Fica aqui minha remissão. I&#8217;m sorry!</em><em><br />
</em></p></blockquote>
<p>Ponto positivo também pras <em>Caelets</em>, muito discretas e distintas, bem distantes da vulgaridade que vemos em muitos eventos por ai. Gostei do bom senso.</p>
<p>Ah! Tem também uma novidade que vale a pena citar: Logo mais teremos o livro da Caelum de <a href="http://arquiteturajava.com.br/" target="_blank">Arquitetura e Design de Software</a> à luz da <a href="http://pt.wikipedia.org/wiki/Plataforma_Java" target="_blank">Plataforma Java</a>, com prefácio do gujeiro velho de guerra, <a href="http://fragmental.com.br" target="_blank">Phillip Calçado</a>. Se não me engano, o lançamento será em novembro.</p>
<p>Bem, no mais, é isso. Se você quiser uma cobertura mais completa sobre o evento, dê uma lida nas <a href="http://twitter.com/codezone" target="_blank">minhas tuitadas</a>. Eu ralei pra caramba pra tuitar o evento interinho, <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_blank">não vou digitar tudo outra vez</a>. Dá uma forcinha, vai. Dá uma olhada lida lá. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/05/25/entao-falando-em-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Entrevista com Ola Bini: Ioke, JVM, .NET e mais!</title>
		<link>http://leandrosilva.com.br/2009/04/28/entrevista-com-ola-bini-ioke-jvm-net-e-mais/</link>
		<comments>http://leandrosilva.com.br/2009/04/28/entrevista-com-ola-bini-ioke-jvm-net-e-mais/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 03:34:35 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[ioke]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=309</guid>
		<description><![CDATA[Quem me conhece há algum tempo ou acompanha este meu blog, sabe que eu sou totalmente meio fissurado por linguagens de programação. Sempre estou dando uma olhada em uma aqui e outra ali. Lendo, fuçando&#8230; Mas tem um cara que com certeza é ainda muito mais fissurado em linguagens de programação do que eu - [...]]]></description>
			<content:encoded><![CDATA[<p>Quem me conhece há algum tempo ou acompanha este meu blog, sabe que eu sou <span style="text-decoration: line-through;">totalmente</span> meio fissurado por linguagens de programação. Sempre estou dando uma olhada em uma aqui e outra ali. Lendo, fuçando&#8230;</p>
<p>Mas tem um cara que com certeza é ainda muito mais fissurado em linguagens de programação do que eu <em>- e diferente de mim, manja pra caramba.</em> Esse cara é o <a href="http://olabini.com" target="_blank">Ola Bini</a>, membro do core team do <a href="http://www.jruby.org" target="_self">JRuby</a>, consultor da <a href="http://www.thoughtworks.com/" target="_blank">ThoughtWorks</a>, escritor do livro <a href="http://www.amazon.com/Practical-JRuby-Rails-Web-Projects/dp/1590598814" target="_blank">JRuby on Rails</a>, membro do <a href="http://jcp.org/en/jsr/detail?id=292" target="_blank"><em>expert group</em> da JSR-292</a> e criador da linguagem <a href="http://ioke.org/" target="_blank">Ioke</a>.</p>
<p>Bem, como não podia deixar de ser, eu resolvi fazer uma pequena entrevista com ele sobre Ioke, linguagens para a <a href="http://www.java.com/pt_BR/download/faq/jvm.xml" target="_blank">JVM</a> e a <a href="http://www.microsoft.com/NET/" target="_blank">Microsoft CLR</a>, e uma coisinha ou duas mais. Confira!</p>
<div class="wp-caption aligncenter" style="width: 510px"><a href="http://www.akitaonrails.com/2008/11/22/rails-podcast-brasil-qcon-special-ola-bini-jruby-ioke" target="_blank"><img title="Ola Bini e o nosso patrício Fábio Akita (QCon 2008)" src="http://www.akitaonrails.com/assets/2008/11/22/DSC05872.JPG" alt="Ola Bini e nosso compatriota Fábio Akita" width="500" height="426" /></a><p class="wp-caption-text">Ola Bini e o nosso patrício Fábio Akita (QCon 2008)</p></div>
<p><strong>Fale-nos um pouco sobre sua paixão por linguagens de programação. Quando isto começou? O que mais te motivou?<br />
</strong><br />
Oh wow. Boa pergunta. Eu não sei quando isto começou. Em algum momento obscuro do passado &#8211; muito longe para me lembrar. =)</p>
<p>Eu comecei bem cedo, com Basic no Apple IIc. Fiz muito C e assembler na minha adolecencia, e então, aprendi C++, Java e Lisp.</p>
<p>Penso que minha atual facinação por linguagens começou quanto eu percebi como diferentes linguagens são e como muitas coisas ruins são usadas. Esta percepção levou algum tempo, mas ficou cada vez maior.</p>
<p>Eu comecei com a implementação de outra linguagem há 5-6 anos atrás.</p>
<p><strong>Além de contribuir com o projeto JRuby, você também criou a linguagem Ioke <em>do zero</em>. O que você tem a dizer sobre a JVM com plataforma para outras linguagens (além da linguagem Java)?<br />
</strong><br />
Sim. Então, a JVM é uma excelente plataforma para linguagens. Você tem um <a href="http://en.wikipedia.org/wiki/Java_Virtual_Machine" target="_blank">JIT</a> muito maduro no <a href="http://en.wikipedia.org/wiki/HotSpot_(Java)" target="_blank">Hotspot</a>. Você tem <a href="http://www.ibm.com/developerworks/java/library/j-jtp11253/" target="_blank"><em>garbage collectors</em></a> fantásticos; e você tem um monte de bibliotecas e ferramentas disponíveis. A parte ruim é que a JVM atualmente está muito amarrada a linguagens que se parecem com Java, no nível do <em>bytecode</em>. É possível contornar isto, e nós estamos trabalhando na <a href="http://jcp.org/aboutJava/communityprocess/edr/jsr292/index.html" target="_blank">JSR292</a> para dar suporte a invocações dinâmicas na JVM.</p>
<p>Mas atualmente a JVM ainda está um bocado ligada a linguagens como Java. Isto não é necessário a tudo (muitas das tecnologias Java começaram em <a href="http://pt.wikipedia.org/wiki/Smalltalk" target="_blank">Smalltalk</a> e <a href="http://en.wikipedia.org/wiki/Strongtalk" target="_blank">Strongtalk</a>).</p>
<p><strong>Você acredita que a linguagem Java está caminhando para se tornar em uma linguagem de infra-estrutura? (Uma linguagem para escrever linguagens e outros componentes críticos de infra-estrutura.)<br />
</strong><br />
Espero que sim. Java não é uma boa linguagem para escrever aplicações &#8211; ela é realmente muito baixo nível.</p>
<p><strong>Sobre Ioke. O que levou você a começar o projeto desta linguagem? Onde você pensa chegar com ela? O que você planeja para o futuro de Ioke?<br />
</strong><br />
Basicamente, a ideia com Ioke é ver o quão expressiva você pode fazer uma linguagem; e isto é o que tenho feito. Isto tem dado características linguísticas bastante avançadas; você pode fazer coisas nela que muitas pessoas inicialmente tem problemas para entender &#8211; mas ela permite você escrever código bastante sucinto e legível, que capture suas intenções.</p>
<p>O que acontecerá exatamente no futuro está no ar. Tenho muitas idéias, mas nada concreto no momento.</p>
<p><strong>Recentemente, você também portou a linguagem Ioke para a Microsoft CLR. O que te motivou a fazer isto? O que você pensa sobre a plataform Microsft .NET como plataforma host para novas linguagens?<br />
</strong><br />
Sim! Eu fiz isto porque não queria que Ioke fosse somente uma linguagem da JVM. Queria ver como a CLR funcionaria para implementa-la e queria amplicar um pouco a base de usuário. A plataforma .NET é mais ou menos tão boa quanto a JVM. Algumas coisas são piores, outras são melhores.</p>
<p><strong>O que você recomenda a aqueles que gostariam de, como você, serem designers de linguagens para a JVM? Esta recomendação seria mais ou menos a mesma para a plataforma .NET?<br />
</strong><br />
Há duas coisas que você precisa fazer. A primeira é ter uma boa idéia de como diferentes linguagens funcionam. Você precisa aprender linguagens de diferentes paradigmas e tentar entender como elas podem ser implementadas. Então, você precisa começar a fazer. Esta é a parte mais importante.</p>
<p>Comece realmente a implementar e ver o que acontece.</p>
<p><strong>Finalmente, sinta-se à vontade para dizer o que quiser sobre Ioke.</strong></p>
<p>Ela é muito &#8220;louca&#8221;. Ela é expressiva. Ela é muito lenta.</p>
<p>Penso que esta coisa de expressividade vai ser importante no futuro &#8211; já que nós estamos fazendo coisas mais e mais avançadas. Texto não escala<strong></strong> se não podemos ter uma abstração estrutural<strong> (1)</strong>. Ioke permite isto.</p>
<h5><strong><em>(1) N.T.: O que o Ola Bini quis dizer é que &#8220;texto, por si só, não pode ir a um nível superior, não pode evoluir, crescer, se não pudermos ter uma abstração estrutural sobre ele&#8221;. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
</em></strong></h5>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/04/28/entrevista-com-ola-bini-ioke-jvm-net-e-mais/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sparrow, um cliente JMS baseado em JRuby</title>
		<link>http://leandrosilva.com.br/2009/03/08/sparrow-um-cliente-jms-baseado-em-jruby/</link>
		<comments>http://leandrosilva.com.br/2009/03/08/sparrow-um-cliente-jms-baseado-em-jruby/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 04:50:50 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jms]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[mom]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=220</guid>
		<description><![CDATA[Mês passado comecei a tocar um projeto na CVC Turismo que, entre outras coisas, envolve troca mensagens assíncronas usando JMS. Esse trabalho foi está sendo tão divertido que me inspirou a escrever um post sobre Message-Driven Beans e Transações; e mais recentemente, a começar um novo projeto pessoal. Sparrow é um cliente JMS implementado sobre [...]]]></description>
			<content:encoded><![CDATA[<p>Mês passado comecei a tocar um projeto na <a href="http://www.cvc.com.br" target="_blank">CVC Turismo</a> que, entre outras coisas, envolve troca mensagens assíncronas usando <a href="http://pt.wikipedia.org/wiki/JMS" target="_blank">JMS</a>. Esse trabalho <span style="text-decoration: line-through;">foi</span> está sendo tão divertido que me inspirou a escrever um post sobre <a href="http://leandrosilva.com.br/2009/02/22/message-driven-beans-e-transacoes/" target="_self">Message-Driven Beans e Transações</a>; e mais recentemente, a começar um novo projeto pessoal.</p>
<p><strong><a href="http://github.com/leandrosilva/sparrow" target="_blank">Sparrow</a></strong> é um cliente JMS implementado sobre <a href="http://www.jruby.org" target="_blank">JRuby</a> e distribuido como uma <a href="http://www.rubygems.org/" target="_blank">Rubygem</a> &#8211; hospedada no <a href="http://github.com" target="_blank">Github</a>,  é claro. Ele é uma boa opção para quem precisa integrar sistemas <a href="http://www.ruby-lang.org/" target="_blank">Ruby</a> com servidores de aplicações <a href="http://java.sun.com/javaee/" target="_blank">Java EE</a>, provedores de mensageria JMS.</p>
<p>É pá, pum! Quer ver?</p>
<pre class="brush: ruby;">
require 'rubygems'
require 'sparrow'

# Configuração que tem que ser feita uma única vez
jms_client = Sparrow::JMS::Connection::Client.new do |props|
  props.client_jar_file         = '/oc4j_extended_101330/j2ee/home/oc4jclient.jar'
  props.initial_context_factory = 'oracle.j2ee.naming.ApplicationClientInitialContextFactory'
  props.provider_url            = 'ormi://localhost:23791'
  props.security_principal      = 'oc4jadmin'
  props.security_credentials    = 'welcome'
end

jms_client.enable_connection_factories(
    :queue_connection_factory =&gt; 'jms/MyQueueCF'
  )

jms_client.enable_queues(
    :my_queue =&gt; 'jms/MyQueue'
  )

# Envio
jms_client.queue_sender(:my_queue).send_text_message('sparrow rocks!') do |msg|
  msg.set_string_property('recipient', 'sparrow-example')
end

# Recebimento
jms_client.queue_receiver(:my_queue).receive_message(
    :timeout  =&gt; 5000,
    :selector =&gt; &quot;recipient = 'sparrow-example'&quot;
  ) do |msg|

  puts msg.is_text_message?    # true
  puts msg.text                # sparrow rocks!
end
</pre>
<p>Fácil, não? <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Se você quiser saber mais sobre <a href="http://github.com/leandrosilva/sparrow" target="_blank">o projeto</a>, testá-lo, critica-lo, ou algo assim, por favor, <span style="text-decoration: line-through;">não fique acanhado</span> fique à vontade. E se não for pedir demais, deixe um comentário nesse post, como um feedback, para eu saber o quanto ainda preciso melhorá-lo e evoluí-lo.</p>
<p>Valeu!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/03/08/sparrow-um-cliente-jms-baseado-em-jruby/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Message-Driven Beans e Transações</title>
		<link>http://leandrosilva.com.br/2009/02/22/message-driven-beans-e-transacoes/</link>
		<comments>http://leandrosilva.com.br/2009/02/22/message-driven-beans-e-transacoes/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 05:50:45 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[ejb3]]></category>
		<category><![CDATA[exceções]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jms]]></category>
		<category><![CDATA[mom]]></category>
		<category><![CDATA[transação]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=184</guid>
		<description><![CDATA[Sexta-feira passada, postei  em meu twitter que estou tocando um projeto que envolve MOM. Hammm&#8230; JMS, para ser mais específico&#8230; rsrsrs&#8230;. Bem, o fato é que este projeto acabou me motivando a escrever este post sobre o assunto transação e EJB3 Message-Driven Beans (MDB),  apenas para fazer alguns lembretes e dar algumas dicas, já que [...]]]></description>
			<content:encoded><![CDATA[<p>Sexta-feira passada, <a href="http://twitter.com/codezone/status/1231363269" target="_blank">postei  em meu twitter</a> que estou tocando um projeto que envolve <a href="http://pt.wikipedia.org/wiki/MOM" target="_blank">MOM</a>. Hammm&#8230; <a href="http://pt.wikipedia.org/wiki/JMS" target="_blank">JMS</a>, para ser mais específico&#8230; rsrsrs&#8230;. Bem, o fato é que este projeto acabou me motivando a escrever este post sobre o assunto <a href="http://pt.wikipedia.org/wiki/Transação_atômica" target="_blank">transação</a> e <a href="http://java.sun.com/products/ejb/" target="_blank">EJB3</a> <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/EJBConcepts5.html" target="_blank">Message-Driven Beans</a> (MDB),  apenas para fazer alguns lembretes e dar algumas dicas, já que este é um assunto fundamentalmente importante. Vamu que vamu então&#8230;</p>
<p>A <strong>primeira coisa</strong> importante a saber é que <strong>transações não são propagadas do produtor de mensagens JMS para o MDB que as consome</strong>, independentemente destes trabalharem com <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction3.html" target="_blank">CMT</a> ou <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction4.html" target="_blank">BMT</a>. Isso se dá pela própria natureza assíncrona de um sistema baseado em MOM, uma vez que uma mensagem pode levar horas para ser consumida, se assim fizer sentido ao sistema. Assim sendo, uma transação de um MDB está limitada ao escopo do método <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/MDB4.html#70210" target="_blank"><strong>onMessage</strong></a>, que recebe e trata as mensagens.</p>
<p>A <strong>segunda coisa</strong> importante a saber é que <strong>quando o MDB faz o seu próprio gerenciamento de sua transação, a mensagem consumida não é parte transação.</strong> Ao passo que, se a transação do MDB for gerenciada pelo contêiner EJB, sim, a mensagem é parte da transação.</p>
<p>Sabendo essas duas coisas, somos levados a uma questão: <strong>O que acontece entãos se a transação falhar?</strong> Bem, está é a <strong>terceira coisa</strong> importante que precisamos saber. Sempre que o método <strong>onMessage</strong> completa sua execução sem erros, o contêiner EJB notifica ao provedor JMS <em>reconhecendo o recebimento da mensagem.</em> No entanto, se o correr uma <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/RuntimeException.html" target="_blank">RuntimeException</a> durante a sua execução, o provedor JMS não receberá esta notificação de reconhecimento e, muito provavelmente, disponibilizará a mensagem para ser novamente consumida pelo MDB. Isso poderia causar um problema sério de <em>loop</em> infinito, em caso de <em>poison messages</em>, mas felizmente há antidoto para isso: Configurar o número máximo de tentativas de entrega de mensagens. Uff!!!</p>
<p><strong>Como lidar então com exceções, rollback e reentrega de mensagens?</strong></p>
<p>Há momentos em que a reentrega de mensagens é fundamental; e há momentos que não. Se ocorrer uma exceção de negócio, por exemplo, você não vai querer que a mensagem seja entregue novamente. Mas, se ocorrer um exceção por indisponibilidade de uma recurso (banco de dados, web service, etc), seria fundamental que a mensagem fosse entregue novamente, depois de algum tempo. Com isso em mente, vamos discutir um pouquinho o assunto.</p>
<p><strong>Primeiro de tudo</strong>, não se esqueça que <strong>MDB&#8217;s não retornam exceções ao cliente que produziu a mensagem.</strong> Se a sua lógica de negócio em cima da mensagem produzida pelo cliente prevê uma exceção, pare e pense um pouco a respeito. Se você puder responder a ele com uma outra mensagem que ele (ou outro MDB responsável por notificar clientes) poderá consumir no provedor JMS, ótimo; caso contrario, esqueça, mensagens assíncronas não é uma opção para você.</p>
<p>Seguindo adiante com a solução, você precisa saber como MDB&#8217;s CMT ou BMT se comportam quando o assunto é transação. As diferenças básicas entre esses dois modelos de gerenciamento de transações são as seguintes:</p>
<p>Se seu <strong>MDB está baseado em CMT,</strong> significa que as mensagens que ele consume são parte da transação. Portanto, se a transação sofrer <em>rollback</em>, automaticamente, o consumo da mensagem também será revertido e o provedor JMS deverá tentar entregar a mensagem novamente.</p>
<p>Já, se seu <strong>MDB está baseado em BMT,</strong> significa que se a transação sofrer <em>rollback</em> o consumo da mensagem não será revertido, como acontece automaticamente no caso de CMT, e você poderá manter isso em segredo do provedor JMS, evitando que ele entregue a mensagem novamente. Ou, se fizer sentido ao seu requisito, você poderá notificá-lo do <em>rollback</em> de maneira bem simple e segura, basta lançar uma <a href="http://java.sun.com/javaee/5/docs/api/javax/ejb/EJBException.html" target="_blank">EJBException</a> que é <em>pá/pum.</em></p>
<blockquote><p><strong><em>Um pouco mais sobre Reconhecimento de Mensagem</em></strong></p>
<p>A <a href="http://java.sun.com/javaee/5/docs/api/javax/ejb/ActivationConfigProperty.html" target="_blank">propriedade</a> <strong>acknowlodgeMode</strong>, que determina o modo de reconhecimento da mensagem, pode ser definida como <em>Auto-acknowledge</em> ou <em>Dups-ok-acknowledge</em>. A primeria opção, instrui o contêiner EJB a notificar o reconhecimento da mensagem dentro do contexto da transação, seguindo as regras já citadas; e a segunda, o instrui a fazer isso num outro momento qualquer.</p>
<p>Essa propriedade pode ser ignorada, a menos que você esteja implementando um BMT ou um CMT com <a href="http://java.sun.com/javaee/5/docs/api/javax/ejb/TransactionAttribute.html" target="_blank">atributo de transação</a> definido como <a href="http://java.sun.com/javaee/5/docs/api/javax/ejb/TransactionAttributeType.html#NOT_SUPPORTED" target="_blank"><em>NotSupported</em></a>. Do contrario, o reconhecimento sempre ocontecerá no contexto da transação.</p>
<p>Se quiser saber mais, indico que você <a href="http://www.onjava.com/pub/a/onjava/excerpt/ejb3_ch13/index.html?page=6#28" target="_blank">leia esse material</a>.</p></blockquote>
<p><strong>Resumindo:</strong> Tome cuidado com suas exceções e não deixe que elas explodam sem mais nem menos, sem um tratamento adequado, nem nada, porque elas podem detonar suas transações e ainda causar problemas de negócio, com a reentrega de mensagens. Um bom <em>log</em> também vai muito bem, meu caro! <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bom, é isso ai&#8230; Espero que te ajude!</p>
<p>E se você ainda não leu esses dois posts: <a href="http://leandrosilva.com.br/2008/08/12/cuidado-com-suas-excecoes/" target="_self">Cuidado com suas exceções</a> e <a href="http://leandrosilva.com.br/2008/08/12/transacionando-ejb3-session-beans/" target="_self">Transacionando EJB3 Session Beans</a>, quando tiver um tempinho, leia. Talvez lhe sejam úteis também.</p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/02/22/message-driven-beans-e-transacoes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Web services RESTful em Java com Jersey</title>
		<link>http://leandrosilva.com.br/2009/01/30/web-services-restful-em-java-com-jersey/</link>
		<comments>http://leandrosilva.com.br/2009/01/30/web-services-restful-em-java-com-jersey/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 17:54:14 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=121</guid>
		<description><![CDATA[Estou estudando hoje a JSR 311 e sua implementação de referência, o projeto Jersey, por conta de um requisito arquitetural que surgiu em meu novo projeto aqui na CVC Turismo. Trata-se da integração de várias aplicações legadas, desenvolvidas com tecnologias completamente heterogêneas &#8211; Java, ASP e PL/SQL Web Toolkit. Estamos, eu e meus colegas da [...]]]></description>
			<content:encoded><![CDATA[<p>Estou estudando hoje a <a href="https://jsr311.dev.java.net/nonav/releases/1.0/index.html" target="_blank">JSR 311</a> e sua implementação de referência, o projeto <a href="https://jersey.dev.java.net/" target="_blank">Jersey</a>, por conta de um requisito arquitetural que surgiu em meu novo projeto aqui na <a href="http://www.cvc.com.br" target="_blank">CVC Turismo</a>. Trata-se da integração de várias aplicações legadas, desenvolvidas com tecnologias completamente heterogêneas &#8211; Java, ASP e PL/SQL Web Toolkit.</p>
<p>Estamos, eu e meus colegas da equipe de arquitetura, considerando bastante o uso de <a href="http://pt.wikipedia.org/wiki/REST" target="_blank">web services REST</a>. Por isso meu interesse pelo Jersey, uma vez que a plataforma base desse projeto é Java.</p>
<p>Para aqueles que se interessam pelo assunto, tempos atrás <span style="text-decoration: line-through;">gastei</span> investi um tempo lendo <a href="http://brunopereira.org/webservicesrest-indice/" target="_blank">o material</a> produzido pelo <a href="http://brunopereira.org/about/" target="_blank">Bruno Pereira</a>, o qual considero a melhor referência de REST em lingua portuguesa. (Jabá!!!)</p>
<p>Hoje resolvi ler também <a href="http://www.devmedia.com.br/articles/viewcomp.asp?comp=10216" target="_blank">um de seus artigos</a> produzidos para a revista Java Magazine &#8211; que IMHO não é lá uma ótima revista de Java, mas que volta e meia publica um ou dois artigos interessantes -, para refrescar a memória.</p>
<p>Taí! Para quem quer ter um primeiro contato com <a href="https://jersey.dev.java.net/" target="_blank">Jersey</a> e a <a href="https://jsr311.dev.java.net/nonav/releases/1.0/index.html" target="_blank">JSR 311</a>, ficam aqui as dicas.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/01/30/web-services-restful-em-java-com-jersey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acho que Ola Bini não dorme!</title>
		<link>http://leandrosilva.com.br/2008/10/29/acho-que-ola-bini-nao-dorme/</link>
		<comments>http://leandrosilva.com.br/2008/10/29/acho-que-ola-bini-nao-dorme/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 16:13:23 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[ioke]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=302</guid>
		<description><![CDATA[Ola Bini publicou hoje em seu blog um roadmap para sua mais nova criação, a linguagem de programação Ioke. Ioke é, nas palavras do próprio Ola Bini, uma lingagem de programação fortemente tipada, orientada a objetos baseada em protótipos, bastante inspirada em Io, SmallTalk, Self, Ruby e Lisp (especialmente Common Lisp). Atualmente, ela está implementada [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://olabini.com" target="_blank">Ola Bini</a> publicou hoje em seu blog um <a href="http://olabini.com/blog/2008/10/ioke-0-roadmap" target="_blank">roadmap</a> para sua mais nova criação, a linguagem de programação <a href="http://olabini.com/blog/tag/ioke/" target="_blank">Ioke</a>.</p>
<p><a href="http://ioke.kenai.com" target="_blank"><img class="alignnone" src="http://asset-3.kenai.com/attachments/images/project/ioke.png?4708" alt="" width="150" height="150" /></a></p>
<p><strong>Ioke</strong> é, nas palavras do próprio Ola Bini, uma lingagem de programação fortemente tipada, orientada a objetos baseada em <a href="http://en.wikipedia.org/wiki/Prototype-based_programming" target="_blank">protótipos</a>, bastante inspirada em <a href="http://en.wikipedia.org/wiki/Io_programming_language" target="_blank">Io</a>,  <a href="http://en.wikipedia.org/wiki/Smalltalk" target="_blank">SmallTalk</a>, <a href="http://en.wikipedia.org/wiki/Self_(programming_language)" target="_blank">Self</a>, <a href="http://en.wikipedia.org/wiki/Ruby_programming_language" target="_blank">Ruby</a> e <a href="http://en.wikipedia.org/wiki/Lisp_programming_language" target="_blank">Lisp</a> (especialmente <a href="http://en.wikipedia.org/wiki/Common_Lisp" target="_blank">Common Lisp</a>). Atualmente, ela está implementada em <a href="http://en.wikipedia.org/wiki/Java_programming_language" target="_blank">Java</a> e rodar unicamente na <a href="http://en.wikipedia.org/wiki/Java_Virtual_Machine" target="_blank">JVM</a>.</p>
<p>Nesse roadmap, Ola Bini anuncia que a primeira release será chamada <strong>0</strong> (sim, <strong>zero</strong>), e deverá ser publicada até no máximo o Natal.</p>
<p>Se você quiser acompanhar a evolução de Ioke, você pode <a href="http://github.com/olabini/ioke/tree/master" target="_blank">segui-la</a> no <a href="http://github.com" target="_blank">GitHub</a>.</p>
<p>Agora fica a pergunta: Esse Ola Bini não dorme, não?</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/10/29/acho-que-ola-bini-nao-dorme/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Django agora compatível com Jython</title>
		<link>http://leandrosilva.com.br/2008/09/06/django-agora-compativel-com-jython/</link>
		<comments>http://leandrosilva.com.br/2008/09/06/django-agora-compativel-com-jython/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 14:36:31 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jython]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=248</guid>
		<description><![CDATA[Saiu do forno a versão 1.0 do Django e trouxe consigo uma boa notícia: Foram removidas todas as incompatibilidades com Jython, o interpretador Python 100% implementado em Java, para rodar Python na Java Virtual Machine. Porém, isso só é verdade para  Jython 2.5, que ainda não está disponível para produção. Na verdade, o time de [...]]]></description>
			<content:encoded><![CDATA[<p>Saiu do forno a <a href="http://www.artima.com/forums/flat.jsp?forum=270&amp;thread=237969" target="_blank">versão 1.0 do Django</a> e trouxe consigo uma boa notícia: Foram removidas todas as incompatibilidades com <a href="http://www.jython.org/Project/" target="_blank">Jython</a>, o interpretador <a href="http://pt.wikipedia.org/wiki/Python" target="_blank">Python</a> 100% implementado em <a href="http://pt.wikipedia.org/wiki/Java_(linguagem_de_programa%C3%A7%C3%A3o)" target="_blank">Java</a>, para rodar Python na Java Virtual Machine.</p>
<p>Porém, isso só é verdade para  Jython 2.5, que ainda não está disponível para produção. Na verdade, o time de desenvolvimento ainda está para lançar uma versão alpha (2.5a1).</p>
<p><em>Quen, quen, quen, quennnnnn&#8230;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/09/06/django-agora-compativel-com-jython/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mais diversão com Scala</title>
		<link>http://leandrosilva.com.br/2008/08/31/mais-diversao-com-scala/</link>
		<comments>http://leandrosilva.com.br/2008/08/31/mais-diversao-com-scala/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 03:31:21 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=225</guid>
		<description><![CDATA[Uma das coisas que mais tenho estudado ultimamente é a integração entre linguagens de programação &#8211; principalmente com Java -, de maneira a extrair o melhor de cada uma delas, o mais transparentemente possível. Scala, tal como JRuby, tem me proporcionado isso de maneira fantástica. Scala tem total integração com Java, uma de suas plataforma [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das coisas que mais tenho estudado ultimamente é a integração entre linguagens de programação &#8211; principalmente com <a href="http://java.sun.com/" target="_blank">Java</a> -, de maneira a extrair o melhor de cada uma delas, o mais transparentemente possível. <a href="http://www.scala-lang.org" target="_blank">Scala</a>, tal como <a href="http://www.jruby.org/" target="_blank">JRuby</a>, tem me proporcionado isso de maneira fantástica.</p>
<p>Scala tem total integração com Java, uma de suas plataforma host (a outra é o <a href="http://msdn.microsoft.com/en-us/netframework/default.aspx" target="_blank">Microsoft .Net Framework</a>). Assim, pode-se usar classes e interfaces de bibliotecas Java de forma natural. Vejamos um exemplo bem simples:</p>
<pre class="brush: scala;">

import java.util.{Date, Locale}
import java.text.SimpleDateFormat

object ExibeDataFormatada {
  def main(args: Array[String]) {
    val now = new Date
    val formatter = new SimpleDateFormat(
      &quot;EEEE, dd 'de' MMMM 'de' yyyy&quot;)

    // método com apenas um parâmetro podem ser invocados
    // com sintaxe infix
    println(formatter format now)
  }
}
</pre>
<p>Este código, certamente, é bem familiar para qualquer programador Java. O que ele faz é:</p>
<p>1. Importar as classes <em>Date</em> e <em>Locale</em> do pacote <em>java.util</em>, bem como a classe <em>SimpleDateFormat</em> do pacote <em>java.text</em>;<br />
2. Criar um objeto <em>ExibeDataFormatada</em>, que é um pequeno aplicativo Scala, e definir um método <em>main</em>, dentro do qual o aplicativo executará;<br />
3. Criar dois <strong>val</strong>&#8216;s (valores imutáveis): <em>now</em> para a data atual do sistema, e <em>formatter</em> para formatar nossa data atual;<br />
4. Invocar o método <em>format</em> do objeto <em>formatter</em>, passando-lhe como parâmetro <em>now</em>, que é a data atual.</p>
<p><em>(Se quiser rodar esse código, <a href="http://codezone.wordpress.com/2008/08/27/um-pouco-de-diversao-com-scala/">veja este post</a>.</em>)</p>
<p>Você deve ter notado que Scala trabalha com classes Java de maneira totalmente natural. Na verdade, muitas classes Scala fazem <em>wrap</em> de classes Java e as melhoram &#8211; como as classes com prefixo <em>Rich</em>.</p>
<p>Este foi um exemplo muito simples mesmo, mas creio que já deu para você ver que coisas muito sofisticadas também podem ser feitas com a mesma naturalidade.</p>
<p>Acredito que a integração entre linhagens é o que pode alavancar muitos projetos de requisitos complexos e totalmente heterogêneos. Porque sempre há algo que se pode fazer melhor e mais barato em uma linguagem do que em outra. Só é preciso tomar cuidado para não acabar criando uma Torre de Babel.</p>
<p>E você, o que pensa disso?</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/08/31/mais-diversao-com-scala/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
