【发布时间】:2014-05-06 11:43:01
【问题描述】:
我正在尝试将我的实体管理器放入一个简单的 Hello World servlet,但我遇到了问题。我确定这是由于某种错误配置,但找不到它在哪里。我有一个基本的 servlet:
public class HelloWorldServlet extends HttpServlet {
public static final String HELLO_WORLD_WELCOME_MESSAGE = "This is the Hello World servlet!";
@Inject
private EntityManager entityManager;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println(HELLO_WORLD_WELCOME_MESSAGE);
List<Book> books = entityManager.createQuery("getBooks", LegacySermon.class).getResultList();
for (Book book : books) {
out.println(book.getTitle());
}
entityManager.close();
}
资源配置:
public class Resources {
@PersistenceContext
@Produces
private EntityManager entityManager;
}
还有一个persistence.xml:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="grace">
<jta-data-source>java:jboss/datasources/PostgreSQLDS</jta-data-source>
</persistence-unit>
</persistence>
全部配置。但是,entityManager 没有被注入,所以当我尝试调用 .createQuery 方法时,我得到了 NullPointerException。我的配置缺少什么?
【问题讨论】:
-
尝试在
中添加属性 transaction-type="JTA" -
控制事务管理,而不是资源注入。
-
是的,试过了,还是一样。
-
我假设你至少有一个
WEB-INF/beans.xml对吧? -
叹息...我忘记了 beans.xml :-(。@JohnAment,把它作为答案,我会接受。谢谢!
标签: java jakarta-ee jpa jboss cdi