Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tomcat 5.5.9 : pb de Datasource

6 réponses
Avatar
ToOmS
Bonjour =E0 tous,

J'ai cherch=E9 toute la journ=E9e sans succ=E8s : toutes les solutions
propos=E9es que j'ai trouv=E9es sur le web sont sans effet, si ce n'est
de changer le message d'erreur... rien =E0 faire : l'appli plante au
moment de l'ex=E9cution !

Voil=E0, je d=E9finie un DataSource dans un fichier
[CATALINA_HOME]\conf\Catalina\localhost\monApp.xml pour acc=E9der =E0 une
base Sybase 12.5 :

<?xml version=3D'1.0' encoding=3D'utf-8'?>
<Context docBase=3D"monApp" path=3D"/monApp">
<Resource name=3D"jdbc/maDataSource" type=3D"javax.sql.DataSource"
auth=3D"Container"
driverClassName=3D"net.sourceforge.jtds.jdbc.Driver"
url=3D"jdbc:jtds:sybase://xxx.xxx.xxx.xxx:yyyy/DBNAME"
username=3D"toto"
password=3D""
maxIdle=3D"0"
maxWait=3D"5000"
validationQuery=3D"SELECT GETDATE()"
maxActive=3D"10"
removeAbandoned=3D"true"
removeAbandonedTimeout=3D"20"
logAbandoned=3D"true" />
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

=3D> javax.naming.NameNotFoundException: Le Nom jdbc n'est pas li=E9 =E0 ce
Contexte
NB : ce fichier se trouve =E9galement dans le r=E9pertoire META-INF du
fichier war sous le nom context.xml ; lequel fichier war est d=E9pos=E9,
bien s=FBr, dans [CATALINA_HOME]\webapps.

Alors que quand, dans le fichier WEB-INF/web.xml (=E0 l'int=E9rieur de la
balise web-app), je mets ceci :

<resource-ref>
<res-ref-name>jdbc/maDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

=3D> org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC
driver of class '' for connect URL 'null'

Le fichier JAR se trouve dans WEB-INF/lib et aussi dans commons/lib ;
quand j'arr=EAte le programme avant de faire context.getCOnnection(), je
m'apper=E7ois effectivement que touts les attributs de l'objet
DataSource sont vides...

Merci de votre aide !

6 réponses

Avatar
Franck
Un exemple qui marche avec Tomcat :
Si tu mets les ResourceLink dans le DefaultContext ça marche pas
Avec cette methoide, pas besoin de modifier les webxml

@+


<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Listener
className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<GlobalNamingResources>

<Resource name="jdbc/foo" type="javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@thorgal:1521:foo"
username="foo"
password="foo"
maxActive="20"
maxIdle="10"
maxWait="-1"
/>

</GlobalNamingResources>

<Service name="Catalina">

<Connector acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" port="8080" redirectPort="8443"
maxSpareThreads="75" maxThreads="150" minSpareThreads="25">
</Connector>

<Engine defaultHost="localhost" name="Catalina">
<Host appBase="webapps" name="localhost" autoDeploy="false"
deployOnStartup="false">
<DefaultContext allowLinking="true">

</DefaultContext>

<Context debug="3" docBase="/M:/annuaire/web/"
path="/annuaire" allowLinking="true" swallowOutput="false">
<ResourceLink name="jdbc/foo" global="jdbc/annuaire"
type="javax.sql.DataSource"/>
</Context>


</Host>
</Engine>
</Service>
</Server>

--
-
Franck
mailto:
Avatar
ToOmS
Merci, je vais voir ça.
Mais il est vrai que je préfèrerais une méthode "interne au module",
parce que si je dois changer le server.xml à chaque fois, c'est pas
terrible. Si quelqu'un comprenais simplement mon erreur... Ca serait le
paradis ! ;-)


Un exemple qui marche avec Tomcat :
Si tu mets les ResourceLink dans le DefaultContext ça marche pas
Avec cette methoide, pas besoin de modifier les webxml

@+


<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Listener
className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>

<Resource name="jdbc/foo" type="javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@thorgal:1521:foo"
username="foo"
password="foo"
maxActive="20"
maxIdle="10"
maxWait="-1"
/>

</GlobalNamingResources>

<Service name="Catalina">

