# Fehlermeldungen bei Verbindung zur DB



## Guest (2. Okt 2007)

Hallo!
Ich versuche gerade mittel Hibernate Objekte in einer DB zu speichern. Es treten aber leider immer Fehler auf.

java.lang.ExceptionInInitializerError
	beans.HibernateUtil.<clinit>(HibernateUtil.java:18)
	beans.UserHandler.processAction(UserHandler.java:38)
	javax.faces.event.ActionEvent.processListener(ActionEvent.java:51)
	javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:487)
	javax.faces.component.UICommand.broadcast(UICommand.java:78)
	javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
	org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
	org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
	org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)

org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: Class org.apache.commons.logging.impl.Log4JLogger does not implement Log
	org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:532)
	org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:272)
	org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:246)
	org.apache.commons.logging.LogFactory.getLog(LogFactory.java:395)
	org.hibernate.cfg.Configuration.<clinit>(Configuration.java:120)
	beans.HibernateUtil.<clinit>(HibernateUtil.java:13)
	beans.UserHandler.processAction(UserHandler.java:38)
	javax.faces.event.ActionEvent.processListener(ActionEvent.java:51)
	javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:487)
	javax.faces.component.UICommand.broadcast(UICommand.java:78)
	javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
	org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
	org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
	org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)

Was genau beudeten diese beiden Fehler....?

Dies action-methode wird beim betätigen eines buttons aufgerufen. hier wird die sessionFactory erzeugt, dann die session geöffnet, transaction beginnt, user soll gespeichert werden und dann wird transaction und session beendet.

	public void processAction(ActionEvent ae) throws AbortProcessingException {
			SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
			Session session = sessionFactory.openSession();
			session.beginTransaction();
			session.save(user);
			session.getTransaction().commit();
			session.close();
        }

mache ich da schon was falsch? 
wenn mir jemand dazu was sagen kann, dann kann ich natürlich auch noch mehr code posten, obwohl ich eigentlich der meinung bin, dass die session schon nicht richtig aufgebaut wird...


----------



## SlaterB (2. Okt 2007)

beim Zugriff auf die Klasse HibernateUtil konnte eine statische Variable nicht angelegt werden (ExceptionInInitializerError)

und zwar dieses Log-Problem,
dieses spezielle kenne ich zwar nicht, allgemein klingt das aber nach unterschiedlichen Versionen,

Hibernate erwartet ein Logging, welches bestimmte Eigenschaften hat,
die Klasse gibt es zwar (sonst ClassNotFoundException), aber ohne das Interface,
also sehr wahrscheinlich eine andere Version


----------



## Guest (2. Okt 2007)

das kann aber eigentlich nicht sein, da ich mal ein tutorial aus dem inet durchgeführt habe und da hat das speichern in der db geklappt. (Java Anwendung)

hier meine versionen:

JDK1.6.0_01
hibernate 3.2
myfaces-core-1.1.5
tomahawk 1.1.5 snapshot
mysql-connector java 5.0.7

vielleicht kannst du dazu ja schon was sagen. 
Ich erstelle eine Web-Anwendung. D.h. Formulareingaben werden übernommen und dann abgespeichert. Die Eingaben sind vorhanden und das objekt soll abgespeichert werden. 

also bin ich jetzt an der gleichen stelle wie bei dem tutorial oben. oben werden die Daten zum testen manuell gesetzt und bei mir halt aus dem formular gelesen.... das funktioniert auch....
jetzt soll halt die methode aufgerufen werden und die datne gespeichert werden und da ist das problem...


----------



## SlaterB (2. Okt 2007)

irgendwo muss ja auch commons-logging.jar oder ähnliches sein,
oder irgendeine log4jirgendwas.jar

welche nur falsch oder richtig ist bzw. wo du die herbekommst
kann ich allerdings nicht sagen,
evtl. hilft es, andere Tutorials mit ihren Komplettpaketen oder Anleitungen auszuprobieren


----------



## Guest (2. Okt 2007)

genau. die commons-logging-1.04 und log4j-1.2.11 habe ich in das /lib vom tomcat kopiert. 

ich habe gerade mal alle *.jar die für Hibernate im /lib vorhanden sind gelöscht. 
dann das programm ausgeführt und dann bei den fahlermeldungen die entsprechend benötigten jars eingefügt.

also habe ich jetzt alle benötigten jars im /lib. leider kommt die fehlermeldung immer noch. kacke.

