-->
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.  [ 13 posts ] 
Author Message
 Post subject: [Newbie] java.lang.ExceptionInInitializerError
PostPosted: Sat Dec 24, 2005 7:48 pm 
Newbie

Joined: Sat Dec 24, 2005 7:26 pm
Posts: 7
Hibernate version: 3.1

Mapping documents:
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>
    <class    name="hibernatebeans.Account"
          table="account">
        <id name="benutzername"
           type="string"
           column="Benutzername">
            <generator class="assigned"/>
        </id>
        <property
           name="passwort"
           column="Passwort"
           type="string"
           update="true"
           insert="true"/>
        <property
           name="kundeID"
           column="KundeID"
           type="integer"
           update="true"
           insert="true"/>
        <property
           name="admin"
           column="Admin"
           type="integer"
           update="true"
           insert="true"/>
    </class>
</hibernate-mapping>


Code between sessionFactory.openSession() and session.close():
Code:
      Account acc = null;
      Session hiSession = HibernateUtil.currentSession();
      acc = (Account) hiSession.get(Account.class, benutzername);
      HibernateUtil.closeSession();

Full stack trace of any exception that occurs:

Code:
java.lang.ExceptionInInitializerError
   hibernate.other.HibernateUtil.<clinit>(HibernateUtil.java:19)
   hibernate.manager.KundeAccountManager.getAccountByPrimaryKey(KundeAccountManager.java:52)
   struts.action.LoginAction.execute(LoginAction.java:38)
   org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
   org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
   org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
   org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Name and version of the database you are using:
MySql 5

The generated SQL (show_sql=true):

Debug level Hibernate log excerpt:


leider wirft obiges Codestück eine Exception.
Nichtmal der Stack Trace ist in den Logs auffindbar.

zum Eingrenzen habe ich im gleichen Eclipseprojekt ein kleines Testproggi integriert:
Code:
      Account acc = null;
      acc = KundeAccountManager.getAccountByPrimaryKey("foo42");
      System.out.println(acc.getKundeID() + acc.getPasswort());


dies läuft zur Verwunderung fehlerfrei durch (verwendet aber die Hibernate Konfiguration / Sessions / Factory aus dem grossen Program)

bin leider mit meinem Latein am Ende
thnx für alle Tipps im Voraus.[/code]


Top
 Profile  
 
 Post subject:
PostPosted: Sat Dec 24, 2005 9:31 pm 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
http://www.hibernate.org/hib_docs/v3/re ... orial.html


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 7:54 am 
Newbie

Joined: Sat Dec 24, 2005 7:26 pm
Posts: 7
[x] gelesen und beherzigt.
Aber was genau mach' ich im meinem Programm falsch ?


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 8:14 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Falsche HibernateUtil? Mal ohne probiert?

http://hibernate.org/42.html


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 8:47 am 
Newbie

Joined: Sat Dec 24, 2005 7:26 pm
Posts: 7
Ohne Hibernateutil ? *grübel* wie soll denn das gehen ?

hier mal meine hibernateutil
Code:
package hibernate.other;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
* Bietet das Verwalten von Hibernate-Sessions.
*/
public class HibernateUtil {
   private static final SessionFactory sessionFactory;

   static {
      try {
         System.out.println("try to create singelton session factory");
         sessionFactory = new Configuration().configure().buildSessionFactory();
      } catch (Throwable ex) {
         throw new ExceptionInInitializerError(ex);
      }
   }

   public static SessionFactory getSessionFactory()
   {
      return sessionFactory;
   }
   public static final ThreadLocal session = new ThreadLocal();

   public static Session currentSession() throws HibernateException {
      Session s = (Session) session.get();
      if (s == null) {
         s = sessionFactory.openSession();
         session.set(s);
      }
      return s;
   }

   public static void closeSession() throws HibernateException {
      Session s = (Session) session.get();
      session.set(null);
      if (s != null)
         s.close();
   }
}


und verwendet wirds in
Code:
   public static Account getAccountByPrimaryKey(String benutzername)
         throws HibernateException {
      Account acc = null;
      Session hiSession = HibernateUtil.currentSession();
      acc = (Account) hiSession.get(Account.class, benutzername);
      HibernateUtil.closeSession();

      return acc;
   }


wobei ichs dem tutorial entsprechend umschreiben wollte in
Session hiSession = HibernateUtil.getSessionFactory().getCurrentSession();

allerdings kennt bei mir getSessionFactory() die Methode getCurrentSession() nicht (zumindest eclipse nicht).
hab' das dumme Gefühl, das hat was mit dem Fehler zu tun.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 8:51 am 
Newbie