<Connector acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" port="8080" redirectPort="8443"
maxSpareThreads="75" maxThreads="150" minSpareThreads="25">
</Connector>

<Engine defaultHost="localhost" name="Catalina">
<Host appBase="webapps" name="localhost" autoDeploy="false"
deployOnStartup="false">
<DefaultContext allowLinking="true">

</DefaultContext>

<Context debug="3" docBase="/M:/annuaire/web/"
path="/annuaire" allowLinking="true" swallowOutput="false">
<ResourceLink name="jdbc/foo" global="jdbc/annuaire"
type="javax.sql.DataSource"/>
</Context>


</Host>
</Engine>
</Service>
</Server>

--
-
Franck
mailto:


Avatar
ToOmS
Infos supplémentaires :

le SQLNestedException se rapport à l'exception suivante :
java.sql.SQLException: No suitable driver

J'accède au Datasource dans mon code avec les instructions suivantes :
// Context ctx = new InitialContext(); //DEBUG ne change rien
Context ctx = (Context) new
InitialContext().lookup("java:/comp/env");
DataSource ds = (DataSource) ctx.lookup("jdbc/maDataSource");



Bonjour à tous,

J'ai cherché toute la journée sans succès : toutes les solutions
proposées que j'ai trouvées sur le web sont sans effet, si ce n'est
de changer le message d'erreur... rien à faire : l'appli plante au
moment de l'exécution !

Voilà, je définie un DataSource dans un fichier
[CATALINA_HOME]confCatalinalocalhostmonApp.xml pour accéder à une
base Sybase 12.5 :

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="monApp" path="/monApp">
<Resource name="jdbc/maDataSource" type="javax.sql.DataSource"
auth="Container"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sybase://xxx.xxx.xxx.xxx:yyyy/DBNAME"
username="toto"
password=""
maxIdle="0"
maxWait="5000"
validationQuery="SELECT GETDATE()"
maxActive="10"
removeAbandoned="true"
removeAbandonedTimeout="20"
logAbandoned="true" />
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

=> javax.naming.NameNotFoundException: Le Nom jdbc n'est pas lié à ce
Contexte
NB : ce fichier se trouve également dans le répertoire META-INF du
fichier war sous le nom context.xml ; lequel fichier war est déposé,
bien sûr, dans [CATALINA_HOME]webapps.

Alors que quand, dans le fichier WEB-INF/web.xml (à l'intérieur de la
balise web-app), je mets ceci :

<resource-ref>
<res-ref-name>jdbc/maDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

=> org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC
driver of class '' for connect URL 'null'

Le fichier JAR se trouve dans WEB-INF/lib et aussi dans commons/lib ;
quand j'arrête le programme avant de faire context.getCOnnection(), je
m'apperçois effectivement que touts les attributs de l'objet
DataSource sont vides...

Merci de votre aide !


Avatar
alexandre cartapanis
Infos supplémentaires :

le SQLNestedException se rapport à l'exception suivante :
java.sql.SQLException: No suitable driver


Je vais peut etre dire une connerie, mais apparement ton driver n'est
pas capable d'acceder a la base de donnée. Es-tu sur de ton driver?
As-tu déjà testé ton driver? Si oui, es-tu sur qu'il est bien dans ton
classpath?


J'accède au Datasource dans mon code avec les instructions suivantes :
// Context ctx = new InitialContext(); //DEBUG ne change rien
Context ctx = (Context) new
InitialContext().lookup("java:/comp/env");
DataSource ds = (DataSource) ctx.lookup("jdbc/maDataSource");



Bonjour à tous,

J'ai cherché toute la journée sans succès : toutes les solutions
proposées que j'ai trouvées sur le web sont sans effet, si ce n'es t
de changer le message d'erreur... rien à faire : l'appli plante au
moment de l'exécution !

Voilà, je définie un DataSource dans un fichier
[CATALINA_HOME]confCatalinalocalhostmonApp.xml pour accéder à une
base Sybase 12.5 :

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="monApp" path="/monApp">
<Resource name="jdbc/maDataSource" type="javax.sql.DataSource"
auth="Container"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sybase://xxx.xxx.xxx.xxx:yyyy/DBNAME"
username="toto"
password=""
maxIdle="0"
maxWait="5000"
validationQuery="SELECT GETDATE()"
maxActive="10"
removeAbandoned="true"
removeAbandonedTimeout="20"
logAbandoned="true" />
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