wenn man irgendwelche *.jar nicht eingebunden hat, dann kommt normalerweise die fehlermeldung classnotfound (aber das hast du ja auch schon gesgat). das ist ja jetzt bei mir nicht der fall.

wenn ich einfach alle mitgelieferten *.jar von hibernate ins /lib kopiere, dann läuft das programm auch nicht.

ich habe die action-methode mal geändert. bekomme aber immer noch die gleichen fehlermeldungen.

public void processAction(ActionEvent ae) throws AbortProcessingException {	
		try{
			SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
			session = sessionFactory.openSession();	
			transaction = session.beginTransaction();
			session.save(user);
			transaction.commit();
		}
		catch(HibernateException e){
			if (transaction != null){
				transaction.rollback();
				throw e;
			}
		}
		finally{
			if(session != null){
				session.close();
			}
		}
	}

habe dann in der fehlermeldung  
beans.HibernateUtil.<clinit>(HibernateUtil.java:18)
nicht mehr stehen. Hier mache ich ja auch alles "nötige" im tryblock.

wäre nett, wenn du mir nochmal genau sagen könntest was die Fehlermeldung java.lang.ExceptionInInitializerError bedeutet.
es kann ja jetzt eigentlicht nicht mehr damit zu tun haben, dass eine statische variable nicht angelegt werden konnte.
in der Klasse HibernateUtil hatte ich eine, aber jetzt j anicht mehr....
wenn ich meinem buch glaube, dann müßte das speichern so einfach sein: 

session öffnen, transaktion beginnen, Operation (hier speichern), transaktion beenden, sessions chließen 

leider klappt das aber nicht so einfach ;-)


----------



## SlaterB (2. Okt 2007)

?
die Fehlermeldung bedeutet genau das was ich oben geschrieben habe,

> es kann ja jetzt eigentlicht nicht mehr damit zu tun haben, dass eine statische variable nicht angelegt werden konnte. 

was hat das mit einem früheren Fehler zu tun?
wenn du nun die Exception immer noch bekommst, dann schreibe doch den aktuellen StackTrace


----------



## Guest (2. Okt 2007)

ich habe mal wieder zu schnell geschrieben und mir das nicht mehr durchgelesen. du hast mir ja gesagt, "beim Zugriff auf die Klasse HibernateUtil konnte eine statische Variable nicht angelegt werden (ExceptionInInitializerError) ".
die klasse HibernateUtil benutzte ich nihct mehr, der fehler (java.lang.ExceptionInInitializerError) kommt aber trotzdem. 
wäre schön wenn du noch was dazu sagen könntest. 
naja mal sehen was ich jetzt noch alles im inet zu meinem problem finde.


java.lang.ExceptionInInitializerError
	beans.UserHandler.processAction(UserHandler.java:31)
	javax.faces.event.ActionEvent.processListener(ActionEvent.java:51)
	javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:487)
	javax.faces.component.UICommand.broadcast(UICommand.java:78)
	javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
	org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
	org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
	org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)

org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: Class org.apache.commons.logging.impl.Log4JLogger does not implement Log
	org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:532)
	org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:272)
	org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:246)
	org.apache.commons.logging.LogFactory.getLog(LogFactory.java:395)
	org.hibernate.cfg.Configuration.<clinit>(Configuration.java:120)
	beans.UserHandler.processAction(UserHandler.java:31)
	javax.faces.event.ActionEvent.processListener(ActionEvent.java:51)
	javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:487)
	javax.faces.component.UICommand.broadcast(UICommand.java:78)
	javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
	org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
	org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
	org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)


----------



## SlaterB (2. Okt 2007)

nun scheint es genau das gleiche Problem in der Klasse beans.UserHandler zu sein,
oder, da man nie genau weiß, was genau als StackTrace ausgegeben wird, eine Klasse, die in Zeile 31 in UserHandler benutzt wird,
was ist dort Zeile 31?


----------



## Guest (2. Okt 2007)

da steht bisher 

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Es wird ja hier ein SessionFactory Objekt instanziet. Kann es sein, dass dieses static sein muss?


----------



## SlaterB (2. Okt 2007)

warum sollte dein privat erzeugtes Objekt statisch sein?
mit der Exception hat das nix zu tun

welche Klasse nun schuld ist kann ich bei all dem Hin- und Her nicht sehen,
aber immer einfach herauszufinden:

suche dir irgendein funktionierendes sicheres Plätzchen in deiner Anwendung,
z.B. die main-Operation

