Как получить имя экземпляра в CommandBox CF 2018?
Недавно я начал использовать commandBox для запуска ColdFusion в моей локальной среде. После того, как я немного поигрался, одна проблема, с которой я столкнулся, была связана с adminapi. Вот код, который я использую в одном из своих проектов:
adminObj = createObject("component","cfide.adminapi.runtime");
instance = adminObj.getInstanceName();
Этот код довольно прост и отлично работает, если я установлю на свой компьютер традиционную версию ColdFusion Developer. Я пробовал запустить это в commandBox:
"app":{ "cfengine":"adobe@2018.0.7" }
После запуска приведенного выше кода я получил следующее сообщение об ошибке:
Object Instantiation Exception.
Class not found: com.adobe.coldfusion.entman.ProcessServer
Первым шагом отладки была проверка наличия компонента. Я просто проверил это вот так:
adminObj = createObject("component","cfide.adminapi.runtime");
writeDump(adminObj);
На экране я получил следующий результат:
component CFIDE.adminapi.runtime
extends CFIDE.adminapi.base
METHODS
Затем я попробовал это, чтобы убедиться, что метод существует в области:
adminObj = createObject("component","cfide.adminapi.runtime");
writeDump(adminObj.getInstanceName);
Результат выглядит так, и это подтверждает, что метод
getInstanceName
существует.
function getInstanceName
Arguments: none
ReturnType: any
Roles:
Access: public
Output: false
DisplayName:
Hint: returns the current instance name
Description:
Ошибка возникает, только если я вызываю функцию
getInstanceName()
. Кто-нибудь знает, в чем может быть причина этой ошибки? Есть ли решение этой конкретной проблемы? Как я уже упоминал, этот метод работает в традиционной среде разработчика ColdFusion 2018. Спасибо.
1 ответ
Это ошибка в Adobe ColdFusion. CFC, который вы создаете, пытается создать экземпляр определенного класса Java. Я узнаю название класса
com.adobe.coldfusion.entman.ProcessServer
как связанный с их менеджером предприятия, который контролирует функции, доступные только в определенных версиях CF, а также функции, доступные только в их "стандартной" установке Tomcat (в отличие от развертывания J2E, такого как CommandBox).
Сообщите об этом в Adobe в системе отслеживания ошибок Adobe, поскольку они, по всей видимости, неправильно определяют установку сервлета. Я работал с ними пару лет назад, чтобы улучшить обнаружение их сервлетов в CommandBox, но я думаю, что у них все еще есть некоторые проблемы.
В качестве обходного пути вы можете попытаться выяснить, из какого jar-файла находится этот класс в установке Adobe ColdFusion, отличной от CommandBox, и добавить его в путь, но я не могу обещать, что он будет работать и не будет иметь отрицательных значений. последствия.