【发布时间】:2013-03-31 15:44:48
【问题描述】:
当访问注入的服务时,如下test() 抛出一个NullPointerException。
如果我不注入但使用BugService 的新实例,则NPE 将在下一步抛出:BugService 的getItems()。
实际上,我发现很难理解 JEE6-Tutorial 关于 CDI 的部分,所以我想我错过了一些非常基本的东西。感谢您的帮助。
这是 Java 类:
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;
}
}
以及注入的服务:
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();
}
}
我的 jboss-deployment-structure.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>
-->
这是我的 beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd">
</beans>
【问题讨论】:
-
如果手动实例化 EJB 将无法工作,因为此时它不再是托管对象而是 POJO。您是否将 ejb-jar.xml 打包在 EJB jar 文件的 META-INF 目录中?还有你用的是什么应用服务器?
-
感谢您的评论。不,我根本没有
ejb-jar.xml,这不是EJB 3.1 的可选吗? (哦 **** 我错过了 java-ee6 标签 - 抱歉!)我使用的是 JBoss AS 7.1.1。 -
beans.xml 怎么样?您的部署结构是什么?
-
@LightGuard 我添加了请求的文件。谢谢。
-
抱歉,我是说战争还是耳朵?还有你的 bean.xml 文件在哪里?
标签: mysql jakarta-ee jboss7.x java-ee-6 cdi