Joined: Sat Dec 24, 2005 7:26 pm
Posts: 7
Ergänzung: sollte natürlich heissen: sessionFactory die Methode getCurrentSession() nicht.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 9:10 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Ahem, ich empfehle wirklich du faengst nochmal von vorne an und arbeitest dich durch das Tutorial durch. Den Link hast du ja schon. Den ganzen Source code gibts auch mitgeliefert in 3.1.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 10:06 am 
Newbie

Joined: Sat Dec 24, 2005 7:26 pm
Posts: 7
an und für sich bin ich eher ruhig, aber das tut _nochmal_ (zu den 10 mal die ichs schon hab) durchlesen, das geht mir denn doch gegen den Senkel.

Zum Code: das tolle ist, der code hat bei einem Kommilitionen unter hibernate2 schon funktioniert. Jetzt haben wir hb3 und alles ist ...

Zu der getCurrent Session: unter hb 3.1 ists nicht drinnen (wers nicht glaubt, screenshot verfügbar). Allerdings unter hibernate 3.0.5, wozu ich jetzt gewechselt bin, ist die Methode verfügbar (sollte die Hutschnur noch nicht gerissen sein, jetzt ist sies auf jeden Fall, wenn man bedenkt, dass in den Tutorionals darauf verwiesen wird).

hab' jetzt den Code abgeändert zu
Code:
Session hiSession = HibernateUtil.getSessionFactory().openSession();
acc = (Account) hiSession.get(Account.class, benutzername);
hiSession.close();


und warum bitteschön funktioniert mein kleines Testprogramm und die Application im Tomcat nicht ?


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 10:26 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
OK, es ist Weihnachten, darum bin ich geduldig:

1. Du kippst irgendwelchen Code fuer Hibernate 2.x in eine Hibernate3 Anwendung und es funktioniert nicht - erstmal nicht ueberraschend.

2. Du versuchst einen Fehler zu finden, verwendest aber Code der die Fehlermeldung verschluckt. (Warum sollte klar sein wenn du die HibernateUtil mal mit denen in der Dokumentation vergleichst.)

3. Du koenntest den Fehler auch ganz einfach mit einer Zeile Code ausloesen: new Configuration.configure().buildSessionFactory();

4. Du verwendest eine komplett veraltete und kaputte HibernateUtil Klasse, ich glaube ich habe genau die Variante schonmal in einem nicht besonders guten Hibernate Buch gesehen.

5. Du solltest verstehen dass HibernateUtil komplett optional ist, der Sinn dieser Klasse besteht darin genau _eine_ Zeile Code _einmal_ auszufuehren. Diese Zeile habe ich dir in 3. schon gezeigt.

6. Du solltest wirklich, ganz ernsthaft, das Tutorial nicht nur lesen, sondern machen. Statt kaputten Code zu richten (was offensichtlich nicht wirklich klappt) koenntest du einfach den funktionierenden (inkl. Tomcat Beispiel!) Code des Tutorials nehmen und diesen veraendern.

Natuerlich hat die SessionFactory in Hibernate 3.1 eine getCurrentSession() Methode. Wirklich. Ernsthaft.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 10:28 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Achja, und falls du dich wunderst "Warum sagt er mir nicht einfach warum ich die Exception bekomme!" - Ich weiss es nicht. Keine deiner Beschreibungen oder Fehlermeldungen enthaelt verwertbare Information.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 11:12 am 
Newbie

Joined: Sat Dec 24, 2005 7:26 pm
Posts: 7
zuerst die nicht so tolle Nachricht: der Screenshot http://www.stud.uni-karlsruhe.de/~umnq/ ... actory.png

und jetzt die bessere Nachricht: mit dem Umgestalten von hibernateutil habe ich eine verwertbare Fehlermeldung bekommen. Und noch besser: ich konnte die triviale Ursache dafür beheben. Funkionieren tuts an anderer Stelle noch nicht ganz, aber das ist erstmal nicht Sache von Hibernate.

Also Dankeschön für den Tipp und die Geduld.


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 11:22 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Tja, dann ist das wohl nicht das richtige hibernate3.jar.

http://cvs.sourceforge.net/viewcvs.py/h ... &view=auto


Top
 Profile  
 
 Post subject:
PostPosted: Sun Dec 25, 2005 12:38 pm 
Newbie

Joined: Sat Dec 24, 2005 7:26 pm
Posts: 7
die hibernate3.jar habe ich von der offiziellen Seite. Mittlerweile (soeben nachgeschaut) ist die fragliche Methode drinnen.
Wie und warum auch immer: egal! Es tut. Und nach Anpassung von 50 Zeilen sunktioniert sogar der restliche Code. Nach dem ganzen Frust, dankeschön christian. Ist ein super Weihnachtsgeschenk :)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 13 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.