Atualizando minhas antigas vídeo-aulas de Struts2

Há muitos anos, antes de começar a escrever artigos para a Java Magazine, eu gravava vídeo-aulas que eram publicadas no portal da DevMedia, editora da revista. Comecei gravando um mini-curso sobre Desenvolvimento de aplicações Java Web no Eclipse e esta acabou sendo mesmo minha única contribuição em vídeo para o portal.

Até hoje recebo alguns comentários e dúvidas sobre os vídeos deste mini-curso. O grande problema é que tanto o Eclipse, IDE utilizada durante o mini-curso, quanto o Struts2, framework Web utilizado, mudaram bastante com novas versões desde o tempo que gravei as aulas. Muitas vezes, os problemas que as pessoas que assistem as vídeo-aulas e tentam repeti-la em seus computadores enfrentam são devidos a esta diferença de versões: quando eu gravei a aula as coisas eram feitas de uma forma, hoje não são mais.

Dado um comentário recente do leitor Flávio, resolvi escrever um post com uma atualização das instruções para a versão atual do Eclipse (Helios) e do Struts2 (2.2.1.1). Mais especificamente, vou focar no conteúdo da parte 4 do mini-curso, que é a “instalação” do Struts2.

Veja as instruções passo a passo

Easy Java Magazine

Hoje não vou responder nenhuma dúvida recebida por e-mail. Vim aqui divulgar uma nova iniciativa da DevMedia: a revista Easy Java Magazine. O objetivo desta nova revista é tratar assuntos mais básicos, para iniciantes na linguagem Java.

A primeira edição pode ser acessada gratuitamente aqui. Basta clicar no link "[Edição já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-la]".

Esta edição traz um artigo de Bruno Souza, Fabiane Nardon e Serge Rehem sobre a história da tecnologia Java que pode interessar também aos experientes. Aos iniciantes, vídeos e artigos sobre: como trabalhar com texto (Strings) em Java; introdução à programação OO com Java; e a API Collections.

Boa leitura!

Uma aplicação Java EE 6 no Eclipse Helios

Há uma semana atrás recebi mais uma solicitação relacionada à Java EE 6, fruto dos artigos que publiquei na Java Magazine, edições 80, 81 e 82. O leitor Carlos fazia o seguinte pedido:

Você poderia me ajudar em como fazer o projeto do SisContrAm que veio na revista Java Magazine numero 82 funcionar no Eclipse? Tentei refazer no Eclipse mas não deu certo.

Veja a Resposta

Usando MySQL com GlassFishV3

Esta semana recebi mais uma mensagem de um leitor da revista Java Magazine, Marcos:

Comprei as edições 80, 81 e 82 da Java Magazine para eu poder aprender a utilizar o Java EE 6. Mas estou com muitas dúvidas.

1 – Criei o banco de dados direitinho e fui implementar a classe de entidade “ChamadaEmergencia”. Segui direitinho mas o NetBeans deu um código nada a ver com o que o senhor implementou na revista. A pergunta é: por que ele criou este código tão diferente?

package br.com.javamagazine.siscontram.dominio;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 *
 * @author Marcos
 */

@Entity
public class ChamadaEmergencia implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ChamadaEmergencia)) {
            return false;
        }
        ChamadaEmergencia other = (ChamadaEmergencia) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.javamagazine.siscontram.dominio.ChamadaEmergencia[id=" + id + "]";
    }
}

2 – Em seguida, resolvi fazer diferente, baixei os fontes que o senhor liberou para download, puxei para dentro do NetBeans e executei. O browser abriu com a descrição “SisContrAm” e logo abaixo o link “Cadastro de Ambulâncias”. No entanto quando eu clico no link dá o seguinte erro:

Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Class name is wrong or classpath is not set for : com.mysql.jdbc.jdbc2.optional.MysqlDataSource
Error Code: 0
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:309)
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138)
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94)
    at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:369)
    ... 132 more
Caused by: java.sql.SQLException: Error in allocating a connection. Cause: Class name is wrong or classpath is not set for : com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:112)
    at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:126)
    ... 137 more

Veja a Resposta

Mostrando objetos em um campo JSF tipo selectOne

Ontem recebi a seguinte mensagem de um leitor da revista Java Magazine, chamado Marvin:

Acompanhei, recentemente, sua série sobre Java EE 6 na prática. Gostaria de parabenizá-lo, pelo seu material, pois é muito bom e está me ajudando bastante. Contudo, estou enfrentando um problema e gostaria, se possível, de uma ajuda sua.

Vamos supor que eu tenha uma classe de entidades Venda e uma classe de entidade Cliente. Na classe Venda eu tenho um atributo do tipo Cliente, com uma associação ManyToOne. Estou tentando implementar uma tela de cadastro de venda onde será disponibilizado um combo-box com a lista de clientes que o usuário poderá escolher. Como deve implementar esse combo-box no JSF? Consegui implementar um combo-box que traz a lista de um enum, mas com um entity não estou conseguindo.

Você poderia indicar o caminho das pedras?

Veja a Resposta