У меня есть веб-приложение J2EE, которое используется для загрузки файла, который затем обрабатывается процедурой базы данных. Поскольку мы не хотим, чтобы веб-приложение ожидало завершения процедуры базы данных, оно выполняется в другом потоке.
Процесс, выполняющийся в отдельном потоке, должен получить и закрыть собственное соединение. Веб-приложения обычно ищут имя jndi источника данных, используя ServiceLocator, который, в свою очередь, ищет его в контексте приложения (ключ поиска для имени jndi определяется как константа класса), но для отдельного потока, ищущего имя jndi с помощью ServiceLocator выходит из строя. Чтобы обойти эту проблему, мы вместо этого использовали имя jndi в качестве константы класса, чтобы поток мог напрямую искать источник данных.
Это означает, что имя jndi для источника данных теперь фиксировано для приложения, и мы больше не можем развертывать одно и то же приложение в одном и том же контейнере, но с другими источниками данных, просто изменив файл web.xml.
Каковы лучшие отраслевые практики в этом отношении? Должно ли имя jndi быть настраиваемым или можно исправить его для приложения? Кто-нибудь реализовывал настраиваемое решение для имени источника данных jndi, которое можно использовать как в веб-приложении, так и в других потоках в контейнере?