und schreibe dort
System.out.prinln(UserHandler.class.getName()+" geht");
System.out.prinln(SessionFactory.class.getName()+" geht");
System.out.prinln(Configuration.class.getName()+" geht");
usw.
dann siehst du, ob eine dieser Klassen nicht geladen (initialisiert) werden kann,
(Exception oder Ausgabe)

es kann natürlich auch irgendeine interne Klasse treffen, die z.B. in buildSessionFactory(); benutzt wird und die  du gar nicht zu sehen bekommst


----------



## Guest (2. Okt 2007)

das mit dem static ist natürlich mist. habe da nur gerade was gelesen, aber hat sich schon erledigt. 
schreibe ja ne kleine testwebanwendung, habe also keine main. ist ja auch egal. ich teste jetzt einfach mal herum und dann hoffe ich das es bald klappt. wenn ich mir meine getter und setter der bean ausgeben lasse, dann kann ich wenigstens schonmal sehen, dass die eingegeben werte übernommen werden. 
diese will ich ja abspeichern. 

naja ich suche einfach mal weiter.

viele dank für die hilfe....


----------



## gast (19. Aug 2008)

Hallo,

ich habe genau das selbe Problem  mit meiner SessionFactory. Gibt es dazu mittlerweile eine Lösung?
Welche Bibliotheken müssen wohin damit es geht?

Vg
Chris.


----------



## SlaterB (19. Aug 2008)

wenn man eine Libary wie Hibernate nutzt, muss man entweder die zugehörigen Libs dabei haben oder eine Info-Datei oder besser Manual mit Informationen dazu,

habe gerade probeweise  'Hibernate Core 	 3.3.0 GA	 13.08.2008' heruntergeladen
http://www.hibernate.org/6.html

da sind einige Libaries dabei, allerdings hat sich der Quellcode inzwischen auch verändert (ist auch dabei)
in Configuration.java steht nun in Zeile 151

private static Logger log = LoggerFactory.getLogger( Configuration.class );
und vorher der import
import org.slf4j.LoggerFactory;

das ist nun wieder eine andere Library als  org.apache.commons.logging.LogFactory

was in welcher Version das richtige ist, kann ich nicht sagen,
aber probier doch mal die neueste Version?


----------



## gast (20. Aug 2008)

Hallo,

Danke für Deine Antwort.
Die Hibernate-Core Biliotheken habe ich, die Frage ist eher wo sollen sie im Tomcat hin?

Ich habe ein normales Java-Projekt, 
das mir einige Klassen zum DB-Zugriff mittels Hibernate zur Verfügung stellt. Dort funktioniert auch alles.
Zum Test habe ich dort auch eine main-Funktion drin. Wenn ich diese Projekt als Applikation ausführe funktioniert alles wunderbar.

Jetzt habe ich ein zweites "Dynamic Web Project" in dem ich das Frontend aufbauen möchte. Hier will ich auf das erste Projekt zugreifen um meine dortigen Klassen zu nutzen.
Wenn ich das Ganze jetzt per Eclipse im Tomcat ausführen will bekomme ich jedesmal beim Aufruf von 

sessionFactory = new Configuration().configure().buildSessionFactory();

die selbe Fehlermeldung: java.lang.ExceptionInInitializerError

Die Hibernate-Bibliotheken (genau die gleichen aus dem ersten Projekt) habe ich nun in mein lib-Verzeichnis im Tomcat kopiert, genauso wie eine Jar-Datei meines Hibernate-Projektes.

Trotzdem findet er die Klassen nicht. Ehrlich gesagt weiß nicht was ich noch in welche Ordner kopieren soll.

Irgendiwe wäre ein Tutorial ziemlich gut in dem solch ein Fall mal beschrieben wird 

VG
Chris.


----------



## gast (20. Aug 2008)

Hallo,

mittlerweile habe ich die lösung selbst finden können.

Es war kein eigentliches Problem des Tomcats, sondern vielmehr eine Eclipse-Konfigurationsfrage.

Ich habe eine komplett neue Tomcat-Konfiguration erstellt. Im Classpath referenziere ich lediglich den lib-Ordner aus meinem Web-Inf Verzeichnis, in das ich zusätzlich alle Hibernate-Bibliotheken gepackt habe.

Wichtig ist noch, dass auch die Umgebungsvariablen für den Tomcat gesetzt sind:
TOMCAT_HOME : Pfad zum "\bin" Verzeichnis
CATALINA_HOME: Pfad zum Tomcat-root Verzeichnis

zur PATH-Variable muss der Pfad zum "\bin" Verzeichnis hinzugefügt werden.

VG
Chris.


----------

