简体   繁体   English

在Seam 2.2中将无状态会话bean注入EntityHome派生后引发了空指针异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM