quinta-feira, 26 de setembro de 2013

JSF: Como ter um selectBooleanCheckbox selecionado

No Java Server Faces, o componente "selectBooleanCheckbox" serve para o request de parâmetros do tipo boolean, isto é "true" ou "false".
Quando vinculamos seu valor a algum atributo de uma variável objeto do managed bean, geralmente faz-se desta maneira:
<h:selectBooleanCheckbox id="illustrations"
    value="#{bookManagedBean.book.illustrations}" />
Desta forma, o componente não é renderizado "checado" pois vinculamos seu value ao valor de "illustrations". Para contornar este problema, simplesmente atribua o valor "true" ao atributo da variável no construtor do managed bean, como demonstra o código:

@ManagedBean
@RequestScoped
public class BookManagedBean {

  private Book book = new Book();

  public BookManagedBean() {
    book.setIllustrations(true);
  }
}
Deste modo, ao renderizar o componente pela primeira vez, o valor de selectBooleanCheckBox virá como "checked". Veja na imagem:

Esta é só uma dica para JSF.
abçs

terça-feira, 24 de setembro de 2013

Tutorial de Eclipse, GlassFish e Java EE 6



Gostaria de divulgar um tutorial que achei na internet, com o desenvolvimento passo-a-passo de uma aplicação com Eclipse, Glassfish para Java EE

An Eclipse / GlassFish / Java EE 6 Tutorial


Achei o tutorial muito bem explicado, mas acho interessante complementar com um bom livro. Estou lendo o "Beginning Java EE 6 with GlassFish" da editora Apress

 O livro também traz de forma simples os conceitos por trás do Java EE, como JPA, EJB, JSF. Aliado a bons exemplos integrados ao Maven. O único problema é que é  necessário atualizar as dependências no pom.xml no source dos exemplos. Tirando este empecilho o livro é realmente muito didático. O dois utilizam o banco de dados JavaDB, que é uma distribuição da Oracle do Apache Derby.

Juntando o tutorial mais o livro, acho que pode-se ter uma boa visão da intergração das diversas específicações que compõe o Java EE, e  como utilizar o Eclipse para agilizar o desenvolvimento. Pelo menos esta é minha opinião.

Obrigado.

quarta-feira, 11 de setembro de 2013

Projetos Spring integrados ao Maven


Estava estudando o SpringMVC e Apache Maven, quando me deparei com alguns problemas. Em diversos tutoriais pela internet e em até um ebook que estava lendo, a criação dos projetos eram feitos com o plugin "maven-archetype-webapp". Este plugin gera péssimos resultados tanto na configuração quanto na arquitetura de diretorios do projeto.

Os projetos gerados utilizam o Dynamic Web Module de versão 2.3 do Eclipse, uma versão realmente muito antiga. Tentar configurar manualmente pelo Properties do projeto era impossível. Modificar o arquivo web.xml gerava erros e diversos “warnings”.

Para solucionar estes problemas pode-se usar o Spring Tool Suite. O Spring Tool Suite pode ser baixado como uma IDE completa na página Spring Source ou ser utilizado como plugin no Eclipse. Para adicionar o plugin ao Eclipse basta fazer uma busca no Marketplace.

O Spring Tool Suite ou STS é muito completo e prático, tanto para geração de projetos como na integração com o Maven. Aqui vai um pequeno tutorial para criar um projeto Spring MVC.

Vá em File, New e Other ou aperte Control + n. Escolha Spring Project e aperte em Next.

Escreva um nome para seu projeto, escolha a opção Spring MVC Project e tecle em Next. 
 
Escolha um nome para os pacotes e aperte em Finish. 

 
Aguarde até o projeto ser construído, o que pode levar tempo. Quando seu projeto estiver pronto, vá em Properties ou aperte Alt + Enter. Na opção Project Facets modifique a versão do Java para a 1.7 (Java 7) e em Dynamic Web Module, configure para a versão 3.0.

Agora, vá em Java Build Path e aperte em “Add Libray...”. Selecione Server Runtime, aperte Next e escolha um servidor. No meu caso é o Apache Tomcat 7. Desta forma podemos registrar servlets do projeto através de Annotations, caso necessite.


 
No arquivo web.xml altere a tag web-app de abertura para

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID" version="3.0">


