在Java类中注入EJB时,NullPointerException异常
|
我认为这个问题提高了,因为我没有得到EJB的东西.我的实体有一个服务类,这是@Stateless.当我使用@EJB在我的会话作用域演示模型中使用它,一切都可以.但是现在我想在一个DataModel中使用这个EJB服务,我已经在我的演示文稿模型中被覆盖了: public class LazyUserDataModel extends LazyDataModel<User> {
@EJB
private UserService service;
@Override
public List<User> load(int first,int pageSize,String sortField,SortOrder sortOrder,Map filters) {
List<User> users;
users= service.findAllUsers();
this.setRowCount(users.size());
return users;
}
}
在执行时,我在“users = service.findAllUsers()”位置得到一个NullPointerException当我在演示文稿模型中覆盖此DataModel时,同样的工作: @Named
@SessionScoped
public class UserPM {
@EJB
private UserService service;
private LazyDataModel<User> lazyUsers;
public UserPM() {
// Don't works
//lazyUsers = new LazyUserDataModel();
lazyUsers = new LazyDataModel() {
@Override
public List<User> load(int first,Map filters) {
List<User> users;
users = service.findAllUsers();
this.setRowCount(users .size());
return users ;
}
};
}
}
是否可以在普通Java类中注入EJB?我该怎么做,我不必在演示模型中定义DataModel? 谢谢 解决方法EJB只注入受管Bean. bean由一些注入容器管理,例如通过JSF自己的@ManagedBean,CDI的@Named等进行管理.您甚至可以在另一个EJB中注入EJB.您不能在非托管类中注入EJB(但是您可以手动从JNDI抓取它,但这很简单).您基本上有以下选项: >在您的托管bean的@PostConstruct中,构造数据模型,从而将结果作为参数传递(注意,这也是标准数据模型如 @PostConstruct
public void init() {
lazyUsers = new LazyUserDataModel(service.findAllUsers());
}
>使LazyUserDataModel抽象,您可以要求用户提供结果. public abstract class LazyUserDataModel extends LazyDataModel<User> {
@Override
public List<User> load(int first,Map filters) {
List<User> users;
users = findAllUsers();
this.setRowCount(users.size());
return users ;
}
public abstract List<User> findAllUsers();
}
这样匿名的类就会减少 lazyUsers = new LazyUserDataModel() {
@Override
public List<User> findAllUsers() {
return service.findAllUsers();
}
};
>使LazyUserDataModel也是托管的bean,并注入它. @Named @RequestScoped
public class LazyUserDataModel extends LazyDataModel<User> {
// ...
}
同 @Inject private LazyUserDataModel lazyUsers; >像你想象的那样创建一个完整的匿名实例. 与具体问题无关,没有一个可以提供所有记录的LazyDataModel.它的意图在于,它可以根据当前的分页状态为您提供仅使用SQL权限(LIMIT,OFFSET和朋友)的子集或记录,以便您不需要在Java内存中拥有数百个甚至不是数千条记录,只有十个左右.换句话说,如果你从来没有使用load()方法的first和/或pageSize参数,那么你最有可能完全错误. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
