2013-06-25 4 views
1

Я использую JNDI для выполнения базы данных поиска:Заменить JNDI поиск с фиктивным объектом

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

В контексте весны файл я вызывать конструктор с помощью:

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

Я больше не хочу выставляем «myDataSource» через поиск jndi, поэтому я создаю макет-объект, который имеет тот же тип, что и «javax.sql.DataSource», и вместо него использует его как параметр конструктора:

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

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

Макет-объект просто возвращает фиктивное соединение.

Правильно ли это, чтобы использовать jndi для более длительного использования, когда хотите использовать макет?

ответ

0

Возможно, вы захотите ознакомиться с классом весны SimpleNamingContextBuilder, который полезен для построения дерева JNDI без использования контейнера Java EE.

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

(Это память, но должна дать вам эту идею). Вы можете создать его экземпляр как одноплодные права в контексте приложения дескриптора XML с помощью атрибута init-method:

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

и сделать его создание до jee:jndi-lookup.

Cheers,