Assim mudamos para a versão para 3.0.

Resumindo, quando criar um projeto Spring integrado ao Maven, utilize o Spring Tools Suite. Assim você terá versões mais avançadas do módulo web do Eclipse e poderá usar Annotations para registrar servlets.

Esse artigo surgiu da insatisfação com os tutoriais que encontram-se na internet e para que outras pessoas não passem dias tentendo comfigurar seus projetos.

segunda-feira, 9 de setembro de 2013

Testando Parâmetros e Estados de Objetos com Guava

Quando criamos classes em Java, um dos pontos mais importantes é proteger o estado dos objetos que serão ou estão instanciados. Uma das maneiras de se atingir este objetivo é colocar infindáveis estruturas “if/throw” para testar os parâmetros de construtores e métodos, dificultando a legibilidade de nosso código. Como no construtor abaixo:    
public Livro(String titulo, int paginas) throws IllegalArgumentException {
   if (titulo == null)

    throw new IllegalArgumentException("titulo não pode ser nulo");

   if (titulo.length() < 0)

    throw new IllegalArgumentException("O tamanho de titulo deve ser maior que zero");

   if (paginas < 0)

    throw new IllegalArgumentException("paginas deve ser maior que zero");
  this.titulo = titulo;

  this.paginas = paginas;

}

Estas estruturas ficam espalhadas por todo nosso código. Podemos até criar métodos específicos que façam estes testes, mas então o tamanho das classes aumentam cada vez mais.


Para facilitar nosso trabalho e manter o código limpo, podemos utilizar a biblioteca Guava. Para quem não conhece, Guava é um biblioteca que fornece várias classes utilitárias e é desenvolvida pelo Google. Guava segue vários conceitos do livro “Effective Java” de Joshua Bloch, que aliás trabalhou na arquitetura do projeto. Além disso, o Google utiliza a biblioteca em seus próprios projetos Java, que com certeza traz confiança na qualidade da mesma.

Na biblioteca encontramos a classe Preconditions, que pode facilitar os testes de argumentos e estados de objetos, tornando nosso código mais limpo e bonito. A classe Preconditions possui seis métodos, sendo que todos são estáticos. Desta forma pode-se usar “import static” para facilitar o trabalho. Os métodos e as exceções que estes lançam são:

Método
Exceção Lançada
checkArgument(boolean)
IllegalArgumentException
checkNotNull(T)
NullPointerException
checkState(boolean)
IllegalStateException
checkElementIndex(int index, int size)
IndexOutOfBoundsException
checkPositionIndex(int index, int size)
IndexOutOfBoundsException
checkPositionIndexes(int start, int end, int size)
IndexOutOfBoundsException

Um método muito interessante é o checkArgument(), que testa uma expressão booleana e lança IllegalArgumentException caso esta for falsa.
 
checkArgument(paginas > 0,"O valor de paginas(%s) deve ser maior que zero", paginas);
 
Neste caso foi utilizado o método sobrecarregado que aceita como parâmetro uma String formatável para mostrar uma mensagem.
Outro exemplo é o checkNull, que verifica se o argumento passado é nulo. Podemos atribuir o valor do parâmetro ao campo diretamente, pois o retorno do método é o próprio valor que foi testado:
 
this.titulo = checkNotNull(titulo, titulo não pode ser nulo);

Caso o parâmetro for nulo, NullPointerException será lançada e a mensagem será exibida.

O método checkState avalia se o estado do objeto é correto ao se chamar um determinado método. Você pode imaginar uma classe Builder, com vários métodos “set” para os campos que serão utilizados para construção de um objeto. Ao charmar o método build(), alguns campos não podem ter determinado valor ou null. Exemplo simplificado:

import static com.google.common.base.Preconditions.*;

public class ExemploBuilder {

  private int tamanho;

  private String nome;

  public ExemploBuilder setTamanho(int tamanho) {

   this.tamanho = tamanho;

   return this;

  }

  public ExemploBuilder setNome(String nome) {

   this.nome = nome;

   return this;

  }

  public Exemplo build() throws IllegalStateException {

   checkState(tamanho > 0,

   "deve-se fornecer tamanho com valor maior que zero");

   checkState(nome != null, "nome não pode ser nulo");

   return new Exemplo(this.tamanho, this.nome);

  }

