如何在CommandBox CF 2018中获取实例名称?

问题描述

我最近开始使用commandBox在本地环境中运行ColdFusion。我玩了一段时间后,遇到了一个与adminapi有关的问题。这是我在一个项目中使用的代码

adminObj = createObject("component","cfide.adminapi.runtime");
instance = adminObj.getInstanceName();

如果我在计算机上安装传统的ColdFusion Developer版本,则此代码非常简单,可以正常工作。我尝试在commandBox"app":{ "cfengine":"adob[email protected]" }

上运行它

运行上面的代码后,这是我收到的错误消息:

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开发人员环境中有效。谢谢。

解决方法

这是Adobe ColdFusion中的错误。您正在创建的CFC正在尝试创建特定Java类的实例。我认识到类名com.adobe.coldfusion.entman.ProcessServer与他们的企业管理器有关,后者控制仅在某些CF版本中可用的功能以及仅在其“标准” Tomcat安装中可用的功能(与CommandBox之类的J2E部署相反)

请在Adobe bug tracker中将其报告给Adobe,因为它们似乎错误地检测到servlet的安装。几年前,我与他们合作改善了CommandBox上的servlet检测,但我想他们仍然有一些问题。

作为一种解决方法,您可以尝试从Adobe ColdFusion的非CommandBox安装中找出该类的jar,然后将其添加到路径中,但是我不能保证它会起作用并且不会成功。会带来负面影响。