CrystalEnterprise.getSessionMgr() 修改 java system.out 流

问题描述 投票:0回答:1

我有一个 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方法中调用这段代码可以按预期工作。 我得到“之前”和“之后”输出。

有人知道这里发生了什么吗?

java logging crystal-reports outputstream business-objects
1个回答
0
投票

我在 WildFly 26 上遇到了同样的问题。出现该问题的原因是

CrystalEnterprise.getSessionMgr();
运行后,记录器级别已变为空。我不认为它实际上在修改
System.out

您可以通过在各自的记录器实例上运行

logger.setLevel(Level.INFO)
来解决该问题。

© www.soinside.com 2019 - 2024. All rights reserved.