  class Exemplo {

    private int tamanho;

    private String nome;

     public Exemplo(int tamanho, String nome)   {

      this.tamanho = tamanho;

      this.nome = nome;

    }

  }


  public static void main(String[] args) {
   //lançará uma exceção.

   new ExemploBuilder().setTamanho(5).build();  

  }

} 
O checkState não avalia os parâmetros do método em si, mas se o estado do objeto é seguro ao se chamar o método. Outro exemple, seria um objeto resultSet, que é retornado após uma consulta em um banco de dados. Os métodos “get” só podem ser chamados após o método next() ser invocado.

O método checkElementIndex verifica se o valor de um índice é válido para um array, string ou outra lista qualquer. Como parâmetro, ele requer o valor do índice e o tamanho da lista. Veja o exemplo: 
int[] a = {5,8,9,4,6};
checkElementIndex(4, a.length);

Este foi um artigo demonstrando alguns métodos da classe Preconditions do Guava. O Guava possui muitas outras utilidades interressantes que podem ser consultadas na página do projeto ou também no Wiki.

Este artigo de Markus Sprunk fala de Preditons e outros métodos de verificação de argumentos em Java, fazendo uma comparação interessante.

Até mais.

quarta-feira, 4 de setembro de 2013

Tutorial EC2 com Tomcat7 e MySQL Server



Tutorial Tomcat7 e MySQL Server

Continuando com os tutoriais, já temos o Java instalado em nossa instância EC2. Faltam o Tomcat, o MySQL e configurarmos o MySQL Workbeanch da nossa máquina local.

Para instalarmos o Tomcat7 e alguns pacotes extras, basta digitarmos no console:

$ sudo apt-get install tomcat7 tomcat7-admin tomcat7-common tomcat7-docs tomcat7-examples tomcat7-user

 
Nestes pacotes encontram-se a documentação, exemplos e programas para administrar o servidor. Agora é necessário configurar o arquivo de usuários do Tomcat. No terminal entre com o comando:

$ sudo nano /etc/tomcat7/tomcat-users.xml 
 
No final do arquivo, antes da tag de fechamento “</tomcat-user>”, insira a tag de definição de user, colocando seu username, password e manager-gui na propriedade roles:

<user username="usuario" password="senha" 
roles="manager-gui"/>



O manager-gui dará acesso às páginas de gerenciamento do servidor por uma interface gráfica web. Salve o arquivo com Ctrl + x e depois “y”. Para iniciar o servidor, basta digitar:

 
$ sudo service tomcat7 start

 
Para ver se tudo deu certo, vá até o EC2 Dashboard, clique com o botão esquerdo sobre a instância EC2 e depois em Connect. Copie o ip conforme a imagem. Este é o ip público de sua instâcia que será usado para acessar o Manager-Gui do Tomcat7 e fazer a conexão com o MySQL Workbeanch.


 
Cole na barra de endereços do navegador e no final adicione “:8080”, que corresponde a porta padrão do servidor Tomcat7. Acessando você verá a página: 

 
Clique em “manager webapp”, coloque o usuário e senha cadastrados. Nesta página será feita a administração do servidor e deploy das aplicações web.



 Agora vamos instalar o banco de dados MySQL Server e configurar o  MySQL Workbeanch. No terminal digite:

$ sudo apt-get install mysql-server

e escolha a senha do banco de dados. Instale o MySQL Workbeanch na sua máquina local e abra o programa. Aperte em "New Connection" e, em Connection Method, Standard TCP/IP over SSH.


No SSH Hostname, coloque o ip público da sua instância mais ":22", correspondente a porta do SSH. Em SSH Username coloque "ubuntu" e em SSH Key file selecione o arquivo .pem gerado na criação da instância. Tanto o campo Username quanto Password se referem ao MySQL. Configure conforme seu servidor.

Clique em "Test Connection" para ver se está tudo certo. Se tudo estiver configurado corretamente você pode gerenciar o MySQL de sua instância EC2 através de uma interface gráfica em sua máquina local.

Agora que terminamos este tutoral, estarei elaborando outros referentes a plataforma Java. Qualquer dúvida é só postar.

Até...

domingo, 23 de junho de 2013

EC2 Ubuntu com Oracle Java

