首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@EJB注入dao

@EJB注入dao
EN

Stack Overflow用户
提问于 2013-03-11 01:34:17
回答 1查看 1.2K关注 0票数 0

我刚刚开始使用EJB。我想从数据库接收一些使用JTA的数据。我的实体:

代码语言:javascript
复制
@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;
    }
}

我的刀:

代码语言:javascript
复制
@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();
   }

}

我的服务:

代码语言:javascript
复制
@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;
    }
}

我尝试接收数据:

代码语言:javascript
复制
boolean b = new LoginService().loginUser("user", "user1");

但是@EJB在LoginService中注入的userBean UserBean为空。

有很多简单的例子说明如何做这样的事情,我做的都是一样的,但它仍然抛出NullPointerException,我不知道为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-11 01:41:32

要从Java环境中的注入中获益,您不能通过new实例化您的服务。您需要通过@EJB注入它,或者使用JNDI查找它。

如果您通过new创建服务,则此实例不会被视为容器管理的实例,因此它的任何功能(如注入)都不可用。当您通过JNDI注入它或查找它的引用时,您可以获得完全托管的实例,并为您完成所有的注入。

我不知道您在哪个Java堆栈上(5或6),但请记住,您不能简单地通过@EJB将内容注入到手动创建的类中。它们还需要由容器创建以使用注入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15325294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档