[JAVA] [tomcat4] database connexion

Résolu/Fermé
Steefif Messages postés 485 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 15 février 2013 - 6 mai 2011 à 10:57
Steefif Messages postés 485 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 15 février 2013 - 11 mai 2011 à 11:41
Bonjour,

Je reviens vers vous une nouvelle fois.
J'espère que quelqu'un saura répondre à la question suivante.

Je vous présente d'abord mon code :
synchronized private void dbConnect() throws UnavailableException {
		try {
			Properties dbprop = System.getProperties();
			String driver = dbprop.getProperty("driverClassName");
			String url = dbprop.getProperty("url");
			String username = dbprop.getProperty("username");
			String password = dbprop.getProperty("password");
			System.out.println("driverClassName " + driver);
			System.out.println("url " + url);
			System.out.println("username " + username);
			System.out.println("password " + password);

			Class.forName(driver);
			System.out.println("apresforName");
			System.out.println(Class.forName(driver));
			con = DriverManager.getConnection(url, username, password);
			System.out.println("apresconnection");
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("toto");
	}


Ici, les properties sont bien chargés, en effet les différents System.out me renvoient ce qu'ils doivent me renvoyer.

Le problème vient de la ligne con= [..]

Je vous envoyer le stacktrace :

driverClassName oracle.jdbc.driver.OracleDriver
url ici la bonne adresse
username ici le bon username
password ici le bon mot de passe
apresforName
class oracle.jdbc.driver.OracleDriver
java.lang.NullPointerException
	at oracle.jdbc.ttc7.O3log.marshal(O3log.java:612)
	at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:257)
	at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:346)
	at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)
	at java.sql.DriverManager.getConnection(DriverManager.java:512)
	at java.sql.DriverManager.getConnection(DriverManager.java:171)
	at com.thalesgroup.modulo.UserViewerServlet.dbConnect(UserViewerServlet.java:106)
	at com.thalesgroup.modulo.UserViewerServlet.init(UserViewerServlet.java:77)
	at javax.servlet.GenericServlet.init(GenericServlet.java:212)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:888)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:621)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:163)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)
toto




En fait tout se passe comme si mon tomcat ne voyait pas le driver.
hors j'ai bien le classes12.jar dans mes libs...

Pour info j'ai fait un test en placant un context dans server.xml de mon tomcat et en y accédant par une datasource et ça marche parfaitement avec les mêmes arguments.


Ma question est donc a suivante : pourquoi ne puis-je pas me connecter à ma base de données sans passer par le server.xml de mon tomcat???

Si vous avez des pistes, voire des réponses, je suis preneur!!!

Merci d'avance,

Steefif





A voir également:

7 réponses

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
9 mai 2011 à 23:09
Bonjour,

Avant d'exécuter le code dans une Servlet, as-tu essayé de le faire marcher dans une bête classe qui ne fait que ça?
0
Steefif Messages postés 485 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 15 février 2013 19
10 mai 2011 à 07:50
oui, dans une classe à part ca marche parfaitement
je l'exécute en tant qu'application et je me connecte sans soucis.
J'ai poursuivi mes recherches, mais toujours rien.
je vous tient au courant si je trouve.

0
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
10 mai 2011 à 13:37
Et sinon as-tu essayé avec une version récente de Tomcat?
0
Steefif Messages postés 485 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 15 février 2013 19
Modifié par Steefif le 10/05/2011 à 15:14
Je viens de trouver la solution.
En fait j'avais des acces concurentiels
(en plus des drivers...)
en gros j'avais un pool de connexion sur mon server.xml de mon tomcat et un acces direct par servlet.
et tomcat il aimait pas trop ça.

en tout cas merci de tes réponses.


EDIT : en fait non c'est pas ça, je rouvre la discussion

La vie c'est comme une boite de chocolat, on ne sait jamais sur quoi on va tomber.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
Modifié par arth le 10/05/2011 à 16:46
J'aurais bien essayé ton code dans un JSP mais je déteste Oracle ^.^

Hmmm ....

Ici il est fait référence à un problème de driver oracle :

https://community.oracle.com/tech/developers/discussion/256093/nullpointerexception-during-logon

Ici même chose un peu plus complet sur la résolution :

http://www.thatsjava.com/jdbc/86917/

Problème de driver semble-t-il.

Et vu le problème je dirais que tu as de l'Oracle9 ou supérieur ^^

Le loup, solitaire et mystérieux.
0
Steefif Messages postés 485 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 15 février 2013 19
11 mai 2011 à 07:41
en effet ma ba&se est une oracle 9.2.0.1
J'ai testé tous les drivers du 8.7 à 10.2.0.1
directement pris du site oracle.

Ce qui est étonnant c'est que dans une appli java "standalone" ça marche parfaitement.
On pourrait donc croire que le probleme vient du lien tomcat-oracle.
Mais non car quand je monte un pool de connexion sur le server.xml du tomcat la conexion se fait sans problème.

J'ai aussi lu quelques part que le problème pouvait venir de droit d'acces dans le java.policy, mais je n'ai pas le droit de le modifier.

Aujourd'hui je vais continuer à chercher, mais sinon je pense que je vais devoir abandonner
0
Steefif Messages postés 485 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 15 février 2013 19
11 mai 2011 à 11:41
Bon, probleme solved :

J'ai remis le driver de la 9.2.0.1 (ma version d'oracle)
J'ai laissé ma connection comme tel :
try {
			Properties prop = System.getProperties();
			String driver = prop.getProperty("dbdriver");
			String url = prop.getProperty("dburl");
			String username = prop.getProperty("dbusername");
			String password = prop.getProperty("dbpassword");
			con = null;
			try {
				Class.forName(driver).newInstance();
			} catch (Exception e) {
				System.err.println("can't load Oracle driver: "
						+ e.getMessage());
			}
			System.out.println("tentative connexion à la database");
			try {
				System.out.println("DriverManager : "
						+ DriverManager.getDrivers().nextElement().getClass()
								.getName());
				con = DriverManager.getConnection(url, username, password);
			} catch (Exception e) {
				System.out.println("Failed to access DB at " + url);
				e.printStackTrace();
				System.err.println("can't connect to the		  database");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}


En fait, le probleme venait de la manière dont je recupérait mes parametres de connexions.
J'effacait les propriétés system sans m'en rendre compte d'ou les erreurs.

Merci pour tes réponses !!!


0