Neste tutorial aprenderemos como instalar o Java da Oracle em uma instância EC2 com sistema operacional Ubuntu. Uma instância EC2 é um servidor que pode ser criado na infraestrutura de nuvem do Amazon Web Service e possui um custo de acordo com o tempo de uso. A instância mais barata, que se chama micro, custa hoje cerca de R$ 0,027 por hora nos servidores localizados em São Paulo . 

A Amazon disponibiliza uma instância micro por um ano de graça, assim você pode usar este serviço para testar suas aplicações web como se estivesse em um ambiente de produção. Para isso será preciso realizar um cadastro e ter um cartão de crédito internacional. Se você quiser saber mais sobre os serviços gratuitos do AWS acesse http://aws.amazon.com/pt/free/.

O Ubuntu é um dos mais amigáveis sistemas operacionais Linux da atualidade. Possui uma quantidade enorme de pacotes para instalação, uma comunidade extensa e atuante e diversos tutoriais na internet. Infelizmente não podemos instalar o Java diretamente pois este não faz parte dos pacotes oficiais. O pacote oficial para desenvolvimento Java disponível no Ubuntu é o OpenJDK, que apesar de ser bom, não é o oficial. Por isso vamos fazer a instalação do JDK 7 da Oracle através do PPA do WebUpd8Team, incluindo este repositório no nosso servidor.


Para realizar o cadastro, basta acessar o endereço http://aws.amazon.com/pt/ e aperte em Cadastrar-se.



Na tela de login, informe um email e escolha "I am a new user.", então aperte o botão "Sign in using our secure service".



Informe os dados necessários e o número do cartão de crédito, aguarde a ligação da Amazon para informar o PIN e finalize o cadastro. Acesse o Amazon Console pelo endereço https://console.aws.amazon.com/console/home e escolha "EC2 Virtual Servers in the Cloud".


No EC2 dashboard, no canto direito acima, altere sua localidade para São Paulo,


e aperte em "Launch Instance".


Na tela "Create New User", tecle em "Continue". Escolha o sistema operacional Ubuntu na versão de sua preferência e aperte "Select".



Nas opções "Instance Details" não é necessário mudar nada, apenas crie uma key-value para sua máquina. Em "Create Key Pair", forneça uma palavra para a criação do arquivo .pem e aperte em "Create & Download your Key Pair". Guarde o arquivo gerado em lugar seguro e faça uma cópia para não ter problemas de acesso no futuro.



Em "Configure Firewall", abra as portas 80 (HTTP), 443 (HTTPS), 8080 (Apache Tomcat) e 3306 (MySql). É possível configurar segundo suas necessidades.


Após configurar as portas, é só apertar em "Launch". A página da Amazon mostrará uma lista das suas instâncias EC2, aperte com o botão direito no seu servidor e selecione "Connect" e escolha a opção "Connect with a standalone SSH Client". Caso sua máquina local tenha sistema operacional Linux, abra o terminal, entre no diretório que contém seu arquivo .pem, digite o comando abaixo e tecle "yes". Pronto, já estamos conectados ao servidor no AWS. 

Caso seu sistema operacional seja o Windows, aperte em "Connect from a Windows client using PuTTY" e siga as instruções para fazer a conexão via PuTTY.




Agora temos um servidor com Ubuntu e podemos interagir via linha de comando. Para atualizarmos o sistema operacional, no terminal digite o comando:

$ sudo apt-get update && sudo apt-get upgrade

Para instalarmos o Java, faremos a inclusão de um repositório PPA do WebUpd8 team, que nos fornece o pacote do JDK 7. Insira os comandos no terminal:

$ sudo add-apt-repository ppa:webupd8team/java

$ sudo apt-get update

$ sudo apt-get install oracle-java7-installer oracle-java7-set-default

Aceite os termos de licença e aguarde a instalação. O pacote oracle-java7-set-default fará as configurações necessárias, como variáveis de ambiente e plugins. Para confirmar que está tudo certo, no terminal digite:

$ java -version

Será mostrado na tela a versão atual do Java.


Desta forma, temos o Java JDK 7 instalado. Nos próximos artigos instalaremos o Apache Tomcat e faremos a configuração. Também faremos a instalação do MySql e trabalharemos com a base de dados via MySql Workbench local ou com o PhpMyAdmin no servidor.

Até os próximos artigos.