Postgresql Eclipselink:glassfish在JavaSE中工作时,没有找到合适的驱动程序
我正在尝试在我的webapp中创建EntityManager,但失败的原因是: 未找到适合jdbc的驱动程序:postgresql:://localhost/database 但是,当我将EntityManager作为JavaSE控制台应用程序(从main()运行)运行时,创建EntityManager的相同持久性单元和相同代码可以正常工作 谷歌搜索给了我几个常见的问题,导致了这个错误: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
- 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。