2010-04-14 88 views
0

新的EJB3,请帮助/解释。无法创建EntityManager

里面一个会话bean我宣布一个EntityManager如下

@PersistenceContext(unitName="ScheduleUnit") 
private EntityManager em; 

和工作原理。但是,当我做到这一点

private EntityManager em; 
private EntityManagerFactory emf; 

public void myFunction() { 
    emf = Persistence.createEntityManagerFactory("ScheduleUnit"); 
    em = emf.createEntityManager(); 
} 

我得到以下错误:

A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property 

回答

0

我认为,EntityManagerFactory无法找到您的持久性单元中指定的数据源。至于Glassfish,此信息存储在sun-resources.xml文件中。 它是j2ee应用程序吗?如果是这样,最好使用依赖注入与@PersistenceContext注释(如帕斯卡尔说)。

此外,您还可以尝试使用方法createEntityManagerFactory(String persistenceUnitName, Map properties)属性指定“ConnectionDriverName”欢迎使用属性地图:

private EntityManager em; 
private EntityManagerFactory emf; 

public void myFunction() { 
    HashMap<String, String> properties = new HashMap<String, String>(); 
    properties.put("ConnectionDriverName", "org.postgresql.Driver"); //as for Postgres 
    emf = Persistence.createEntityManagerFactory("ScheduleUnit", properties); 
    em = emf.createEntityManager(); 
} 
+0

请参阅本文,如果您编写j2se应用程序:http://java.sun.com/developer/technicalArticles/J2SE/Desktop/persistenceapi/ – Dmitry 2010-04-15 12:53:36

+0

感谢德米特里, 我使用Genonimo而不是Glassfish的J2EE服务器。我已经正确设置了数据源。
这是我的persistence.xml: org.apache.openjpa.persistence.PersistenceProviderImpl myDatasource com.skomarcorp.Schedule。你能解释使用@PersistenceContext和EntityManagerFactory之间的区别,以及为什么一个比另一个更好? – duvo 2010-04-16 18:21:27

+0

使用注释使代码更简单:)在这种情况下,容器(geronimo)会自动解析到实体管理器的链接,并且EntityManager实例的生命周期由容器管理。请参阅http://java.sun.com/javaee/5/docs/tutorial/doc/bnbqw.html – Dmitry 2010-04-20 18:27:08

0

,你使用第二代码片段(它是在一个EJB如果是,你不应该还不清楚在托管环境(如EJB容器)中使用EntityManagerFactory)。你能澄清吗?

也请显示您的persistence.xml(错误信息是关于此文件不包含所需信息)。

+0

感谢回答帕斯卡。 是的,它在EJB中。对于我的应用程序,每个客户端都有自己的数据库,但业务逻辑对所有用户来说都是一样的,我想我可以为每个客户端创建一个持久性单元(PU),并在运行时选择相应的PU。 这是我的persistence.xml: <持久性单元名称= “ScheduleUnit” 交易类型= “JTA”> org.apache.openjpa.persistence.PersistenceProviderImpl myDatasource com.skomarcorp.Schedule duvo 2010-04-16 18:13:29