# Hibernate - NoInitialContextException



## webmagier (12. Dezember 2004)

Tach Leute,

ich versuche mich gerade mit Hibernate und stelle meine Webanwendung darauf um. Zunächst aber habe ich mir eine Testklasse (außerhalb von Tomcat) geschrieben, die das ganze Zeug testet.... auch wunderbar, aber ich bekomme immer folgende Exception:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial

at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:284)
at javax.naming.InitialContext.getNameParser(InitialContext.java:439)
at net.sf.hibernate.util.NamingHelper.bind(NamingHelper.java:52)
at net.sf.hibernate.impl.SessionFactoryObjectFactory.addInstance SessionFactoryObjectFactory.java:90)
at net.sf.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:264)
at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:627)
at PersistanceTest.main(PersistanceTest.java:27)

Mein Konfigurationsfile für Hibernate sieht wie folgt aus:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory name="java:comp/env/hibernate/SessionFactory">
<!-- properties -->
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/reisebuero</property>
<property name="hibernate.connection.username"></property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.pool_size">5</property>
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="use_outer_join">true</property>


<!-- mapping files -->
<mapping resource="reisebuero/model/RoomTypeBean.hbm.xml" />
<mapping resource="reisebuero/model/RoomBean.hbm.xml" />
<mapping resource="reisebuero/model/TransactionStateBean.hbm.xml" />
<!-- <mapping resource="reisebuero/model/RoleBean.hbm.xml" />-->
<mapping resource="reisebuero/model/RightBean.hbm.xml" />
<mapping resource="reisebuero/model/CurrencyBean.hbm.xml" />
<mapping resource="reisebuero/model/RoomPropertyBean.hbm.xml" />
</session-factory>
</hibernate-configuration>

Kann mir jemand sagen, woran das liegt...die Exception schein auch keinerlei Auswirkungen zu haben aber mir wäre es trotzdem leiber sie wäre nicht da 

Mfg Daniel Richter


----------



## Thomas Darimont (12. Dezember 2004)

Hallo!

Diese Konfiguration ist so für Verwendung innerhalb des Tomcats gedacht, da die Hibernate Session 
Factory als "Datasource" im Tomcat internen JNDI eingehängt wird. 

Wenn du das ganze außerhalb des Tomcats testen willst müsstest du dir ein JNDI-Dienst hochziehen und dort die Datenquelle hinterlegen. Dazu würde sich beispielsweise der FileSystemContext anbieten -> http://java.sun.com/products/jndi/downloads/index.html (JNDI & More) .Du könntest aber auch den Tomcat mit einer Debug Option starten und dich von aussen mittels JDWP (Java Debug Wire Protocol) auf die daraufhin vom Tomcat gestartete Debug Session verbinden und dann aus der IDE deiner Wahl Remote Debuggen.

Gruß Tom


----------



## webmagier (12. Dezember 2004)

Ich dachte mir sowas schon. Wenn ich das ganze im Tomcat laufen lasse, muss ich dann in der server.xml was eintragen, oder nur in der web.xml meiner Anwendung? In die Server.xml kann ich leider nichts eintragen, wenn ich die anwendung bei meinem Provider laufen lassen will, da ich dort keine eigene Tomcat Instanz habe, sondern mir eine Instanz mit etlichen anderen usern teile.


Mfg Daniel Richter


----------



## Thomas Darimont (12. Dezember 2004)

Hallo!

Wenn du keine Änderungen in der server.xml machen darfst könntest du dir folgendes mal ansehen:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/deployer-howto.html

Erstell innerhalb deiner Web-Anwendung  (.war Datei) ein Verzeichnis namens META-INF dort hinterlegst du dann eine xml Datei mit den Einstellungen für den jeweiligen Applikations Kontext (Datenquellen, Realms etc...) Die xml Datei muss so heißen wie deine Web App. Heißt diese z.Bsp asw muss der Name der Datei asw.xml lauten.

Diese Konfigurationsdatei wird nun beim Deployment automatisch vo Tomcat erkannt und ins Verzeichnis CATALINA_HOME/conf/[enginename]/[hostname]/... kopiert.

Gruß Tom


----------



## webmagier (12. Dezember 2004)

Vielen Dank...werds mal probieren....aber hat diese Exception irgendwelche Auswirkungen? Funktionieren tut meine Testklasse ja trotzdem


----------



## vipers (6. Januar 2005)

Hallo, 

damit diese meldung nicht mehr angezeigt wird, musst du in deinem hibernate.cfg.xml das 'name' - Attribute der '<session-factory>' weg lassen...    
So wird nicht versucht die SessionFactory in den JNDI-Namespace zu binden.

--> http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html

Gruss


----------



## webmagier (6. Januar 2005)

besten Dank, das wars....hat ziemlich genervt vorher....also danke Dir nochmals.


----------

