domingo, agosto 28, 2011

PrimeFaces DataTable + DAO + Spring


This post is intended to explain how to develop a simple DAO using Spring and JSF PrimeFaces DataTable

Basically this post will cover the steps to build a simple application that uses DataTable component, Spring 3 as DAO.

First you have to download all jars needed to accomplish this task. We'll use PrimeFaces 3 and Spring Framework 3. All versions used are:

Spring Framework 3.0.5 - http://www.springsource.org/node/2880

NOTE: PrimeFaces 3 during the time I'm publishing this post is in its developtment stage. But I guess this won't be a huge problem. So feel free to use it as you wish. But be carefull if you usie dev distribution in a production application.

I won't waiste much time teaching how to configure your IDE. So it would be great if you already have done that so I can focus in what are the steps to create an application using these frameworks. Also, this post won't show you all features available for these framework as well. I assume that you already have knoledge in how to create a Eclipse project, import and configure all dependencies need. I

Please, import these jar into your Eclipse project:

Spring:


PrimeFaces:

Please, go primefaces' page to learn how to configure a project using PrimeFaces framework.

primefaces-3.0.M3-SNAPSHOT.jar


segunda-feira, junho 20, 2011

Problemas de encoding ao receber parametros de URL

Você já deve ter se deparado com problemas de encoding ao receber requisições de cujo conteúdo há caracteres latinos tais como "ç".

Bom, um ajuste eficiente disso é fazer o seguinte:

request.setCharacterEncoding("UTF-8");

String paramValue = URLDecoder.decode(request.getParameter("param"), "UTF-8");

Bom, segue aí a dica!

Abraços!

terça-feira, maio 31, 2011

Inverter String numa única linha

Se você quiser inverter uma String usando uma única linha.

System.out.println(new StringBuffer("http://www.youtube.com/watch?v=6dGEadbbxyw").reverse());

Abraços!

quinta-feira, maio 19, 2011

Instalando o Tortoise SVN Client

Neste post, eu mostro como instalar o Tortoise SVN Client. O ambiente no qual estou me baseando é o Ruindows 7, mas serve para qualquer sistema operacional baseado em Ruindows.

Primeiro, baixe o Tortoise SVN Client . Escolha a versão mais adequada para o seu sistema operacional: 32bits ou 64bits.

Pra instalar é fácil: next, next, next, Finish.

Reinicie no final para as configurações terem efeito.

Crie na raiz do C:\ um diretório chamado svn:

c:\svn

Acesso o diretório recém criado e clique com o botão direito do mouse sobre ele e, em seguida, no menu de atalho, clique em "SVN Checkout...".


Na janela de dialogo, informe o URL do repositório e clique em ok.

Informe o usuario e senha e baixo o conteúdo do repositório.


quinta-feira, abril 28, 2011

Java Applet - Redirecionando URL's via applet

Essa postagem quero compartilhar a forma de como é possível fazer um redirecionamento de URL de "dentro" de um applet.

O Cenário!

Imagine que você tem um applet que possui um botão chamado "Redirecionar" e que ao clicá-lo você é redirecionado para outra URL. Não vou me atentar a códigos desnecessários.

Ao que interessa!

O código basicamente um JPanel que possui um botão conforme mencionado.




terça-feira, abril 19, 2011

Aula 1 - Preparando o ambiente - JDK

A preparação de um ambiente de desenvolvimento básico em sistemas operacionais Microsoft Windows é bastante simples e vamos seguir os passos abaixo:

PASSO 1: baixando a JDK.

É muito importante que se baixe a JDK de última versão. Para isso vá até o site da Oracle Sun http://www.sun.com procure pela sessão de downloads em seguida a sessão Java for Developers. Os sites da Oracle podem ser bastante "trick" ou "complicados" e não poucas vezes não muito intuitivos. Paciência para localizar o download correto é fundamental. Ou se preferir acessar o site abaixo






A versão corrente do JDK até o momento em que escrevo este post é a 6 update 24.



