Ich habe einen Krieg mit folgendem Inhalt:PersistenceContext EntityManager Injektion Nullpointer
META-INF/MANIFEST.MF
WEB-INF/classes/META-INF/persistence.xml
WEB-INF/classes/com/test/service/TestServlet.class
WEB-INF/classes/com/test/service/TestEntity.class
WEB-INF/classes/jndi.properties
WEB-INF/classes/postgresql-ds.xml
WEB-INF/jboss-web.xml
WEB-INF/web.xml
index.jsp
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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_1_0.xsd" version="1.0">
<persistence-unit name="test">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/TestDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
web.xml:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Test Web Application</display-name>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>TestDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
Meine TestServlet Klasse wird wie folgt :
package com.test.service;
import java.util.*;
import javax.persistence.*;
import javax.ws.rs.*;
@Path("/service")
public class TestService {
@PersistenceContext(unitName = "test")
private EntityManager em;
@GET
@Path("/get")
@Produces("application/json")
public List get() {
return em.createQuery("from TestEntity").getResultList();
}
}
Wenn die Methode get() aufgerufen wird, bekomme ich eine NullPointerException; Der EntityManager wurde nicht injiziert. Irgendwelche Vorschläge, was ich vermisse oder wie ich es diagnostizieren kann? Es gibt sehr wenig im Serverprotokoll.
Ich bin mir sicher, dass ich dies ohne die jboss-web.xml oder den Datenquelleneintrag in web.xml funktionierte. Ich habe die ds.xml auch separat in das Deploy-Verzeichnis deployed und das ist definitiv abgeholt - ich kann es in der JMX-Konsole sehen.
Erprobt mit JBoss 4.2.3 und einem Build 6.0 mit dem gleichen Ergebnis.
Raten Sie, es gibt Probleme beim Veröffentlichen von XML in Codeabschnitten ?! – rich
Sie müssten < and > -> <und> – adrianboimvaser
Ich habe es nie in der Praxis versucht, also nicht mich daran fest, aber ist es wirklich möglich, JPA auf einer Webapp ausführen, die als Servlet deklariert wurde 2.3 (J2EE 1.3) anstelle von Servlet 2.5 (Java EE 5, als JPA zum ersten Mal eingeführt wurde)? – BalusC