谁能指出一个适用于 Mule 3.4 CE 的 mule-module-jpa 的工作示例?
我一直在寻找高低,并花了一天的大部分时间来尝试运行测试,并且一直试图在 mule 应用程序中设置正确定义的 entityManagerFactory。
当我在这里看到描述模块功能的文章时,我很兴奋。http://blogs.mulesoft.org/getting-started-with-jpa-and-mule/不幸的是,该文章缺少有关模块配置的任何详细信息。
接下来我找到了该模块的 github 存储库(https://github.com/mulesoft/mule-module-jpa),并点击了https://github.com/mulesoft/mule-module-的“文档”链接杰帕_ 再次没有关于 entityManager 配置的详细信息。还注意到那里的 maven 信息似乎与 Studio 将通过 mule 更新站点安装的 1.2.0 版本的 mule-module-jpa 的 maven-mule-plugin 中的内容已过时。
接下来,我在https://github.com/mulesoft/mule-module-jpa/tree/master/src/test/resources查看了 mule-module-jpa 源代码中的测试,看看我是否可以拼凑出一个解决方案.
使用它,我已经让 Studio 和/或 maven 使用该模块编译了一个小型 mule 应用程序,但它不会开始给出 Caused by: java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence ,其根本原因是 Caused by: java .lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence
我的 Maven 部门确实包含了相关的 Hibernate 内容,并且在 Studio 下运行时,我确实看到 jar 包含在输出目录中。但是骡子类加载器似乎无法找到它们......或者我对需要什么一无所知。
我已经尝试了几种 Hibernate 和 Spring-orm 版本的组合,目前正在使用每个版本中的最新版本:
<spring.version>4.0.0.RELEASE</spring.version>
<hibernate.version>4.2.2.Final</hibernate.version>
我的 pom 的相关部分如下所示:
<dependencies>
...
<dependency>
<groupId>org.mule.modules</groupId>
<artifactId>mule-module-jpa</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>4.1.0.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<plugins>
...
<plugin>
<groupId>org.mule.tools</groupId>
<artifactId>maven-mule-plugin</artifactId>
<version>1.9</version>
<extensions>true</extensions>
<configuration>
<copyToAppsDirectory>true</copyToAppsDirectory>
<inclusions>
<inclusion>
<groupId>org.mule.modules</groupId>
<artifactId>mule-module-jpa</artifactId>
</inclusion>
</inclusions>
</configuration>
</plugin>
</plugins>
我的简单骡子配置看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<mule version="CE-3.4.0"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:jpa="http://www.mulesoft.org/schema/mule/jpa"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/jpa http://www.mulesoft.org/schema/mule/jpa/1.0/mule-jpa.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
">
<spring:beans>
<spring:bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<spring:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<spring:property name="url" value="jdbc:mysql://localhost:3306/test"/>
<spring:property name="username" value="XXXX"/>
<spring:property name="password" value="XXXX"/>
</spring:bean>
<spring:bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<spring:property name="dataSource" ref="datasource"/>
<spring:property name="jpaVendorAdapter">
<spring:bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<spring:property name="showSql" value="true"/>
<spring:property name="generateDdl" value="false"/>
<spring:property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
</spring:bean>
</spring:property>
</spring:bean>
</spring:beans>
<jpa:config name="Java_Persistence_API" entityManagerFactory-ref="entityManagerFactory" doc:name="Java Persistence API"/>
<flow name="jpa_test2Flow1" doc:name="jpa_test2Flow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="query" doc:name="HTTP"/>
<logger level="INFO" doc:name="Logger"/>
<jpa:find config-ref="Java_Persistence_API" entityClass="domain.Dog" id-ref="#[message.payload.name]" doc:name="Java Persistence API"/>
</flow>
</mule>
我得到的完整例外是:
在设置bean属性'jpaVendorAdapter'时,无法创建[org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]类型的内部bean'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule 中定义的名称为 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' 的 bean 创建错误/apps/jpa_test2/jpa_test2.xml]:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence (org.mule.api.lifecycle. springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] 同时设置 bean 属性'jpaVendorAdapter';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule 中定义的名称为 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' 的 bean 创建错误/apps/jpa_test2/jpa_test2.xml]:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.mule.config.builders.AbstractConfigurationBuilder 中的 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence (org.mule.api.lifecycle.InitialisationException)。jpa.vendor.HibernateJpaVendorAdapter] 同时设置 bean 属性'jpaVendorAdapter';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule 中定义的名称为 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' 的 bean 创建错误/apps/jpa_test2/jpa_test2.xml]:bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.mule.config.spring.SpringXmlConfigurationBuilder 中 org.mule.registry.AbstractRegistry.initialise(AbstractRegistry.java:117) 中的 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence。createSpringRegistry(SpringXmlConfigurationBuilder.java:119) at org.mule.config.spring.SpringXmlConfigurationBuilder.doConfigure(SpringXmlConfigurationBuilder.java:73) at org.mule.config.builders.AbstractConfigurationBuilder.configure(AbstractConfigurationBuilder.java:46) ... 11更多原因:org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule/apps/jpa_test2/jpa_test2.xml] 中定义名称为“entityManagerFactory”的 bean 创建错误:不能在设置bean属性'jpaVendorAdapter'时创建[org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]类型的内部bean'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b';嵌套异常是 org.springframework.beans.factory.BeanCreationException:在 URL [file:/home/matthew/MuleStudio/workspace/.mule/apps/jpa_test2/jpa_test2.xml] 中定义的名称为 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#495b317b' 创建 bean 时出错:bean 的实例化失败的; 嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.support.BeanDefinitionValueResolver 的 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:282) 的 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence。 org.springframework.beans.factory.support 上的 resolveValueIfNecessary(BeanDefinitionValueResolver.java:121)。在 URL [file:/home/matthew/MuleStudio/workspace/.mule/apps/jpa_test2/jpa_test2.xml] 中定义的 HibernateJpaVendorAdapter#495b317b':bean 的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 的 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1011) 的 java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence。 createBeanInstance(AbstractAutowireCapableBeanFactory.java:957) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory。doCreateBean(AbstractAutowireCapableBeanFactory.java:490) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:271) ... 28 更多原因:org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]:构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy. java:87) 在组织。
我开始认为这个模块还没有准备好使用,尽管它可以作为工作室内部的云连接器使用?