Selecione a plataforma Windows, marque a opção "I agree to the Java SE Development Kit 6u24 License Agreement ." e clique em "Continue".



Clique no link conforme é mostrado ao lado para proceder com o download.

PASSO 2: instalando a JDK.

Após o término do download do arquivo, execute o instalador. Este é um wizard bastante prático e simples. A única dica que eu dou neste passo, é ao invés de instalar o JDK na pasta padrão, instale-o na raiz C:\

A estrutura deverá ficar assim após a instalação:

C:\Java\jdk1.6.0_24

Bom, espero que eu tenha contemplado todos os passos para instalação do Kit de Desenvolvimento de Aplicações Java.

Bom proveito e boa sorte!

segunda-feira, abril 18, 2011

Aulas Java - Cronograma

Abaixo segue o cronograma das aulas de programacao:

Aula 1 O que é Java?
Aula 2 Variáveis primitivas e Controle de fluxo
Aula 3 Orientação a Objetos básica
Aula 4 Arrays
Aula 5 Modificadores de acesso e atributos de classe
Aula 6 Orientação a Objetos – herança, reescrita e polimorfismo
Aula 7 Eclipse IDE
Aula 8 Orientação a Objetos – classes abstratas
Aula 9 Orientação a Objetos – interfaces
Aula 10 Exceptions
Aula 11 Pacotes
Aula 12 Ferramentas: jar e javadoc
Aula 13 O pacote java.lang
Aula 14 O pacote java.io
Aula 15 Collections framework
Aula 16 Programação concorrentes e Threads


Boa sorte,

sexta-feira, março 04, 2011

Spring template: queryForObject() method. Retorno de queries vazias.

A post visa basicamente esclarecer a abordagem dada pelo spring framework, mais precisamente, sua implementação do JDBC, spring-jdbc.

Sem entrar em maiores detalhes sobre a implementação e utilização do módulo spring-jdbc, eu gostaria de compartilhar com todos uma experiência que me pareceu inusitada enquanto montava um DAO usando como base este módulo do spring framework.

Sem mais, às formalidades:

Meu DAO de exemplo, é o seguinte:

public class MeuBeanDao extends JdbcDaoSupport {

public MeuBean selectByDescription(String description){
return (MeuBean) getJdbcTemplate().queryForObject(SQL, new Object[]{description}, new MeuBeanRowMapper());

}

}

É uma implementação básica do método queryForObject() usando um array de Object para passar os argumentos e uma implementação do RowMapper, que visa mapear o resultado obtido de cada linha para o objeto a ser retornado.

Até aí tudo bem. Está tudo certo. Meu teste de unidade se saiu perfeito. Porém, num cenário onde não há resultados, exceções podem acontecer.

Por quê?

Porque sim.

O spring framework tem a abordagem de levantar exceções para ambos casos: resultado vazio e non-unique error (quando mais de uma linha é obtida da consulta). No meu caso, eu obtive um EmptyResultDataAccessException. O Spring opta por escolher representar os dois casos como exceções. Todavia, nos parece mais intuitivo se este, ao não encontrar nenhum registro, retornasse um simples java null.

A solução!

A solução encontrada é circundá-lo com um bloco try/catch. Veja abaixo como ficou.

public MeuBean selectByDescription(String description) {
MeuBean result = null;

try{
result = (MeuBean) getJdbcTemplate().queryForObject(SQL, new Object[]{description}, new MeuBeanRowMapper());

}catch(EmptyResultDataAccessException e){
// do nothing... thanks Spring framework...
}

return result;
}

Bom, mais uma postagem colaborativa. Maiores detalhes sobre spring-jdbc, visite o site: http://static.springsource.org/spring/docs/2.0.x/reference/jdbc.html

Abraços!

quinta-feira, março 03, 2011

Programação orientada a aspectos: AOP.

What the fuck is that?

Pelo menos, diminui o número de linhas de código...

Continua...

sexta-feira, fevereiro 25, 2011

Enviando arquivo PDF a um Java Servlet

