在test()
下方访问注入的服务时会引发NullPointerException
如果我没有注入但使用BugService
的新实例,NPE
将在下一步投放:BugService
的{{1}}。
实际上我发现很难理解CDI上的JEE6-Tutorial的部分,所以我想我遗漏了一些非常基本的东西。感谢您的帮助。
这是Java类:
getItems()
注入的服务:
package hoho.misc;
import java.io.Serializable;
import javax.inject.Inject;
import javax.inject.Named;
import hoho.service.BugService;
@Named
public class Printer implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
BugService bs;
public static void main(String[] args) {
Printer lPrinter = new Printer();
System.out.println(lPrinter.test());
}
public String test(){
String result = bs.getItems().toString();
return result;
}
}
我的jboss-deployment-structure.xml
package hoho.service;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import hoho.model.generated.Item;
/**
* Session Bean implementation class ItemService
*/
@Stateless
public class BugService {
/**
* Default constructor.
*/
public BugService() {
}
@PersistenceContext
EntityManager em;
@SuppressWarnings("unchecked")
public List<Item> getItems() {
return this.em.createQuery(
"SELECT i FROM Item i")
.getResultList();
}
}
这是我的beans.xml
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<exclusions>
<module name="org.jboss.resteasy.resteasy-atom-provider" />
<module name="org.jboss.resteasy.resteasy-cdi" />
<module name="org.jboss.resteasy.resteasy-jaxrs" />
<module name="org.jboss.resteasy.resteasy-jaxb-provider" />
<module name="org.jboss.resteasy.resteasy-jackson-provider" />
<module name="org.jboss.resteasy.resteasy-jsapi" />
<module name="org.jboss.resteasy.resteasy-multipart-provider" />
<module name="org.jboss.resteasy.async-http-servlet-30" />
<module name="org.apache.log4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
<!--
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<exclusions>
<module name="org.jboss.as.jaxrs"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
-->
答案 0 :(得分:2)
除非JBOSS与我使用的java-ee容器(glassfish)相比有些根本不同,否则你不应该尝试使用自制的main方法访问bean(因为容器不会在游戏中)。 / p>
一种选择是将命名bean绑定到某些jsf-page并使用按钮调用test()。
<h:form>
<h:commandButton action="#{printer.test}" value="Add"/>
</h:form>