<?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 &#187; Programação</title>
	<atom:link href="http://www.fnbrandao.com.br/blog/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fnbrandao.com.br/blog</link>
	<description></description>
	<lastBuildDate>Fri, 06 Jan 2012 15:22:24 +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>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>
]]></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>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>
		<item>
		<title>Describe no Oracle de uma tabela com dblink</title>
		<link>http://www.fnbrandao.com.br/blog/2011/01/describe-no-oracle-de-uma-tabela-com-dblink/</link>
		<comments>http://www.fnbrandao.com.br/blog/2011/01/describe-no-oracle-de-uma-tabela-com-dblink/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 12:27:30 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[dblink]]></category>
		<category><![CDATA[describe]]></category>
		<category><![CDATA[table]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=88</guid>
		<description><![CDATA[Primeiramente vamos encontrar o nome do dblink onde a tabela está realmente localizada. Isto é feito através do comando:
SELECT    DB_LINK
FROM    ALL_SYNONYMS
WHERE    SYNONYM_NAME = 'MINHA_TABELA'
Após isto basta obter as informações da tabela com os seguintes selects:
SELECT    *
FROM    ALL_TABLES@MEU_DB_LINK
WHERE    TABLE_NAME = 'MINHA_TABELA'
SELECT    *
FROM    USER_TAB_COLUMNS@MEU_DB_LINK
WHERE    TABLE_NAME = 'MINHA_TABELA'
Fonte: http://forums.oracle.com/forums/thread.jspa?messageID=4411870&#38;tstart=0
]]></description>
			<content:encoded><![CDATA[<p>Primeiramente vamos encontrar o nome do dblink onde a tabela está realmente localizada. Isto é feito através do comando:</p>
<p><code><em>SELECT    DB_LINK<br />
FROM    ALL_SYNONYMS<br />
WHERE    SYNONYM_NAME = 'MINHA_TABELA'</em></code></p>
<p>Após isto basta obter as informações da tabela com os seguintes selects:</p>
<p><code><em>SELECT    *<br />
FROM    ALL_TABLES@MEU_DB_LINK<br />
WHERE    TABLE_NAME = 'MINHA_TABELA'</em></code></p>
<p><code><em>SELECT    *<br />
FROM    USER_TAB_COLUMNS@MEU_DB_LINK<br />
WHERE    TABLE_NAME = 'MINHA_TABELA'</em></code></p>
<p>Fonte: <a title="http://forums.oracle.com/forums/thread.jspa?messageID=4411870&amp;tstart=0" href="http://forums.oracle.com/forums/thread.jspa?messageID=4411870&amp;tstart=0" target="_blank">http://forums.oracle.com/forums/thread.jspa?messageID=4411870&amp;tstart=0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2011/01/describe-no-oracle-de-uma-tabela-com-dblink/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium + Wait for Ajax</title>
		<link>http://www.fnbrandao.com.br/blog/2010/04/selenium-wait-for-ajax/</link>
		<comments>http://www.fnbrandao.com.br/blog/2010/04/selenium-wait-for-ajax/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 18:56:56 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[waitforcondition]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=61</guid>
		<description><![CDATA[Hoje tive que fazer um teste automatizado que deveria obrigatoriamente esperar por um Ajax ser executado para continuar a sua execução.
Encontrei este link: http://agilesoftwaretesting.com/?p=111, que fala o seguinte:
Faça um método em java como:
 
public static void waitForAjax(Selenium selenium, String timeout) {
    String js_condition =
      "selenium.browserbot.getCurrentWindow().jQuery.active == 0";
 [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje tive que fazer um teste automatizado que deveria obrigatoriamente esperar por um Ajax ser executado para continuar a sua execução.</p>
<p>Encontrei este link: <a title="http://agilesoftwaretesting.com/?p=111" href="http://agilesoftwaretesting.com/?p=111" target="_blank">http://agilesoftwaretesting.com/?p=111</a>, que fala o seguinte:</p>
<p>Faça um método em java como:</p>
<p><code> </code></p>
<pre>public static void waitForAjax(Selenium selenium, String timeout) {
    String js_condition =
      "selenium.browserbot.getCurrentWindow().jQuery.active == 0";
    selenium.waitForCondition(js_condition, timeout);
}
</pre>
<p>O valor da variável js_condition dependerá do framework JS que está sendo utilizado no site. Basicamente ele segue o seguinte formato:</p>
<p><code>"selenium.browserbot.getCurrentWindow()." + library specific string + " == 0"</code></p>
<p>Onde a parte específica pode ser:</p>
<p><code>jQuery: "jQuery.active"<br />
Prototype: "Ajax.activeRequestCount"<br />
Dojo: "dojo.io.XMLHTTPTransport.inFlight.length"</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2010/04/selenium-wait-for-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Duct Tape Programmer</title>
		<link>http://www.fnbrandao.com.br/blog/2010/01/the-duct-tape-programmer/</link>
		<comments>http://www.fnbrandao.com.br/blog/2010/01/the-duct-tape-programmer/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 11:14:45 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[duct tape programmer]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/2010/01/the-duct-tape-programmer/</guid>
		<description><![CDATA[Hoje voltei a ler os artigos que estavam armazenados nas abas do meu firefox! Este eu não lembro quem me enviou, acho que foi pelo twitter.
Alguns trechos interessantes:

And the duct-tape programmer is not afraid to say, “multiple inheritance sucks. Stop it. Just stop.” 
Here’s what Zawinski says about Netscape: “It was decisions like not using [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje voltei a ler os artigos que estavam armazenados nas abas do meu firefox! Este eu não lembro quem me enviou, acho que foi pelo twitter.</p>
<p>Alguns trechos interessantes:</p>
<p><code></p>
<p>And the duct-tape programmer is not afraid to say, “multiple inheritance sucks. Stop it. Just stop.” </p>
<p>Here’s what Zawinski says about Netscape: “It was decisions like not using C++ and not using threads that made us ship the product on time.”</p>
<p>Peter asked Zawinski, “Overengineering seems to be a pet peeve of yours.”<br />
“Yeah,” he says, “At the end of the day, ship the fucking thing! It’s great to rewrite your code and make it cleaner and by the third time it’ll actually be pretty. But that’s not the point—you’re not here to write code; you’re here to ship products.”</p>
<p>Zawinski didn’t do many unit tests. They “sound great in principle. Given a leisurely development pace, that’s certainly the way to go. But when you’re looking at, ‘We’ve got to go from zero to done in six weeks,’ well, I can’t do that unless I cut something out. And what I’m going to cut out is the stuff that’s not absolutely critical. And unit tests are not critical. If there’s no unit test the customer isn’t going to complain about that.”</p>
<p></code></p>
<p><a href="http://www.joelonsoftware.com/items/2009/09/23.html" target="_blank">http://www.joelonsoftware.com/items/2009/09/23.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2010/01/the-duct-tape-programmer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O mínimo que todo o desenvolvedor de software precisa saber sobre Unicode e CharSets</title>
		<link>http://www.fnbrandao.com.br/blog/2010/01/o-minimo-que-todo-o-desenvolvedor-de-software-precisa-saber-sobre-unicode-e-charsets/</link>
		<comments>http://www.fnbrandao.com.br/blog/2010/01/o-minimo-que-todo-o-desenvolvedor-de-software-precisa-saber-sobre-unicode-e-charsets/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 10:51:36 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[character set]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/2010/01/o-minimo-que-todo-o-desenvolvedor-de-software-precisa-saber-sobre-unicode-e-charsets/</guid>
		<description><![CDATA[Hoje, após muito tempo resolvi ler um artigo recomendado por um colega do trabalho (Willian).
O artigo fala sobre o problema da representação de string nos computadores e como escrever uma aplicação de forma correta para que os usuários não vejam o texto com problemas (como por exemplo letras substituídas por uma ? ou um quadrado [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje, após muito tempo resolvi ler um artigo recomendado por um colega do trabalho (Willian).</p>
<p>O artigo fala sobre o problema da representação de string nos computadores e como escrever uma aplicação de forma correta para que os usuários não vejam o texto com problemas (como por exemplo letras substituídas por uma ? ou um quadrado preenchido com uma interrogação no meio).</p>
<p><a href="http://www.joelonsoftware.com/articles/Unicode.html" target="_blank">http://www.joelonsoftware.com/articles/Unicode.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2010/01/o-minimo-que-todo-o-desenvolvedor-de-software-precisa-saber-sobre-unicode-e-charsets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP + Zend + PDO + MySQL</title>
		<link>http://www.fnbrandao.com.br/blog/2010/01/php-zend-pdo-mysql/</link>
		<comments>http://www.fnbrandao.com.br/blog/2010/01/php-zend-pdo-mysql/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 17:07:18 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[access denied for user]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pdo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[unknown mysql server host]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=48</guid>
		<description><![CDATA[Hoje eu estava fazendo um site utilizando php, Zend Framework, PDO e MySQL.
Quando fui fazer uma tela que se conectava com o banco de dados, ocorria o seguinte erro:
SQLSTATE[HY000] [2005] Unknown MySQL server host ''localhost'' (1)
Removi do arquivo de configuração a linha que informava o host onde estava o banco de dados e o erro [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje eu estava fazendo um site utilizando php, Zend Framework, PDO e MySQL.</p>
<p>Quando fui fazer uma tela que se conectava com o banco de dados, ocorria o seguinte erro:</p>
<p><code>SQLSTATE[HY000] [2005] Unknown MySQL server host ''localhost'' (1)</code></p>
<p>Removi do arquivo de configuração a linha que informava o host onde estava o banco de dados e o erro passou a ser:</p>
<p><code>SQLSTATE[28000] [1045] Access denied for user 'user'@'localhost' (using password: YES)</code></p>
<p>Não, as permissões não estavam erradas. O problema todo era o arquivo de configuração do zend (application.ini), que estava assim:</p>
<p><code>resources.db.params.host = 'localhost'<br />
resources.db.params.username = 'user'<br />
resources.db.params.password = 'pass'<br />
resources.db.params.dbname = 'db'</code></p>
<p>O problema todo era as aspas simples, deveriam ser aspas duplas:</p>
<p><code>resources.db.params.host = "localhost"<br />
resources.db.params.username = "user"<br />
resources.db.params.password = "pass"<br />
resources.db.params.dbname = "db"</code></p>
<p>Acabei perdendo a manhã toda até achar este pequeno problema.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2010/01/php-zend-pdo-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

