Bonjour.

Je suis confronté à une problématique, et je ne sais pas trop comment la résoudre.

J'ai une application WEB qui tourne sous TOMCAT.
Dans celle-ci j'ai une classe qui gère la connexion (et qui fonctionne)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
ServletContext servletContext= ServletActionContext.getServletContext();
ds = (DataSource)servletContext.getAttribute("dataSource");
connexion = ds.getConnection();
avec mon paramètre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
	<context-param>
		<param-name>dataSource</param-name>
		<param-value>java:/comp/env/jdbcdmist</param-value>
	</context-param>

En plus de cette application Web, j'ai besoin de gérer des interfaces afin d'alimenter une table
Pour celà, j'imaginais une application JAVA (avec un main()) qui lirait mon fichier d'interface et qui chargerait la base de données.

Pour l'instant dans éclipse, le main est dans le même projet (et donc sera dans le WAR quand l'appli sera déployée).

Le problème est qu'il n'y a pas de "servletContext" dans un appli non-servlet.

J'ai donc pour l'instant imaginé quelque chose comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
	public static Connection getConnexion()
	{
		try {
			if(connexion == null || connexion.isClosed())
			{
 
				DataSource ds = null;
				Context ctx;
				ServletContext servletContext= ServletActionContext.getServletContext();
				if(servletContext != null)
				{
					//Exécution depuis Tomcat
					ds = (DataSource)servletContext.getAttribute("dataSource");
					connexion = ds.getConnection();
				}
				else
				{
					//Exécution sans Tomcat pour charger le fichier d'interface
					/*
					 * TODO : voir pour externaliser ces paramètres
					 */
					String url = "jdbc:oracle:thin:@IP:xxxxx";
		        	String user = "xxxxx";
		        	String password = "xxxxx";
 
		        	try {
						Class.forName("oracle.jdbc.driver.OracleDriver");
					} catch (ClassNotFoundException e) {
						// TODO Bloc catch généré automatiquement
						e.printStackTrace();
					}
		        	connexion=DriverManager.getConnection(url,user,password);
				}
 
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
 
 
		if (connexion == null) 
		{
			log.warn("connexion nulle");
		}
 
	    return connexion;
	}
Cela fonctionne, mais ce qui m’embête est que les paramètres de connexion sont en dur. Je me demande s'il n'y a pas une meilleure solution.
Je pourrais par exemple transmettre les paramètres de connexion en paramètre du main(), mais je ne vois comment je pourrais récupérer ces paramètre dans la méthode getConnexion() appelée depuis les différents DAO.

Avez vous une idée à me proposer?

Merci d'avance