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

How to get Instance name in CommandBox CF 2018?

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

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

这段代码非常简单明了,如果我在我的机器上安装传统的 ColdFusion Developer 版本,它也能正常工作。我在 commandBox 上尝试 运行ning 这个:"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 开发人员环境。谢谢。

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

请在 Adobe bug tracker 中将此报告给 Adob​​e,因为他们似乎未正确检测到 servlet 安装。几年前我与他们合作,改进他们在 CommandBox 上的 servlet 检测,但我猜他们仍然存在一些问题。

作为解决方法,您可以尝试找出 class 来自 non-CommandBox 安装的 Adob​​e ColdFusion 的哪个 jar,并将其添加到路径中,但我不能保证它会起作用并且不会产生负面影响。