2010-08-31 79 views
3

我想使用Hibernate配置Spring3 + JPA,但我在Spring尝试创建一个名为TransactionInterceptor的Bean时发生异常,附加了异常。欢迎任何帮助。我送我的应用程序-config.xml中,我的persistence.xml和下面的错误堆栈跟踪:Bean属性'transactionManagerBeanName'不可写或具有无效的setter方法

我的应用程序-config.xml中

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" 
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:task="http://www.springframework.org/schema/task" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> 

<context:component-scan base-package="com.mypackage" /> 

<task:annotation-driven executor="myExecutor" 
    scheduler="myScheduler" /> 

<task:executor id="myExecutor" pool-size="5" /> 

<task:scheduler id="myScheduler" pool-size="10" /> 

<context:load-time-weaver /> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="MyPersistenceUnit" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 
<bean 
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

<tx:annotation-driven transaction-manager="transactionManager" /> 
</beans> 

这里是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
<persistence-unit name="MyPersistenceUnit" 
    transaction-type="RESOURCE_LOCAL"> 

    <!-- org.apache.openjpa.persistence.PersistenceProviderImpl --> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 

    <properties> 
    <property name="hibernate.connection.provider_class" 
    value="org.hibernate.connection.C3P0ConnectionProvider" /> 
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
    <property name="hibernate.max_fetch_depth" value="3" /> 
    <property name="hibernate.query.factory_class" 
    value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory" /> 
    <property name="hibernate.query.substitutions" value="true 1, false 0" /> 
    <property name="hibernate.show_sql" value="true" /> 
    <property name="hibernate.hbm2ddl.auto" value="create" /> 
    <property name="hibernate.default_schema" value="MYDATABASE" /> 

    <!-- Use the C3P0 connection pool. --> 
    <property name="hibernate.c3p0.min_size" value="10" /> 
    <property name="hibernate.c3p0.max_size" value="25" /> 
    <property name="hibernate.c3p0.timeout" value="600" /> 
    <property name="hibernate.c3p0.idle_test_period" value="15" /> 
    <property name="hibernate.connection.url" 
    value="jdbc:mysql://localhost:3306/MYDATABASE?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8" /> 
    <property name="hibernate.connection.username" value="root" /> 
    <property name="hibernate.connection.password" value="root" /> 

    <property name="hibernate.cache.provider_class" 
    value="net.sf.ehcache.hibernate.SingletonEhCacheProvider" /> 
    <property name="hibernate.cache.use_query_cache" value="true" /> 
    <property name="hibernate.cache.use_second_level_cache" 
    value="true" /> 
    <property name="hibernate.generate_statistics" value="true" /> 

    </properties> 

</persistence-unit> 
</persistence> 

这里是个例外:

SEVERE: StandardWrapper.Throwable 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.interceptor.TransactionInterceptor#0': Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'transactionManagerBeanName' of bean class [org.springframework.transaction.interceptor.TransactionInterceptor]: Bean property 'transactionManagerBeanName' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442) 
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458) 
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) 
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) 
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) 
at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:615) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195) 
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159) 
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) 
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) 
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at com.springsource.insight.collection.tcserver.request.HttpRequestOperationCollectionValve.invoke(HttpRequestOperationCollectionValve.java:60) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:379) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:637) 
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'transactionManagerBeanName' of bean class [org.springframework.transaction.interceptor.TransactionInterceptor]: Bean property 'transactionManagerBeanName' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1038) 
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:914) 
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76) 
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358) 
... 42 more 
Aug 31, 2010 1:04:27 AM org.apache.catalina.core.ApplicationDispatcher invoke 
+0

你在任何你的Spring的XML文件都有'transactionManagerBeanName'? – Bozho 2010-08-31 06:14:36

+0

不,不,但你..你有一个在你的JPA +春季应用程序? – Thiago 2010-08-31 15:18:45

回答

0

TransactionInterceptor不包含transactionManagerBeanName的setter,仅用于事务管理器实例和事务属性。

+0

是的,但我从来没有触及过这门课。 – Thiago 2010-08-31 13:58:52

+0

什么地狱春在此课上试图设置这个属性? – Thiago 2010-08-31 15:27:54

+0

很奇怪,从例子项目(spring + jpa)中得到了一个新的pom.xml,我可以使它工作。似乎缺少一些依赖性。 – Thiago 2010-09-01 15:02:14

0

很奇怪,从示例项目(spring + jpa)中得到了一个新的pom.xml,我可以得到它的工作。似乎缺少一些依赖性。

+0

为什么你不详细说明你的答案,并显示你错过了什么库,或者你的库中是否有冲突?最后,答案已被接受。 – 2014-08-20 09:16:33

2

我遇到了这个问题,并且(我认为)已经把它跟踪到一个依赖关系问题。

我正在使用org.springframework/spring-tx/3.0.3.RELEASE进行事务处理,并且我一直试图使用org.springframework/spring-hibernate/1.2.9来进行hibernate绑定。这导致了悲伤(我认为),因为JAR包含TransactionInterceptor类的不兼容版本(根据Eclipse)。

现在我已经切换到org.springframework/spring-hibernate3/2.0.8这个问题似乎已经消失。该课程还有两个版本,但它们似乎是兼容的。

UPDATE

其实,对于春天3.0.x的Hibernate3的支持类正确的模块似乎是:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring-version}</version> 
    </dependency> 
相关问题