<?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>Rafael Liu Blog &#187; Dicas</title>
	<atom:link href="http://rafaelliu.net/category/dicas/feed/" rel="self" type="application/rss+xml" />
	<link>http://rafaelliu.net</link>
	<description>Café, pinguins e outras coisas</description>
	<lastBuildDate>Wed, 28 Mar 2012 21:54:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Dica: melhorando o tempo de execução do Selenium</title>
		<link>http://rafaelliu.net/2011/11/03/dica-melhorando-o-tempo-de-execucao-do-selenium/</link>
		<comments>http://rafaelliu.net/2011/11/03/dica-melhorando-o-tempo-de-execucao-do-selenium/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 22:02:19 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[teste]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[tuning]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=549</guid>
		<description><![CDATA[Aqui vai uma dica rápida de como agilizar a execução dos seus testes: FirefoxProfile profile = new FirefoxProfile&#40;&#41;; // here's the important part profile.setPreference&#40;&#34;permissions.default.image&#34;, 2&#41;; &#160; WebDriver driver = new FirefoxDriver&#40;profile&#41;; selenium = new WebDriverBackedSelenium&#40;driver, &#34;http://rafaelliu.net&#34;&#41;; Com isso o Firefox não irá requisitar, baixar e renderizar imagens. A diferença varia de acordo a quantidade de [...]]]></description>
			<content:encoded><![CDATA[<p>Aqui vai uma dica rápida de como agilizar a execução dos seus testes:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">FirefoxProfile profile <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FirefoxProfile<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// here's the important part</span>
profile.<span style="color: #006633;">setPreference</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;permissions.default.image&quot;</span>, <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
WebDriver driver <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FirefoxDriver<span style="color: #009900;">&#40;</span>profile<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
selenium <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> WebDriverBackedSelenium<span style="color: #009900;">&#40;</span>driver, <span style="color: #0000ff;">&quot;http://rafaelliu.net&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Com isso o Firefox não irá requisitar, baixar e renderizar imagens. A diferença varia de acordo a quantidade de imagens na página e hits no cache. Executei um teste no <a href="http://g1.globo.com/" target="_blank">http://g1.globo.com/</a> com 10 iterações, o que resultou nos seguintes tempos (em milissegundos):</p>
<pre class="text">NormalSeleniumTest - 39021ms
TweakedSeleniumTest - 29072ms</pre>
<p>Hope that helps!</p>
<p>&nbsp;</p>
<p>Referência: <a href="http://kb.mozillazine.org/Permissions.default.image" target="_blank">http://kb.mozillazine.org/Permissions.default.image</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/11/03/dica-melhorando-o-tempo-de-execucao-do-selenium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Separando logs por aplicação no JBoss</title>
		<link>http://rafaelliu.net/2011/10/20/separando-logs-por-aplicacao-no-jboss/</link>
		<comments>http://rafaelliu.net/2011/10/20/separando-logs-por-aplicacao-no-jboss/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 21:56:45 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[separar]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=526</guid>
		<description><![CDATA[Separar logs de aplicações no JBoss é uma tarefa comum e existem alguns modos de fazer isso: 1. Adicionando uma Category ao $JBOSS_CONF/conf/jboss-log4j.xml pegando todos o package da aplicação e usando um Appender específico. Por exemplo: &#60;category name=&#34;net.rafaelliu&#34;&#62; &#60;priority value=&#34;INFO&#34; /&#62; &#60;appender-ref ref=&#34;BLOG_LOG&#34;/&#62; &#60;/category&#62; Embora seja a solução mais fácil, a separação não está perfeita. [...]]]></description>
			<content:encoded><![CDATA[<p>Separar logs de aplicações no JBoss é uma tarefa comum e existem alguns modos de fazer isso:</p>
<p><strong>1. Adicionando uma Category</strong> ao <code>$JBOSS_CONF/conf/jboss-log4j.xml</code> pegando todos o package da aplicação e usando um Appender específico. Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;category</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;net.rafaelliu&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;priority</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;INFO&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;appender-ref</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;BLOG_LOG&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/category<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Embora seja a solução mais fácil, a separação não está perfeita. Como estamos separando por pacotes, um erro no Hibernate por exemplo, ainda vai ser escrito no server.log, mesmo tendo sido lançado pela aplicação.</p>
<p>&nbsp;</p>
<p><strong>2. Usando Filters</strong> é possível criar um <code>TCLFilter</code> para pegar apenas logs de determinada aplicação. Basta criar um Appender específico:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;appender</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;BLOG_LOG&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.jboss.logging.appender.DailyRollingFileAppender&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;errorHandler</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.jboss.logging.util.OnlyOnceErrorHandler&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;File&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${jboss.server.log.dir}/blog.log&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Append&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;DatePattern&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;'.'yyyy-MM-dd&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;layout</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.apache.log4j.PatternLayout&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;ConversionPattern&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;%d %-5p [%c] (%t) %m%n&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/layout<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
      <span style="color: #808080; font-style: italic;">&lt;!-- filter --&gt;</span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.jboss.logging.filter.TCLFilter&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;AcceptOnMatch&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;DeployURL&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;blog.war&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/filter<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>    
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.apache.log4j.varia.DenyAllFilter&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/filter<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/appender<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>O problema aqui é que, embora o log seja gravado separadamente (inclusive de pacotes do Hibernate, por exemplo), ele será gravado duas vezes: uma vez no blog.log que definimos e uma vez no server.log do JBoss. Isso resulta em mais IO e mais espaço em disco.</p>
<p>&nbsp;</p>
<p><strong>3. Empacotando um log4j na própria aplicação</strong>, em <code>WEB-INF/lib</code>, é possível inverter o classloader e fazer com que as configurações do log4j valham apenas para sua aplicação:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;jboss-web<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;class-loading</span> <span style="color: #000066;">java2ClassLoadingCompliance</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;loader-repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			net.rafaelliu:loader=blog.war
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;loader-repository-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>java2ParentDelegation=false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/loader-repository-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/loader-repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/class-loading<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/jboss-web<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Feito isso, é preciso criar o <code>log4j.properties</code> (ou xml) normalmente:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">log4j.rootLogger=<span style="color: #800000;">${jboss.server.log.threshold}</span>, fileout
&nbsp;
log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileout.File=<span style="color: #800000;">${jboss.server.log.dir}</span><span style="color: #000000; font-weight: bold;">/</span>blog.log
log4j.appender.fileout.Append=<span style="color: #c20cb9; font-weight: bold;">true</span>
log4j.appender.fileout.DatePattern=<span style="color: #ff0000;">'.'</span>yyyy-MM-dd
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=<span style="color: #000000; font-weight: bold;">%</span>d <span style="color: #000000; font-weight: bold;">%</span>-5p <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">%</span>c<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">%</span>t<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">%</span>m<span style="color: #000000; font-weight: bold;">%</span>n</pre></div></div>

<p>O log4j faz parse de system properties, que podem ser usadas no arquivo de configuração. Uma observação importante é que não é possível usar classes do JBoss aqui! Isso causaria <code>ClassCastExceptions</code>. Algumas dicas:</p>
<ul>
<li>No JBoss 5, use o <code>jboss.server.log.dir</code> e o <code>jboss.server.log.threshold</code>. Isso facilitará o deploy da sua aplicação em outros ambientes;</li>
<li><strong> </strong> Use o mesmo Appender do jboss-log4j (provavelmente uma classe da JBoss estará lá, veja o equivalente da Apache). Isso deixa os logs do JBoss e das aplicações sincronizados, facilitando o correlacionamento de erros;</li>
</ul>
<p>O problema dessa abordagem é que perdemos o &#8220;hot deploy&#8221; do jboss-log4j.xml, que nos permite alterar o nível de log sem indisponibilidade.</p>
<p><strong>Referências:</strong><br />
<a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html">http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html</a><br />
<a href="http://viragine.blogspot.com/2009/02/separando-o-log-do-jboss-as-por.html">http://viragine.blogspot.com/2009/02/separando-o-log-do-jboss-as-por.html</a><br />
<a href="http://community.jboss.org/wiki/SeparatingApplicationLogs">http://community.jboss.org/wiki/SeparatingApplicationLogs</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/10/20/separando-logs-por-aplicacao-no-jboss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weld no Tomcat 7</title>
		<link>http://rafaelliu.net/2011/05/29/weld-no-tomcat-7/</link>
		<comments>http://rafaelliu.net/2011/05/29/weld-no-tomcat-7/#comments</comments>
		<pubDate>Sun, 29 May 2011 15:44:03 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[weld tomcat]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=428</guid>
		<description><![CDATA[Havia escrito há muito tempo atrás como fazer o deploy de uma aplicação Seam no Tomcat. Daquele tempo para cá muita coisa mudou: o Seam junto com outros frameworks de IoC gerou a JSR-299 de Contexts and Dependency Injection (CDI), a JBoss criou o Weld (implementação de referência CDI), o Seam 3 foi lançado baseado [...]]]></description>
			<content:encoded><![CDATA[<p>Havia <a title="JBoss Seam no Tomcat" href="/?p=25" target="_blank">escrito há muito</a> tempo atrás como fazer o deploy de uma aplicação Seam no Tomcat. Daquele tempo para cá muita coisa mudou: o Seam junto com outros frameworks de IoC gerou a JSR-299 de Contexts and Dependency Injection (CDI), a JBoss criou o Weld (implementação de referência CDI), o Seam 3 foi lançado baseado na nova especificação.</p>
<p>Com a padronização numa JSR, agora implementações CDI são obrigadas a suportar uma variedade maior de ambientes de forma <em>vendor neutral</em>. O <a title="Weld Environments" href="http://docs.jboss.org/weld/reference/latest/en-US/html/environments.html" target="_self">Weld faz isso</a> e entre os ambientes suportados está o Tomcat. Portanto não há necessidade de configurações extras e gambiarras! O próprio projeto Weld provê archetypes maven com várias configuração, para criar uma aplicação para rodar em um <em>servlet container</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mvn archetype:generate <span style="color: #660033;">-DarchetypeArtifactId</span>=weld-jsf-servlet-minimal \
                       <span style="color: #660033;">-DarchetypeGroupId</span>=org.jboss.weld.archetypes \
                       <span style="color: #660033;">-DarchetypeVersion</span>=1.0.0.Beta1 \
                       <span style="color: #660033;">-DarchetypeRepository</span>=central</pre></div></div>

<p>E um projeto pronto para ser executado no Tomcat/Jetty será criado. O problema é que, devido a <a title="Tomcat 7 container is identified as Tomcat 6" href="https://issues.jboss.org/browse/WELD-879" target="_blank">um bug</a>, no Tomcat 7 pode ser que você veja a seguinte exceção:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">SEVERE<span style="color: #339933;">:</span> <span style="color: #003399;">Exception</span> sending context initialized event to listener instance of <span style="color: #000000; font-weight: bold;">class</span> org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">weld</span>.<span style="color: #006633;">environment</span>.<span style="color: #006633;">servlet</span>.<span style="color: #006633;">Listener</span>
java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">NoClassDefFoundError</span><span style="color: #339933;">:</span> org<span style="color: #339933;">/</span>apache<span style="color: #339933;">/</span>AnnotationProcessor
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">defineClass1</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Native</span> <span style="color: #003399;">Method</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">defineClass</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">634</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">security</span>.<span style="color: #003399;">SecureClassLoader</span>.<span style="color: #006633;">defineClass</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">SecureClassLoader</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">142</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">findClassInternal</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">2820</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">findClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1143</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1638</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1516</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">defineClass1</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Native</span> <span style="color: #003399;">Method</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">defineClass</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">634</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">security</span>.<span style="color: #003399;">SecureClassLoader</span>.<span style="color: #006633;">defineClass</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">SecureClassLoader</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">142</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">findClassInternal</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">2820</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">findClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1143</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1638</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1516</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">weld</span>.<span style="color: #006633;">environment</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">Tomcat6Container</span>.<span style="color: #006633;">initialize</span><span style="color: #009900;">&#40;</span>Tomcat6Container.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">47</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">weld</span>.<span style="color: #006633;">environment</span>.<span style="color: #006633;">servlet</span>.<span style="color: #006633;">Listener</span>.<span style="color: #006633;">contextInitialized</span><span style="color: #009900;">&#40;</span>Listener.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">184</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardContext</span>.<span style="color: #006633;">listenerStart</span><span style="color: #009900;">&#40;</span>StandardContext.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">4544</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardContext</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardContext.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">5016</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">ContainerBase</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>ContainerBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1035</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardHost</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardHost.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">738</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">ContainerBase</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>ContainerBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1035</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardEngine</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardEngine.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">289</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardService</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardService.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">442</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardServer</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardServer.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">674</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">startup</span>.<span style="color: #006633;">Catalina</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>Catalina.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">596</span><span style="color: #009900;">&#41;</span>
	at sun.<span style="color: #006633;">reflect</span>.<span style="color: #006633;">NativeMethodAccessorImpl</span>.<span style="color: #006633;">invoke0</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Native</span> <span style="color: #003399;">Method</span><span style="color: #009900;">&#41;</span>
	at sun.<span style="color: #006633;">reflect</span>.<span style="color: #006633;">NativeMethodAccessorImpl</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>NativeMethodAccessorImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">57</span><span style="color: #009900;">&#41;</span>
	at sun.<span style="color: #006633;">reflect</span>.<span style="color: #006633;">DelegatingMethodAccessorImpl</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>DelegatingMethodAccessorImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">43</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #006633;">reflect</span>.<span style="color: #003399;">Method</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Method</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">616</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">startup</span>.<span style="color: #006633;">Bootstrap</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>Bootstrap.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">303</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">startup</span>.<span style="color: #006633;">Bootstrap</span>.<span style="color: #006633;">main</span><span style="color: #009900;">&#40;</span>Bootstrap.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">431</span><span style="color: #009900;">&#41;</span>
Caused by<span style="color: #339933;">:</span> java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassNotFoundException</span><span style="color: #339933;">:</span> org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">AnnotationProcessor</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1671</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1516</span><span style="color: #009900;">&#41;</span>
	... <span style="color: #cc66cc;">36</span> more</pre></div></div>

<p>O problema é que o Weld identifica erroneamente o Tomcat 7 como Tomcat 6. Para resolver o problema podemos definir explicitamente que o container que estamos usando é o Tomcat 7. Isso é feito criando-se um arquivo <code>META-INF/services/org.jboss.weld.environment.Container</code> no classpath com o conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">org.jboss.weld.environment.tomcat7.Tomcat7Container</pre></div></div>

<p>Note que estamos definindo na mão o container! Ou seja, abrimos mão da portabilidade. Vamos esperar o bug ser corrigido, mas até lá é isso!</p>
<p>Referência: <a href="https://issues.jboss.org/browse/WELD-879">https://issues.jboss.org/browse/WELD-879</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/05/29/weld-no-tomcat-7/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Dual head com o OpenOffice Impress (fenomenal!!!)</title>
		<link>http://rafaelliu.net/2009/08/26/dual-head-com-o-openoffice-impress-fenomenal/</link>
		<comments>http://rafaelliu.net/2009/08/26/dual-head-com-o-openoffice-impress-fenomenal/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 02:34:38 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Impress]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[OpenOffice]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=204</guid>
		<description><![CDATA[Às vésperas de dar um treinamento JBoss, eis que encontro:  Sun Presenter Console. Fiquei tão excitado com a descoberta que usei o jargão reservado aos esportes por falta de palavra melhor. Tive que postar. O Sun Presenter Console é uma extensão para o OpenOffice Impress que ajuda [muito] em apresentações em dual head (monitor do [...]]]></description>
			<content:encoded><![CDATA[<p>Às vésperas de dar um treinamento JBoss, eis que encontro:  <a title="Sun Presenter Console" href="http://extensions.services.openoffice.org/project/presenter-screen" target="_blank">Sun Presenter Console</a>. Fiquei tão excitado com a descoberta que usei o jargão reservado aos esportes por falta de palavra melhor. Tive que postar.</p>
<p>O Sun Presenter Console é uma extensão para o OpenOffice Impress que ajuda [muito] em apresentações em dual head (monitor do notebook e projetor, por exemplo).  Foi no Keynote da Apple e no Powerpoint da Microsoft que primeiro vi essa funcionalidade. Admito que o mais perto que cheguei de conhecê-la foi ver algum palestrante usando-a, mas não creio que seja tão completos quando é essa extensão para o OpenOffice Impress. Com ele é possível pôr a apresentação num monitor em fullscreen e em outro mostrar informações como o slide atual, o próximo slide, as notas para aquele slide e uma lista de thumbnails de slides. Perfeito!!!</p>
<p>Isso mostra a competência e a força de competitividade da comunidade. Devo dizer que deu um certo orgulho, mesmo sendo apenas entusiasta Open Source :p</p>
<p>EDIT: pra não ficar só na conversa, aqui vão uns screenshots do segundo monitor (no primeiro estaria a apresentação)</p>

<p>referência: <a title="GullFOSS" href="http://blogs.sun.com/GullFOSS/entry/announcing_the_sun_presenter_console" target="_blank">GullFOSS</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2009/08/26/dual-head-com-o-openoffice-impress-fenomenal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rapidinha: pull vs push MVC</title>
		<link>http://rafaelliu.net/2008/06/24/rapidinha-pull-vs-push-mvc/</link>
		<comments>http://rafaelliu.net/2008/06/24/rapidinha-pull-vs-push-mvc/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 18:59:33 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[pattern]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/?p=19</guid>
		<description><![CDATA[O padrão push é o de mais tradição, nele os dados são previamente carregados e disponibilizados para a camada de apresentação. Na prática: por exemplo o Struts com sua Action carregando os dados no request para serem usados na JSP. No padrão pull a camada de apresentação é quem faz as chamadas aos componentes que [...]]]></description>
			<content:encoded><![CDATA[<p>O padrão push é o de mais tradição, nele os dados são previamente carregados e disponibilizados para a camada de apresentação. Na prática: por exemplo o Struts com sua Action carregando os dados no request para serem usados na JSP.</p>
<p>No padrão pull a camada de apresentação é quem faz as chamadas aos componentes que irão lhes retornar os dados. Na prática: pro exemplo a página JSF invocando um getter no backing bean.</p>
<p>Resultado: no padrão do Struts muitas vezes os dados são gerados de forma que não podem ser facilmente reutilizados. Por outro lado JSF torna a reutilizacão muito mais clara e direta, através de componentes, no melhor estilo OO. Pessoalmente vejo a relação página-objetos muito mais intuitiva do que página-ação.</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/06/24/rapidinha-pull-vs-push-mvc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rapidinha: import.sql</title>
		<link>http://rafaelliu.net/2008/06/18/dica-importsql/</link>
		<comments>http://rafaelliu.net/2008/06/18/dica-importsql/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 03:01:50 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/?p=21</guid>
		<description><![CDATA[Uma facilidade muito desconhecida do Hibernate é o import.sql, que pode ser usado para popular o banco. Basta o hibernate.hbm2ddl.auto estar setado como create ou create-drop que, logo após o banco ser criado, o script será executado. fonte: http://in.relation.to/9081.lace]]></description>
			<content:encoded><![CDATA[<p>Uma facilidade muito desconhecida do Hibernate é o import.sql, que pode ser usado para popular o banco. Basta o <code>hibernate.hbm2ddl.auto</code> estar setado como <code>create</code> ou <code>create-drop</code> que, logo após o banco ser criado, o script será executado.</p>
<p>fonte: <a title="In Relation To..." href="http://in.relation.to/9081.lace" target="_blank">http://in.relation.to/9081.lace</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/06/18/dica-importsql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick one</title>
		<link>http://rafaelliu.net/2008/05/26/quick-one/</link>
		<comments>http://rafaelliu.net/2008/05/26/quick-one/#comments</comments>
		<pubDate>Mon, 26 May 2008 19:03:28 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://rafaelliu.wordpress.com/?p=12</guid>
		<description><![CDATA[This one is for all of you who (like me) keeps wasting time using commands such as find, jar and grep each time you get a classpath error: #!/bin/bash if &#91; &#34;$1&#34; = &#34;&#34; &#93;; then echo &#34;Usage: jarfind REGEXP&#34;; exit; fi &#160; for d in `find . -name '*.jar'` ; do FILES=`unzip -l $d [...]]]></description>
			<content:encoded><![CDATA[<p>This one is for all of you who (like me) keeps wasting time using commands such as find, jar and grep each time you get a classpath error:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;$1&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: jarfind REGEXP&quot;</span>;
	<span style="color: #7a0874; font-weight: bold;">exit</span>;
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> d <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> . <span style="color: #660033;">-name</span> <span style="color: #ff0000;">'*.jar'</span><span style="color: #000000; font-weight: bold;">`</span> ; <span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #007800;">FILES</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">unzip</span> <span style="color: #660033;">-l</span> <span style="color: #007800;">$d</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">29</span>- <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">egrep</span> <span style="color: #ff0000;">''</span><span style="color: #007800;">$1</span><span style="color: #ff0000;">''</span><span style="color: #000000; font-weight: bold;">`</span>;
&nbsp;
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$FILES</span>&quot;</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$d</span>&quot;</span>;
&nbsp;
		<span style="color: #000000; font-weight: bold;">for</span> f <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$FILES</span> ; <span style="color: #000000; font-weight: bold;">do</span>
			<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot; - <span style="color: #007800;">$f</span>&quot;</span>
		<span style="color: #000000; font-weight: bold;">done</span>
	<span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>I&#8217;ve chose to use unzip instead of jar since it&#8217;s far more commonly seem. Move it to /usr/local/bin/jarfind  (well, that&#8217;s a little personal) and chmod it to +x.</p>
<p>I works searching all jars under the current directory for a regular expression, most commonly a simple class name. It returns the jar&#8217;s names and all corresponding class matches.</p>
<p>I&#8217;m <span style="text-decoration:underline;">not</span> a bash programmer, so it may not look that pretty to experienced bash programmers, but it looks beautiful to me, as it saves me a lot of time =). Feel free to make any comments.</p>
<p><strong>EDIT:</strong></p>
<p>first known bug: doesn&#8217;t escape special characters in paths =/</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2008/05/26/quick-one/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

