Avatar billede stenmadsen Nybegynder
10. oktober 2003 - 09:52 Der er 14 kommentarer

Test af JNDI registrering

Jeg vil gerne teste/udvikle min kode udenfor Tomcat. Jeg har forsøgt at tilføje et par linier kode som skal registrere min Datasource. Men når jeg kalder "addToEnvironment" får jeg en exception

"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"

Det skal lige bemærkes at MyDatasource() initialiseres med url, driver-klasse, brugernavn og password, og fjerne jeg udkommentering ved den første getConnection(), så får jeg en connection til min database.

1) Hvad mangler jeg?


try  {
            InitialContext ic = new InitialContext();
            /******************** testkode **********************/
            DataSource myDs = new MyDatasource();
            // con = myDs.getConnection();
            ic.addToEnvironment ("java:comp/env/jdbc/myDB", myDs);
            /******************************************************/
            Context envCtx = (Context) ic.lookup("java:comp/env");
            DataSource ds = (DataSource) envCtx.lookup("/jdbc/myDB");
            con =  ds.getConnection();
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }

2) Hvordan laver jeg en egentlig test klasse der kan udnytte webserveren JNDI registrering?
Avatar billede arne_v Ekspert
10. oktober 2003 - 09:59 #1
re 1)

Jeg forstår ikke hvorfor du laver din egen datasource klasse.

Du definerer din datasource i server.xml og så laver du lookup
af den.

End of story.

re 2)

Du laver en JSP side eller servlet der bruger data source og kalder
den.

Hvis du er til JUnit kan du bruge Cactus (som er JUnit i
web container).
Avatar billede stenmadsen Nybegynder
10. oktober 2003 - 10:22 #2
ja, jeg har defineret min datasource i server.xml, men den kan jeg da kun lave lookup i når min klasse instantieres i webcontaineren, ikke?
Avatar billede arne_v Ekspert
10. oktober 2003 - 10:27 #3
Nej.

Du definerer data sourcen i server.xml (og sørger for at JDBC driver
jar filen er i serverens classpath).

Så slår du en data source op og containeren creater et data source
objekt.
Avatar billede arne_v Ekspert
10. oktober 2003 - 10:29 #4
Formentlig flere endda, fordi den sandsyneligvis laver en connection pool.
Avatar billede stenmadsen Nybegynder
10. oktober 2003 - 10:31 #5
Jeg vil forsøge
Avatar billede arne_v Ekspert
10. oktober 2003 - 10:56 #6
Avatar billede arne_v Ekspert
10. oktober 2003 - 10:58 #7
Hm.

Muligvis har jeg ikke læst dit spørgsmål korrekt.

Mener du at du vil køre ovenstående kode udenfor Tomcat ?
Avatar billede arne_v Ekspert
10. oktober 2003 - 11:01 #8
I så fald skal du hvis du vil bruge JNDI jo alligevel have en JNDI server.

Og DataSource er et lokalt objekt d.v.s. at JNDI serveren skal
returnere et objekt i samme JVM som kalderen.

Det lyder umiddelbart besværligt at få sat op.
Avatar billede stenmadsen Nybegynder
10. oktober 2003 - 13:32 #9
Ja, ideen er at udvikle og test mine klasser udenfor Tomcat. De første linier i mit kodeeksempel kan vel betrages som en slags lokal JNDI-server. Problemet er bare at jeg ikke kan få det til at virke.
Avatar billede arne_v Ekspert
10. oktober 2003 - 13:44 #10
Nej.

InitialContext forsøger at connecte til en JNDI server baseret på nogle properties.

Så du skal have en JNDI server (eller lave din egen JNDI implementation)
for at kunne gøre det.

Hvorfor ikke bare teste på Tomcat ?
Avatar billede stenmadsen Nybegynder
10. oktober 2003 - 13:59 #11
Jeg vil lave nogle testklasser, og det kan jeg ikke umiddelbart gøre hvis koden udføres i Tomcat. Jeg har forsøgt at finde noget om JNDI serverer, men har ikke rigtigt haft held. Er det en større sag? Jeg kan da ikke være den eneste med dette ønske!
Avatar billede arne_v Ekspert
10. oktober 2003 - 14:47 #12
Hvis der er for at lave unit tests a la JUnit, så bør de køres
på server, fordi det er det rigtige environment.

Og cactus er beregnet til at løse den opgave.
Avatar billede arne_v Ekspert
10. oktober 2003 - 14:50 #13
JNDI er kun et interface. Der ligger en server bagved. Og det
er vistnok en lidt større sag. Om man kan fuske noget ved jeg
ikke - jeg har aldrig set det gjordt.

Folk tester normalt i server environment.
Avatar billede arne_v Ekspert
10. oktober 2003 - 21:43 #14
Hvis du går igang med Cactus, så kan jeg godt give dig nogle tips.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester