Postgresql Eclipselink:glassfish在JavaSE中工作时,没有找到合适的驱动程序

Postgresql Eclipselink:glassfish在JavaSE中工作时,没有找到合适的驱动程序,postgresql,jakarta-ee,jpa,glassfish,eclipselink,Postgresql,Jakarta Ee,Jpa,Glassfish,Eclipselink,我正在尝试在我的webapp中创建EntityManager,但失败的原因是: 未找到适合jdbc的驱动程序:postgresql:://localhost/database 但是,当我将EntityManager作为JavaSE控制台应用程序(从main()运行)运行时,创建EntityManager的相同持久性单元和相同代码可以正常工作 谷歌搜索给了我几个常见的问题,导致了这个错误: JDBC url错误 不应该,因为它是从main开始工作的 JDBC驱动程序不在类路径中 我可以使用Cla

我正在尝试在我的webapp中创建EntityManager,但失败的原因是:

未找到适合jdbc的驱动程序:postgresql:://localhost/database

但是,当我将EntityManager作为JavaSE控制台应用程序(从main()运行)运行时,创建EntityManager的相同持久性单元和相同代码可以正常工作

谷歌搜索给了我几个常见的问题,导致了这个错误:

  • JDBC url错误
    不应该,因为它是从main开始工作的

  • JDBC驱动程序不在类路径中
    我可以使用
    Class.forName(“org.postgresql.Driver”)用于驱动程序,因此我认为它位于类路径中

我尝试过的其他事情:

  • 我想glassfish/lib和webapp/WEB-INF/lib中的驱动程序jar可能有冲突,所以我试着将它们一起单独使用,但没有成功

  • 重新创建了一个新的小型Web应用程序,希望问题能够解决,但它没有:-)

  • injection@PersistanceUnit-也不起作用,不知道是同一个问题还是我没有正确使用它,因为我还在学习injection和EJB

谢谢

完全错误:

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/database Error Code: 0
代码如下:

webapp中的ManagedBean:

@ManagedBean
public class TestBean {
private String entry;
private String driver;

public String getFromDatabase(){
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Unit1");
    EntityManager em = emf.createEntityManager();

    EntityTransaction tx = em.getTransaction();
    tx.begin();

    EntityOne one = new EntityOne();
    one.id = 1;
    one.entry = "Bla bla";


    em.persist(one);
    tx.commit();
    em.close();

    return "done";
}

public String createDriver(){
    try {
        Class d = Class.forName("org.postgresql.Driver");
        driver = d.getName();

    } catch (ClassNotFoundException e) {
        driver = "Class not found";
        return "";
    }

    return "";
}


public String getDriver() {
    return driver;
}

public void setDriver(String driver) {
    this.driver = driver;
}

public String getEntry() {
    return entry;
}

public void setEntry(String entry) {
    this.entry = entry;
}
}
同一代码在main中工作:

public class Standalone {

public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Unit1");
    EntityManager em = emf.createEntityManager();

    EntityTransaction tx = em.getTransaction();
    tx.begin();

    EntityOne one = new EntityOne();
    one.id = 1;
    one.entry = "Bla bla";


    em.persist(one);
    tx.commit();
    em.close();


    }
}
persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="Unit1" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

    <class>com.test.EntityOne</class>

    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost/database"/>
        <property name="javax.persistence.jdbc.user" value="darko"/>
        <property name="javax.persistence.jdbc.password" value="sifra"/>

        <property name="eclipselink.target-database" value="PostgreSQL"/>

    </properties>
</persistence-unit>

org.eclipse.persistence.jpa.PersistenceProvider
com.test.EntityOne

将posgres jdbc驱动程序放入glassfish的库中。是这样的

[glassfish_home]/glassfish/domains/YOUR_DOMAIN/lib/

另外,在此之后重新启动服务器。

尝试在第一行调用
createDriver
。我已经尝试过了,没有什么不同,但是谢谢。添加
javax.persistence.jdbc.driver
设置为
org.postgresql.driver
会有不同吗?确实,它现在可以正常工作了,非常感谢:-)但我一定想知道为什么这是必要的,因为我记得它过去在其他项目上工作,从不使用该属性。DriverManager有时可以从URL确定要使用的类。看起来这一次不行,可能是因为驱动程序与DriverManager和EclipseLink类的关系如何以及在何处。尝试过了,没有什么不同,建议使用tnx。