Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Java 在路由中看不到Apache Camel默认事务管理器数据_Java_Spring_Hibernate_Transactions_Apache Camel - Fatal编程技术网

Java 在路由中看不到Apache Camel默认事务管理器数据

Java 在路由中看不到Apache Camel默认事务管理器数据,java,spring,hibernate,transactions,apache-camel,Java,Spring,Hibernate,Transactions,Apache Camel,我在阿帕奇骆驼有两条路线。我通过Hibernate使用Spring3和JPA注释 我有多个数据源,并通过SpringTransactionPolicy将Apache Camel配置为使用一个默认TransactionManager 我使用DAO保存数据,并且可以通过实际查找数据来查看测试类中的数据。然后,我在apachecamel处理器中使用相同的DAO来查找相同的数据,但找不到数据。我不明白为什么在测试类中可以找到数据,而当我试图在ApacheCamel定制处理器中查找数据时,却找不到数据 下

我在阿帕奇骆驼有两条路线。我通过Hibernate使用Spring3和JPA注释

我有多个数据源,并通过SpringTransactionPolicy将Apache Camel配置为使用一个默认TransactionManager

我使用DAO保存数据,并且可以通过实际查找数据来查看测试类中的数据。然后,我在apachecamel处理器中使用相同的DAO来查找相同的数据,但找不到数据。我不明白为什么在测试类中可以找到数据,而当我试图在ApacheCamel定制处理器中查找数据时,却找不到数据

下面是示例代码:

    public class Config {
      @Autowired
private TransactionManagerConfig transactionManagerConfig;


      @Bean
public SpringTransactionPolicy defaultTransactionPolicy() throws Exception {
    SpringTransactionPolicy transactionPolicy = new SpringTransactionPolicy();
    transactionPolicy.setTransactionManager((PlatformTransactionManager) transactionManagerConfig.transactionManager());
    return transactionPolicy;
}
  }

public class CustomRouter extends SpringRouteBuilder {

public void configure() throws Exception {
        ApplicationContext applicationContext = getApplicationContext();
    from("someSource")).transacted().unmarshal().jaxb("com.sample.processor.entities").convertBodyTo(Entity.class).to("direct:x")
        .end();
    from("direct:x").transacted().process((CustomProcessor) applicationContext.getBean("customProcessor")).to(someSource);
   }
}


public class CustomProcessor implements org.apache.camel.Processor {

    @Resource
    private StatusDAO statusDAO;

    public CustomProcessor(StatusDAO statusDAO) {
        this.statusDAO = statusDAO;
    }

    public void process(Exchange exchange) throws Exception {
    Status status = null;
    Message message = exchange.getIn();
    Entity entity = (Entity) message.getBody();
    if(entity.getId() != null) {
        // find by id
        status = statusDAO.findById(id);
    }
                status.setName("someName");
    messageStatusDAO.update(status);
    message.setBody(messageStatus);
    exchange.setOut(message);
   }
  }
数据在系统内以XML形式接收并更改为实体类。我使用statusDAO.findById()查找数据,此时即使实体存在,DAO也不会返回任何数据

我设置测试如下:

@Transactional
@TransactionalConfiguration(defaultRollback = true)
public class CustomTest {

     @Transactional
     @Before
     public void setup throws Exception {
          // setup the Status entity and save it using the DAO
     }

     @Test
     public void testSomething() {
           Status status = statusDAO.findById("id"); // returns the Status that was saved
           MockEndpoint mockEndpoint = (MockEndpoint) this.context.getEndpoint(someDestination);
    mockEndpoint.expectedMessageCount(1);
    Status status = producerTemplate.requestBody(source, someXML, Status.class);
    assertNotNull(status);
    mockEndpoint.assertIsSatisfied();
     }
}
在自定义处理器中使用相同的事务管理器和相同的statusDAO不会返回状态


我不明白为什么。

在您的配置中,“someSource”是文件位置吗?另外,您在测试类中的“源”设置在哪里(以及要设置什么)?本例中的someSource是active mq队列,测试类中的源是activemq,目标是另一个队列。然后假设队列中有要使用的消息,我只能建议看一下代理在Camel中是如何配置的?不确定是否清楚。数据已经保存在数据库中,在CustomProcessor中获取相同数据的想法。这与代理有什么关系?据我所知,您正在DB和Camel之间使用ActiveMQ(JMS代理)——如果ActiveMQ处理了您的消息,则Camel不会接收其输出。