PDA

View Full Version : [JAVA] problema con JNDI


satir
10-01-2011, 16:42
ciao a tutti, ho un problema che mi sta facendo diventar matto, praticamente ho settato 2 jndi 1 per accedere ad un db e l'altra per accedere ad un file di properties in modo da poter gestire alcuni parametri esternamente all'applicazione, la jndi jdbc viene letta correttamente, invece la jndi del file di properties mi va in errore.


innanzi tutto vi spiego la mia configurazione, ho un server tomcat 5.5, struts 1.3, winxp, eclipse helios sp1.

poi nel web.xml ho queste righe di codice

<resource-ref id="ResourceRef1">
<res-ref-name>jdbc/DB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref id="ResourceRef3">
<description>file Properties</description>
<res-ref-name>url/fileprop</res-ref-name>
<res-type>java.net.URL</res-type>
<res-auth>Container</res-auth>
</resource-ref>

invece nel context.xml del server ho queste righe

<Resource name="jdbc/DB" auth="Container"
type="javax.sql.DataSource" username="user"
password="pass" driverClassName="com.ibm.db2.jcc.DB2Driver"
url="jdbc:db2://192.xxx.xxx.xxx:50000/DBName"/>
<Resource name="url/fileprop" auth="Container"
type="java.net.URL"
url="C:\deploy\file.properties"/>

e infine per richiamare le jndi uso queste istruzioni

Context initial = new InitialContext();
Context env = (Context) initial.lookup("java:comp/env");
javax.sql.DataSource data = (javax.sql.DataSource)PortableRemoteObject.narrow(
env.lookup("jdbc/DB"),javax.sql.DataSource.class);
URL prop = (URL) PortableRemoteObject.narrow(
env.lookup("url/fileprop"), URL.class);



quando richiamo la connessione db va tutto bene, il db viene letto e scritto.
quando chiamo il file di properties mi ritorna questo errore


javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)


non riesco a capire il motivo, ho spulciato su google, ma ritrovo solo problemi relativi al jdbc, e nessun riferimento ai file di properties.
Qualcuno sa aiutarmi??

gokan
11-01-2011, 22:14
Probabilmente il file non lo devi considerare come una "Resource" come la url del db,
http://tomcat.apache.org/tomcat-5.5-doc/config/context.html

Se per esempio provi in questo modo ?

Definisci una property quando avvi tomcat (lo puoi fare se lo fai partire dentro eclipse oppure in uno script di avvio o dentro catalina.bat) del tipo : java -Ddir.miofile=C:\deploy\file.properties


la recuperi in qualsiasi parte nel codice come
String dirFile = System.getProperty("dir.miofile") e dalla stringa recuperi il file come preferisci tu.

satir
12-01-2011, 10:16
grazie della risposta, ho risolto in questo modo.

nel context.xml del server ho dichiarato un enviroment

<Environment name="fileprop" type="java.lang.String"
value="C:\deploy\file.properties"/>


e poi mi faccio restituire il valore in questo modo

String fileStr = (String) env.lookup("fileprop");


nel web.xml non ho aggiunto nulla.