Заявление о проблемах
Я хочу иметь возможность запускать тесты junit для методов, которые подключаются к базе данных.
Текущая настройка
Eclipse Java EE IDE - Java-код не использует фреймворк. Разработчики (включая меня) хотят более надежного тестирования текущего унаследованного кода, прежде чем пытаться переместить код в структуру Spring, чтобы мы могли доказать, что поведение по-прежнему правильное.
JBoss 4.2 - ограничение версии по программному обеспечению поставщика (Adobe LiveCycle ES2); В нашем веб-приложении Java используется эта настройка JBoss для запуска и использования API Adobe LiveCycle.
Мы не смогли успешно запустить настроенный JBoss поставщиком в Eclipse - мы потратили недели на это, включая контакт с компанией, которая обеспечивает нашу поддержку конфигурации JBoss для Adobe LiveCycle. Предположительно проблема связана с проблемой ограничения памяти с настройками в Eclipse, но изменение настроек памяти до сих пор не удалось в успешном запуске сервера JBoss в Eclipse. На данный момент попытка запустить JBoss внутри Eclipse приостановлена.
Соединение с базой данных определяется в источнике данных JNDI, который загружается JBoss при запуске. Как нашему веб-приложению, так и Adobe LiveCycle необходимо создать подключения к этому источнику данных.
код
Я замалчиваю проверку ошибок и структуру классов в этом фрагменте кода, чтобы сосредоточиться на сути вопроса. Надеюсь, это не вызовет проблем для других. Текст в квадратных скобках не является фактическим текстом.
Наш код для создания соединения выглядит примерно так:
Properties props = new Properties();
FileInputStream in = null;
in = new FileInputStream(System.getProperty("[Properties File Alias]"));
props.load(in);
String dsName = props.getProperty("[JNDI data source name here]");
InitialContext jndiCntx = new InitialContext();
DataSource ds = (DataSource) jndiCntx.lookup(dsName);
Ds.getConnection();
Я хочу иметь возможность тестировать методы, зависящие от этого кода, без каких-либо изменений.
Ссылка на псевдоним файла свойств в файле properties-service.xml:
<!-- ==================================================================== -->
<!-- System Properties Service -->
<!-- ==================================================================== -->
<!-- Allows rich access to system properties.-->
<mbean code="org.jboss.varia.property.SystemPropertiesService"
name="jboss:type=Service,name=SystemProperties">
<attribute name="Properties">
[Folder Alias]=[filepath1]
[Properties File Alias]=[filepath2]
</attribute>
</mbean>
Снимок из файла свойств, расположенного в файлеpath2
[JNDI data source name]=java:/[JNDI data source name]
XML файл JNDI для этого источника данных настроен следующим образом:
<datasources>
<local-tx-datasource>
<jndi-name>[JNDI data source name here]</jndi-name>
<connection-url>jdbc:teradata://[url]/database=[database name]</connection-url>
<driver-class>com.teradata.jdbc.TeraDriver</driver-class>
<user-name>[user name]</user-name>
<password>[password]</password>
<!-- sql to call on an existing pooled connection when it is obtained from pool -->
<check-valid-connection-sql>SELECT 1+1</check-valid-connection-sql>
</local-tx-datasource>
</datasources>
Мои мысли о том, где решение может быть
Есть ли что-то, что я могу сделать в методе @BeforeClass, чтобы сделать свойства, которые код выше доступен, без JBoss? Может быть, каким-то образом использовать метод setProperty класса java.util.Properties? Я также хотел бы использовать тот же JNDI файл XML, который JBoss читает, если это возможно, чтобы уменьшить повторяющиеся параметры конфигурации.
До сих пор все мои исследования заканчиваются рекомендацией "Использовать Spring", но я не думаю, что был готов открыть эту банку червей. Я не эксперт в JBoss, но если для получения более полезного ответа необходимы более подробные сведения о нашей настройке JBoss, я сделаю все возможное, чтобы их получить, хотя мне, вероятно, понадобятся некоторые указатели на то, где искать.
Ссылки на ресурсы Stackoverflow:
Поиск Jndi в junit с помощью spring
Исходный источник данных JNDI контейнера
Другие ссылки на исследования:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Properties.html
http://docs.oracle.com/javase/jndi/tutorial/basics/prepare/initial.html