-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Wie erkenne ich den Fehler beim configure()?
PostPosted: Sat Apr 29, 2006 4:36 am 
Newbie

Joined: Sat Apr 29, 2006 4:26 am
Posts: 2
Hallo!

Ich habe mir das Buch aus dem dpunkt.verlag zu Hibernate gekauft und daserste Beispiel erarbeitet. Einmal nebenbei in der Arbeit, da hatte es schnell geklappt. Aber zu Hause klappt es einfach nicht und ich komme nicht hinter das Problem!

Also, darum geht es:

Die Persistenzklasse 'Termin'
Code:
package net.sf.hibernatesample.einfach;
import java.util.Date;

public class Termin {
   private long _id;
   private String _title;
   private String _beschreibung;
   private String _ort;
   private Date _zeitPunkt;

   public String getBeschreibung() {
      return _beschreibung;
   }
   public void setBeschreibung(String _beschreibung) {
      this._beschreibung = _beschreibung;
   }
   public long getId() {
      return _id;
   }

   public void setId(long _id) {
      this._id = _id;
   }
   public String getOrt() {
      return _ort;
   }
   public void setOrt(String _ort) {
      this._ort = _ort;
   }
   public String getTitle() {
      return _title;
   }
   public void setTitle(String _title) {
      this._title = _title;
   }
   public Date getZeitPunkt() {
      return _zeitPunkt;
   }
   public void setZeitPunkt(Date punkt) {
      _zeitPunkt = punkt;
   }
}


Die Mappingfile Termin.hbm.xml (im selben Package):
Code:
<?xml version="1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 3.0/EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.sf.hibernatesample.einfach">
   <class name="Termin">
      <id name="id">
         <generator class="native" />
      </id>
      <property name="titel" />
      <property name="beschreibung" />
      <property name="zeitPunkt" />
      <property name="ort" />
   </class>
</hibernate-mapping>


Und die hibernate.cfg.xml (im Hauptverzeichnis):
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
   <session-factory>
      <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
      <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
      <property name="connection.username">sa</property>
      <property name="connection.password"></property>
      <property name="connection.url">jdbc:hsqldb:file:db/termine</property>
      <mapping resource="net/sf/hibernatesample/einfach/Termin.hbm.xml" />
   </session-factory>
</hibernate-configuration>


Im selben Verzeichnis die log4j.properties:
Code:
log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n


Und last but not least, die Test-Klasse:
Code:
package net.sf.hibernatesample.einfach;

import java.util.Date;

import junit.framework.TestCase;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class CRUDTests extends TestCase {

   private static final String ORT = "Hamburg";

   private static final String BESCHREIBUNG = "termin";

   private static final String TITEL = "titel";

   private static final Date ZEIT_PUNKT = new Date(
         System.currentTimeMillis() + 172800000);

   private SessionFactory _sf;

   private long _id;

   protected void setUp() throws Exception {
      super.setUp();
      Configuration cfg = new Configuration().configure(); // ----- Hier ist Ende!!!
      SchemaExport export = new SchemaExport(cfg);
      export.create(false, true);
      _sf = cfg.buildSessionFactory();
      _id = erzeugeTermin(TITEL, BESCHREIBUNG, ORT, ZEIT_PUNKT);
   }

   public void testLoad() {
      Session s = null;
      try {
         s = _sf.openSession();
         Termin termin = (Termin) s.load(Termin.class, _id);

         assertEquals(TITEL, termin.getTitle());
         assertEquals(BESCHREIBUNG, termin.getBeschreibung());
         assertEquals(ORT, termin.getOrt());
         assertEquals(ZEIT_PUNKT, termin.getZeitPunkt());
      } finally {
         if (null != s && s.isConnected()) {
            s.close();
         }
      }
   }

   private long erzeugeTermin(String titel, String beschreibung, String ort,
         Date zeitPunkt) {
      Termin termin = new Termin();
      termin.setTitle(titel);
      termin.setBeschreibung(beschreibung);
      termin.setOrt(ort);
      termin.setZeitPunkt(zeitPunkt);
      Session s = null;
      Transaction t = null;
      try {
         s = _sf.openSession();
         t = s.beginTransaction();
         s.save(termin);
         t.commit();
      } catch (HibernateException e) {
         if (null != t) {
            t.rollback();
            throw e;
         }
      } finally {
         if (null != s) {
            s.close();
         }
      }
      return termin.getId();
   }
}


