JPA kein EntityManager

Ich noch mal:

Hab die Entities jetzt mit Eclipse automatisch erstellen lassen. Beim ERSTEN Aufuruf funktioniert alles tadellos. Sobald ich die JSP Seite aktualisieren, und er die Bean noch einmal verwenden soll, findet er den Descriptor nicht mehr, bis ich dann einen Neustart des Servers mache


Jemand eine gute Idee?
grüße
Dom
 
Kann es sein, dass das dadurch passiert, dass du den EntityManager in die Session legst? Oder nutzt du beim zweiten aufruf eine neue Instanz?
 
HuHu...

habe mal ein paar IFs drum herrum gebaut, aber scheint noch nicht gelöst zu sein:

Code:
public class DataManager extends HttpServlet {

	@PersistenceUnit
	private EntityManagerFactory factory;
	private EntityManager em;


	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {

			if (factory==null)
			factory = Persistence.createEntityManagerFactory("default");
			if (factory != null) {
				if (em==null) em = factory.createEntityManager();
			
				Query query = em.createNativeQuery("select * from dreminder",Dreminder.class);
				List dataList = query.getResultList();
				System.out.println("MENGE DER DES ERGEBNISSES: " + dataList.size());
				arg0.setAttribute("data", (List<Dreminder>)dataList);

			} 
	}
 
Sorry, aber schau dir bitte die Dokumentation an. Das ist grober Unfug, was du da machst. Die EntityManagerFactory wird vom Container injected, die brauchst du nicht selbst erzeugen. Den EntityManager brauchst du auch nicht in einer Property halten. Ich hatte oben geschrieben, dass der nicht threadsafe ist. Daher ist es nötig, in der Methode immer factory.createEntityManager() zu machen.

Hol doch in service() einfach mal nen EntityManager und schreib den ins log. Der sollte nie null sein an der Stelle.

Gruß
Ollie
 
Moin Moin,

ja Unfug machen kann ich :D ich weiss ja was du gesagt hast, versuche mich auch daran zu halten und dachte demnach das ich die Factory nicht erzeugen muss:

Code:
public class DataManager extends HttpServlet {

	@PersistenceUnit
	private EntityManagerFactory factory;
	// private EntityManager em;

	HashMap<Integer, List<Dreminder>> data = new HashMap<Integer, List<Dreminder>>();

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

		int index = -1;
		System.out.println("Factory: " + factory);
		EntityManager em = factory.createEntityManager();
		System.out.println("EntityManager: " + em);
....

Factory = null .:( dann natürlich eine NullPointer beim Versuch den EntityManager zu bekommen

Code:
Message ID  ApplicationDispatcher[/DReminder] PWC1231 
Complete Message  Servlet.service() for servlet data threw exception java.lang.NullPointerException at dd.servlets.DataManager.service(DataManager.java:33) at javax.servlet.http.HttpServlet.service 
...

Dejavu :) das Problem hatte ich ja am Anfang immer...


***


Code:
@PersistenceUnit
	private EntityManagerFactory factory=Persistence.createEntityManagerFactory("default");
	// private EntityManager em;

	HashMap<Integer, List<Dreminder>> data = new HashMap<Integer, List<Dreminder>>();

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

		int index = -1;
		System.out.println("Factory: " + factory);
		EntityManager em = factory.createEntityManager();
		System.out.println("EntityManager: " + em);

so steht würde es auch in meinem Buch drin stehen...und da geht es manchmal, aber zwischendurch bekomme ich dann auch wieder missing descriptor, kann aber auch daran liegen das ich immer wieder neu deploye und er sich dann verhaspelt?
 
Zuletzt bearbeitet:
Dein erster Code ist definitiv der richtige. Warum du die Factory nun nicht injiziert bekommst ist mir schleierhaft. AS Konfiguration? Bin kein Glassfishexperte, aber laut dieser Seite sollte alles genau so laufen, wie von mir geschildert. Hast du für das Servlet <load-on-startup /> in der web.xml definiert?

Gruß
Ollie
 
HuHu..

Ich habe getötet :(

Code:
[#|2008-02-22T10:16:16.726+0100|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-0;_RequestID=670bf2da-640d-4c08-b40a-3d0486e3f3b5;|ApplicationDispatcher[/DReminder] PWC1231: Servlet.service() for servlet data threw exception
java.lang.ThreadDeath
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1333)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at oracle.toplink.essentials.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:112)
	at oracle.toplink.essentials.internal.ejb.cmp3.metadata.MetadataHelper.getClassForName(MetadataHelper.java:296)
	at oracle.toplink.essentials.internal.ejb.cmp3.metadata.MetadataHelper.getAnnotation(MetadataHelper.java:160)
	at oracle.toplink.essentials.internal.ejb.cmp3.metadata.MetadataHelper.getAnnotation(MetadataHelper.java:169)
	at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.MetadataAccessor.getAnnotation(MetadataAccessor.java:142)
	at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.MetadataAccessor.getAnnotation(MetadataAccessor.java:134)
	at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.ClassAccessor.processEntityListeners(ClassAccessor.java:867)
	at oracle.toplink.essentials.internal.ejb.cmp3.metadata.accessors.ClassAccessor.processListeners(ClassAccessor.java:1099)
	at oracle.toplink.essentials.internal.ejb.cmp3.metadata.MetadataProcessor.addEntityListeners(MetadataProcessor.java:145)
	at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:199)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:93)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
	at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:91)
	at dd.servlets.DataManager.getData(DataManager.java:43)
	at dd.servlets.DataManager.service(DataManager.java:36)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
	at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
	at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:855)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:660)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:578)
	at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:997)
	at org.apache.jsp.index2_jsp._jspService(index2_jsp.java from :126)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:470)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:364)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
	at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
	at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
	at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
|#]

PS: Kurze Frage zwischendurch, wo ist der unterschied beim request Objekt : getParameter(), getAttribut()
 
Zuletzt bearbeitet:
Wie zur Hölle tötest du denn den WebApp Classloader? ;) Mir scheints du includest immer noch das Servlet von der JSP aus?


getParam geht auf die URL parameter, getAttribute ist eine extra Map neben den URL parametern...

REINHAUN!
 

Neue Beiträge

Zurück