Тестирование JNDI Spring Websphere вне контейнера

Я успешно протестировал некоторые DAO вне сервера веб-логики, просмотрев информацию об источнике данных через jndi. Я искал аналогичный вариант с websphere, и мне еще нужно найти решение, которое не требует жесткого кодирования имени пользователя и пароля в каком-либо месте приложения или чего-то подобного. Сейчас мои настройки jndi внутри spring выглядят так:

<bean id="applicationServerEnviromentProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties"><props>
<prop key="java.naming.factory.initial">com.ibm.websphere.naming.WsnInitialContextFactory</prop>
<prop key="java.naming.provider.url">iiop://localhost:2809</prop>
</props>
</property>
</bean>

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName"><value>PeopleAppDS</value></property>
        <property name="jndiEnvironment"><ref local="applicationServerEnviromentProperties"/></property>
    </bean>

Я протестировал соединение jndi, и оно работает, когда приложение загружено в веб-сферу. Я хотел бы иметь возможность протестировать daos внутри eclipse, например, до загрузки приложения. Любая помощь приветствуется.

Вот подробности тестового примера.

------- BaseTestCase.java --------------------

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"file:data-access-config.xml"})
public class BaseTestCase {

}

----- PersonDaoTest.java ----------------

import static org.junit.Assert.assertNotNull;

import java.util.List;<br>

import org.junit.Test;<br>
import org.springframework.beans.factory.annotation.Autowired;

import ....dao.PersonDao;<br>
import ....domain.Person;<br>

public class PersonDaoTest extends BaseTestCase {

    @Autowired
    private PersonDao personDao;


    @Test
    public void findByName() {
        List<Person>  people = personDao.listByName("j%", false, "userId");
        assertNotNull(people);
    }
}

person user294241    schedule 14.12.2010    source источник


Ответы (1)


Правильный способ сделать это - иметь источник данных JNDI с DriverManagerDataSource по умолчанию. Если вы запустите контейнер, Spring будет использовать названный источник данных; если поиск завершится неудачно, он будет использовать источник данных, не относящийся к JNDI.

person duffymo    schedule 14.12.2010
comment
Я не уверен, что понимаю, о чем вы здесь говорите. Я думал, что DriverManagerDataSource требует, чтобы информация о подключении хранилась в приложении или в каком-либо файле свойств. Одно из препятствий, с которыми я сталкиваюсь, заключается в том, что я не могу сделать это для этого приложения. - person user294241; 14.12.2010
comment
Да, проверьте источник данных JNDI. Это позволяет вам иметь значение по умолчанию. - person duffymo; 14.12.2010