=> javax.naming.NameNotFoundException: Le Nom jdbc n'est pas lié à ce
Contexte
NB : ce fichier se trouve également dans le répertoire META-INF du
fichier war sous le nom context.xml ; lequel fichier war est déposé ,
bien sûr, dans [CATALINA_HOME]webapps.

Alors que quand, dans le fichier WEB-INF/web.xml (à l'intérieur de la
balise web-app), je mets ceci :

<resource-ref>
<res-ref-name>jdbc/maDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

=> org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDB C
driver of class '' for connect URL 'null'

Le fichier JAR se trouve dans WEB-INF/lib et aussi dans commons/lib ;
quand j'arrête le programme avant de faire context.getCOnnection(), je
m'apperçois effectivement que touts les attributs de l'objet
DataSource sont vides...

Merci de votre aide !





--
Alexandre CARTAPANIS - Responsable Système et Réseau
Email
Gsm. 06 72 07 51 55

Macymed SARL - 9 bvd Kraëmer 13014 Marseille France
Tél. 04 91 48 31 58 - Fax. 04 91 02 36 47
Web http://www.macymed.fr - Email


Avatar
ToOmS
Oui, oui, je suis sûr de mon driver, ça marchait même... avant mes
vacances !
Et une version du site est en ligne, elle fonctionne parfaitement, mais
d'autres réglages.

J'ai remarqué ce matin, que le fichier server.xml déclarait de toute
façon un docbase différent de mon fichier de context... J'ai remis le
fichier par défaut, avec que dalle dedans : maintenant j'ai un joli
(mais on n'est pas obligé d'apprécier, hein) :

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:3 9)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp l.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
Caused by: java.lang.NullPointerException
at org.apache.catalina.startup.Catalina.await(Catalina.java:600)
at org.apache.catalina.startup.Catalina.start(Catalina.java:560)
... 6 more

Je vais regarder ça de plus près, ça m'a l'air classique...
Merci pour ton intérêt à ma cause, quoi qu'il en soit.


Infos supplémentaires :

le SQLNestedException se rapport à l'exception suivante :
java.sql.SQLException: No suitable driver


Je vais peut etre dire une connerie, mais apparement ton driver n'est
pas capable d'acceder a la base de donnée. Es-tu sur de ton driver?
As-tu déjà testé ton driver? Si oui, es-tu sur qu'il est bien dans ton
classpath?


J'accède au Datasource dans mon code avec les instructions suivantes :
// Context ctx = new InitialContext(); //DEBUG ne change rien
Context ctx = (Context) new
InitialContext().lookup("java:/comp/env");
DataSource ds = (DataSource) ctx.lookup("jdbc/maDataSource");



Bonjour à tous,

J'ai cherché toute la journée sans succès : toutes les solutions
proposées que j'ai trouvées sur le web sont sans effet, si ce n'est
de changer le message d'erreur... rien à faire : l'appli plante au
moment de l'exécution !

Voilà, je définie un DataSource dans un fichier
[CATALINA_HOME]confCatalinalocalhostmonApp.xml pour accéder à une
base Sybase 12.5 :

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="monApp" path="/monApp">
<Resource name="jdbc/maDataSource" type="javax.sql.DataSource"
auth="Container"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sybase://xxx.xxx.xxx.xxx:yyyy/DBNAME"
username="toto"
password=""
maxIdle="0"
maxWait="5000"
validationQuery="SELECT GETDATE()"
maxActive="10"
removeAbandoned="true"
removeAbandonedTimeout="20"
logAbandoned="true" />
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

=> javax.naming.NameNotFoundException: Le Nom jdbc n'est pas lié à ce
Contexte
NB : ce fichier se trouve également dans le répertoire META-INF du
fichier war sous le nom context.xml ; lequel fichier war est dépos é,
bien sûr, dans [CATALINA_HOME]webapps.

Alors que quand, dans le fichier WEB-INF/web.xml (à l'intérieur de la
balise web-app), je mets ceci :

<resource-ref>
<res-ref-name>jdbc/maDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

=> org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC
driver of class '' for connect URL 'null'

Le fichier JAR se trouve dans WEB-INF/lib et aussi dans commons/lib ;
quand j'arrête le programme avant de faire context.getCOnnection(), je
m'apperçois effectivement que touts les attributs de l'objet
DataSource sont vides...

