2009-10-25 2 views
2

Я использую Eclipse Galileo, и я хотел развернуть простое приложение, используя JPA, GlassFish 2.1 и MySQL 5. К сожалению, я не смог найти учебники для GlassFish 2.1 (только для версии 3.0, но я не могу его использовать).Как настроить сервлет в Eclipse для использования проекта JPA?

Я создал проект JPA, добавил соединение MySQL5 и создал Entity из базы данных.

Генерировать класс 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; 
} 

} 

И файл 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> 

Я создал веб-проект Dynamic и добавлен новый класс сервлета, который выглядит следующим образом :

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("[email protected]"); 

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

} 

} 

Я добавил в свойства проекта сервлета Ссылки на проект и модуль Dependencie для проекта JPA. Должны ли быть какие-либо другие настройки конфигурации? До сих пор я мог опубликовать Servlet, но, к сожалению, я не могу запустить его. http://localhost:4848/ServletProject2, я получаю «Привет, мир!». сообщение, но если я хочу, чтобы получить доступ к http://localhost:4848/ServletProject2/JpaDemoServlet2 я получаю это исключение:

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 

Есть ли что-то мне не хватает?

ответ

2

Существует ряд проблем, которые я думаю.

Во-первых, 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" transaction-type="JTA"> 
    <provider>oracle.toplink.essentials.PersistenceProvider</provider> 
    <jta-data-source>jdbc/sample</jta-data-source> 
    <class>model.Customer</class> 
</persistence-unit> 
</persistence> 

То есть, поле поставщика, и необходимые поля, чтобы указать, что вы работаете в server (jta-data-source). Конечно, jta-data-source должен ссылаться на источник данных, который вы настроили в Glassfish.

Далее, я думаю, что довольно странно, что ваше приложение работает на портах 4848, обычно это административный прослушиватель Glassfish, и я ожидал, что там будет только консоль администратора. Вы переконфигурировали свои порты Glassfish?

Одна вещь, которая меня озадачивает, - это то, как вы получили такую ​​конфигурацию: похоже, что Toplink думает, что ей нужно связаться с Derby, работающим на localhost (порт 1527 является стандартным для Derby), поэтому, возможно, есть еще какая-то настойчивость. xml плавающий вокруг? Пожалуйста, проверьте это.

О учебниках: Я использую Glassfish много, но всегда с NetBeans. Вот несколько ссылок на учебники с сайта Netbeans, они могут вам помочь.

Это может быть проще просто установить Netbeans, следить за учебники и посмотреть на все файлы, которые получают сгенерированных, Netbeans автоматизирует создание многое из этого и я понятия не имею, какую степень помощи Eclipse дает вам с этими файлами.

Вот достаточно полный учебник на основе Eclipse: http://wiki.eclipse.org/EclipseLink/Examples/JPA/GlassFishV2_Web_Tutorial

последний: учебник для GF3 должны получить вы собираетесь на GF2, а также, по крайней мере, для этих технологий (сервлетов и JPA). ОК, GF3 поставляется с Eclipselink вместо Toplink Essentials, но эти два не совсем разные.

Редактировать: Когда я увидел, что TLE пытается подключиться к Derby на локальном хостинге, я забыл часть о MySQL. Это было исправлено сейчас - ссылки на то, как вы должны запустить Derby, были удалены.

Смежные вопросы