Jak utrzymać CFEXECUTE w stanie zawieszenia po PrintStackTrace
Używam ColdFusion MX7 do wykonywania CFEXECUTE na niektórych kodach Java 6.
Niestety, ponieważ CF7 nie działa w JDK 6, muszę to zrobić w ten sposób.
Mój problem polega na tym, że gdy w kodzie Java wystąpi wyjątek, jeśli zadzwonię pod numerprintStackTrace
na wyjątek zawiesza się komenda CFEXECUTE. W końcu ColdFusion przestaje działać, ale proces Java kontynuuje pracę w tle.
Zgaduję, że dzieje się jakaś blokada, ale nie mogę zrozumieć dlaczego.
Jeśli nie zrobięprintStackTrace
wtedy wszystko działa dobrze.
Wyjątkami są wyjątki usługi WebService generowane za pomocą JAXWS z kodu wsadowego Oracle Information Rights Management.
EDYTOWAĆ
Zauważyłem, że mogę zadzwonić doprintStackTrace
z plikiemPrintStream
jako parametr i działa dobrze. Wygląda więc na to, że strumień błędów ma problemy.
Oto kod 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();
}
}
Oto połączenie 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>