# JPA kein EntityManager



## dadom110 (14. Februar 2008)

Tag Zusammen,

versuche gerade ein kleine WebProject auf zu setzen mit einer Datenbank dahinter. Leider bekomme ich das mit der Persistenz schicht einfach nicht auf die Reihe.

Software:
Eclipse Europe
Derby Datenbank
GlassFish Application Server

Ich bin wie folgt vorgegangen:

1. bei Ecipse ein "dynamic WebProject" ausgwählt.
2. als Persistenz Unit musste ich ihm ne neue libray basteln (?) hab ihm da das toplink-essentials und toplink-essentials-agent aus meinem SUN Ordner mitgegeben
3. Java Klasse erstellt die persistiert werden soll.
4. Datenbank und Tabelle in Derby angelegt
5. die Persistenz Unit in der persistence.xml eingetragen:


```
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="default">
        <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
        <class>dd.ReminderDate</class>
        <properties>
            <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
            <property name="toplink.jdbc.url" value="jdbc:derby:C:\DerbyDatabases\dreminder;create=true"/>
            <property name="toplink.jdbc.user" value="admin"/>
            <property name="toplink.jdbc.password" value="adminadmin"/>
            <property name="toplink.logging.level" value="INFO"/>
        </properties>
    </persistence-unit>
</persistence>
```

6. mein BeispielCode (Servlet) versucht nun einen EntityManager zu bekommen:


```
public class EntityManagerServlet extends HttpServlet {
	@PersistenceContext
	private static EntityManager em;
	
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		if (arg0.getSession().getAttribute("em")==null) {
			EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("default");
			em = emFactory.createEntityManager();
			arg0.getSession().setAttribute("em", em);
		}
	}
}
```

7. eine "nette" Exception auf der Serverseite


```
Message ID: ApplicationDispatcher[/DReminders] Servlet.service() for servlet EM threw exception java.lang.NullPointerException at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java 
Complete Message 
120)	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)	at dd.entities.EntityManagerServlet.service(EntityManagerServlet.java:21)	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)	at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:397)	at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:850)	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:697)	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:654)	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:568)	at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:983)	at org.apache.jsp.index2_jsp._jspService(index2_jsp.java:75)	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:353)	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:412)	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:318)	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)	at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:397)	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:278)	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:240)	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:179)	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:73)	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:182)	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)	at com.sun.enterprise.web.VirtualServerPipeline.invoke(VirtualServerPipeline.java:120)	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:137)	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:239)	at com.sun.enterprise.web.connector.grizzly.ProcessorTask.invokeAdapter(ProcessorTask.java:667)	at com.sun.enterprise.web.connector.grizzly.ProcessorTask.processNonBlocked(ProcessorTask.java:574)	at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:844)	at com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:287)	at com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:212)	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:252)	at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:75
```

Bin schon am verzweifeln, hoffe jemand hat eine IDee, was ich vergessen / falsch gemacht habe...

Viele dank schon mal
D


----------



## Oliver Gierke (14. Februar 2008)

Du brauchst den EntityManager nicht selbst erzeugen, de injiziert dir der Container. Desweiteren solltest du in Servlets nicht @PersistenceContext mit nem EntityManager benutzen, sondern eine private EntityManagerFactory halten, die mit @PersistenceUnit annotiert ist. EntityManager ist nämlich laut Spec nicht Threadsafe ^^. Grauenvoll, ist aber leider so.

So sollte es dann eigentlich tun:


```
public class EntityManagerServlet extends HttpServlet {
	
        @PersistenceUnit
	private EntityManagerFactory factory;
	
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		
              EntityManager em = factory.createEntityManager();
              // do something useful here
	}
}
```

REINHAUN!


----------



## dadom110 (14. Februar 2008)

Guten Tag,

leider hat das bisher auch noch kein Erfolg gehabt.

Hab das ganze jetzt mal auf ein JSP zusammen geschrumpft:


```
<%!
  	@PersistenceUnit
    private EntityManagerFactory factory;
 	EntityManager em = factory.createEntityManager();
 %>
```

persistence.xml sieht immer noch so aus:

