Question

Je souhaite configurer une source de données à l'aide de JNDI dans une application Java SE. Quelle est la meilleure façon de faire cela?

Jusqu'à présent, j'ai rencontré 2 projets:

  1. Nommage Apache . La page de projet contient un exemple spécifique de configuration d’une source de données, mais il semble que le projet soit très ancien et qu’il n’est plus actif.
  2. JBossNS . Il semble facile de configurer un JNDI local uniquement à l’aide de LocalOnlyContextFactory , mais je n’ai trouvé aucun document expliquant comment configurer une source de données.

Si possible, j'aimerais également configurer la source de données avec un gestionnaire de transactions JTA (à l'aide de JOTM?).

Était-ce utile?

La solution

Pourquoi utilisez-vous JNDI pour cela? Ce n’est pas une mauvaise solution si vous avez un fournisseur mais des alternatives telles que l’injection de dépendance (IoC: via Spring ou Guice ).

L’accès aux données Spring JDBC est décrit ici . . L’avantage est que vous pouvez utiliser Spring pour injecter un DataSource dans votre code:

<bean class="com.my.Persister">
    <property name="dataSource" ref="dataSource" />
</bean>

La source de données peut être définie à l'aide d'une recherche JNDI:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" /> 

Dans un environnement de test, vous pouvez injecter directement la source de données:

<bean id="dataSource" class="apache.db.PoolingDataSource">
    <!-- config goes here -->
</bean>

Autres conseils

Ces références sont assez anciennes mais peuvent aider à utiliser jnpserver (fournisseur de service de nommage JBoss):

Une solution très facile à utiliser pour JNDI autonome est simple-jndi . Cela fonctionne comme un charme tant que vous n’en avez besoin que dans une seule JVM, car il s’agit d’une bibliothèque sans serveur réseau.

La version Simple-JNDI, référencée par klenkes74, n’est plus en développement actif. Comme je rencontrais des problèmes avec cela, je l'ai créé, corrigé des bugs et mis en place de nouvelles fonctionnalités. J'ai déjà utilisé l'ancienne version non seulement pour les tests, mais aussi pour la production, car je préfère un modèle Service Locator à Dependency Injection, bien que ce dernier soit plus tendance que jamais.

Vous pouvez facilement utiliser Simple-JNDI pour définir un DataSource ou un pool de connexions de manière déclarative et le lier à un contexte JNDI.

Définissez un fichier jndi.properties dans votre chemin de classe:

java.naming.factory.initial=org.osjava.sj.SimpleContextFactory
org.osjava.sj.root=[absolute_or_relative_path_to_a_property_file]

Le fichier de propriétés se présente comme suit:

type=javax.sql.DataSource
driver=org.gjt.mm.mysql.Driver
url=jdbc:mysql://localhost/testdb
user=testuser
password=testing

Vous pouvez maintenant accéder à votre source de données depuis votre code de cette manière:

  InitialContext ctxt = new InitialContext();
  DataSource ds = (DataSource) ctxt.lookup("name_of_your_datasource");

Pour plus d'informations, voir https://github.com/h-thurow/Simple-JNDI

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top