[英]Null-pointer exception raised after injecting a stateless session bean into EntityHome derivative in Seam 2.2
I will appreciate if anyone can help me get rid of a null-pointer exception in an attempt to inject a stateless session bean into an EntityHome-derived class. 如果有人可以帮助我摆脱空指针异常,以尝试将无状态会话bean注入EntityHome派生的类,我将不胜感激。
@Name("taskHome")
public class TaskHome extends EntityHome<Task> {
@In(create = true)
CategoryHome categoryHome;
@In
User user;
@EJB
private CategoryServiceLocal categoryService;
private Category newcategory;
private List<Category> categories = new ArrayList<Category>();
private List<Category> parentCategories = new ArrayList<Category>();
@PostConstruct
public void initaskHome() {
categories = categoryService.findAll();
parentCategories = categoryService.getParentCategories();
}
public void setTaskId(Long id) {
setId(id);
}
public Long getTaskId() {
return (Long) getId();
}
}
And here is the session bean's source: 这是会话bean的来源:
@Name("categoryService")
@AutoCreate
@Stateless
public class CategoryService extends AbstractFacade<Category> implements CategoryServiceLocal {
@PersistenceContext
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public CategoryFacade() {
super(Category.class);
}
public List<Category> findAll() {
return em.createQuery("select object(c) from Category as c").getResultList();
}
public List<Category> getParentCategories() {
return em.createNamedQuery("Category.findParents").getResultList();
}
}
Category.java Category.java
@Entity
@NamedQueries({
@NamedQuery(name = "Category.findAll", query = "SELECT c FROM Category c"),
@NamedQuery(name = "Category.findParents", query = "SELECT c FROM Category c WHERE c.parentCategory = null"),
@NamedQuery(name = "Category.findByName", query = "SELECT c FROM Category c WHERE c.name = :name")})
public class Category implements java.io.Serializable {
private static final long serialVersionUID = -5850085199769631170L;
private Short id;
private Byte version;
private Category parentCategory;
private String name;
private String color;
.
.
...
}
The initaskHome() in TaskHome.java method causes null-pointer exception TaskHome.java方法中的initaskHome()导致空指针异常
Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: taskHome
at org.jboss.seam.Component.newInstance(Component.java:2170)
at org.jboss.seam.Component.getInstance(Component.java:2024)
at org.jboss.seam.Component.getInstance(Component.java:1986)
at org.jboss.seam.Component.getInstance(Component.java:1980)
at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:55)
at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:50)
at org.jboss.seam.el.SeamELResolver.resolveBase(SeamELResolver.java:148)
at org.jboss.seam.el.SeamELResolver.getValue(SeamELResolver.java:51)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
at org.jboss.el.parser.AstIdentifier.getValue(AstIdentifier.java:44)
at org.jboss.el.parser.AstValue.getValue(AstValue.java:63)
at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at org.jboss.seam.core.Expressions$1.getValue(Expressions.java:156)
at org.jboss.seam.navigation.Param.getStringValueFromModel(Param.java:154)
at org.jboss.seam.navigation.Pages.getStringValuesFromModel(Pages.java:764)
at org.jboss.seam.navigation.Pages.encodePageParameters(Pages.java:939)
at org.jboss.seam.faces.FacesManager.redirect(FacesManager.java:176)
at org.jboss.seam.faces.Redirect.execute(Redirect.java:154)
at org.jboss.seam.faces.Redirect.returnToCapturedView(Redirect.java:171)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:335)
... 71 more
Caused by: java.lang.NullPointerException
at net.ozar.todo.session.TaskHome.initaskHome(TaskHome.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
at org.jboss.seam.Component.callComponentMethod(Component.java:2275)
at org.jboss.seam.Component.callPostConstructMethod(Component.java:2222)
at org.jboss.seam.intercept.JavaBeanInterceptor$1.proceed(JavaBeanInterceptor.java:133)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
at org.jboss.seam.intercept.Interceptor.postConstruct(Interceptor.java:194)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:74)
at org.jboss.seam.intercept.Interceptor.postConstruct(Interceptor.java:194)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:74)
at org.jboss.seam.intercept.Interceptor.postConstruct(Interceptor.java:194)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:74)
at org.jboss.seam.intercept.Interceptor.postConstruct(Interceptor.java:194)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:74)
at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
at org.jboss.seam.intercept.RootInterceptor.invokeAndHandle(RootInterceptor.java:84)
at org.jboss.seam.intercept.JavaBeanInterceptor.callPostConstruct(JavaBeanInterceptor.java:138)
at org.jboss.seam.intercept.JavaBeanInterceptor.postConstruct(JavaBeanInterceptor.java:117)
at org.jboss.seam.Component.postConstructJavaBean(Component.java:1463)
at org.jboss.seam.Component.postConstruct(Component.java:1379)
at org.jboss.seam.Component.newInstance(Component.java:2155)
... 95 more
In Java EE 5/JSF 1.2, the @EJB
annotation only works in "managed objects", like other EJBs or Servlets. 在Java EE 5 / JSF 1.2,在
@EJB
注释只能在“管理对象”,像其他EJB或Servlet的。
Since CategoryService is a Seam component, you use @In
for injection like any other Seam component: 由于CategoryService是一个Seam组件,因此您可以像其他任何Seam组件一样使用
@In
进行注入:
@Name("taskHome")
public class TaskHome extends EntityHome<Task> {
@In
private CategoryServiceLocal categoryService;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.