```
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="default">
        <provider>oracle.toplink.essentials.PersistenceProvider</provider>
        <class>dd.dreminder</class>
        <properties>                                      
            <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
            <property name="toplink.jdbc.url" value="jdbc:derby:C:\DerbyDatabases\dreminder2;create=true"/>
            <property name="toplink.jdbc.user" value="admin"/>
            <property name="toplink.jdbc.password" value="adminadmin"/>
            <property name="toplink.logging.level" value="INFO"/>
        </properties>
    </persistence-unit>
</persistence>
```

Leider immer noch Fehlermeldung  langsam bin ich doch ein wenig verzweifelt:


```
Message ID: StandardWrapperValve[jsp] 
Complete Message 
Servlet.service() for servlet jsp threw exceptionjava.lang.NullPointerException	at org.apache.jsp.index2_jsp.<init>(index2_jsp.java:20)	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)	at java.lang.Class.newInstance0(Class.java:355)	at java.lang.Class.newInstance(Class.java:308)	at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:149)	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:336)	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:412)	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:318)	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)	at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:397)	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:278)	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:240)	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:179)	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:73)	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:182)	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)	at com.sun.enterprise.web.VirtualServerPipeline.invoke(VirtualServerPipeline.java:120)	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:137)	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:566)	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:536)	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:939)	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:239)	at com.sun.enterprise.web.connector.grizzly.ProcessorTask.invokeAdapter(ProcessorTask.java:667)	at com.sun.enterprise.web.connector.grizzly.ProcessorTask.processNonBlocked(ProcessorTask.java:574)	at com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:844)	at com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:287)	at com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:212)	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:252)	at com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:75)
```

Hoffe noch mal auf Hilfe

Dom


----------



## Oliver Gierke (14. Februar 2008)

Das injecten funktioniert nur in Servlets. DB Zugriffe von der JSP aus sind eh keine gute Idee.

REINHAUN!


----------



## dadom110 (14. Februar 2008)

und wieder was gelernt, allerdings hatte ich das auch nur schnell direkt in die JSP geschrieben weil das andere ebenfalls nicht geklappt hat 

JSP: 

```
<body>

<jsp:include page="/servlet/em"></jsp:include>

</body>
```

Servlet:


```
public class EntityManagerServlet extends HttpServlet {
    
        @PersistenceUnit
    private EntityManagerFactory factory;
    
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
        
              EntityManager em = factory.createEntityManager();
              arg0.getSession().setAttribute("em", em);
              arg1.getWriter().write("Manager erhalten");
    }
}
```
Fehler

```
Message ID: ApplicationDispatcher[/DReminder] Servlet.service() for servlet EM threw exception java.lang.NullPointerException at dd.entities.EntityManagerServlet.service(EntityManagerServlet.java 
Complete Message 
21)	
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)	
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:397)
 ... ...
```

und direkt dahiner im Log noch eine Fehlermeldung:

```
Message ID: StandardWrapperValve[jsp] 
Complete Message 
Servlet.service() for servlet jsp threw exceptionjava.lang.NullPointerException	
at dd.entities.EntityManagerServlet.service(EntityManagerServlet.java:21)
 ...
 ......
```

*kreisch* so langsam weiss ich nicht mehr weiter...

Grüße
D


----------



## Oliver Gierke (14. Februar 2008)

Ein include wird nicht helfen... du musst das Ding per GET Request anspringen. Der Weg ist im ALlgemeinen auch Servlet -> JSP und nicht umgekehrt. Hast du das Servlet in der web.xml delariert?

Nochwas, was soll der EntityManager in der Session? Ganz großes NoGo!! Lies die Daten die du brauchst im Servlet und leg sie in den Request. Die JSP sollte dann nur auf Daten aus dem Request zugreifen. 

REINHAUN!


----------



## dadom110 (14. Februar 2008)

HuHu..

mach die ganze Web-Geschichte noch nicht so lange, darum bin ich dir sehr dankbar über deine "NoGo-Kommentare". Servlet ist eingetragen. Erreiche das Servlet ja auch über den Weg. Aber mal eine dumme Frage wie rufe ich ein Servlet denn mit Get-Request auf? Und Was ist wenn ich einfach die URL des Servlets angeben .../servlet/dreminder) ist das dann ein Post?



Oliver Gierke hat gesagt.:


