gpt4 book ai didi

java - 如何防止 CFEXECUTE 在 PrintStackTrace 之后挂起

转载 作者:行者123 更新时间:2023-11-30 06:39:26 31 4
gpt4 key购买 nike

我正在使用 ColdFusion MX7 对某些 Java 6 代码执行 CFEXECUTE。

不幸的是,由于 CF7 不能在 JDK 6 下工作,我必须这样做。

我的问题是,当 Java 代码中发生异常时,如果我对异常调用 printStackTrace,CFEXECUTE 命令将挂起。 ColdFusion 最终超时,但 Java 进程继续在后台挂起。

我猜有一些阻塞正在进行,但我似乎无法弄清楚原因。

如果我不执行 printStackTrace,那么一切正常。

异常是使用 JAXWS 从 Oracle 信息权限管理 wsdl 生成的 WebService 异常。

编辑

我注意到我可以使用文件 PrintStream 作为参数调用 printStackTrace,并且它工作正常。所以,看起来错误流有问题。

Java代码如下:

public void Execute(){
AdminUtils AU = AdminUtils.GetInstance();

AccountServicesPort AA = AU.GetAccountServicesPort();

LicenseServerRef LicSerRef = AU.GetLicenseServerRef();

User UserToSave = new User();
UserToSave.setUserName(UserName);
UserToSave.setFirstName(FirstName);
UserToSave.setLastName(LastName);
UserToSave.setEmailAddress(EmailAddress);
UserToSave.setServer(LicSerRef);

try{
AU.LogMessage("Change User: " + UserName + " " + FirstName + " " + LastName + " " + EmailAddress);
AA.saveChangesToUser(UserToSave);
}catch(Exception e){
e.printStackTrace();
}
}

这是 ColdFusion 调用:

<!--- Update the IRM User. --->
<CFEXECUTE name="c:\Program Files\Java\jdk1.6.0_14\bin\javaw.exe"
arguments="-cp C:\CFusionMX7\Externals\IRM.jar;C:\CFusionMX7\Externals\Config IRMWebServices.UpdateUser #LoginID# #NewFname# #NewLname#"
timeout="15"
variable="OUTPUT">
</CFEXECUTE>

最佳答案

是的,e.printStackTrace(); 写入 stderr(标准错误流)。由于 cfexecute 不捕获 stderr,这可能是导致 cfexecute 挂起的原因。在 CF8 中有一个修复此行为的补丁。

由于您使用的是 7,请尝试 Ben Forta 的提示:

同时使用 /c2>&1 应该可以解决挂起问题。

更新:添加示例

ColdFusion 代码:

<cftry>  
<cfset argString = '/c "C:\Program Files\Java\jdk1.6.0_13\bin\java.exe" -cp c:\myJar.jar TestStdErr 2>&1' >
<cfexecute name="c:\windows\system32\cmd.exe"
arguments="#argString#"
outputFile="c:\cfexcuteResults.log"
timeout="5" />
<cfcatch>
<cfdump var="#cfcatch#">
</cfcatch>
</cftry>

Java 类:

public class TestStdErr {
public static void main(String[] args) {
try {
// cause a divide by zero exception
int a = 0;
int b = 2 /a;
}
catch(Exception e){
e.printStackTrace();
}
}
}

关于java - 如何防止 CFEXECUTE 在 PrintStackTrace 之后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002025/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com