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