agosto 06, 2011

Por dentro do Primefaces 2.2

Java Magazine 93
Escrevi este artigo para a Java Magazine 93. Nele mostro a utilização do excelente framework de JSF, PrimeFaces.

junho 06, 2011

JQuery com Struts - Parte II

Java Magazine 92


Saiu, na Java Magazine 92, a segunda da parte do meu artigo sobre jQuery com Struts.

Para conferir acesse:

http://www.devmedia.com.br/post-21383-jQuery-com-Struts-Parte-2--Exclusivo.html

junho 05, 2011

Como retornar o ID de um objeto que acaba de ser salvo no banco?

Em algumas situações é interessante termos acesso ao ID (autonumerado) gerado pelo banco de dados para um objeto recém persistido.

Por exemplo, se estivermos salvando um agregado, composto por alguns objetos, é importante termos acesso ao ID do objeto raíz, para criarmos os relacionamentos nas tabelas de um banco de dados.
Figura 1. Exemplo de Agregado com raíz em 'Pedido'


Sendo assim, vou mostrar como podemos fazer isso utilizando o JDBC. Neste exemplo, utilizei o banco de dados SQL Server 2005 para testes.

/**
* Método que insere objeto no banco e retorna o ID gerado
*/
public int inserir(MeuObjeto obj) throws Exception{

  int idObjeto = 0;
              
  // Algum código para abrir conexão com o banco

  PreparedStatement statement = conn.prepareStatement("INSERT INTO " +
                "minha_tabela " +
                "(meu_objeto_campo1, " +
                "meu_objeto_campo2, " +
                "meu_objeto_campo3) " +
                "VALUES (?, ?, ?)",
                PreparedStatement.RETURN_GENERATED_KEYS);

  statement.setString(1, obj.getAtributo1());
  statement.setString(2, obj.getAtributo2());
  statement.setString(3, obj.getAtributo3());

  statement.executeUpdate();

  // recupera chave do objeto
  ResultSet rs = statement.getGeneratedKeys();

  while(rs.next()){
   idObjeto = rs.getInt(1);
  }

  conn.close();

  // retorna o id do objeto recém inserido
  return idObjeto;
}

O código acima parece muito com que estamos acostumados a fazer, a diferença está na construção do nosso PreparedStatement. Além da SQL que será executada, passamos também o parâmetro PreparedStatement.RETURN_GENERATED_KEYS. É este parâmetro que faz a "mágica" acontecer.

Ao executarmos o statement, o INSERT é realizado e o id gerado pelo banco é retornado em um ResultSet. Desta forma, temos acesso ao id do objeto, recém cadastrado, em nossa aplicação.

maio 14, 2011

JQuery com Struts - Parte I

Java Magazine 91

Saiu a primeira parte do meu artigo, sobre jQuery com Struts, na Java Magazine 91.

Para conferir basta clicar no link abaixo:

http://www.devmedia.com.br/post-21128-jQuery-com-Struts-Parte-1.html

março 31, 2011

Configurando um pool de conexões no GlassFish



Um pool de conexões é uma espécie de cache de conexões com o banco de dados, que tem por objetivo, torná-las reutilizáveis. Assim, a comunicação com o banco torna-se mais eficiente.

Uma das grandes vantagens, quando se está trabalhando em um ambiente JAVA EE, é o fato de podermos contar com pools de conexões gerenciados pelo próprio container.

Esta característica, permite que aplicações se conectem ao banco de dados, sem que o desenvolvedor precise se preocupar com o ciclo de vida das conexões realizadas. Pois em um ambiente JAVA EE, esta tarefa é responsabilidade do container.

Contudo, para que o desenvolvedor possa contar com essa facilidade, é preciso configurar um pool de conexões. Sendo assim, vou mostrar como isto pode ser feito, utilizando o servidor de aplicações GlassFish e o banco de dados PostgreSQL.
  1. Copie o driver do PostgreSQL para a pasta [GLASSFISH_HOME]/glassfish/domains/domain1/lib/ (domain default). Para isso, basta baixar o driver jdbc4, correspondente à sua versão do PostgreSQL, em http://jdbc.postgresql.org. Desta forma, não será mais preciso utilizar o driver diretamente no classpath (pasta 'lib') de suas aplicações.
  2. Reinicie o servidor para que ele passe a utilizar o driver.
  3. Após a reinicialização, vá ao console de administração (normalmente porta 4848 - ex.: http://localhost:4848/) e selecione a opção Resources/JDBC/Connection Pools, no menu à esquerda.
  4. Clique no botão 'New...'. Defina o nome que achar melhor para o pool de conexões (ex.: meuBancoPool). Selecione a opção  javax.sql.ConnectionPoolDataSource na combo 'Resource Type' e selecione PostgreSQL em 'Database Vendor'. Clique no botão 'Next'.
  5. Selecione o 'Datasource Classnameorg.portgresql.ds.PGConnectionPoolDataSource, na combo. Em seguida, vá ao final da página e informe os seguintes dadosDatabaseName=[nome-do-banco], Password=[senha-do-banco], PortNumber=5432 (porta default), ServerName=[nome-do-servidor ou ip], User=[usuario-do-banco].
  6. Clique em 'Finish' para salvar o pool.
  7. Agora que o pool de conexões foi criado, é hora testá-lo. Para isso, selecione o pool recém criado e clique em 'Ping'. A mensagem "Ping Succeeded", indica que tudo está funcionando corretamente.
  8. Com o pool criado e testado, falta apenas permitir que suas aplicações o utilizem. Sendo assim,  é preciso criar um nome JNDI para ele. Vá ao menu Resources/JDBC/JDBC Resources, especifique o nome no formato jdbc/[nome-do-banco], selecione o pool de conexões criado nos passos anteriores e clique em 'OK', para finalizar. Este nome deverá ser utilizado nas aplicações, para permitir a comunicação com o banco de dados através do pool de conexões.