> Lies die Daten die du brauchst im Servlet und leg sie in den Request. Die JSP sollte dann nur auf Daten aus dem Request zugreifen.
> REINHAUN!



Müssen die Daten dann nicht in die Response?
Grüße
Dom


----------



## Oliver Gierke (14. Februar 2008)

Ein normaler URL Aufruf (über den Browser z.B.) ist ein GET, jeder Link klick auch. HTML Formulare werden standardmäßig per POST übertragen.

@Response - nein. In den Response kommt alles, was zum Client zurück soll. In deinem Servlet bereitest du ja nur Daten auf, die du dann im JSP darstellen willst. D.h. als Daumenregel gilt: Daten im Servlet aus dem Backend auslesen, und in den Request stecken. Im JSP dann auf die Daten im Request zugreifen.

REINHAUN!

PS: Tut der EntityManager denn jetzt?


----------



## dadom110 (15. Februar 2008)

EntityManager will immer noch nicht. Hatte die befürchtung das mein Application Server ohne hin nicht mehr ganz ok ist. Darum hab ich alle noch mal Neuinstalliert (java_ee_sdk-5_04-windows.exe) + Eclipse Europa. Jetzt habe ich allerdings das Problem das ich KEINEN Server Adapter mehr für GlassFish oder Sun Application Server in meiner Liste habe. Beim additional Download bekomm ich auch nur andere.  kann man die per "Hand" irgendwo runter laden ?(Server: Sun Java System Application Server 9.1_01 )

>> hab ihn, Proxy war bei der SSL Verbindung nicht eingetragen *grml*

grüße
D


----------



## dadom110 (15. Februar 2008)

HuHu..

ok also jetzt läuft wieder alles -->> bis auf der EntityManager 

Gelöst: Hab in einem meiner schlauen Bücher was gefunden:


```
factory=Persistence.createEntityManagerFactory("default");
```

Das Komische ist auch der Verzeichnisaufbau den Eclipse mir liefert sobald ich die Persistenz Unit einstelle.

Normalerweise hab ich ja:
src
build
WebContent (und darin die Meta-INF mit der persistence.xml)

Eclipse erstellt dann aber einen "Meta-INF" Ordner im src Ordner. Hat mich ein wenig gewunder. Halte zur Zeit die persistence.xml jetzt doppelt weil ich mir nicht sicher bin welcher er benutzt..

Hab natürlich gleich noch einen Fehler  Wie adde ich der session einen Descriptor?  Dachte durch meine Annotations in der EntityBean und den Eintrag in der Persistence.xml würde er wissen was zu tuen ist?

Exception [TOPLINK-6007] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.QueryException
Exception Description: Missing descriptor for [class dd.entities.DReminder].
Query: ReadAllQuery(dd.entities.DReminder)
grüße
D


----------



## dadom110 (15. Februar 2008)

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


----------



## Oliver Gierke (15. Februar 2008)

Kann es sein, dass das dadurch passiert, dass du den EntityManager in die Session legst? Oder nutzt du beim zweiten aufruf eine neue Instanz?


----------



## dadom110 (19. Februar 2008)

HuHu...

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


```
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);

			} 
	}
```


----------



## Oliver Gierke (19. Februar 2008)

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


----------



## dadom110 (20. Februar 2008)

Moin Moin,

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


```
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


```
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...


***



