问题描述
我最近开始使用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,然后将其添加到路径中,但是我不能保证它会起作用并且不会成功。会带来负面影响。