我正在尝试在我的webapp中创建EntityManager,但它失败了:
找不到合适的jdbc驱动程序:postgresql :: // localhost / database
但是,当我将其作为JavaSE控制台应用程序(来自main())运行时,相同的持久性单元和用于创建EntityManager的相同代码也能正常工作。
谷歌搜索给了我几个导致错误的常见问题:
JDBC网址错误 不应该是因为它适用于主
JDBC驱动程序不在类路径中
我可以使用Class.forName("org.postgresql.Driver");
为驱动程序创建一个Class对象,所以我认为它在类路径中。
我试过的其他事情:
我想也许来自glassfish / lib的驱动程序jar和webapp / WEB-INF / lib在某种程度上是冲突的,所以我尝试将它们一起分开,没有运气。
重新创建了一个小的新webapp,希望问题能够消失,但它没有: - )
注入@PersistanceUnit - 也没有用,不知道它是同一个问题还是我没有正确使用它,因为我还在学习注入和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>
答案 0 :(得分:0)
将postgres jdbc驱动程序放入glassfish库中。它是这样的。
[glassfish_home]/glassfish/domains/YOUR_DOMAIN/lib/
此外,在此之后重新启动服务器。