2010-01-22 7 views
2

J'ai une tâche simple à accomplir, mais je ne suis pas sûr de la meilleure façon de procéder.Gérer la connexion à la base de données à l'aide du pool de connexions ou de la session. Comment?

Chaque utilisateur a son propre nom d'utilisateur et mot de passe pour se connecter à une base de données avec différents privilèges. Une fois que l'utilisateur se connecte, il fera plusieurs requêtes sur l'action qu'il veut effectuer. Par conséquent, je veux conserver la connexion avec la base de données. Voici donc ma question?

Est-il préférable de réaliser ce que je veux faire avec la mise en commun des connexions ou la session ou les deux? Exemple de code serait apprécié !!! Merci beaucoup.

Répondre

1

Définir une connexion gérée en conteneur DataSource avec les privilèges «root» dans le serveur et pour chaque utilisateur utiliser la méthode DataSource#getConnection() qui prend un nom d'utilisateur et un mot de passe comme arguments.

+0

Je lis dessus à partir de votre tutoriel. Va poser une question Si je bloqué sur quelque chose ... merci beaucoup –

+0

question rapide: Dans votre tutoriel sur la façon d'utiliser JNDI Datasource (http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer .html # PropertiesFileLoader), vous avez: ClassLoader classLoader = Thread.currentThread(). getContextClassLoader(); InputStream propertiesFile = classLoader.getResourceAsStream (PROPERTIES_FILE); Je ne peux pas obtenir cela au travail. Garder get propertiesFile == null. J'ai des propriétés fichier où mon projet est, pas où mon .java ou .class sont. J'ai changé les deux lignes ci-dessus à ci-dessous afin de le faire fonctionner: propertiesFile = new FileInputStream (PROPERTIES_FILE); Une idée pourquoi? –

+0

Placez-le dans l'un des chemins racine qui est par défaut déjà couvert par le classpath (par exemple le dossier 'src' du projet, ou'/WEB-INF/lib', ou '/ WEB-INF/classes'), ou ajoutez le fichier vers le * Build Path * du projet (qui représente simplement à la fois compiletime et runtime classpath), ou -better- ajoute son chemin racine au système de fichiers du disque local au chemin de classe de l'environnement d'exécution - par exemple Tomcat vous pouvez le spécifier dans la propriété 'shared.loader' de/conf/catalina.properties'. – BalusC

0

J'ai rencontré le même problème avec une base de données Oracle, où chaque transaction doit être enregistrée pour d'éventuelles vérifications. Ainsi, chaque fois qu'un utilisateur authentifie dans l'application web, il met un objet comme celui-ci:

public class ConnectionUser implements Serializable { 

private String userId; 
private String password; 
private String transactionKey; 
//setters and getters 

public boolean equals(Object object) { 
    if(!(object instanceof org.ampf.af.jdbc.connection.ConnectionUser)) { 
     return false; 
    } 
    if(object == null) { 
     return false; 
    } 
    return (this.getUserId().equals(((ConnectionUser)object).getUserId()) && 
      this.getPassword().equals(((ConnectionUser)object).getPassword())); 
} 

Je mis en place un pool de connexion (basé sur une carte) où la clé est l'objet ConnectionUser et la valeur est la connexion ouverte. Si la clé n'existe pas dans la carte, elle crée une connexion et l'attribue à la carte.

J'espère que cela vous aide.

Questions connexes