Merci de votre aide !





--
Alexandre CARTAPANIS - Responsable Système et Réseau
Email
Gsm. 06 72 07 51 55

Macymed SARL - 9 bvd Kraëmer 13014 Marseille France
Tél. 04 91 48 31 58 - Fax. 04 91 02 36 47
Web http://www.macymed.fr - Email




Avatar
ToOmS
Ce dernier pb a été facilement résolu... par la suppression du
fichier server.xml !
Pour avoir bonne conscience, j'ai quand même remis la version
"minimal" proposée.

Du coup, tout fonctionne correctement !
Moralité, faut pas croire que Tomcat te laisse tout faire et pas
mélanger les genres : la configuration "globale" est incompatible avec
celle de contextes autonômes... ce qui semble logique !


Oui, oui, je suis sûr de mon driver, ça marchait même... avant mes
vacances !
Et une version du site est en ligne, elle fonctionne parfaitement, mais
d'autres réglages.

J'ai remarqué ce matin, que le fichier server.xml déclarait de toute
façon un docbase différent de mon fichier de context... J'ai remis le
fichier par défaut, avec que dalle dedans : maintenant j'ai un joli
(mais on n'est pas obligé d'apprécier, hein) :

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java :39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI mpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
Caused by: java.lang.NullPointerException
at org.apache.catalina.startup.Catalina.await(Catalina.java:600)
at org.apache.catalina.startup.Catalina.start(Catalina.java:560)
... 6 more

Je vais regarder ça de plus près, ça m'a l'air classique...
Merci pour ton intérêt à ma cause, quoi qu'il en soit.


Infos supplémentaires :

le SQLNestedException se rapport à l'exception suivante :
java.sql.SQLException: No suitable driver


Je vais peut etre dire une connerie, mais apparement ton driver n'est
pas capable d'acceder a la base de donnée. Es-tu sur de ton driver?
As-tu déjà testé ton driver? Si oui, es-tu sur qu'il est bien dan s ton
classpath?


J'accède au Datasource dans mon code avec les instructions suivante s :
// Context ctx = new InitialContext(); //DEBUG ne change rien
Context ctx = (Context) new
InitialContext().lookup("java:/comp/env");
DataSource ds = (DataSource) ctx.lookup("jdbc/maDataSource");



Bonjour à tous,

J'ai cherché toute la journée sans succès : toutes les solutio ns
proposées que j'ai trouvées sur le web sont sans effet, si ce n' est
de changer le message d'erreur... rien à faire : l'appli plante au
moment de l'exécution !

Voilà, je définie un DataSource dans un fichier
[CATALINA_HOME]confCatalinalocalhostmonApp.xml pour accéder à une
base Sybase 12.5 :

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="monApp" path="/monApp">
<Resource name="jdbc/maDataSource" type="javax.sql.DataSource"
auth="Container"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sybase://xxx.xxx.xxx.xxx:yyyy/DBNAME"
username="toto"
password=""
maxIdle="0"
maxWait="5000"
validationQuery="SELECT GETDATE()"
maxActive="10"
removeAbandoned="true"
removeAbandonedTimeout="20"
logAbandoned="true" />
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

=> javax.naming.NameNotFoundException: Le Nom jdbc n'est pas lié à ce
Contexte
NB : ce fichier se trouve également dans le répertoire META-INF du
fichier war sous le nom context.xml ; lequel fichier war est dépos é,
bien sûr, dans [CATALINA_HOME]webapps.

Alors que quand, dans le fichier WEB-INF/web.xml (à l'intérieur de la
balise web-app), je mets ceci :

<resource-ref>
<res-ref-name>jdbc/maDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

=> org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create J DBC
driver of class '' for connect URL 'null'

Le fichier JAR se trouve dans WEB-INF/lib et aussi dans commons/lib ;
quand j'arrête le programme avant de faire context.getCOnnection() , je
m'apperçois effectivement que touts les attributs de l'objet
DataSource sont vides...

Merci de votre aide !





--
Alexandre CARTAPANIS - Responsable Système et Réseau
Email
Gsm. 06 72 07 51 55

Macymed SARL - 9 bvd Kraëmer 13014 Marseille France
Tél. 04 91 48 31 58 - Fax. 04 91 02 36 47
Web http://www.macymed.fr - Email