NPE with EntityManagerFactory
hellek May 16, 2007 9:56 PMI always get a NullPointerException with this:
public class Servlet1 extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { @PersistenceUnit(name="EJBProject1") EntityManagerFactory emf; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setHeader("Pragma", "No-cache"); response.setDateHeader("Expires", 0); response.setHeader("Cache-Control", "no-cache"); EntityManager em1 = emf.createEntityManager(); Query query1 = em1.createQuery("select b from benutzer b"); List users = query1.getResultList(); PrintWriter writer = response.getWriter(); for (Iterator iterator = users.iterator(); iterator.hasNext();) { Benutzer benutzer = (Benutzer) iterator.next(); writer.print(benutzer.getName()); } writer.flush(); } }
I failed to figure out whats going wrong for hours, had my problems with some other issues too. But unlike those, I did not manage to fix this one.
The exception:
03:29:09,125 ERROR [[Servlet1]] Servlet.service() for servlet Servlet1 threw exception java.lang.NullPointerException at com.Servlet1.doGet(Servlet1.java:46) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)
I use JBoss 4.2.0 and Eclipse 3.3M6 with M6 WTP.
Here is the persistence.xml:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" 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"> <persistence-unit name="EJBProject1"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:TestDS</jta-data-source> <class>com.Benutzer</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/> </properties> </persistence-unit> </persistence>
The Datastore-Definition (I put the driver in place and it gets loaded successfully according to the logs)
<local-tx-datasource> <jndi-name>TestDS</jndi-name> <connection-url>jdbc:mysql://...:3306/test</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>...</user-name> <password>...</password> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource>
By the way, I came across this problem while following this tutorial: http://www.eclipse.org/webtools/jst/components/j2ee/scenarios/jee5_application_creation_tutorial.html
I want to do what is done there, with JBoss, Hibernate and a MySQL Server
Here you can find my project files: http://hellekalek.com/diverses/workspace.zip
I really hope somebody can tell me what I am doing wrong. I lost all hope. Its just such a small tutorial that I want to follow, it can't be that difficult ... I thought. (of course its a little different because they don't use JBoss, but its really not a big project)