2017-05-03 1 views
0

J'ai une application web java/printemps qui doit être déployé en tant que fichier de guerre à la fois sur wildfly et WebsphereQuel nom de source de données JNDI fonctionne à la fois sur Wildfly et Websphere?

L'application utilise la source de données avec des noms JNDI:

Le WebConfig.java contient:

 

    public DataSource dataSource() { 
     final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup(); 
     dsLookup.setResourceRef(true); 
     DataSource dataSource = dsLookup.getDataSource("jdbc/myDS"); 

     return dataSource; 
    } 

... et fonctionne parfaitement sur Websphere où le nom de la source de données JNDI est jdbc/myDS.

mais nom wildfly JNDI doit commencer par 'java: /' ou 'java: jboss /'

Changer WebConfig.java fait le travail:

DataSource dataSource = dsLookup.getDataSource("java:/myDS"); 

Quel nom JNDI de source de données fonctionne aussi bien sur Wildfly et Websphere (et peut-être sur d'autres serveurs d'applications?)

Répondre

0

Si vous utilisez des références de ressources pour faire la recherche, elles seraient relatives à java: comp/env dans Liberty et Wildfly.

Il existe deux façons de définir une source de données. L'un utilise l'annotation javax.annotation.Resource. Cela peut être utilisé sur un type, une méthode ou une définition de champ.

Vous pouvez aussi le faire dans le web.xml ou ejb-jar.xml utilisant un élément ref ressource:

<resource-ref> 
    <description /> 

    <res-ref-name>myRef</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    <res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 

Si vous fournissez le code d'utilisateur/mot de passe dans le code d'application, puis l'élément res-auth devrait contenir Application

+0

Pouvez-vous donner un exemple? – sgargel