4

我最近开始使用 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 开发人员环境。谢谢你。

4

1 回答 1

4

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

请在Adob​​e 错误跟踪器中将此报告给 Adob​​e ,因为他们似乎错误地检测到了 servlet 安装。几年前我和他们一起改进了他们在 CommandBox 上的 servlet 检测,但我猜他们仍然有一些问题。

作为一种解决方法,您可以尝试在 Adob​​e ColdFusion 的非 CommandBox 安装中找出该类来自哪个 jar,并将其添加到路径中,但我不能保证它会起作用并且不会有负面影响结果。

于 2020-09-24T16:15:05.463 回答