我有一个 JBoss EAP 6.4.8 和一个无状态 EJB,它除了获取 ISessionMgr 实例之外什么也不做。
public boolean changePassword(String user, String oldPw, String newPw, String cmsName, String authType)
{
boolean success = false;
try
{
System.out.println("BEFORE");
ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr();
System.out.println("AFTER");
// commented out
// IEnterpriseSession session = sessionMgr.logon(user, oldPw, cmsName, authType);
// session.getUserInfo().setPassword(oldPw, newPw);
}
catch(Exception e)
{
System.out.println("EXCEPTION");
LOG.error("Error changing password for BO-CMS and user '" + user + "'", e);
}
return success;
}
这个 EJB 的原始任务是更改用户密码,效果非常好。 但是,我注意到在调用 CrystalEnterprise.getSessionMgr() 后,每个 System.out(以及每个 log4j Logger)不再产生输出。 上面的代码仅打印“之前”,不打印“之后”或“异常” 但我的调试器证明 System.out.println("AFTER") 被调用。
顺便说一句:调用,直接从java main方法中调用这段代码可以按预期工作。 我得到“之前”和“之后”输出。
有人知道这里发生了什么吗?
我在 WildFly 26 上遇到了同样的问题。出现该问题的原因是
CrystalEnterprise.getSessionMgr();
运行后,记录器级别已变为空。我不认为它实际上在修改System.out
。
您可以通过在各自的记录器实例上运行
logger.setLevel(Level.INFO)
来解决该问题。