如何在 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 开发人员环境。谢谢。
这是 Adobe ColdFusion 中的错误。您正在创建的 CFC 正在尝试创建特定 Java class 的实例。我认识到 class 名称 com.adobe.coldfusion.entman.ProcessServer
与他们的企业管理器有关,它控制仅在某些 CF 版本中可用的功能以及仅在其“标准”Tomcat 安装中可用的功能(如反对像 CommandBox 这样的 J2E 部署。
请在 Adobe bug tracker 中将此报告给 Adobe,因为他们似乎未正确检测到 servlet 安装。几年前我与他们合作,改进他们在 CommandBox 上的 servlet 检测,但我猜他们仍然存在一些问题。
作为解决方法,您可以尝试找出 class 来自 non-CommandBox 安装的 Adobe ColdFusion 的哪个 jar,并将其添加到路径中,但我不能保证它会起作用并且不会产生负面影响。
我最近开始在本地环境中使用 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 开发人员环境。谢谢。
这是 Adobe ColdFusion 中的错误。您正在创建的 CFC 正在尝试创建特定 Java class 的实例。我认识到 class 名称 com.adobe.coldfusion.entman.ProcessServer
与他们的企业管理器有关,它控制仅在某些 CF 版本中可用的功能以及仅在其“标准”Tomcat 安装中可用的功能(如反对像 CommandBox 这样的 J2E 部署。
请在 Adobe bug tracker 中将此报告给 Adobe,因为他们似乎未正确检测到 servlet 安装。几年前我与他们合作,改进他们在 CommandBox 上的 servlet 检测,但我猜他们仍然存在一些问题。
作为解决方法,您可以尝试找出 class 来自 non-CommandBox 安装的 Adobe ColdFusion 的哪个 jar,并将其添加到路径中,但我不能保证它会起作用并且不会产生负面影响。