开发者

Can't create EntityManager

开发者 https://www.devze.com 2022-12-26 16:32 出处:网络
New to EJB3, please help/explain. Inside a session bean I declare an EntityManager as follow @PersistenceContext(unitName=\"ScheduleUnit\")

New to EJB3, please help/explain.

Inside a session bean I declare an EntityManager as follow

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

and this 开发者_如何学编程works. But when I do this

private EntityManager em;
private EntityManagerFactory emf;

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

I get the following error:

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


I think, EntityManagerFactory can't find data source, specified in your persistence unit. As for Glassfish, this information is stored in sun-resources.xml file. Is it j2ee application? If so, it is better to use dependency injection with @PersistenceContext annotation (as Pascal said).

Also, you can try to use method createEntityManagerFactory(String persistenceUnitName, Map properties) and specify "ConnectionDriverName" propety in properties map:

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


It is unclear where you use the second code snippet (is it in an EJB? if yes, you're not supposed to use the EntityManagerFactory in a managed environment like an EJB container). Could you clarify?

Also please show your persistence.xml (the error message is about this file not containing required information).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号