```
@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?


----------



## Oliver Gierke (20. Februar 2008)

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


----------



## dadom110 (22. Februar 2008)

Oliver Gierke hat gesagt.:


> Hast du für das Servlet <load-on-startup /> in der web.xml definiert?



nein, hab ich in der XML nicht drin... hatte das gestern oder so mal kurz ausprobiert und bin auf einen anderen Fehler gelaufen


----------



## Oliver Gierke (22. Februar 2008)

Versuch das mal... und poste die Exception / Fehlermeldung.


----------



## dadom110 (22. Februar 2008)

HuHu..

Ich habe getötet 


```
[#|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()


----------



## Oliver Gierke (22. Februar 2008)

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!


----------



## dadom110 (26. Februar 2008)

Oliver Gierke hat gesagt.:
			
		

> Mir scheints du includest immer noch das Servlet von der JSP aus?



ähhh *räusper* ich seh schon ich kann nichts vor die verheimlichen  . Ja tue ich. Ich weiss du meintet das es nicht schön ist mit ner JSP zu starten, hatte mir das aber so gedacht:

"StartURL" auf index.jsp
die index.jsp included 3 andere Files
1. das Servlet, das die Daten aus der Datenbank zieht
2. eine JSP die einen HTML Kalender generriert
3. eine JSP die mir die Tageseinträge (Termine) für den ausgewählten Kalendertermin anzeigt

darum hatte ich das einfach so gemacht:


```
<jsp:include page="/servlet/data"></jsp:include>
...
....
<jsp:include page="DCalendar.jsp"></jsp:include>
<jsp:include page="DCalendarDay.jsp"></jsp:include>
```

+ noch ein paar Prüfungen wegen dem Datum, die hab ich mal raus gelassen.

Darf man das so nicht machen? 

grüße
D


----------



## Oliver Gierke (26. Februar 2008)

Es ist einfach nicht schön und kann schon problemchen verursachen. Mach doch eine index.jsp die nichts anderes macht als ein forward auf dein servlet. Dieses servlet hat dann wieder eine start.jsp als Ziel. Dann ist das halbwegs sauber...

REINHAUN!


----------



## dadom110 (27. Februar 2008)

Da issa wieder  . So bin ja gerne gewillt auch schönen Code zu schreiben, tippe (leider) meistens einfach drauf los und schaue das es funktioniert und erst im nachhinein denke ich mir das ich totalen Murks gemacht habe. Jetzt sieht das ganze so aus:

Servlet das die Daten aus der Datenbank fischt: (forward auf meine index-Seite)
die indexSeite included 2 JSP die mir die Seite aufbauen.

Geht wieder. PRoblem ist leider immer noch das alte: findet den Deployment Descriptor nicht immer. Konnte es aber ein wenig genauer lokalisieren: der Fehler tritt nur noch dann auf wenn ich neu Deploye. Also wenn ich eine JSP z.B. ändere und Eclipse diese neu hoch läd, dann tritt der Fehler auf

?
	
	
	



```
Exception [TOPLINK-6007] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.QueryException
Exception Description: Missing descriptor for [class dd.entities.Dreminder].
Query: ReadAllQuery(dd.entities.Dreminder)
```


und weil ein Fehler ja nicht genug ist, und ich langsam zu der Überzeugung komme das die PersistenzUnit einen gewissen Groll gegen mich hegt, persistiert sie auch nicht 
im DataServlet

```
private void setData(HttpServletRequest arg0, HttpServletResponse arg1) {
		Dreminder entry=new Dreminder();
		entry.setDescription((String)arg0.getParameter("des"));
		entry.setRemindermin(Integer.parseInt((String)arg0.getParameter("rTime")));
		entry.setLabel((String)arg0.getParameter("label"));
		entry.setStartdate(getCalenderFromString((String)arg0.getParameter("start")));
		entry.setEnddate(getCalenderFromString((String)arg0.getParameter("end")));
		EntityManager em = factory.createEntityManager();
		em.persist(entry);
		em.close();
		System.out.println(entry.getId());
	
	}
```

Das erste Problem das keine automatische ID generriert werden kann, habe ich schon umgangen, indem ich die entsprechende Tabelle angelegt habe (hatte ich irgendwo in einem Forum gefunden). Aber wenn ich persistiert habe, passiert nichts... kein Fehler, kein Hinweis, keine Daten in der Datenbank

Entity:

```
@Entity
@Table(name="dreminder")
public class Dreminder implements Serializable {
	@Id
	@GeneratedValue
	private int id;

	private Timestamp enddate;

	private Timestamp startdate;

	private int remindermin;

	private String label;

	private String description;

	private static final long serialVersionUID = 1L;

	public Dreminder() {
		super();
	}
.....
```

und meine persistenceXML


```
<?xml version="1.0" encoding="UTF-8"?>
	
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="default">
        <provider>oracle.toplink.essentials.PersistenceProvider</provider>
        <class>
        dd.entities.Dreminder</class>
        <properties>                                      
            <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
            <property name="toplink.jdbc.url" value="jdbc:derby:C:\DerbyDatabases\dreminder2;create=true"/>
            <property name="toplink.jdbc.user" value="admin"/>
            <property name="toplink.jdbc.password" value="admin123"/>
            <property name="toplink.logging.level" value="INFO"/>
        </properties>
    </persistence-unit>
</persistence>
```


----------



## Oliver Gierke (27. Februar 2008)

Du musst natürlich noch em.flush() rufen, sonst landet der Kram nur im Cache. Wegen der Id solltest du mal mit dem @GeneratedValue(strategy = GenerationType.**) rumspielen. IDENTITY sorgt bei der MySQL z.B. dazu, dass einfach ein autoincrement benutzt wird. Genaueres findest du in der JPA Spec bzw auf den Webseiten des Datenbankproviders deiner Wahl.

REINHAUN!


----------



## dadom110 (28. Februar 2008)

Oliver Gierke hat gesagt.:


> IDENTITY sorgt bei der MySQL z.B. dazu, dass einfach ein autoincrement benutzt wird.



Genau das hatte ich auch damit Vor  *sektKorkenKnall* ich habe meine PersistenceUnit damit endlich überredet zu persistieren...auch wenn es eine lange und harte Geburt wart. Jetzt schon mal vielen vielen Dank für deine wertvollen Tipps.

Leider bleibt das ursprüngliche (nicht hinderliche, aber nervenaufreibende) Problem: nach einem Deploy verliert er den Descriptor für meine Entity , bis zu einem Server Restart 

Grüße
D


----------



## dadom110 (29. Februar 2008)

HuHu..

hab zu dem Problem folgendes gefunden:

http://forums.oracle.com/forums/thread.jspa?threadID=296016

kann damit aber irgendwie leider nicht besonders viel anfangen  ?


----------



## Oliver Gierke (29. Februar 2008)

Wenn du uns / mir noch mitteilst, wie das Problem genau aussieht kann dir vielleicht auch geholfen werden. Welchen Code hast du jetzt? Was für Exceptions fliegen? usw. usw.

Ich helf gern, aber mag nicht in eine Glaskugel schauen...

REINHAUN!


----------



## dadom110 (3. März 2008)

Oliver Gierke hat gesagt.:


> Ich helf gern, aber mag nicht in eine Glaskugel schauen...



mhh keine JGlasskugel?  nein. Hatte meinen ganzen Code ja schon ganz am Anfang mal geschrieben, und die Fehlermeldung das er eben scheinbar seine Deployment Descriptors "vergisst" wenn ich einen ReDeploy mache. Habe nach dem Forums Post den ich dir geschickt habe, mal spekuliert das es nicht an meinem Code liegt.

Dank des Wochenende habs ich es auch geschafft *g* Eigentlich ganz einfach.
Hatte bisher ja ein "Dynamic Web Project" in Eclipse aufgemacht. Und wie schon gesagt durfte ich nach jedem Deploy meinen Server neu starten weil er Probleme mit den Entities hatte. Jetzt habe ich zusätzlich zu dem "Dynamic Web Project" ein "Enterprise Application Project" quasi als Hülle für das Web Project benutzt (Enterprise Application Project anlegen, und dabei musste man die "Module" (?) auswählen die da rein sollten) und dann einfach das Enterprise Application Project Deployt und siehe da: es geht ohne Server neustart 

** edit **

Vielleicht auch zu früh gefreut, irgendwie will das auch noch nicht so richtig. Eclipse scheint einfach nicht für so was gemacht zu sein  mit NetBeans hatte ich damals nicht solche Probleme *grml* Meld mich dann noch mal...

Danke schon mal
D


----------



## dadom110 (3. März 2008)

Hi...

ich schon wieder  da ich so langsam wirklich Verzweifel, habe ich mein ganzes Projekt noch mal neu aufgesetzt, ohne irgendwelche Plugins, also einfach ein nacktes Java-Project, mit entsprechendem Aufbau. Jetzt hab ich allerdings das Problem das er mein Servlet nach dem "händischen" Deploy über das exportierte JAR nicht findet.

Man musste doch "nur" das Servlet in der web.xml eintragen, oder bin ich jetzt ganz druch  ? 
web.xml

```
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>
	DReminder</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	
	<servlet>
		<servlet-name>ex</servlet-name>
		<servlet-class>dd.servlets.ExampleServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>ex</servlet-name>
		<url-pattern>/start</url-pattern>
	</servlet-mapping>
	
</web-app>
```

Ansonsten hab ich mein Beispiel mal hochgheladen:

http://home.arcor.de/dadom110/DReminder2.jar

Ist nicht mein Projekt, nur eine JSP und ein Servlet als Beispiel.

Hoffe das durch das "nackte" Aufsetzen weniger "komische" Probleme auf treten.

** edit **

und wieder ein paar Stunden später, auch das Problem gelöst. Er übernimmt meine schön Angelegte Ordnerstruktur im jar irgendwie nicht? Hab ihm jetzt mit nem Archiv-Export und nem händischen Select der Ornder dazu gebracht mein Modul an zu erkennen... Mal weiter testen ob das mein Problem gelöst hat


----------



## Oliver Gierke (4. März 2008)

Ich weiß ehrlich nicht, was du anstellst. Ein Dynamic Web Project kannst du mit Eclipseboardmitteln auf nen lokal installieren Server schubsen und bekommst Hotdeployment out of the box. Ein EAR um das WAR zu machen halte ich für Unfug. Ein einfaches JavaProjekt geht auch nicht, weil die JPA Nature z.Zt. nur auf Dynamic Web Projects angewandt werden kann - ergo keine Unterstützung in Entitätsklassen, beim Editieren der persistence.xml usw.

Wie gesagt, ganz nett zu lesen, was du da treibst, aber so lang du keine konkreten Probleme schilderst kann dir keiner helfen. Ein "Irgendwie muss ich meinen Server immer neustarten" ist halt eine Wolke, sorry...

REINHAUN!


----------



## dadom110 (5. März 2008)

Oliver Gierke hat gesagt.:


> Ein Dynamic Web Project kannst du mit Eclipseboardmitteln auf nen lokal installieren Server schubsen und bekommst Hotdeployment out of the box



Genau das versuche ich den ganzen Tag  Ok, also noch mal langsam:

Ich deploye meine Anwendung, die wir ja schon zur genüge Auseinander genommen haben. Starte meinen Browser, gehe auf meinen lokalen Server, alles wunderbar. Wenn ich jetzt eine JSP Seite ändere (ich speichere, Eclipse re-deployed) bekomme ich bei einem refresh meine Seite:


```
[#|2008-03-05T09:02:10.871+0100|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=16;_ThreadName=httpSSLWorkerThread-8080-1;_RequestID=191f506a-6da7-4bf9-ba89-5a872534108a;|StandardWrapperValve[data]: PWC1406: Servlet.service() for servlet data threw exception
Local Exception Stack: 
Exception [TOPLINK-6007] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.QueryException
Exception Description: Missing descriptor for [class dd.entities.Dreminder].
Query: ReadAllQuery(dd.entities.Dreminder)
	at oracle.toplink.essentials.exceptions.QueryException.descriptorIsMissing(QueryException.java:419)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.checkDescriptor(ObjectLevelReadQuery.java:412)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.checkPrePrepare(ObjectLevelReadQuery.java:494)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.checkEarlyReturn(ObjectLevelReadQuery.java:433)
	at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:575)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:692)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:746)
	at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2233)
	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952)
	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:924)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:367)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.getResultList(EJBQueryImpl.java:478)
	at dd.servlets.DataManager.getData(DataManager.java:107)
	at dd.servlets.DataManager.service(DataManager.java:89)
	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.connector.grizzly.TaskBase.run(TaskBase.java:265)
	at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
|#]
```

im Oracle Forum habe ich wie gesagt den oben genannten Artikel gefunden, dass das Problem mit dem Classloader zu tuen haben soll der auf die veraltet Entity zugreift (?) leider habe ich die Lösung die die User da angeboten nicht ganz nachvollziehen können.

Jetzt mein Problem verständlich geworden?

Grüße
D

PS:



Oliver Gierke hat gesagt.:


> Ein einfaches JavaProjekt geht auch nicht



? Ich glaube da hast du nicht ganz verstanden was ich gemacht habe...das "dynamic Web Project" unter Eclipse ist doch auch nichts anderes als ein Java Project mit einer bestimmten Struktur und bestimmen XML Files...und genau die habe ich per Hand geschaffen und nicht mit dem "Wizard" von Eclipse, das ging ja auch...naja analog zumindest mit dem selben Fehler


----------



## dadom110 (12. März 2008)

Hallo Zusammen,

ich mal wieder. Ich komme der Sache ein wenig näher, bzw, bin noch ratloser als vorher. Ich habe kurzerhand die Entwicklungsumgebung gewechselt (NetBeans 6.0) weil ich in Erinnerung hatte das es damit problemloser ging. Und siehe da : ES GEHT !

Da ich aber eigentlich an Eclipse hänge würde ich mich freuen wenn jemand mich auf den Punkt stoßen könnte woran es dran liegt.

Ich bin folgendermaßen vorgegenangen, ich habe meine gesamten Projekt-Files in NetBeans importiert, ausser die persistence.xml, die habe ich von NetBeans generierrieren lassen. Um das durch zu führen musste ich im Server einen neuen ConnectionPool anlegen (funktioniert). Dann habe ich die generrierte persistence.xml aus Netbeans genommen und in mein Eclipse kopiert:

persistcen.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="DReminderPU" transaction-type="JTA">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <jta-data-source>jdbc/dreminder</jta-data-source>
    <properties>
      <property name="toplink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>
```

Um das ganze (in NetBeans) lauffähig zu bekommen, musste ich eine Änderung an meinem Servlet machen (das was mein freundlicher Helfer hier schon in den ganz frühen Posting gesagt hat)


```
@PersistenceUnit
	private EntityManagerFactory factory;
```

in NetBeans, funktioniert es. In Eclipse bekomme ich eine NullPointer Exception sobald ich die factory nach einem EntityManager frage (EntityManager em = factory.createEntityManager()

WIE GEHT DAS  habe wirklich alle Dateien genau abgeglichen (NetBeans hat einen bisschen anderen aufbau, mit ner build.xml und anderen Ordnern, aber Eclipse muss das doch auch hinbekommen...)

Jemand Ideen?

Dom

** edit **
Ich habe die beiden *.war Dateien verglichen, die beide IDS ausspucken: identisch. Also irgendwas scheint Eclipse beim deploy anders zu machen  hier noch mal beide WARs (zusammen gezippt) der beiden IDEs:

getupload.net/989WarFiles.zip

Hoffe jemand kann helfen


----------



## dadom110 (12. März 2008)

Oki den ersten Fehler hab ich schon wieder, ich weiss nicht wo dieses versdammte Eclipse sich den Namen der PersistenzUnit merkt, aber er hatte die PU "default" nicht gefunden. Habs in der persistence.xml geändert und siehe da .... das alte Problem (allerdings von anfang an)


```
[#|2008-03-12T16:12:27.954+0100|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=17;_ThreadName=httpSSLWorkerThread-8080-0;_RequestID=6547fbd4-c661-4d2a-960d-e9cd78ab290d;|StandardWrapperValve[data]: PWC1406: Servlet.service() for servlet data threw exception
Local Exception Stack: 
Exception [TOPLINK-6007] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.QueryException
Exception Description: Missing descriptor for [class dd.entities.Dreminder].
Query: ReadAllQuery(dd.entities.Dreminder)
	at oracle.toplink.essentials.exceptions.QueryException.descriptorIsMissing(QueryException.java:419)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.checkDescriptor(ObjectLevelReadQuery.java:412)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.checkPrePrepare(ObjectLevelReadQuery.java:494)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.checkEarlyReturn(ObjectLevelReadQuery.java:433)
	at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:575)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:692)
	at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:746)
	at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2233)
	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952)
	at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:924)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:367)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.getResultList(EJBQueryImpl.java:478)
	at dd.servlets.DataManager.getData(DataManager.java:107)
	at dd.servlets.DataManager.service(DataManager.java:87)
	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)
|#]
```

meine Entitiy (steht auch in der persistence.xml)

```
@Entity
@Table(name="dreminder")
public class Dreminder implements Serializable {
	
	@Id
	@GeneratedValue
	private int id;
```


----------

