JPA kein EntityManager

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:

Code:
<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
 
Zuletzt bearbeitet:
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!
 
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

?
Code:
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
Code:
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:
Code:
@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

Code:
<?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>
 
Zuletzt bearbeitet:
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!
 
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
 
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!
 
Ich helf gern, aber mag nicht in eine Glaskugel schauen...

mhh keine JGlasskugel? :D 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
 
Zuletzt bearbeitet:
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
Code:
<?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
 
Zuletzt bearbeitet:
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!
 

Neue Beiträge

Zurück