【发布时间】:2011-12-17 13:03:15
【问题描述】:
我正在开发一个 EJB3 应用程序,我在其中使用无状态 bean。 EntityManager 似乎没有正确注入到我的 bean 中。
这是无状态 bean 的代码:
@Stateless
@LocalBean
public class FirmEJB {
@PersistenceContext(unitName = "Fr14_07_Nezdolij_lab3PU")
private EntityManager em;
@PersistenceUnit(unitName="Fr14_07_Nezdolij_lab3PU")
private EntityManagerFactory emf;
public FirmEJB() {
emf = Persistence.createEntityManagerFactory("Fr14_07_Nezdolij_lab3PU");
em = emf.createEntityManager();
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public Employee createEmployee(Employee e){
em.persist(e);
return e;
}
public Project createProject(Project p){
em.persist(p);
return p;
}
public Customer createProject(Customer c){
em.persist(c);
return c;
}
public Department createProject(Department d){
em.persist(d);
return d;
}
public ProjectManager createProjectManager(ProjectManager prjman){
em.persist(prjman);
return prjman;
}
}
当我尝试创建FirmEJB I 的实例时,出现以下异常:
Exception in thread "main" java.lang.NullPointerException
at sttls.FirmEJB.createEmployee(FirmEJB.java:42)
at entity.Main.main(Main.java:33)
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="Fr14_07_Nezdolij_lab3PU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/fir</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.jdbc.url" value="jdbc:derby://localhost:1527/firmDB;create=true"/>
<property name="eclipselink.jdbc.user" value="admin"/>
<property name="eclipselink.jdbc.password" value="admin"/>
</properties>
</persistence-unit>
</persistence>
客户端代码:
public static void main(String[] args) throws ClassNotFoundException, Exception {
Employee emp1 = new Employee("Alan", "Smith");
FirmEJB firmejb = new FirmEJB();
firmejb.createEmployee(emp1);
}
【问题讨论】:
-
你的
entity.Main.main(Main.java:33)是什么?这是您从 Java SE 执行的static void main方法吗?您是否使用任何 Java EE 6 容器来运行您的代码? -
我刚刚向 FirmEJB 类添加了一个公共构造函数和私有 EntityManagerFactory 字段,现在 FirmEJB 已正确初始化,但持久性在 FirmEJB 方法中不起作用...
-
是的,我正在使用 Java EE 6 容器,我从 JavaSE main() 方法调用 FirmEJB。无效吗?
-
您应该发布您的客户端代码,向我们展示您是如何执行 FirmEJB 的。也请发布您的
persistence.xml以获得许可。 -
我还更改了 FirmEJB 类中的代码。
标签: java-ee-6