Bom, faz algum tempo que não posto nada e portanto não vou ficar escrevendo desnecessariamente. Basicamente tive a necessidade de enviar de uma aplicação Java (JSE) um arquivo .PDF a outra aplicação Java Web (JEE) usando protocolo HTTP pelo intercurso de um Java Servlet. Tal solução pode ser utilizado num Java Applet.

Segue abaixo o que foi feito.

Aplicação Java (JSE) é bastante simples. Para este exemplo, eu criei uma classe principal chamada Main e toda a lógica está dentro do método main da classe.

Coloque todo o conteúdo baixo dentro de um bloco try/catch. Cuide para captar o Exception e faça o tratamento de acordo com a sua imaginação e necessidade.

// URL da minha aplicação web.

URL url = new URL("http://localhost:8080/TestAppletServletConnServer/StudentServlet");

// Abro a conexão com a minha aplicação web.

URLConnection servletConnection = url.openConnection();

// Seto alguns flags importantes para nossa aplicação. O mais importante de todos é o setOutput igual a true!

servletConnection.setDoOutput(true); servletConnection.setAllowUserInteraction(false); servletConnection.setUseCaches(false);
servletConnection.setDefaultUseCaches(false);

// Seto o parametro MIME para que minha requisicao seja entendida que é um arquivo pdf.
servletConnection.setRequestProperty("Content-Type", "application/pdf");


// Pego a referencia ao OutputStream da propria conexao.
BufferedOutputStream outputToServlet = new BufferedOutputStream(servletConnection.getOutputStream());


// Abro o stream de entrada vindo do arquivo pdf fonte.

FileInputStream input = new FileInputStream(new File("C:\\Temp\\pdf\\testToServer.pdf"));


// Passo a referencia ao objeto BufferedInputStream


BufferedInputStream buf = new BufferedInputStream(input);

// Aqui inicia o loop para escrever no output do servlet aberto anteriormente.


int readBytes = 0;

while ((readBytes = buf.read()) != -1) {

outputToServlet.write(readBytes);

}


outputToServlet.flush();
outputToServlet.close();

// Aqui eu pego uma referencia a um objeto InputStream. Isso eu percebi que é necessário porque somente assim é feito a requisição a classe servlet
BufferedInputStream ois = new BufferedInputStream(servletConnection.getInputStream());

ois.close();


Vamos agora criar o Servlet utilizado no exemplo. Eu ponho tudo dentro de um método processRequest e este processará tando POST quanto GET. Novamente, coloque tudo dentro de um bloco try/catch.

// Pego a referencia ou objeto OuputStream que ha dentro do objeto response ServletOutputStream out = response.getOutputStream();

// Algumas coisas são necessárias e só há dentro do objeto ServletContext.
ServletContext context = this.getServletConfig().getServletContext();

// Seto o tipo de conteúdo
response.setContentType(request.getParameter("contentType"));

// Aqui eu leio do stream de entrada o arquivo pdf.

InputStream istream = request.getInputStream();


// Passo a referencia ao objeto BufferedInputStream.
BufferedInputStream bis = new BufferedInputStream(istream);

// Crio um objeto BufferedOutputStream para escrever a saída numa referencia ao OutputStream do Servlet. Isso é necessário para finalizar com o response.
BufferedOutputStream bos = new BufferedOutputStream(out);

// Crio um objet BufferedOutputStream passando uma referencia ao arquivo que vou criar.

BufferedOutputStream bos2file = new BufferedOutputStream(new FileOutputStream("C:\\Temp\\pdf\\testFromServer.pdf"));


// Stream the file back to the client

byte[] buffer = new byte[4096];
int size;
size = bis.read(buffer);
while (size != -1) {
bos.write(buffer, 0, size);
bos2file.write(buffer, 0, size);
size = bis.read(buffer);

}

bis.close();

bos.flush();
bos.close();

bos2file.flush();
bos2file.close();


Bom, existem outra maneiras de conseguir isso. A minha é uma das muitas possíveis soluções. Notem que não utilizo biblioteca de terceiros.

Sem mais,

Daniel Barcellos