将ApacheCamel JPA producer与hibernate和普通JavaDSL结合使用

将ApacheCamel JPA producer与hibernate和普通JavaDSL结合使用,hibernate,jpa,apache-camel,Hibernate,Jpa,Apache Camel,我不熟悉Camel,一直在尝试使用Hibernate轮询XML文件目录并写入数据库。为了理解所有东西是如何链接在一起的,我想在将它们移动到SpringXMLConfig之前,使用纯JavaDSL将所有东西连接起来。我使用bean和我自己的方法让它完全按照预期工作: class MyRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { from

我不熟悉Camel,一直在尝试使用Hibernate轮询XML文件目录并写入数据库。为了理解所有东西是如何链接在一起的,我想在将它们移动到SpringXMLConfig之前,使用纯JavaDSL将所有东西连接起来。我使用bean和我自己的方法让它完全按照预期工作:

class MyRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("file://test")
        .bean(parser, "parseXml")
        .bean(parser, "store");
    }
}
现在我想试用内置的JPA producer,因此我将其更改为:

    class MyRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("file://test")
        .bean(parser, "parseXml")
        .to("jpa:soccerfeed?persistenceUnit=sportsstats");
    }
}
但我得到了一个错误:

原因:org.hibernate.HibernateException:当没有可用连接时,必须设置“hibernate.dial”

我已经尝试将我的CamelContext与persistence.properties文件链接起来,该文件指定了我的hibernate.dial(适用于我的bean):

如何让Camel中的JPA端点在persistence.properties中获取设置


编辑:另一种选择似乎是将属性作为元素从属性文件移动到persistence.xml文件中。但是,如果可能的话,我希望避免这样做,因为这会使dev/prod版本的维护变得更加困难。有没有办法将persistence.xml链接到属性文件?(例如或其他什么?

您能够运行此代码吗?
    public void setUp() throws Exception {

    final Properties persistenceProperties = new Properties();
    InputStream is = null;
    try {
        is = getClass().getClassLoader().getResourceAsStream("persistence.properties");
        persistenceProperties.load(is);
    } finally {
        if (is != null) {
            try {
                is.close();
            } catch (IOException ignored) {

            }
        }
    }

    entityManagerFactory = Persistence.createEntityManagerFactory("sportsstats", persistenceProperties);
    context = JAXBContext.newInstance("sportsstats");
}

    private void run() throws Exception {

            camelContext = new DefaultCamelContext();

            JpaComponent jpa = new JpaComponent();
    jpa.setEntityManagerFactory(entityManagerFactory);
    jpa.setCamelContext(camelContext);
    Endpoint jpaEndpoint = jpa.createEndpoint("jpa:soccerfeed");

    camelContext.addEndpoint("jpa:soccerfeed", jpaEndpoint);

            // Add some configuration by hand ...
            camelContext.addRoutes(new MyRouteBuilder());

            // Now everything is set up - lets start the context
            camelContext.start();

            // keep alive
            while(true) {
                Thread.sleep(10000);
            }
}