【发布时间】:2016-02-27 16:00:43
【问题描述】:
我尝试用 JSF 和 Java EE 在 java 中制作一个简单的 Java EE 应用程序。
我无法部署以下客户实体:
package ch.uufstellend.onlineshop.model;
import java.io.Serializable;
import javax.ejb.Stateful;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "CUSTOMER")
@NamedQuery(
name = "Customer.findAll",
query = "SELECT c FROM Customer c")
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
private String email;
private String password;
public Customer() {
}
@Override
public String toString() {
return id + "-" + email + "-" + password;
}
}
因为:
严重:部署应用程序时出现异常 [uuf-onlineshop-ear] : 无效的 ejb jar [uuf-onlineshop-ejb-1.0-SNAPSHOT.jar]:它包含 零ejb。注意:
有效的 ejb jar 至少需要一个会话、实体(1.x/2.x 样式)或消息驱动 bean。
EJB3+ 实体 bean (@Entity) 是 POJO,请将它们打包为库 jar。
如果 jar 文件包含使用 EJB 组件级别注释(@Stateless、@Stateful、@MessageDriven、 @Singleton),请检查 server.log 以查看注释是否被正确处理。
如果我向实体添加@Stateful 注释,我就可以部署应用程序。 但是当我访问 RegisterController 时,在持久化客户时会引发以下异常:
例外:> javax.servlet.ServletException:java.lang.IllegalArgumentException: 目的: ch.uufstellend.onlineshop.model.__EJB31_Generated__Customer__Intf___302872188 不是已知的实体类型。根本原因
javax.faces.el.EvaluationException: java.lang.IllegalArgumentException:对象: ch.uufstellend.onlineshop.model.__EJB31_Generated__Customer__Intf___302872188 不是已知的实体类型。
控制器:
package ch.uufstellend.onlineshop;
import ch.uufstellend.onlineshop.model.Customer;
import java.io.Serializable;
import javax.annotation.Resource;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import lombok.Getter;
import lombok.Setter;
@Named
@RequestScoped
public class RegisterController implements Serializable {
private static final long serialVersionUID = 1L;
@PersistenceUnit
private EntityManagerFactory emf;
@Resource
private UserTransaction ut;
@Inject
@Getter
@Setter
private Customer customer;
public String persist() {
try {
ut.begin();
EntityManager entityManager = emf.createEntityManager();
entityManager.persist(customer); // HERE the error is thrown
ut.commit();
FacesMessage m = new FacesMessage("Succesfully registered!", "Your email was saved under id " + customer.getId());
FacesContext.getCurrentInstance().addMessage("registerForm", m);
} catch (NotSupportedException | SystemException | RollbackException | HeuristicMixedException | HeuristicRollbackException | SecurityException | IllegalStateException e) {
e.printStackTrace();
FacesMessage m = new FacesMessage(FacesMessage.SEVERITY_WARN, e.getMessage(), e.getCause().getMessage());
FacesContext.getCurrentInstance().addMessage("registerForm", m);
}
return "/register.jsf";
}
}
知道问题出在哪里吗?
【问题讨论】: