# Problem mit DataSource und JNDI



## tischler (17. Jun 2007)

Guten Tag,
gestern habe ich mich das erste mal mit Datenbankprogrammierung unter Java beschäftigt. Dabei habe ich das folgende Kapitel durchgearbeitet:
http://www.galileocomputing.de/openbook/javainsel6/javainsel_20_001.htm
Punkt 20.5.6 beschäftigt sich mit DataSource:
http://www.galileocomputing.de/openbook/javainsel6/javainsel_20_005.htm

Jetzt habe ich folgende Klasse erstellt um Erfahrungen mit DataSource zu sammeln:

```
package main;
/*
 * @author Tischler
 * Created on 16. Juni 2007, 23:12
 *
 */

import java.sql.*;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBDataSource{
    public DBDataSource(){
    }
    
    public static void main(String[] args) throws Exception{
        Connection      con     = null;
        
        try{
            DataSource      ds      = (DataSource) new InitialContext().lookup(
                                                                "crowley");
            con     = ds.getConnection();
        }finally{
            if(con != null){
                con.close();
            }
        }
    }
}
```

Dabei wird eine Exception geworfen:

```
Exception in thread "main" 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
```

Meine jndi.properties sieht so aus:

```
java.naming.factory.initial=org.osjava.sj.SimpleContextFactory 
org.osjava.sj.root=config/
```

Meine Vermutung ist das simple-jndi-0.11.1.jar nicht im Classpath liegt, aber ich hab jetzt schon alles versucht, aber ich komme nicht weiter. Habe bereits 1000 mal unter System -> Erweiter -> Umgebungsvariablen den Classpath verändert, auch mit java -classpath [...] komme ich nicht weiter.

mfg
Tischler


----------



## Guest (17. Jun 2007)

Ist das Verzeichnis, in dem die Datei jndi.properties enthalten ist, auch in Classpath?

Übrigens, lass die Umgebungsvariablen wie sie sind und verwende -cp beim Aufruf deiner Programme.
Gleiches gilt für Jar-Dateien. Nie nach jre/lib/ext, lieber im eiegenen Verzeichnis und darauf verweisen.


----------



## Guest (3. Aug 2007)

Ich hänge genau bei dem selben Thema...


Ich habe bei Eclipse eine jndi.properties in das /src gelegt, welche auch erkannt und verarbeitet wird (definitiv!).
Ich kriege allerdings den selben Fehler wie du...
Habe die simple-jndi.jar als Userlib angelegt in Eclipse und eingebunden, diese Art & Weise funktionierte bisher mit allen libs die ich probiert hatte, sei es jmonkey, gtge, nanoxml - etc...

Nun da JNDI eine nette Art von configuration ist, ich auf simple Weise gepoolte Verbindungen erstellen kann und keinen Server benötige (mit simple-jndi) würde ich doch gerne das Problem gelöst haben :/

Aufbau ist folgender:
/src
   - com.test.garm
       - TestMain.java
   - jndi.properties

Eingefügt habe ich per Userlib:
HSQLDB
simple-jdni
commons-* (alle 3 benötigten)

In der jndi.properties steht folgendes:
java.naming.factory.initial=org.osjava.sj.SimpleContextFactory 
org.osjava.sj.root=config/

(ich weiß das ich den config-Pfad nicht habe, aber soweit komme ich gar nicht)

Dieser Fehler tritt auf:


```
javax.naming.NoInitialContextException: Cannot instantiate class: org.osjava.sj.SimpleContextFactory  [Root exception is java.lang.ClassNotFoundException: org.osjava.sj.SimpleContextFactory ]
	at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.init(Unknown Source)
	at javax.naming.InitialContext.<init>(Unknown Source)
	at com.test.garm.TestMain.main(TestMain.java:30)
```


Ich vermute das ganze liegt irgendwie an Eclipse selbst.
"java.naming.factory.initial=org.osjava.sj.SimpleContextFactory" das müsste denke ich Eclipsekonform angepasst werden? Zu dumm, dass ich noch ein Anfänger bin in Java und langsam aber sicher immer mehr die Lust an Java verliere... Probleme über Probleme...

Ich hoffe wirklich das irgendjemand eine Lösung hat...


----------



## Gast (3. Aug 2007)

Grüße Geekhead 

(hab ich vergessen  )


----------



## Gast (16. Okt 2007)

Bei mir lag der Fehler einfach nur daran, dass hinter java.naming.factory.initial=org.osjava.sj.SimpleContextFactory noch Leerzeichen waren. Als ich die entfernt hatte, funktionierte es auf anhieb!

Sch... copy/paste ;-)


----------



## Gast (5. Jan 2008)

Bei mir auch copy/paste-Fehler.

Vielen Dank


----------

