2017-05-12 2 views
0

J'ai un server.xml avec la configuration jndi qui fonctionne et peut se connecter à la base de données (validé avec un petit programme utilisant @Resource), mais quand j'essaie d'utiliser une application qui est basée sur le printemps, je ne peut jamais se connecter à la base de données. Je reçois avec succès la référence jndi, mais elle ne se connecte jamais et me donne un nom d'utilisateur/mot de passe invalide.Spring + Liberty + JNDI + Oracle

J'ai cherché ceci à la mort sur google, et n'ai rien trouvé qui puisse pointer dans la bonne direction.

Répondre

0

Vous devez publier les détails spécifiques concernant votre configuration et vos références de ressources. Une façon de provoquer l'erreur que vous voyez est de configurer une source de données avec l'utilisateur/mot de passe spécifié uniquement dans le conteneur par défaut authdata (dataSource avec l'élément containerAuthData imbriqué ou avec un containerAuthDataRef spécifié). Lorsque vous utilisez @Resource, vous obtenez l'authentification par conteneur par défaut et l'utilisateur/mot de passe est utilisé. Toutefois, si Spring recherche directement la source de données (pas de référence de ressource) ou spécifie une référence de ressource avec l'authentification de l'application, l'utilisateur/mot de passe du conteneur par défaut authdata ne s'applique pas. Cependant, si à la place vous configurez user/password sur l'élément properties du fournisseur qui est imbriqué sous dataSource, il répondra quel que soit le type d'authentification.

Exemple de configuration de source de données où l'utilisateur/mot de passe sera utilisé pour l'authentification du conteneur:

<dataSource id="DefaultDataSource" jndiName="jdbc/oracle"> 
    <containerAuthData user="user1" password="pwd1"/> 
    <jdbcDriver libraryRef="OracleLib"/> 
    <properties.oracle URL="jdbc:oracle:thin:@//localhost:1521/SAMPLEDB"/> 
</dataSource> 

Exemple de configuration de source de données où l'utilisateur/mot de passe appliquer indépendamment du fait que l'emballage ou l'authentification d'application sont utilisés,

<dataSource id="DefaultDataSource" jndiName="jdbc/oracle"> 
    <jdbcDriver libraryRef="OracleLib"/> 
    <properties.oracle URL="jdbc:oracle:thin:@//localhost:1521/SAMPLEDB" user="user1" password="pwd1"/> 
</dataSource> 
+0

Voici ma définition de base de données (server.xml) \t \t \t

+0

Spring application.context \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t

+0

@LonniePhillips s'il vous plaît mettre à jour votre question avec cette information sous forme de texte correctement formaté au lieu de l'afficher comme un commentaire. Personne ne va le lire comme le blob illisible qu'il est actuellement, et les futurs lecteurs ne verront peut-être pas cette info –

0

nom d'utilisateur invalide/mot de passe est un message d'erreur oracle, alors vous pouvez être:

  1. pointant vers le mauvais DB (où l'utilisateur ne vit pas)
  2. en utilisant le mauvais utilisateur
  3. en utilisant le mot de passe erroné

Essayez la connexion dans SQL Plus, si elle fonctionne, puis problème dans le code/configuration.

+0

Tout est bon, mais pour une raison quelconque au printemps, le nom d'utilisateur/mot de passe ne sont pas tirés dans l'appel jndi (j'ai vérifié qu'il obtient l'information de nom jndi, mais pas nom d'utilisateur/mot de passe) –