我刚刚开始使用EJB。我想从数据库接收一些使用JTA的数据。我的实体:
@Entity
@Table(name = "User")
@NamedQuery(name = "User.findByAddressName",
query = "select u from User u where u.userAddress.addressName = :addressName")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long userID;
@Column(name = "userFirstName", length = 45)
private String userFirstName;
@Column(name = "userLastName", length = 45)
private String userLastName;
@Column(name = "userBirthDate")
private Date userBirthDate;
@Column(name = "userPhone")
private String userPhone;
@Column(name = "userPassword")
private String userPassword;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "addressUser")
private Email userAddress;
public User() {
}
public User(String userFirstName, String userLastName, Date userBirthDate, String userPhone, String userPassword) {
this.userFirstName = userFirstName;
this.userLastName = userLastName;
this.userBirthDate = userBirthDate;
this.userPhone = userPhone;
this.userPassword = userPassword;
}
}我的刀:
@Stateless
public class UserBean {
@PersistenceContext(unitName = "server")
private EntityManager em;
public User getUserByEmail(String email) {
TypedQuery<User> queryUser = em.createNamedQuery("User.findByAddressName",
User.class);
queryUser.setParameter("addressName", email);
return queryUser.getSingleResult();
}
}我的服务:
@Stateless
public class LoginService {
@EJB
UserBean userBean;
public boolean loginUser(String userEmail, String userPass) {
User user = userBean.getUserByEmail(userEmail);
if (userPass.equals(user.getUserPassword())) {
return true;
} else return false;
}
}我尝试接收数据:
boolean b = new LoginService().loginUser("user", "user1");但是@EJB在LoginService中注入的userBean UserBean为空。
有很多简单的例子说明如何做这样的事情,我做的都是一样的,但它仍然抛出NullPointerException,我不知道为什么。
发布于 2013-03-11 01:41:32
要从Java环境中的注入中获益,您不能通过new实例化您的服务。您需要通过@EJB注入它,或者使用JNDI查找它。
如果您通过new创建服务,则此实例不会被视为容器管理的实例,因此它的任何功能(如注入)都不可用。当您通过JNDI注入它或查找它的引用时,您可以获得完全托管的实例,并为您完成所有的注入。
我不知道您在哪个Java堆栈上(5或6),但请记住,您不能简单地通过@EJB将内容注入到手动创建的类中。它们还需要由容器创建以使用注入。
https://stackoverflow.com/questions/15325294
复制相似问题