gpt4 book ai didi

mysql - 如何在 Eclipse 中配置 Servlet 以使用 JPA 项目?

转载 作者:行者123 更新时间:2023-11-29 02:38:07 25 4
gpt4 key购买 nike

我正在使用 Eclipse Galileo,我想使用 JPA、GlassFish 2.1 和 MySQL 5 部署一个简单的应用程序。不幸的是,我找不到 GlassFish 2.1 的任何教程(仅适用于 3.0,但我无法使用它)。

我创建了一个 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>

我创建了一个动态 Web 项目,并添加了一个新的 Servlet 类,如下所示:

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

}

}

我在 servlet 项目的属性中为 JPA 项目添加了 Project References 和 Module Dependencies。是否有任何其他必须完成的配置设置?到目前为止,我能够发布 Servlet,但不幸的是,我无法运行它。 http://localhost:4848/ServletProject2 ,我得到了“你好,世界!”消息,但如果我想访问 http://localhost:4848/ServletProject2/JpaDemoServlet2我得到这个异常(exception):

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 中配置的数据源。

接下来,我认为您的应用程序在端口 4848 上运行很奇怪,通常这是 Glassfish 的管理监听器,我希望只有管理控制台在那里运行。您是否重新配置了 Glassfish 的端口?

让我感到困惑的一件事是你如何使用这样的配置走到这一步:看起来 Toplink 认为它必须联系在本地主机上运行的 Derby(端口 1527 是 Derby 的标准端口)所以也许还有一些其他的 persistence.xml飘来飘去?请检查。

关于教程:我经常使用 Glassfish,但总是使用 NetBeans。这里有几个来自 Netbeans 站点的教程链接,它们可能对您有所帮助。

安装 Netbeans 可能是最简单的,遵循教程并查看所有生成的文件,Netbeans 自动创建了很多这样的东西,我不知道 Eclipse 能为您提供多大程度的帮助这些文件。

这是一个相当完整的基于Eclipse 的教程:http://wiki.eclipse.org/EclipseLink/Examples/JPA/GlassFishV2_Web_Tutorial

最后一个:GF3 的教程也应该让您了解 GF2,至少对于这些技术(servlet 和 JPA)是这样。好吧,GF3 附带了 Eclipselink 而不是 Toplink Essentials,但这两者根本没有什么不同。

编辑:当我看到 TLE 试图连接到本地主机上的 Derby 时,我忘记了关于 MySQL 的部分。现在已更正此问题 - 已删除有关应如何启动 Derby 的引用。

关于mysql - 如何在 Eclipse 中配置 Servlet 以使用 JPA 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1621733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com