Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 重要的一个例外是shareUnitOfWork Apache Camel_Spring Boot_Apache Camel_Apache Camel 3 - Fatal编程技术网

Spring boot 重要的一个例外是shareUnitOfWork Apache Camel

Spring boot 重要的一个例外是shareUnitOfWork Apache Camel,spring-boot,apache-camel,apache-camel-3,Spring Boot,Apache Camel,Apache Camel 3,使用OneException时,我无法让它共享工作单元。我确实需要使用多播和拆分器。 到目前为止,我已经尝试过使用原始信息等,但都做不到 onException(Exception.class) .handled(Boolean.TRUE) .process(XXX) .marshal() .jacksonxml() .convertBodyTo(String.class

使用OneException时,我无法让它共享工作单元。我确实需要使用多播和拆分器。 到目前为止,我已经尝试过使用原始信息等,但都做不到

   onException(Exception.class)
            .handled(Boolean.TRUE)
            .process(XXX)
            .marshal()
            .jacksonxml()
            .convertBodyTo(String.class)
            .removeHeader(XXXX)
            .end();



   from(RouteDefinition.XXX)
            .id("XXX")
            .unmarshal().jacksonxml(XXX.class)
            .to("bean-validator://x")
            .setHeader(XXXS, constant(XXX.class))
            .setProperty(ApplicationParam.REQUEST_BODY, body())
            .bean(xxxx, "XXX")
            .setHeader(Exchange.HTTP_METHOD, constant(HttpMethod.POST))
            .setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
            .setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, constant(XXX.class))
            .to(restUri(jaxrsEndpoint, uri))
            .removeHeader(Header.HEADER_LIST)
            .bean(xxxx, "responseBeanXX")
            .marshal().jacksonxml(); 
工艺流程;Apache CXF->JAXRS->Exception->OneException->Processor->Response Body

如果您只想使用,可以使用camelContext.setUseMDBlockingTrue激活它

我不知道Camel 3.x是否仍然支持此功能,因为官方Camel文档中不再存在链接文档页面

如果您想在驼峰路线中使用UnitOfWork,请签出


@burki我用上面的代码解决了这个问题。

@Kavithakaran kanapathipillai我添加了一些信息。谢谢你提供的信息。我想在这一点上,例外并不重要。当全局中的MonException创建新线程时,我不能共享工作单元。此外,我将log4j2与MDC日志一起使用。因此,在本例中,我想用MDC日志记录所有异常。对不起,我不理解您的问题。我在您的代码中没有看到UnitOfWork的任何用法。那么,我如何在OneException定义上共享MDCUnitOfWork呢@burkiMaybe@Claus Ibsen help me:当然,它是以这种方式配置的,camelContext.setUseMDBlockingTrue;ExtendedCamelContext ecc=camelContext.AdaptedExtendedCamelContext.class;ecc.setUnitOfWorkFactorynew MyCustomUnitOfWork;您是否收到一条日志消息,比如在CamelContext:[上下文名称]上启用了MDC日志记录?如果启用,则应为这种情况。否则,尝试调试应用程序启动并检查是否调用了上下文配置。MDC日志工作正常。顺便说一句,我在这个主题上没有问题。但是,工作类的OneException路由定义单元不是由Camel调用的。例如,它调用工作类的onComplete路由定义单元。我对这种情况的看法是,如果您想对unitOfWork的失败交换做出反应,那么就使用onCompletion。onFailureOnly…是的,我是这样做的:但是,我的流程的流程与此不兼容:D
   DefaultErrorHandlerBuilder defaultErrorHandlerBuilder = new DefaultErrorHandlerBuilder();
    defaultErrorHandlerBuilder.setOnExceptionOccurred(new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
            CustomUnitOfFactory customUnitOfFactory = new CustomUnitOfFactory ();
            customUnitOfFactory .afterPropertiesConfigured(camelContext);
            customUnitOfFactory .createUnitOfWork(exchange);
        }
    });
    errorHandler(defaultErrorHandlerBuilder);