JPA 프로젝트를 사용하기 위해 Eclipse에서 서블릿을 구성하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1621733

문제

Eclipse Galileo를 사용하고 있으며 JPA, Glassfish 2.1 및 MySQL을 사용하여 간단한 응용 프로그램을 배포하고 싶었습니다. 불행히도 Glassfish 2.1에 대한 튜토리얼을 찾을 수는 없지만 사용할 수는 없습니다).

JPA 프로젝트를 만들고 MySQL5 연결을 추가하고 데이터베이스에서 엔티티를 생성했습니다.

생성 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>

동적 웹 프로젝트를 만들고 다음과 같은 새로운 서블릿 클래스를 추가했습니다.

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());
  }

 }

}

JPA 프로젝트에 대한 Servlet Project의 속성 프로젝트 참조 및 모듈 종속성을 추가했습니다. 수행해야 할 다른 구성 설정이 있습니까? 지금까지 나는 서블릿을 출판 할 수 있었지만 불행히도 실행할 수는 없습니다. 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

내가 놓친 것이 있습니까?

도움이 되었습니까?

해결책

제가 생각하는 여러 가지 문제가 있습니다.

첫째, 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>

즉, 공급자 필드 및 필요한 필드는 서버 (JTA-Data-Source)에서 실행 중임을 나타냅니다. 물론 JTA-Data-Source는 Glassfish에서 구성한 데이터 소스를 참조해야합니다.

다음으로, 응용 프로그램이 Ports 4848에서 실행되는 것은 이상하다고 생각합니다. 일반적으로 그것은 Glassfish의 관리 청취자이며 관리자 콘솔 만 실행할 것으로 기대합니다. Glassfish의 항구를 재구성 했습니까?

저를 퍼즐로하는 한 가지는 당신이 그러한 구성으로이를 어떻게 얻었는지입니다. TopLink는 LocalHost에서 달리는 Derby에 연락해야한다고 생각하는 것처럼 보입니다 (포트 1527은 더비의 표준입니다). 확인 해주세요.

튜토리얼에 대해 : 나는 Glassfish를 많이 사용하지만 항상 Netbeans와 함께 사용합니다. 다음은 NetBeans 사이트의 튜토리얼에 대한 몇 가지 링크가 있습니다. 도움이 될 수 있습니다.

NetBeans를 설치하고 튜토리얼을 따르고 생성되는 모든 파일을 살펴 보는 것이 가장 쉬울 수 있습니다. NetBeans는이 물건을 많이 생성하는 것을 자동화하며 Eclipse가 이러한 파일을 제공하는 정도의 도움을 전혀 모릅니다.

다음은 Eclipse를 기반으로 한 완전한 튜토리얼입니다. http://wiki.eclipse.org/eclipselink/examples/jpa/glassfishv2_web_tutorial

마지막 : GF3에 대한 튜토리얼을 사용하면 최소한 이러한 기술 (Servlet 및 JPA)에 대해서도 GF2를 사용할 수 있습니다. 자, GF3에는 Toplink Essentials 대신 Eclipselink가 제공되지만이 두 가지는 전혀 다르지 않습니다.

편집 : LocalHost에서 Derby에 연결하려는 Tle을 보았을 때 MySQL에 대한 부분을 잊어 버렸습니다. 이것은 이제 수정되었습니다. Derby를 시작 해야하는 방법에 대한 언급은 제거되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top