Как получить имя экземпляра в 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, и добавить его в путь, но я не могу обещать, что он будет работать и не будет иметь отрицательных значений. последствия.

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