EJB3相关性ID

gkuzmin:

现在,我的同事正在研究日志子系统,他们希望绑定单独的操作,这些操作是从某种业务方法发起的。例如,如果bean A中的方法先调用bean B中的某个方法,然后再在bean C中进行调用,那么要比bean B中的业务方法要好得多,而bean C会为bean A中的方法做一些工作。特别是知道B和C的方法为豆A的具体调用做了一些工作单元。

因此,问题是如何将这些工作单元捆绑在一起?显然,使用方法参数进行绑定不是很漂亮!

而且我认为现在是时候问另一个问题了,它已经足够接近上一个问题了。如果我想将某些上下文信息从bean A传播到另一个从A调用的bean,该怎么办?诸如安全凭证和安全主体之类的东西?我能做什么?可能是我问的问题是某种不良做法?

Tomasz Nurkiewicz:

看起来像一个很好的用例,在这两个可用的logbackLog4J的本质上,您是在线程上附加一些自定义值,并且从该线程发出的所有日志记录消息都可以将该值附加到消息上。

我认为在EJB中实现此目标的最佳方法是拦截器

public class MdcInterceptor {

    @AroundInvoke
    public Object addMdcValue(InvocationContext context) throws Exception {
        MDC.put("cid", RandomStringUtils.randomAlphanumeric(16));
        try {
            return context.proceed();
        } finaly {
            MDC.remove("cid");
        }
    }
}

现在您要做的就是添加:

%X{user}

到您的记录模式(logback.xmllog4j.xml)。

也可以看看

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档