Доступ к источнику данных ColdFusion из кода Java

У меня есть сервлет, который я хотел бы запустить в ColdFusion MX 7. Я хотел бы использовать существующий ColdFusion DSN как javax.sql.DataSource, если это возможно.

Я думал что-то вроде

coldfusion.server.ServiceFactory.getDataSourceService().getDatasource(dsname);

будет работать, но, к сожалению, сервлет возвращает

java.lang.NoClassDefFoundError: coldfusion/server/ServiceFactory
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 307
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Этот код будет работать нормально, у вас просто нет ServiceFactory в вашем пути к классам. Т.е. Java не может загрузить этот класс. Попробуйте включить зависимость от cfusion.jar из C: \ CFusionMX7 \ lib.

Теперь получаем: coldfusion.server.ServiceFactory $ ServiceNotAvailableExceptio‌ n: служба DataSource недоступна. neo-query.xml в порядке, запросы со страниц .cfm по-прежнему работают.

AlexJReid 06.11.2008 17:57

Хм, я сделал это только для java-класса, который вызывается из ColdFusion с помощью CFOBJECT. Это то, что ты делаешь? Возможно, вам потребуется находиться в этом контексте, чтобы добраться до источников данных.

Chase Seibert 06.11.2008 21:10

Так оно и выглядит. У меня есть сервлет, которому нужен доступ к базе данных. Я посмотрю, работает ли создание нового источника данных JNDI в jrun-resources.xml.

AlexJReid 07.11.2008 10:58
Ответ принят как подходящий

Кажется, самый простой способ сделать это - добавить дополнительный источник данных JNDI в jrun-resources.xml. Затем к нему можно получить доступ обычным способом:

Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("mydatasource"); 

Это действительно означает дублирование конфигурации подключения к базе данных, но я бы предпочел это сделать, чем работать с в значительной степени недокументированными классами coldfusion.server. *.

Другие вопросы по теме