Pergunta

Eu estou usando Eclipse Galileo e eu queria implementar uma aplicação simples, usando JPA, GlassFish 2.1 e MySQL 5. Infelizmente, não conseguimos encontrar tutoriais para GlassFish 2.1 (apenas para 3.0, mas não pode usá-lo).

Eu criei um projeto JPA, acrescentou uma conexão MySQL5 e gerou uma entidade do banco de dados.

A gerar classe JPA é:

package model;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table(name="customer")
public class Customer implements Serializable {
 private static final long serialVersionUID = 1L;

 @Id
 @Column(name="customer_id")
 private int customerId;

 private String email;

 @Column(name="first_name")
 private String firstName;

 @Column(name="last_name")
 private String lastName;

    public Customer() {
    }

 public int getCustomerId() {
  return this.customerId;
 }

 public void setCustomerId(int customerId) {
  this.customerId = customerId;
 }

 public String getEmail() {
  return this.email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 public String getFirstName() {
  return this.firstName;
 }

 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }

 public String getLastName() {
  return this.lastName;
 }

 public void setLastName(String lastName) {
  this.lastName = lastName;
 }

}

E o arquivo persistence.xml é:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
 <persistence-unit name="JPAProject2">
  <class>model.Customer</class>
 </persistence-unit>
</persistence>

Eu criei um Dynamic Web Project, e acrescentou uma nova classe Servlet, que tem esta aparência:

package servlet;    
import java.io.IOException;    
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.UserTransaction;    
import model.Customer;

public class JpaDemoServlet2 extends HttpServlet 
{
 private static final long serialVersionUID = 1L;

 @PersistenceUnit
 private EntityManagerFactory entityManagerFactory;
 @Resource
 private UserTransaction userTransaction;

    public JpaDemoServlet2() 
    {
        super();
    }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 {
  EntityManager entityManager =
   entityManagerFactory.createEntityManager();

  Customer customer = new Customer();
  customer.setCustomerId(3);
  customer.setFirstName("Smith");
  customer.setLastName("John");
  customer.setEmail("john.smith@email.com");

  try
  {
   userTransaction.begin();
   entityManager.persist(customer);  
   userTransaction.commit();
  }
  catch(Exception ex)
  {
   response.sendError(1, ex.getMessage());
  }

 }

}

Eu adicionei em propriedades do projeto servlet referências do projecto e Módulo de dependências para o projeto JPA. Há qualquer outra configuração que deve ser feito? Até agora eu fui capaz de publicar o Servlet, mas, infelizmente, não posso executá-lo. http: // localhost: 4848 / ServletProject2 , fico com a '! Olá, mundo' mensagem, mas se eu quiser o acesso http: // localhost: 4848 / ServletProject2 / JpaDemoServlet2 eu recebo este exceção:

Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException : Error connecting to server localhost on port 1527 with message Connection refused: connect.
Error Code: 0

Existe algo que eu estou ausente?

Foi útil?

Solução

Há uma série de questões que eu penso.

Primeiro, o persistence.xml parece um pouco estranho, eu teria esperado algo como isto:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="JPAProject2" transaction-type="JTA">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <jta-data-source>jdbc/sample</jta-data-source>
    <class>model.Customer</class>
</persistence-unit>
</persistence>

Isto é, um campo de provedor, e os campos necessários para indicar que você está correndo em um servidor (-dados JTA-source). Claro, JTA-fonte de dados tem para se referir a uma fonte de dados que você configurou na Glassfish.

Em seguida, eu acho que é muito estranho que suas aplicativo é executado em portas 4848, normalmente isso é o ouvinte administrativo para Glassfish, e eu esperaria apenas o console de administração para executar lá. Você reconfigurar portas do seu Glassfish?

Uma coisa que me intriga é como você chegou até aqui com essa configuração a: parece que Toplink pensa que tem de contactar um Derby rodando em localhost (porta 1527 é o padrão para Derby) para que talvez ainda há alguma outra persistence.xml flutuando ao redor? Por favor, verifique isso.

Sobre tutoriais: Eu uso Glassfish muito, mas sempre com NetBeans. Aqui estão um par de links para tutoriais do site do Netbeans, eles podem ajudá-lo.

Pode ser mais fácil de instalar apenas Netbeans, siga os tutoriais e ter um olhar para todos os arquivos que são gerados, Netbeans automatiza a criação de um monte dessas coisas e eu não tenho idéia o grau de assistência Eclipse dá-lhe com esses arquivos.

Aqui está um tutorial bastante completo baseado em Eclipse: http: //wiki.eclipse .org / EclipseLink / Exemplos / JPA / GlassFishV2_Web_Tutorial

A última: um tutorial para GF3 deverá fazê-lo indo em GF2, bem como, pelo menos para estas tecnologias (Servlet e JPA). OK, GF3 vem com EclipseLink em vez de Toplink Essentials, mas estes dois não são tão diferentes em tudo.

Editar: quando eu vi TLE tentando se conectar a um Derby em localhost Esqueci a parte sobre MySQL. Isso foi corrigido agora -. Referências a como você deve começar Derby foram removidos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top