2013-06-25 1 views
1

J'utilise JNDI pour effectuer une recherche de base de données:Remplacer recherche JNDI avec objet fantaisie

<jee:jndi-lookup id="myDataSource" jndi-name="jdbc/mydb" 
     resource-ref="true" expected-type="javax.sql.DataSource" /> 

Dans un fichier de contexte de printemps, j'invoque le constructeur en utilisant:

<bean id="myController " class="com.MyController"> 
<constructor-arg index="0" ref="myDataSource" /> 
</bean> 

Je ne veux plus exposer "myDataSource" via une recherche jndi, donc je crée un objet fantaisie qui est du même type que "javax.sql.DataSource" et l'utilise à la place comme un paramètre de constructeur:

<bean id="myMockDataSource" class="com.mock.MyMockDataSourceConnection"> 
</bean> 

<bean id="myController" class="com.MyController"> 
<constructor-arg index="0" ref="myMockDataSource" /> 
</bean> 

L'objet fantôme renvoie simplement une connexion factice.

Est-ce la bonne façon d'utiliser plus longtemps la recherche jndi lorsque vous voulez utiliser un objet simulé à la place?

Répondre

0

Vous pouvez regarder la classe SimpleNamingContextBuilder de Spring, ce qui est utile pour construire l'arborescence JNDI sans avoir besoin d'un conteneur Java EE.

class JndiMock 
{ 
    public void init() 
    { 
     SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); 
     builder.bind("jdbc/mydb" , new YourDummyConnectionClass()); 
     builder.activate(); 
    } 
... 
} 

(Ceci est de mémoire, mais devrait vous donner l'idée). Vous pouvez instancier comme un droit singleton dans votre contexte d'application descripteur XML en utilisant l'attribut init-method:

<bean id="jndimock" class="your.package.JndiMock" init-method="init" /> 

et de le rendre est créé avant la jee:jndi-lookup.

Cheers,