<?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>Roberto Furutani &#187; Java</title>
	<atom:link href="http://www.furutani.com.br/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.furutani.com.br</link>
	<description>O site de um computólogo curioso!</description>
	<lastBuildDate>Fri, 20 Jan 2012 00:25:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Erro JDBC &#8211; Io exception: NL Exception was generated</title>
		<link>http://www.furutani.com.br/2011/09/erro-jdbc-io-exception-nl-exception-was-generated/</link>
		<comments>http://www.furutani.com.br/2011/09/erro-jdbc-io-exception-nl-exception-was-generated/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 12:13:21 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=768</guid>
		<description><![CDATA[Olá Hoje me deparei com um erro diferente ao tentar conectar ao banco de dados Oracle numa aplicação Java. Caused by: java.sql.SQLException: Io exception: NL Exception was generated Depois de algumas analises verifiquei que a string de conexão estava errada: jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS_LIST=(ADDRESS=(protocol=tcp)(host=198.31.10.51)(port=1521))(ADDRESS=(protocol=tcp)(host=198.31.10.50)(port=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=meu_banco)) No final da string faltou um fecha parênteses &#8220;)&#8221;. Abaixo string que funciona sem [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Hoje me deparei com um erro diferente ao tentar conectar ao banco de dados Oracle numa aplicação Java.</p>
<pre><em><strong>Caused by: java.sql.SQLException: Io exception: NL Exception was generated</strong></em></pre>
<p>Depois de algumas analises verifiquei que a string de conexão estava errada:</p>
<pre class="brush: php">

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS_LIST=(ADDRESS=(protocol=tcp)(host=198.31.10.51)(port=1521))(ADDRESS=(protocol=tcp)(host=198.31.10.50)(port=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=meu_banco))</pre>
<p>No final da string faltou um fecha parênteses &#8220;)&#8221;.</p>
<p>Abaixo string que funciona sem problemas:</p>
<pre class="brush: php">

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS_LIST=(ADDRESS=(protocol=tcp)(host=198.31.10.51)(port=1521))(ADDRESS=(protocol=tcp)(host=198.31.10.50)(port=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=meu_banco)))</pre>
<p>portanto quando ocorrer esse erro verifique sua string nos mínimos detalhes.</p>
<p>Até mais,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/09/erro-jdbc-io-exception-nl-exception-was-generated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trabalhando com arquivos no Java 7</title>
		<link>http://www.furutani.com.br/2011/08/trabalhando-com-arquivos-no-java-7/</link>
		<comments>http://www.furutani.com.br/2011/08/trabalhando-com-arquivos-no-java-7/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 00:10:23 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java7]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=757</guid>
		<description><![CDATA[Olá Trabalhar com arquivos no Java7 ficou muito mais fácil com a introdução da classe java.nio.file.Files. Com esta classe copiar, mover, apagar e outras operações básicas ficaram muito simples. A seguir veremos alguns exemplos: O trecho abaixo obtém o sistemas de arquivos padrão acessível pela JVM. FileSystem defaultFS = FileSystems.getDefault(); Agora criamos um objeto da [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Trabalhar com arquivos no Java7 ficou muito mais fácil com a introdução da classe <a href="http://download.oracle.com/javase/7/docs/api/java/nio/file/Files.html" title="link" target="_blank">java.nio.file.Files</a>. Com esta classe copiar, mover, apagar e outras operações básicas ficaram muito simples.<br />
A seguir veremos alguns exemplos:<br />
O trecho abaixo obtém o sistemas de arquivos padrão acessível pela JVM.</p>
<pre class="brush: java"> FileSystem defaultFS = FileSystems.getDefault();</pre>
<p>Agora criamos um objeto da classe Path que representa o diretório D:\java</p>
<pre class="brush: java">Path basePath = defaultFS.getPath(&quot;D:\\&quot;, &quot;java&quot;); </pre>
<p>Os objetos Path podem referenciar diretórios e arquivos.</p>
<pre class="brush: java">Path temp1 = basePath.resolve(&quot;temp1&quot;+
              File.separator + &quot;meu_arquivo.txt&quot;);
			Path temp2 = basePath.resolve(&quot;temp2&quot;);</pre>
<p>Usamos a classe Files para criar o diretório com o método estático createDirectories()</p>
<pre class="brush: java">Files.createDirectories(temp2); </pre>
<p>Abaixo copiamos o arquivo para outro diretório substituindo caso exista.</p>
<pre class="brush: java">Files.copy(temp1, temp2,
                StandardCopyOption.REPLACE_EXISTING ); </pre>
<p>Para move o arquivo para outro diretório substituindo caso exista usamos o código abaixo.</p>
<pre class="brush: java">Files.move(temp1, temp3.resolve(&quot;fim.txt&quot;),
                StandardCopyOption.REPLACE_EXISTING); </pre>
<p>Para saber se o arquivo existe</p>
<pre class="brush: java">System.out.println(&quot;File exists &quot; + Files.exists(temp1)); </pre>
<p>Mostramos o tamanho do arquivo em bytes</p>
<pre class="brush: java">System.out.println(Files.size(temp2) + &quot; bytes&quot;); </pre>
<p>O código abaixo lista os diretórios raízes, no windows retornaria C:\, D:\, E:\ etc.</p>
<pre class="brush: java">FileSystem defaultFS = FileSystems.getDefault();
		Iterable&lt;Path&gt; rootDirectories = defaultFS.getRootDirectories();

		for(Path pth : rootDirectories){
			System.out.println(pth.toString());
		}</pre>
<p>Para mim a API foi bem escrita, é bem auto-explicativa.<br />
Por enquanto minha ressalva é quanto as permissões no padrão POSIX, achei elas complicadas de serem aplicadas.</p>
<p>Antes de ter a classe Files para copiar um arquivo geralmente faríamos:</p>
<pre class="brush: java">FileInputStream in =
                 new FileInputStream(&quot;D:\arquivo.txt&quot;);
            FileOutputStream out = new FileOutputStream(&quot;D:\destino.txt&quot;);
            byte[] buf = new byte[1024];
            int i = 0;
            while ((i = in.read(buf)) != -1) {
                out.write(buf, 0, i);
            }
            in.close();
            out.close(); </pre>
<p>No Java 7 não precisa dar close nos recursos que implementam java.lang.AutoCloseable. Assim você não corre mais riscos de esquece preso um recurso.</p>
<p>Até mais,<br />
Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/08/trabalhando-com-arquivos-no-java-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java7 &#8211; Switch com String e multi-catch</title>
		<link>http://www.furutani.com.br/2011/08/java7-switch-com-string-e-multi-catch/</link>
		<comments>http://www.furutani.com.br/2011/08/java7-switch-com-string-e-multi-catch/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 23:41:29 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Java7]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=753</guid>
		<description><![CDATA[Olá, Instalei o Java 7 para testar alguns novos recursos. Link para download Vamos aos dois mais básicos, porém muito úteis. 1. switch Agora no Java 7 é possível fazer switch de Strings. Como sempre, o comando é case-sensitive. public class Java7 { public static void main(String [] args){ String cor = &#34;azul&#34;; switch(cor){ case [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Instalei o Java 7 para testar alguns novos recursos.<br />
<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" title="link" target="_blank">Link para download</a></p>
<p>Vamos aos dois mais básicos, porém muito úteis.</p>
<p><strong>1. switch</strong><br />
Agora no Java 7 é possível fazer switch de Strings.<br />
Como sempre, o comando é case-sensitive.</p>
<pre class="brush: java">
public class Java7 {

	public static void main(String [] args){

	  String cor = &quot;azul&quot;;

	  switch(cor){

		  case &quot;verde&quot;:
		  System.out.println(&quot;Cor verde&quot;);
		  break;

		  case &quot;amarelo&quot;:
		  System.out.println(&quot;Cor amarelo&quot;);
		  break;

		  case &quot;azul&quot;:
		  System.out.println(&quot;Cor azul&quot;);
		  break;

		  case &quot;Azul&quot;:
		  System.out.println(&quot;Cor Azul&quot;);
		  break;

		  default:
		  System.out.println(&quot;Cor indefinida&quot;);
		  break;
	  }
	}
}
</pre>
<p>Nesse exemplo a saída seria: Cor azul</p>
<p><strong>2. catch múltiplos</strong><br />
Nessa versão é possível com uma única declaração de catch &#8220;pegar&#8221; várias exceções.<br />
Basta separar as exceções por pipe &#8220;|&#8221;.</p>
<pre class="brush: java">
import java.io.*;

public class Java7 {
	public static void main(String [] args){
		try {
			 FileInputStream fis = new FileInputStream(&quot;arquivo.txt&quot;);

			 DataInputStream dis = new DataInputStream(fis);
			 BufferedReader br = new BufferedReader(new InputStreamReader(dis, &quot;UTF-8&quot;));
			 String linha;

			  while ((linha = br.readLine()) != null){
				System.out.println (linha);
			  }			

		} catch(IOException | NullPointerException exc){
		  System.out.println(&quot;Deu erro &quot; + exc);
		}
	}
}
</pre>
<p>As exceções declaradas no catch não podem ser mãe e filha (subclasse).<br />
Se por exemplo declarássemos:</p>
<pre class="brush: java">catch(IOException | FileNotFoundException | UnsupportedEncodingException exc)</pre>
<p>Teríamos o seguinte erro na compilação:</p>
<pre class="brush: php">
Java7.java:16: error: Alternatives in a multi-catch statement cannot be related
by subclassing
                } catch(IOException | FileNotFoundException | UnsupportedEncodin
gException exc){
                                      ^
  Alternative FileNotFoundException is a subclass of alternative IOException
Java7.java:16: error: Alternatives in a multi-catch statement cannot be related
by subclassing
                } catch(IOException | FileNotFoundException | UnsupportedEncodin
gException exc){
                                                              ^
  Alternative UnsupportedEncodingException is a subclass of alternative IOExcept
ion
2 errors
</pre>
<p>até mais,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/08/java7-switch-com-string-e-multi-catch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cuidado com parse de String para Date</title>
		<link>http://www.furutani.com.br/2011/08/cuidado-com-parse-de-string-para-date/</link>
		<comments>http://www.furutani.com.br/2011/08/cuidado-com-parse-de-string-para-date/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 00:12:48 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[SimpleDateFormat]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=744</guid>
		<description><![CDATA[Olá Esse post é só uma dica para você que usa o SimpleDateFormat para converter String em Date. Não sei por que razão (para falar a verdade também não pesquisei) mas o SimpleDateFormat não lança uma exceção quando passamos um data que não existe no calendário. Por exemplo 31 de setembro e 32 de setembro. [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Esse post é só uma dica para você que usa o SimpleDateFormat para converter String em Date.<br />
Não sei por que razão (para falar a verdade também não pesquisei) mas o SimpleDateFormat não lança uma exceção quando passamos um data que não existe no calendário. Por exemplo 31 de setembro e 32 de setembro. Ele simplesmente converte para um dia do próximo mês.</p>
<p>Veja os exemplos abaixos:</p>
<pre class="brush: java">
    SimpleDateFormat sdf = new SimpleDateFormat(&quot;dd/MM/yyyy&quot;);
    System.out.println(sdf.parse(&quot;30/09/2011&quot;));
    System.out.println(sdf.parse(&quot;31/09/2011&quot;));
    System.out.println(sdf.parse(&quot;32/09/2011&quot;));

    // Saídas
    // Fri Sep 30 00:00:00 BRT 2011
    // Sat Oct 01 00:00:00 BRT 2011
    // Sun Oct 02 00:00:00 BRT 2011
</pre>
<p>Dica do Tadashi:<br />
Para validar a data use o método <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/text/DateFormat.html#setLenient(boolean)" title="setLenient" target="_blank">setLenient(false)</a></p>
<p>Dessa forma um ParseException será lançada!</p>
<p>Até mais,<br />
Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/08/cuidado-com-parse-de-string-para-date/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lendo valores RGB de uma imagem com java</title>
		<link>http://www.furutani.com.br/2011/02/lendo-valores-rgb-de-uma-imagem-com-java/</link>
		<comments>http://www.furutani.com.br/2011/02/lendo-valores-rgb-de-uma-imagem-com-java/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 00:14:05 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=723</guid>
		<description><![CDATA[Olá Programinha para identificar valores RGB e gerar imagens pixel a pixel pelo valor RGB. import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; import java.util.*; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.event.*; public class IdentificadorRGB extends JFrame implements MouseMotionListener { private JLabel l_imagem, l_red, l_green, l_blue, l_r, l_g, l_b; private BufferedImage imagem, img_red, img_blue, [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Programinha para identificar valores RGB e gerar imagens pixel a pixel pelo valor RGB. </p>
<pre class="brush: java">
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.event.*;  

public class IdentificadorRGB extends JFrame implements MouseMotionListener {  

   private JLabel l_imagem, l_red, l_green, l_blue, l_r, l_g, l_b;
   private BufferedImage imagem,
   img_red, img_blue, img_green;
   Container c;  

   IdentificadorRGB() {
      super(&quot;Identificador de valores RGB pixel a pixel&quot;);
      try {
         //Leitura da imagem do disco
         imagem = ImageIO.read(new File(&quot;imagem.png&quot;));
         img_blue = ImageIO.read(new File(&quot;imagem.png&quot;));
         img_red = ImageIO.read(new File(&quot;imagem.png&quot;));
         img_green = ImageIO.read(new File(&quot;imagem.png&quot;));
      } catch (IOException e) {
         e.printStackTrace();
      }
      getContentPane().setLayout(null);
      c = getContentPane();  

      l_r = new JLabel();
      l_r.setBounds(300, 0, 270, 185);
      c.add(l_r);  

      l_g = new JLabel();
      l_g.setBounds(300, 190, 270, 185);
      c.add(l_g);  

      l_b = new JLabel();
      l_b.setBounds(5, 245, 270, 185);
      c.add(l_b);  

      l_imagem = new JLabel();
      l_imagem.setIcon(new ImageIcon(imagem));
      l_imagem.setBounds(0, 0, 270, 185);
      c.add(l_imagem);  

      l_red = new JLabel();
      l_red.setText(&quot;R:&quot;);
      l_red.setBounds(5, 190, 100, 15);
      c.add(l_red);  

      l_green = new JLabel();
      l_green.setText(&quot;G:&quot;);
      l_green.setBounds(5, 210, 100, 15);
      c.add(l_green);  

      l_blue = new JLabel();
      l_blue.setText(&quot;B:&quot;);
      l_blue.setBounds(5, 225, 100, 15);
      c.add(l_blue);  

      WritableRaster raster = imagem.getRaster();
      int pixels[] = new int[4];
      for (int i = 0; i &lt; imagem.getWidth(); i++)
         for (int j = 0; j &lt; imagem.getHeight(); j++) {
            raster.getPixel(i, j, pixels);
            img_red.setRGB(i, j, setR(pixels[0] ));
            img_green.setRGB(i, j, setG(pixels[1] ));
            img_blue.setRGB(i, j, setB(pixels[2] ));  

         }  

      c.validate();
      l_r.setIcon(new ImageIcon(img_red));
      l_g.setIcon(new ImageIcon(img_green));
      l_b.setIcon(new ImageIcon(img_blue));
      addMouseMotionListener(this);
      setSize(600, 500);
      setResizable(false);
      show();
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

   }
   /* métodos que transforma valores inteiros do RGB para um numero hexadecimal
    *
    * Por exemplo 255,000,255  fica em hexadecimal 0x00FF00FF
    *
    * O dois primeiros 00 são valores do ALPHA que é responsavel pela
    * transparencia
    *     *
    */
   private int setR(int r) {
      return 0
         &lt;&lt; 24
            | ((r &lt;&lt; 16) &amp; 0x00FF0000)
            | ((0 &lt;&lt; 8 ) &amp; 0x0000FF00)
            | (0 &amp; 0x000000FF);
   }
   private int setG(int g) {
      return 0
         &lt;&lt; 24
            | ((0 &lt;&lt; 16) &amp; 0x00FF0000)
            | ((g &lt;&lt; 8 ) &amp; 0x0000FF00)
            | (0 &amp; 0x000000FF);
   }
   private int setB(int b) {
      return 0
         &lt;&lt; 24
            | ((0 &lt;&lt; 16) &amp; 0x00FF0000)
            | ((0 &lt;&lt; 8 ) &amp; 0x0000FF00)
            | (b &amp; 0x000000FF);
   }  

   public static void main(String[] args) {
      new IdentificadorRGB();
   }  

   public void mouseDragged(MouseEvent arg0) {
   }  

   public void mouseMoved(MouseEvent arg0) {  

      WritableRaster raster = imagem.getRaster();
      int pixels[] = new int[4];
      if (arg0.getX() &lt; imagem.getWidth()
         &amp;&amp; arg0.getY() &lt; imagem.getHeight()) {
         raster.getPixel(arg0.getX() - 3, arg0.getY() - 23, pixels);
         //Mostras os valores na tela
         l_red.setText(&quot;R: &quot; + pixels[0] );
         l_green.setText(&quot;G: &quot; + pixels[1] );
         l_blue.setText(&quot;B: &quot; + pixels[2] );
      }
   }  

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/02/lendo-valores-rgb-de-uma-imagem-com-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problema com Mojarra 2.0.4 e PhaseListener</title>
		<link>http://www.furutani.com.br/2011/02/problema-com-mojarra-2-0-4-e-phaselistener/</link>
		<comments>http://www.furutani.com.br/2011/02/problema-com-mojarra-2-0-4-e-phaselistener/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 10:54:05 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jsf]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=719</guid>
		<description><![CDATA[Olá, Esse post é apenas um lembrete meu, mas pode ajudar outras pessoas ;-) No Mojarra 2.0.4 (acredito que este problema venha desde da 2.0.0) quando você implementa seu javax.faces.event.PhaseListener no método beforePhase() o método FacesContext.getViewRoot() retorna null. Isto impossibilita a uma verificação que eu precisava fazer no código abaixo. Para contornar o problema joguei o [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Esse post é apenas um lembrete meu, mas pode ajudar outras pessoas  ;-)</p>
<p>No <strong>Mojarra 2.0.4</strong> (acredito que este problema venha desde da 2.0.0) quando você implementa seu <em><strong>javax.faces.event.PhaseListener</strong></em> no método <strong>beforePhase()</strong> o método <em><strong>FacesContext.getViewRoot()</strong></em> retorna null. Isto impossibilita a uma verificação que eu precisava fazer no código abaixo.<br />
Para contornar o problema joguei o código para o método <strong>afterPhase()</strong>, pois lá o <strong>getViewRoot()</strong> não vem nulo.<br />
Não sei se isso ocorre com outras implementações do JSF 2 como o MyFaces e nem sei se é proposital ou é se um bug.</p>
<pre class="brush: java">
public void beforePhase(PhaseEvent evt) {
	PhaseId phaseId = evt.getPhaseId();
	FacesContext ctx = evt.getFacesContext();
	String viewId = ctx.getViewRoot().getViewId();

	if(PhaseId.RESTORE_VIEW.equals(phaseId)){
		// Verificação simples de autorização de acesso
		// Caso usuario não estiver na sessão, redireciona para o login
		// Unica pagina livre é o que tem  login na identificação da view
		HttpSession session = (HttpSession) ctx.getExternalContext().getSession(true);
		Object usuario = session.getAttribute(CrmGlobals.USUARIO_AUTENT);

		try {

			if(!(viewId.indexOf(&quot;login&quot;) &gt; 0) &amp;&amp; usuario == null){
				FacesContext.getCurrentInstance().getExternalContext().redirect(&quot;/crm/login/login.jsf&quot;);
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
</pre>
<p>Até mais,<br />
Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/02/problema-com-mojarra-2-0-4-e-phaselistener/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lançado JasperReports 4.0.0 e iReport 4.0.0</title>
		<link>http://www.furutani.com.br/2011/01/lancado-jasperreports-4-0-0-e-ireport-4-0-0/</link>
		<comments>http://www.furutani.com.br/2011/01/lancado-jasperreports-4-0-0-e-ireport-4-0-0/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 22:24:33 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[ireport]]></category>
		<category><![CDATA[jasperreports]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=716</guid>
		<description><![CDATA[Olá, Foram lançados no dia 10 de Janeiro de 2011 a versão 4.0.0 do JasperReports e do iReport. Pelo que vi no changelog do iReport não tem muitas novidades, apenas correção de erros. No JasperReports foram incluídos essas funcionalidades listadas abaixo, além de correções de bugs. - new CSV query executer added to simplify to [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Foram lançados no dia 10 de Janeiro de 2011 a versão 4.0.0 do JasperReports e do iReport.</p>
<p>Pelo que vi no changelog do iReport não tem muitas novidades, apenas correção de erros. No JasperReports foram incluídos essas funcionalidades listadas abaixo, além de correções de bugs.</p>
<blockquote><p><em>- new CSV query executer added to simplify to allow configuring CSV data sources from within report templates<br />
using built-in paramters and config properties;</p>
<p>- new CSV metadata exporter added to better control the CSV export by marking columns in the report template<br />
using custom properties;</p>
<p>- new chapters in the Sample Reference documentation have beed completed<br />
(http://jasperreports.sf.net/sample.reference.html);</em></p></blockquote>
<p><strong>Download <strong>iReport </strong><br />
</strong><a href="https://sourceforge.net/projects/ireport/files"><span style="color: #6c8292;">https://sourceforge.net/projects/ireport/files</span></a></p>
<p><strong>iReport plugin for NetBeans<br />
</strong><a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=4425"><span style="color: #6c8292;">http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=4425</span></a></p>
<p><strong>Biblioteca JasperReports</strong></p>
<p><span style="color: #6c8292;"><a href="http://sourceforge.net/projects/jasperreports/files/jasperreports/">http://sourceforge.net/projects/jasperreports/files/jasperreports/</a></span></p>
<p><span style="color: #000000;">Até mais,</span></p>
<p><span style="color: #000000;">Roberto</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2011/01/lancado-jasperreports-4-0-0-e-ireport-4-0-0/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JasperReports com Oracle ADF</title>
		<link>http://www.furutani.com.br/2010/12/jasperreports-com-oracle-adf/</link>
		<comments>http://www.furutani.com.br/2010/12/jasperreports-com-oracle-adf/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 23:48:23 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[jasperreports]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=703</guid>
		<description><![CDATA[Olá Escrevo este post para deixar uma dica para quem precisa integrar ADF com JasperReports. No blog GEBS foi publicado um artigo sobre esse tema com direito a exemplo para download. Veja o artigo clicando no link a seguir: http://www.gebs.ro/blog/oracle/jasper-reports-in-adf/ Até mais Roberto]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Escrevo este post para deixar uma dica para quem precisa integrar ADF com<a href="http://furutani.com.br/tags/ireport"> JasperReports</a>. No blog <a href="http://www.gebs.ro/">GEBS </a>foi publicado um artigo sobre esse tema com direito a exemplo para download.</p>
<p>Veja o artigo clicando no link a seguir: <a href="http://www.gebs.ro/blog/oracle/jasper-reports-in-adf/">http://www.gebs.ro/blog/oracle/jasper-reports-in-adf/</a></p>
<p>Até mais</p>
<p>Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2010/12/jasperreports-com-oracle-adf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boas Práticas &#8211; Dica nº 1</title>
		<link>http://www.furutani.com.br/2010/09/boas-praticas-dica-n%c2%ba-1/</link>
		<comments>http://www.furutani.com.br/2010/09/boas-praticas-dica-n%c2%ba-1/#comments</comments>
		<pubDate>Sat, 04 Sep 2010 13:41:26 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Boas Práticas]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=651</guid>
		<description><![CDATA[Bom dia, Ter um blog não é nada fácil, este aqui por exemplo está abandonado já faz quase um mês. A maior dificuldade é encontrar assuntos pra postar. Por isso tive uma idéia, postar uma série de dicas de boas práticas de codificação. A idéia é mostrar com dicas simples como melhorar o código, evitando [...]]]></description>
			<content:encoded><![CDATA[<p>Bom dia,</p>
<p>Ter um blog não é nada fácil, este aqui por exemplo está abandonado já faz quase um mês. A maior dificuldade é encontrar assuntos pra postar. Por isso tive uma idéia, postar uma série de dicas de boas práticas de codificação.<br />
A idéia é mostrar com dicas simples como melhorar o código, evitando erros e melhorando a codificação.</p>
<p>Nesta primeira dica, mostrarei como evitar um <strong>NullPointerException</strong> toda vez em que fazemos uma comparação com objetos com uma constante. Muita gente já conhece essa técnica, principalmente os mais experientes, mas nunca é demais lembrar.</p>
<p><strong>A dica é: Sempre coloque a constante à esquerda (ou o objeto que você terá certeza que não estará nulo) da condição.</strong></p>
<p>Veja o exemplo abaixo:</p>
<pre class="brush: java">
public boolean validar(String result) {

	if (&quot;OK&quot;.equals(result)) {
		return true;
	} else {
		return false;
	}

}</pre>
<p>O código acima compara o parâmetro <strong>result </strong> com a constante <em>OK</strong></em> que está a esquerda da condição.<br />
Se <strong>result </strong> for nulo o método retornará <em>false</em>.</p>
<p>Já dei manutenção em código que estava assim:</p>
<pre class="brush: java">
public boolean validar(String result) {
	if (result == null) {
	        result = &quot;&quot;;
        }
	if (&quot;OK&quot;.equals(result)) {
		return true;
	} else {
		return false;
	}

}</pre>
<p>Percebam que colocaram um <strong>if</strong> desnecessário só para atribuir uma string vazia ao parâmetro, afim de evitar o <strong>NullPointerException</strong> no próximo <strong>if</strong>. Além de ser feio fazer <em>atribuições aos parâmetros</em>, aumenta a complexidade de uma futura manutenção.</p>
<p>Por hoje é só.</p>
<p>Até mais,<br />
Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2010/09/boas-praticas-dica-n%c2%ba-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Relatório Dinâmico com JasperDesign</title>
		<link>http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/</link>
		<comments>http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 01:47:25 +0000</pubDate>
		<dc:creator>Roberto Furutani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[ireport]]></category>
		<category><![CDATA[jasperreports]]></category>

		<guid isPermaLink="false">http://www.furutani.com.br/?p=635</guid>
		<description><![CDATA[Olá Que tal fazer um relatório sem iReport? e sem ter de fazer o JRXML? e ser montada de dinamicamente? Pois isso é possível usando algumas classes do JasperReports como a JasperDesign, JRDesignBand, JRDesignStaticText, JRDesignField e JRDesignExpression. Não é muito complicado fazer isso não como você podem ver no exemplo que fiz, o mais díficil [...]]]></description>
			<content:encoded><![CDATA[<p>Olá</p>
<p>Que tal fazer um relatório sem iReport? e sem ter de fazer o JRXML? e ser montada de dinamicamente?</p>
<p>Pois isso é possível usando algumas classes do JasperReports como a <strong>JasperDesign, JRDesignBand, JRDesignStaticText, JRDesignField e JRDesignExpression. </strong>Não é muito complicado fazer isso não como você podem ver no exemplo que fiz, o mais díficil mesmo é posicionar os elementos na página. Precisa usar muito a imaginação.<strong><br />
</strong></p>
<p>Basicamente é feito tudo pela classe abaixo.</p>
<pre class="brush: java">package br.com.furutani.reldin;

import java.awt.Color;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.design.JRDesignBand;
import net.sf.jasperreports.engine.design.JRDesignExpression;
import net.sf.jasperreports.engine.design.JRDesignField;
import net.sf.jasperreports.engine.design.JRDesignStaticText;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.type.HorizontalAlignEnum;

public class ReportDesigner {

public JasperDesign getDesign() throws JRException {

// Cria um novo relatório
JasperDesign jasperDesign = new JasperDesign();

// PAGE
configPage(jasperDesign);

// FIELD

JRDesignField field = null;
addField(&quot;referencia&quot;, String.class, jasperDesign);
addField(&quot;consumo&quot;, Integer.class, jasperDesign);

// TITLE

JRDesignBand jrDesignband = null;
JRDesignStaticText staticText = null;
configTitle(jasperDesign);

// PAGE HEADER

jrDesignband = new JRDesignBand();
jrDesignband.setHeight(15);
jasperDesign.setPageHeader(jrDesignband);

// COLUMN HEADER

jrDesignband = new JRDesignBand();
jrDesignband.setHeight(25);
jasperDesign.setColumnHeader(jrDesignband);

//Dados da referencia
staticText = new JRDesignStaticText();
staticText.setX(0);
staticText.setY(5);
staticText.setWidth(150);
staticText.setHeight(15);
staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
staticText.setText(&quot;Referência - Mês/Ano&quot;);
staticText.setBold(true);
jrDesignband.addElement(staticText);

//Dados do consumo
staticText = new JRDesignStaticText();
staticText.setX(150);
staticText.setY(5);
staticText.setWidth(100);
staticText.setHeight(15);
staticText.setHorizontalAlignment(HorizontalAlignEnum.RIGHT);
staticText.setText(&quot;Consumo - kWh&quot;);
staticText.setBold(true);
jrDesignband.addElement(staticText);

// DETAIL
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(20);

//Dados da referencia
JRDesignTextField textField = new JRDesignTextField();
textField.setBlankWhenNull(false);
textField.setX(0);
textField.setY(5);
textField.setWidth(150);
textField.setHeight(15);
// Adiciona a expressao no campo
JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(java.lang.String.class);
expression.setText(&quot;$F{referencia}&quot;);
textField.setExpression(expression);
jrDesignband.addElement(textField);

//Dados do consumo
textField = new JRDesignTextField();
textField.setBlankWhenNull(false);
textField.setX(200);
textField.setY(5);
textField.setWidth(50);
textField.setHeight(15);
textField.setHorizontalAlignment(HorizontalAlignEnum.RIGHT);
//Adiciona a expressao no campo
expression = new JRDesignExpression();
expression.setValueClass(java.lang.Integer.class);
expression.setText(&quot;$F{consumo}&quot;);
textField.setExpression(expression);
jrDesignband.addElement(textField);

jasperDesign.setDetail(jrDesignband);

// COLUMN FOOTER (Escondido)
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(0);
jasperDesign.setColumnFooter(jrDesignband);

// PAGE FOOTER (Escondido)
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(0);
jasperDesign.setPageFooter(jrDesignband);

// NO DATA (No JasperViewer não mostra, na web mostraria)
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(20);
staticText = new JRDesignStaticText();
staticText.setX(10);
staticText.setY(5);
staticText.setWidth(64);
staticText.setHeight(15);
staticText.setText(&quot;Sem registros para compor o relatório!&quot;);
staticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
jrDesignband.addElement(staticText);
jasperDesign.setNoData(jrDesignband);

// SUMMARY (Escondido)
jrDesignband = new JRDesignBand();
jrDesignband.setHeight(0);
jasperDesign.setSummary(jrDesignband);

return jasperDesign;
}

/**
* Ajusta os parametros do titulo
* @param jasperDesign
*/
private void configTitle(JasperDesign jasperDesign) {
JRDesignBand band = new JRDesignBand();
band.setHeight(50);
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setX(10);
staticText.setY(10);
staticText.setWidth(450);
staticText.setHeight(40);
staticText.setFontName(&quot;Tahoma&quot;);
staticText.setForecolor(Color.BLUE);
staticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
staticText.setFontSize(24);
staticText.setPdfFontName(&quot;Helvetica-Bold&quot;);
staticText.setBold(true);
staticText.setText(&quot;Histórico de Consumo&quot;);

band.addElement(staticText);

jasperDesign.setTitle(band);
}

/**
* Adiciona campos ao relatorio
* @param name
* @param clazz
* @param jasperDesign
* @throws JRException
*/
private void addField(String name, Class clazz, JasperDesign jasperDesign)
throws JRException
{
JRDesignField field = new JRDesignField();

field.setName(name);
field.setValueClass(clazz);
jasperDesign.addField(field);
}

/**
* Configura a pagina
* @param jasperDesign
*/
private void configPage(JasperDesign jasperDesign) {
jasperDesign.setPageWidth(500);
jasperDesign.setPageHeight(1000);
jasperDesign.setColumnCount(1);
jasperDesign.setColumnWidth(450);
jasperDesign.setColumnSpacing(0);
jasperDesign.setLeftMargin(10);
jasperDesign.setRightMargin(10);
jasperDesign.setBottomMargin(5);
jasperDesign.setTopMargin(5);
jasperDesign.setName(&quot;RelatorioDeConsumo&quot;);

}
}</pre>
<p>O exemplo foi feito no Eclipse Galileo. Não foi usado nada de web apesar de ser facilmente adaptado para rodar em ambiente web.</p>
<p>Adicione as bibliotecas no classpath do projeto que estão dentro de &lt;DIR_INSTALL&gt;\iReport-3.7.2\ireport\modules\ext para compilar os fontes:</p>
<p style="padding-left: 30px;">ant-1.7.1.jar<br />
antlr-2.7.6.jar<br />
asm-attrs.jar<br />
asm.jar<br />
barbecue-1.5-beta1.jar<br />
barcode4j-2.0.jar<br />
batik-anim.jar<br />
batik-awt-util.jar<br />
batik-bridge.jar<br />
batik-css.jar<br />
batik-dom.jar<br />
batik-ext.jar<br />
batik-gvt.jar<br />
batik-parser.jar<br />
batik-script.jar<br />
batik-svg-dom.jar<br />
batik-svggen.jar<br />
batik-util.jar<br />
batik-xml.jar<br />
bcel-5.2.jar<br />
bsh-2.0b4.jar<br />
castor-1.2.jar<br />
cglib-2.1.jar<br />
cincom-jr-xmla.jar<br />
commons-beanutils-1.8.2.jar<br />
commons-collections-3.2.1.jar<br />
commons-dbcp-1.2.2.jar<br />
commons-digester-1.7.jar<br />
commons-javaflow-20060411.jar<br />
commons-logging-1.1.jar<br />
commons-math-1.0.jar<br />
commons-pool-1.3.jar<br />
commons-vfs-1.0.jar<br />
dom4j-1.6.jar<br />
ehcache-1.1.jar<br />
eigenbase-properties-1.1.0.10924.jar<br />
eigenbase-resgen-1.3.0.11873.jar<br />
eigenbase-xom-1.3.0.11999.jar<br />
ejb3-persistence.jar<br />
groovy-all-1.5.5.jar<br />
hibernate-annotations.jar<br />
hibernate-commons-annotations.jar<br />
hibernate3.jar<br />
hsqldb-1.8.0-10.jar<br />
iText-2.1.7.jar<br />
iTextAsian.jar<br />
jakarta-bcel-20050813.jar<br />
jasperreports-3.7.2.jar<br />
jasperreports-chart-themes-3.6.2.jar<br />
jasperreports-extensions-3.5.3.jar<br />
jasperreports-fonts-3.7.2.jar<br />
javacup.jar<br />
javassist-3.4.GA.jar<br />
jaxen-1.1.1.jar<br />
jcommon-1.0.15.jar<br />
jdt-compiler-3.1.1.jar<br />
jfreechart-1.0.12.jar<br />
jpa.jar<br />
js_activation-1.1.jar<br />
js_axis-1.4patched.jar<br />
js_commons-codec-1.3.jar<br />
js_commons-discovery-0.2.jar<br />
js_commons-httpclient-3.1.jar<br />
js_jasperserver-common-ws-3.5.0.jar<br />
js_jaxrpc.jar<br />
js_mail-1.4.jar<br />
js_saaj-api-1.3.jar<br />
js_wsdl4j-1.5.1.jar<br />
jta.jar<br />
jxl-2.6.jar<br />
log4j-1.2.15.jar<br />
mondrian-3.1.1.12687-Jaspersoft.jar<br />
olap4j-0.9.7.145.jar<br />
png-encoder-1.5.jar<br />
poi-3.5-FINAL-20090928.jar<br />
rex-20080421.jar<br />
rhino-1.7R1.jar<br />
saaj-api-1.3.jar<br />
slf4j-api.jar<br />
slf4j-log4j12.jar<br />
spring.jar<br />
sqleonardo-2007.03.jar<br />
swingx-2007_10_07.jar<br />
xml-apis-ext.jar<br />
xml-apis.jar</p>
<p>O projeto do Eclipse com os fontes está disponível no link abaixo:<br />
<a href="http://www.furutani.com.br/a/JasperDinamico.zip" title="Baixado: 351 vezes. Tamanho: 9.37 KB">JasperDinamico</a> </p>
<p>O resultado será esse:</p>
<p><a href="http://www.furutani.com.br/wp-content/uploads/2010/06/jasper-design-.jpg"><img class="aligncenter size-medium wp-image-640" title="jasper-design---" src="http://www.furutani.com.br/wp-content/uploads/2010/06/jasper-design--300x298.jpg" alt="" width="300" height="298" /></a></p>
<p>Até mais,<br />
Roberto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

