<?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>Fabio Brandão - Blog</title>
	<atom:link href="http://www.fnbrandao.com.br/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fnbrandao.com.br/blog</link>
	<description></description>
	<lastBuildDate>Tue, 27 Nov 2012 14:11:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>git svn rebase e fatal: bad object</title>
		<link>http://www.fnbrandao.com.br/blog/2012/11/git-svn-rebase-e-fatal-bad-object/</link>
		<comments>http://www.fnbrandao.com.br/blog/2012/11/git-svn-rebase-e-fatal-bad-object/#comments</comments>
		<pubDate>Tue, 27 Nov 2012 14:11:19 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=120</guid>
		<description><![CDATA[Ao tentar atualizar um repositório do svn através do git na minha máquina recebi o seguinte erro:
fatal: bad object 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6
rev-list -1 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 bd5d9701516cfe2d4661eaa95a03755f7ae3c8a3 0fae1f416f17141abd6d78d9e042a1c5a35c7873 --not dc522b20890dbbdfef1c3bd104587d59b353d5ce: command returned error: 128
Para resolver esse problema entre no diretório .git e rode o seguinte comando:

grep -ir 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 *

No meu caso o comando acima retornou apenas 1 arquivo:
Binary file [...]]]></description>
			<content:encoded><![CDATA[<p>Ao tentar atualizar um repositório do svn através do git na minha máquina recebi o seguinte erro:</p>
<p><code>fatal: bad object 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6<br />
rev-list -1 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 bd5d9701516cfe2d4661eaa95a03755f7ae3c8a3 0fae1f416f17141abd6d78d9e042a1c5a35c7873 --not dc522b20890dbbdfef1c3bd104587d59b353d5ce: command returned error: 128</code></p>
<p>Para resolver esse problema entre no diretório <i>.git</i> e rode o seguinte comando:<br />
<code>
<pre>grep -ir 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 *</pre>
<p></code></p>
<p>No meu caso o comando acima retornou apenas 1 arquivo:</p>
<p><i>Binary file ./svn/.caches/lookup_svn_merge.db matches</i></p>
<p>Apague o arquivo e rode novamente o comando <i>git svn rebase</i></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2012/11/git-svn-rebase-e-fatal-bad-object/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Executando um comando para cada linha de um arquivo com bash</title>
		<link>http://www.fnbrandao.com.br/blog/2012/09/executando-um-comando-para-cada-linha-de-um-arquivo-com-bash/</link>
		<comments>http://www.fnbrandao.com.br/blog/2012/09/executando-um-comando-para-cada-linha-de-um-arquivo-com-bash/#comments</comments>
		<pubDate>Wed, 05 Sep 2012 19:21:00 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[xargs]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=118</guid>
		<description><![CDATA[Hoje precisei gerar o diff do svn de alguns arquivos cujo nomes estavam armazenados dentro de um arquivo.
Para gerar o diff no svn de cada um desses arquivos basta fazer o seguinte:
cat arquivos.txt &#124; xargs -I {} svn diff -r 39177:HEAD https://svn/projeto{} > diff.txt
Onde o arquivo arquivos.txt contém o nome dos arquivos em cada linha, [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje precisei gerar o <em>diff</em> do <em>svn</em> de alguns arquivos cujo nomes estavam armazenados dentro de um arquivo.</p>
<p>Para gerar o <em>diff</em> no <em>svn</em> de cada um desses arquivos basta fazer o seguinte:</p>
<p><code>cat arquivos.txt | xargs -I {} svn diff -r 39177:HEAD https://svn/projeto{} > diff.txt</code></p>
<p>Onde o arquivo <em>arquivos.txt</em> contém o nome dos arquivos em cada linha, e o <em>diff.txt</em> será o <em>diff</em> de todos esses arquivos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2012/09/executando-um-comando-para-cada-linha-de-um-arquivo-com-bash/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Excluindo arquivos não versionados no SVN</title>
		<link>http://www.fnbrandao.com.br/blog/2012/05/excluindo-arquivos-nao-versionados-no-svn/</link>
		<comments>http://www.fnbrandao.com.br/blog/2012/05/excluindo-arquivos-nao-versionados-no-svn/#comments</comments>
		<pubDate>Wed, 23 May 2012 16:58:20 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=115</guid>
		<description><![CDATA[Para excluir arquivos não versionados no SVN você pode utilizar o seguinte comando:

svn status --no-ignore &#124; grep '^\?' &#124; sed 's/^\?      //'  &#124; xargs -Ixx rm -rf xx

A primeira parte desse comando lista todos os arquivos alterados no SVN (modificados, adicionados, excluídos e não versionados), a segunda parte do [...]]]></description>
			<content:encoded><![CDATA[<p>Para excluir arquivos não versionados no <em>SVN</em> você pode utilizar o seguinte comando:</p>
<p><code><em>
<pre>svn status --no-ignore | grep '^\?' | sed 's/^\?      //'  | xargs -Ixx rm -rf xx</pre>
<p></em></code></p>
<p>A primeira parte desse comando lista todos os arquivos alterados no <em>SVN</em> (modificados, adicionados, excluídos e não versionados), a segunda parte do comando filtra as linhas que começam com <em>&#8220;?&#8221;</em> (arquivos não versionados).</p>
<p>A terceira parte elimina o <em>&#8220;?&#8221;</em> e os espaços do começo das linhas e a quarta parte exclui arquivo por arquivo retornado pelos comandos anteriores.</p>
<p>Este texto foi adaptado do link <a href="http://www.guyrutenberg.com/2008/01/18/delete-unversioned-files-under-svn/" target="_blank">http://www.guyrutenberg.com/2008/01/18/delete-unversioned-files-under-svn/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2012/05/excluindo-arquivos-nao-versionados-no-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Repositório Git no Apache2</title>
		<link>http://www.fnbrandao.com.br/blog/2012/01/repositorio-git-no-apache2/</link>
		<comments>http://www.fnbrandao.com.br/blog/2012/01/repositorio-git-no-apache2/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 15:22:24 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Apache2]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[git-http-backend]]></category>
		<category><![CDATA[WebDAV]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=108</guid>
		<description><![CDATA[Algum tempo atrás eu coloquei um repositório Git disponibilizado através do Apache2 + WebDAV utilizando a seguinte configuração do apache:

&#60;Location /repositorio.git&#62;
	Dav on
	AuthType Basic
	AuthName "Repositorio Git"
	AuthUserFile /etc/apache2/repositorio.passwd
	Require valid-user
&#60;/Location&#62;

Após algum tempo comecei a receber erros ao tentar fazer o push de muitas alterações. Se eu tentasse realizar vários push&#8217;s com erro, uma hora o push funcionava.
Fui procurar [...]]]></description>
			<content:encoded><![CDATA[<p>Algum tempo atrás eu coloquei um repositório Git disponibilizado através do Apache2 + WebDAV utilizando a seguinte configuração do apache:</p>
<p><code>
<pre>&lt;Location /repositorio.git&gt;
	Dav on
	AuthType Basic
	AuthName "Repositorio Git"
	AuthUserFile /etc/apache2/repositorio.passwd
	Require valid-user
&lt;/Location&gt;</pre>
<p></code></p>
<p>Após algum tempo comecei a receber erros ao tentar fazer o push de muitas alterações. Se eu tentasse realizar vários push&#8217;s com erro, uma hora o push funcionava.</p>
<p>Fui procurar outras formas de disponibilizar o repositório Git no Apache2 e encontrei a forma descrita abaixo:</p>
<p><code>SetEnv GIT_PROJECT_ROOT /var/www/git<br />
SetEnv GIT_HTTP_EXPORT_ALL<br />
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$          /var/www/git/$1<br />
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1<br />
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/</code></p>
<p>Esta configuração até agora não deu problema.</p>
<p>Mais detalhes dessa configuração podem ser encontrados no help do comando git-http-backend:</p>
<p><a href="http://manpages.ubuntu.com/manpages/lucid/man1/git-http-backend.1.html" target="_blank">http://manpages.ubuntu.com/manpages/lucid/man1/git-http-backend.1.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2012/01/repositorio-git-no-apache2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O Guia de Dez Minutos de diff e patch</title>
		<link>http://www.fnbrandao.com.br/blog/2012/01/o-guia-de-dez-minutos-de-diff-e-patch/</link>
		<comments>http://www.fnbrandao.com.br/blog/2012/01/o-guia-de-dez-minutos-de-diff-e-patch/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 18:35:46 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[patch]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=105</guid>
		<description><![CDATA[O seguinte texto foi traduzido e adaptado de:
http://jungels.net/articles/diff-patch-ten-minutes.html
Primeira situação: você está tentando compilar um pacote à partir do código fonte e descobre que alguém já o modificou para compilar na sua plataforma. Ele disponibilizou o seu trabalho como um &#8220;patch&#8221;, mas você não tem certeza de como utilizá-lo. Para utilizá-lo você deve aplicar o patch [...]]]></description>
			<content:encoded><![CDATA[<p>O seguinte texto foi traduzido e adaptado de:</p>
<p><a href="http://jungels.net/articles/diff-patch-ten-minutes.html" target="_blank">http://jungels.net/articles/diff-patch-ten-minutes.html</a></p>
<p>Primeira situação: você está tentando compilar um pacote à partir do código fonte e descobre que alguém já o modificou para compilar na sua plataforma. Ele disponibilizou o seu trabalho como um <em>&#8220;patch&#8221;</em>, mas você não tem certeza de como utilizá-lo. Para utilizá-lo você deve aplicar o <em>patch</em> no código fonte original com uma ferramenta de linha de comando chamada <em>patch</em>.</p>
<p>Segunda situação: você fez o download do código fonte de um pacote open source e depois de algumas alterações você conseguiu compilá-lo na sua plataforma. Você gostaria de disponibilizar o seu trabalho para outros programadores, ou para os autores do pacote, sem distribuir todo o pacote modificado. Nesta situação você deve criar um <em>patch</em>, e a ferramenta necessária é a <em>diff</em>.</p>
<p>Este é um guia rápido para gerar ou utilizar <em>patches</em> que irá ajudá-lo nestas situações, mostrando como usar as ferramentas nas situações mais comuns.</p>
<h3>Aplicando <em>patches</em> com <em>patch</em></h3>
<p>Para aplicar um <em>patch</em> em um arquivo, vá ao diretório onde o arquivo está e chame o comando <em>patch</em>:</p>
<p><code>patch < foo.patch</code></p>
<p>O comando acima assume que o <em>patch</em> está distribuído no formato unificado, que identifica o arquivo no qual <em>patch</em> deve ser aplicado. Se não estiver no formato unificado, você pode especificar o arquivo na linha de comando:</p>
<p><code>patch foo.txt < bar.patch</code></p>
<p>A aplicação de <em>patches</em> em um diretório (caso mais comum) é similar, mas você deve setar um <em>"p level"</em>. Isto significa que dentro dos arquivos de <em>patches</em>, os arquivos são identificados por caminhos que possam ser diferentes de quando o <em>patch</em> foi criado. O <em>"p level"</em> faz com que o <em>patch</em> ignore partes do caminho do arquivo para que seja possível identificar os arquivos corretamente. Geralmente um <em>"p level"</em> de 1 irá funcionar, então utilize:</p>
<p><code>patch -p1 < baz.patch</code></p>
<p>Você deve mudar para o diretório raiz do código fonte antes de executar este comando. Se o <em>"p level"</em> utilizado não identificar corretamente os arquivos, procure nomes de arquivos no <em>patch</em>. Se você ver um nome como:</p>
<p><code>/users/stephen/package/src/net/http.c</code></p>
<p>E você estiver trabalhando em um diretório que contenha <em>net/http.c</em>, use:</p>
<p><code>patch -p5 < baz.patch</code></p>
<p>Em geral, conte quantos separadores de diretório (/) você precisa remover à partir do começo do caminho, até que o restante seja um caminho que exista no diretório atual. O valor encontrado será o <em>"p level"</em> que deve ser utilizado.</p>
<p>Para remover um <em>patch</em>, use a flag <em>-R</em>:</p>
<p><code>patch -p5 -R < baz.patch</code></p>
<h3>Criando <em>patches</em> com <em>diff</em></h3>
<p>Utilizar a ferramenta <em>diff</em> é simples quer você esteja trabalhando com um arquivo ou com diretórios. Para criar um <em>patch</em> à partir de um arquivo, use:</p>
<p><code>diff -u original.c new.c > original.patch</code></p>
<p>Para criar um <em>patch</em> de um diretório inteiro, faça uma cópia do diretório:</p>
<p><code>cp -R original new</code></p>
<p>Faça as alterações necessárias no diretório <em>new/</em>. E então cria o <em>patch</em> com o comando:</p>
<p><code>diff -rupN original/ new/ > original.patch</code></p>
<p>Isto é tudo o que você precisa saber para começar a utilizar as ferramentas <em>diff</em> e <em>patch</em>. Para mais informações utilize:</p>
<p><code>man diff</p>
<p>man patch</code></p>
<h3>Traduções</h3>
<p><strong>Inglês:</strong> <a href="http://jungels.net/articles/diff-patch-ten-minutes.html" target="_blank">http://jungels.net/articles/diff-patch-ten-minutes.html</a></p>
<p><strong>Espanhol:</strong> <a href="http://www.rat.uclatux.org.ve/2009/05/guia-de-10-minutos-de-diff-y-patch/" target="_blank">http://www.rat.uclatux.org.ve/2009/05/guia-de-10-minutos-de-diff-y-patch/</a></p>
<p><strong>Francês:</strong> <a href="http://fredgnix.wordpress.com/2012/02/15/diff-et-patch-en-dix-minutes/" target="_blank">http://fredgnix.wordpress.com/2012/02/15/diff-et-patch-en-dix-minutes/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2012/01/o-guia-de-dez-minutos-de-diff-e-patch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Teclado ABNT2 no Mac OS X</title>
		<link>http://www.fnbrandao.com.br/blog/2011/10/teclado-abnt2-no-mac-os-x/</link>
		<comments>http://www.fnbrandao.com.br/blog/2011/10/teclado-abnt2-no-mac-os-x/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 00:15:23 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Programas]]></category>
		<category><![CDATA[abnt2]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=102</guid>
		<description><![CDATA[Instalei o Mac OS X Snow Leopard em uma VM esses dias e tive que alterar o teclado para o padrão ABNT2. Depois de alguma pesquisa encontrei o seguinte site http://www.appunix.com.br/howto/mac-os/teclado-abnt2-on-mac-os-x-hackintosh-snow-leopad/ que descreve como fazer o procedimento manual e, também fornece um arquivo .pkg para instalar as configurações do teclado ABNT2.
]]></description>
			<content:encoded><![CDATA[<p>Instalei o Mac OS X Snow Leopard em uma VM esses dias e tive que alterar o teclado para o padrão ABNT2. Depois de alguma pesquisa encontrei o seguinte site <a href="http://www.appunix.com.br/howto/mac-os/teclado-abnt2-on-mac-os-x-hackintosh-snow-leopad/" target="_blank">http://www.appunix.com.br/howto/mac-os/teclado-abnt2-on-mac-os-x-hackintosh-snow-leopad/</a> que descreve como fazer o procedimento manual e, também fornece um arquivo <em>.pkg</em> para instalar as configurações do teclado ABNT2.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2011/10/teclado-abnt2-no-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Upgrade do Ubuntu 10.04 para 10.10: An unresolvable problem occurred while calculating the upgrade</title>
		<link>http://www.fnbrandao.com.br/blog/2011/02/upgrade-do-ubuntu-10-04-para-10-10-an-unresolvable-problem-occurred-while-calculating-the-upgrade/</link>
		<comments>http://www.fnbrandao.com.br/blog/2011/02/upgrade-do-ubuntu-10-04-para-10-10-an-unresolvable-problem-occurred-while-calculating-the-upgrade/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 10:22:39 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[10.04]]></category>
		<category><![CDATA[10.10]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unresolvable problem]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[xserver-xorg-video-nouveau]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=100</guid>
		<description><![CDATA[Essa semana atualizei o ubuntu que estava na minha máquina da versão 8.04 até a 10.10.
Para fazer esse upgrade tive que atualizar versão por versão, nada que fosse muito difícil já que o programa de atualização faz tudo automaticamente.
Ao tentar migrar da versão 10.04 para a versão 10.10 apareceu o seguinte erro:
Could not determine the [...]]]></description>
			<content:encoded><![CDATA[<p>Essa semana atualizei o ubuntu que estava na minha máquina da versão 8.04 até a 10.10.</p>
<p>Para fazer esse upgrade tive que atualizar versão por versão, nada que fosse muito difícil já que o programa de atualização faz tudo automaticamente.</p>
<p>Ao tentar migrar da versão 10.04 para a versão 10.10 apareceu o seguinte erro:</p>
<pre><em>Could not determine the upgrade
An unresolvable problem occurred while calculating the upgrade:
E:Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
This can be caused by:
  * Upgrading to a pre-release version of Ubuntu
  * Running the current pre-release version of Ubuntu
  * Unofficial software packages not provided by Ubuntu</em></pre>
<p>Após algumas pesquisas na internet a solução foi remover o pacote <em>xserver-xorg-video-nouveau</em> através do comando:</p>
<p><code><em>apt-get --purge remove xserver-xorg-video-nouveau</em></code></p>
<p>Fontes:<br />
<a href="http://ubuntuforums.org/showthread.php?t=1664249" target="_blank">http://ubuntuforums.org/showthread.php?t=1664249</a><br />
<a href="https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/614993" target="_blank">https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/614993</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2011/02/upgrade-do-ubuntu-10-04-para-10-10-an-unresolvable-problem-occurred-while-calculating-the-upgrade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weblogic 10.3.0.0 + JSF 2.0 + @EJB Injection</title>
		<link>http://www.fnbrandao.com.br/blog/2011/01/weblogic-10-3-0-0-jsf-2-0-ejb-injection/</link>
		<comments>http://www.fnbrandao.com.br/blog/2011/01/weblogic-10-3-0-0-jsf-2-0-ejb-injection/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 13:00:48 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[@ejb]]></category>
		<category><![CDATA[jsf 2.0]]></category>
		<category><![CDATA[weblogic]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=97</guid>
		<description><![CDATA[Ao se colocar o JSF 2.0 no Weblogic 10.3.0.0, os EJB&#8217;s não são injetados nos manageds beans do JSF através da anotação @EJB.
Para corrigir esse problema, basta utilizar a classe abaixo:
import java.lang.reflect.Field;
import java.util.*;

import javax.ejb.EJB;
import javax.el.*;
import javax.naming.NamingException;

import com.sun.faces.el.ManagedBeanELResolver;

public class VariableResolver extends CompositeELResolver {

    private final Map, List&#62; ejbFields;

    public VariableResolver() [...]]]></description>
			<content:encoded><![CDATA[<p>Ao se colocar o JSF 2.0 no Weblogic 10.3.0.0, os EJB&#8217;s não são injetados nos manageds beans do JSF através da anotação <em>@EJB</em>.</p>
<p>Para corrigir esse problema, basta utilizar a classe abaixo:</p>
<pre><em>import java.lang.reflect.Field;
import java.util.*;

import javax.ejb.EJB;
import javax.el.*;
import javax.naming.NamingException;

import com.sun.faces.el.ManagedBeanELResolver;

public class VariableResolver extends CompositeELResolver {

    private final Map, List&gt; ejbFields;

    public VariableResolver() {
        this.ejbFields = new HashMap, List&gt;();
        add(new ManagedBeanELResolver());
    }

    private void preencherEjbFields(List fields, Class clazz, Set&gt; visitados) {
        if (clazz != null &amp;&amp; !visitados.contains(clazz)) {
            visitados.add(clazz);

            for (Field field : clazz.getDeclaredFields()) {
                EJB ejb = field.getAnnotation(EJB.class);
                if (ejb != null) {
                    field.setAccessible(true);
                    fields.add(new EJBField(field, ejb.mappedName(), field.getType()));
                }
            }

            preencherEjbFields(fields, clazz.getSuperclass(), visitados);

            for (Class i : clazz.getInterfaces()) {
                preencherEjbFields(fields, i, visitados);
            }
        }
    }

    private List getEjbFields(Object obj) {
        List fields = ejbFields.get(obj.getClass());

        if (fields == null) {
            fields = new ArrayList();
            Set&gt; visitados = new HashSet&gt;();
            preencherEjbFields(fields, obj.getClass(), visitados);

            synchronized (ejbFields) {
                ejbFields.put(obj.getClass(), fields);
            }
        }

        return fields;
    }

    private void processarEjbs(Object obj) throws IllegalAccessException, ClassCastException, NamingException, IllegalArgumentException {
        for (EJBField field : getEjbFields(obj)) {
            if (field.getField().get(obj) == null) {
                Object ejb = ServiceLocator.lookup(field.getType(), field.getMappedName());
                field.getField().set(obj, ejb);
            }
        }
    }

    @Override
    public Object getValue(ELContext arg0, Object arg1, Object arg2) {
        try {
            Object obj = super.getValue(arg0, arg1, arg2);
            if (obj != null) {
                processarEjbs(obj);
            }

            return obj;
        } catch (IllegalArgumentException ex) {
            throw new ELException(ex.getMessage(), ex);
        } catch (IllegalAccessException ex) {
            throw new ELException(ex.getMessage(), ex);
        } catch (NamingException ex) {
            throw new ELException(ex.getMessage(), ex);
        }
    }

    private class EJBField {

        private Field field;

        private String mappedName;

        private Class type;

        public EJBField(Field field, String mappedName, Class type) {
            this.field = field;
            this.mappedName = mappedName;
            this.type = type;
        }

        public Field getField() {
            return field;
        }

        public String getMappedName() {
            return mappedName;
        }

        public Class getType() {
            return type;
        }

    }

}</em></pre>
<p>E declarar o <em>el-resolver</em> no <em>faces-config.xml</em>:</p>
<pre><em>&lt;faces-config&gt;
 &lt;application&gt;
  &lt;el-resolver&gt;VariableResolver&lt;/el-resolver&gt;
 &lt;/application&gt;
&lt;/faces-config&gt;</em></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2011/01/weblogic-10-3-0-0-jsf-2-0-ejb-injection/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Weblogic + JPA + Hibernate = ClassNotFoundException: org.hibernate.hql.ast.HqlToken</title>
		<link>http://www.fnbrandao.com.br/blog/2011/01/weblogic-jpa-hibernate-classnotfoundexception-org-hibernate-hql-ast-hqltoken/</link>
		<comments>http://www.fnbrandao.com.br/blog/2011/01/weblogic-jpa-hibernate-classnotfoundexception-org-hibernate-hql-ast-hqltoken/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 12:52:05 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[weblogic]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=94</guid>
		<description><![CDATA[Ao tentar efetuar o deploy de uma aplicação com JPA (implementação: Hibernate), ocorre o seguinte erro:
org.springframework.orm.hibernate3.HibernateQueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]; nested exception is org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]
Caused by: org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT [...]]]></description>
			<content:encoded><![CDATA[<p>Ao tentar efetuar o deploy de uma aplicação com JPA (implementação: Hibernate), ocorre o seguinte erro:</p>
<p><code><em>org.springframework.orm.hibernate3.HibernateQueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]; nested exception is org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]<br />
Caused by: org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [SELECT p FROM PARAMETRO p WHERE UPPER(RTRIM(p.parametroPK.parametroGeral)) = :parametroGeral AND UPPER(RTRIM(p.parametroPK.codigo)) = :codigo]<br />
at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:57)<br />
at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)<br />
at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:31)<br />
at antlr.CharScanner.&lt;init&gt;(CharScanner.java:51)<br />
at antlr.CharScanner.&lt;init&gt;(CharScanner.java:60)<br />
at org.hibernate.hql.antlr.HqlBaseLexer.&lt;init&gt;(HqlBaseLexer.java:56)<br />
at org.hibernate.hql.antlr.HqlBaseLexer.&lt;init&gt;(HqlBaseLexer.java:53)<br />
at org.hibernate.hql.antlr.HqlBaseLexer.&lt;init&gt;(HqlBaseLexer.java:50)<br />
at org.hibernate.hql.ast.HqlLexer.&lt;init&gt;(HqlLexer.java:26)<br />
at org.hibernate.hql.ast.HqlParser.getInstance(HqlParser.java:44)<br />
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:242)<br />
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)<br />
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)<br />
at org.hibernate.engine.query.HQLQueryPlan.&lt;init&gt;(HQLQueryPlan.java:77)<br />
at org.hibernate.engine.query.HQLQueryPlan.&lt;init&gt;(HQLQueryPlan.java:56)<br />
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)<br />
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)<br />
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)<br />
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)<br />
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:837)<br />
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)<br />
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:835)<br />
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:827)<br />
at db.ProductManagerDaoHB.getProductList(ProductManagerDaoHB.java:14)<br />
at bus.ProductManager.getProducts(ProductManager.java:25)<br />
at web.controllers.SpringappController.handleRequest(SpringappController.java:33)<br />
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)<br />
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:819)<br />
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:754)<br />
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:399)<br />
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:354)<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)<br />
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)<br />
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)<br />
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)<br />
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)<br />
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)<br />
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)<br />
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)<br />
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)<br />
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)<br />
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)</em></code></p>
<p>Para resolver este problema basta alterar o persistence.xml e adicionar a seguinte linha:</p>
<p><code><em>&lt;property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/&gt;</em></code></p>
<p>Fonte: <a title="http://forum.springsource.org/showthread.php?t=36860" href="http://forum.springsource.org/showthread.php?t=36860" target="_blank">http://forum.springsource.org/showthread.php?t=36860</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2011/01/weblogic-jpa-hibernate-classnotfoundexception-org-hibernate-hql-ast-hqltoken/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passando propriedades de sistemas para os testes no maven</title>
		<link>http://www.fnbrandao.com.br/blog/2011/01/passando-propriedades-de-sistemas-para-os-testes-no-maven/</link>
		<comments>http://www.fnbrandao.com.br/blog/2011/01/passando-propriedades-de-sistemas-para-os-testes-no-maven/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 12:43:32 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[system.getproperty]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=91</guid>
		<description><![CDATA[Esses dias precisei fazer alguns testes que verificavam se existia uma propriedade de sistema para tomar determinada ação.
Ao se passar a propriedade através da seguinte linha de comando:
mvn -Dminha.propriedade=valor test
Verifiquei que o teste nunca encontrava a propriedade passada através da chamada System.getProperty("minha.propriedade").
Dois jeitos fáceis para fazer a passagem de propriedade corretamente para os testes são:
mvn [...]]]></description>
			<content:encoded><![CDATA[<p>Esses dias precisei fazer alguns testes que verificavam se existia uma propriedade de sistema para tomar determinada ação.</p>
<p>Ao se passar a propriedade através da seguinte linha de comando:</p>
<p><code><em>mvn -Dminha.propriedade=valor test</em></code></p>
<p>Verifiquei que o teste nunca encontrava a propriedade passada através da chamada <code><em>System.getProperty("minha.propriedade")</em></code>.</p>
<p>Dois jeitos fáceis para fazer a passagem de propriedade corretamente para os testes são:</p>
<p><code><em>mvn -Dminha.propriedade=valor test -DforkMode=never</em></code></p>
<p>ou</p>
<p><code><em>mvn test -DargLine="-Dminha.propriedade=valor"</em></code></p>
<p>Particularmente eu prefiro o segundo jeito.</p>
<p>Fonte: <a title="http://stackoverflow.com/questions/824019/maven-2-1-0-not-passing-on-system-properties-to-java-virtual-machine" href="http://stackoverflow.com/questions/824019/maven-2-1-0-not-passing-on-system-properties-to-java-virtual-machine" target="_blank">http://stackoverflow.com/questions/824019/maven-2-1-0-not-passing-on-system-properties-to-java-virtual-machine</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2011/01/passando-propriedades-de-sistemas-para-os-testes-no-maven/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