Das ganze wird, wie im Code zu erkennen, gegen eine HSQLDB programmiert.

Was ist das Problem? Nun, der Test schlägt fehl! Und zwar schon innerhalb der setUp()-Methode. Ich habe herausbekommen, dass der Aufruf von .configure() das letzte ist, das passiert; zum eigentlichen testLoad() kommt es nicht mehr.

Der Output von
log4j ist folgender:
Code:
0    [main] INFO  org.hibernate.cfg.Environment  - Hibernate 3.1.3
29   [main] INFO  org.hibernate.cfg.Environment  - hibernate.properties not found
65   [main] INFO  org.hibernate.cfg.Environment  - using CGLIB reflection optimizer
76   [main] INFO  org.hibernate.cfg.Environment  - using JDK 1.4 java.sql.Timestamp handling
414  [main] INFO  org.hibernate.cfg.Configuration  - configuring from resource: /hibernate.cfg.xml
480  [main] INFO  org.hibernate.cfg.Configuration  - Configuration resource: /hibernate.cfg.xml
1292 [main] DEBUG org.hibernate.util.DTDEntityResolver  - trying to resolve system-id [http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd]
1297 [main] DEBUG org.hibernate.util.DTDEntityResolver  - recognized hibernate namespace; attempting to resolve on classpath under org/hibernate/
1322 [main] DEBUG org.hibernate.util.DTDEntityResolver  - located [http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd] in classpath
1497 [main] DEBUG org.hibernate.cfg.Configuration  - dialect=org.hibernate.dialect.HSQLDialect
1502 [main] DEBUG org.hibernate.cfg.Configuration  - connection.driver_class=org.hsqldb.jdbcDriver
1545 [main] DEBUG org.hibernate.cfg.Configuration  - connection.username=sa
1547 [main] DEBUG org.hibernate.cfg.Configuration  - connection.password=
1549 [main] DEBUG org.hibernate.cfg.Configuration  - connection.url=jdbc:hsqldb:file:db/termine
1552 [main] DEBUG org.hibernate.cfg.Configuration  - null<-org.dom4j.tree.DefaultAttribute@82b9b5 [Attribute: name resource value "net/sf/hibernatesample/einfach/Termin.hbm.xml"]
1555 [main] INFO  org.hibernate.cfg.Configuration  - Reading mappings from resource: net/sf/hibernatesample/einfach/Termin.hbm.xml
1587 [main] DEBUG org.hibernate.util.DTDEntityResolver  - trying to resolve system-id [http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd]
1590 [main] DEBUG org.hibernate.util.DTDEntityResolver  - recognized hibernate namespace; attempting to resolve on classpath under org/hibernate/
1593 [main] DEBUG org.hibernate.util.DTDEntityResolver  - located [http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd] in classpath
2088 [main] INFO  org.hibernate.cfg.HbmBinder  - Mapping class: net.sf.hibernatesample.einfach.Termin -> Termin
2177 [main] DEBUG org.hibernate.cfg.HbmBinder  - Mapped property: id -> id


Ich habe absolut keine Ahnung was hier das Problem ist :-) Kann mir jemand ein wenig unter die Arme greifen?

Vielen Dank und schönes (langes) WE!

Gruß, Sascha


Top
 Profile  
 
 Post subject:
PostPosted: Sat Apr 29, 2006 9:45 am 
Newbie

Joined: Sat Apr 29, 2006 4:26 am
Posts: 2
Ok, ok .. ich habe das Problem gefunden!

Ich habe in der Kalsse Termin title (engl.) und in der Mapping-Datei titel (deutsch)! Nach der Korrektur funktioniert es, aber mein eigentliches Problem ist immernohc nicht gelöst:

Woran hätte ich das erkennen können? Ich dachte, das log4j mir da Hilfestellung hätte geben müssen/können?

Gibt es eine Möglichkeit auf sowas zu kommen ausser den Quellcode mit Adleraugen zu durchsuchen? Also, ich denke halt an Debugger oder sowas...

Grüße, Sascha


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.