2010-08-31 3 views
3

Я пытаюсь настроить Spring3 + JPA с помощью Hibernate, но я получаю исключение, а Spring пытается создать Bean, называемый TransactionInterceptor, исключение прилагается. Любая помощь приветствуется. Я посылаю мое приложение-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

у вас есть 'transactionManagerBeanName' в любом из весенних XML-файлов? – Bozho

+0

нет. Я не знаю. У вас есть одно в вашем приложении JPA + Spring? – Thiago

ответ

0

TransactionInterceptor не содержит установщика для transactionManagerBeanName, только для экземпляра менеджера транзакций и атрибутов транзакции.

+0

Да, но я никогда не касался этого класса. – Thiago

+0

Какая черта Spring пытается установить это свойство в этом классе? – Thiago

+0

Очень странно, получил новый pom.xml из примера project (spring + jpa), и я мог заставить его работать. Кажется, что некоторая зависимость отсутствовала. – Thiago

0

Очень странно, получил новый pom.xml из примера проекта (spring + jpa), и я мог заставить его работать. Кажется, что некоторая зависимость отсутствовала.

+0

Почему вы не уточняете свой ответ и не показываете, какие библиотеки вы отсутствовали, или если в ваших библиотеках был конфликт? И, наконец, ответьте как принято. –

2

Я столкнулся с этой проблемой и (я думаю) отследил ее до проблемы зависимостей.

Я использую org.springframework/spring-tx/3.0.3.RELEASE для транзакций, и я пытался использовать org.springframework/spring-hibernate/1.2.9 для привязок к гибернату. Это вызывало горе (я думаю), потому что JAR содержали несовместимые версии класса TransactionInterceptor (согласно Eclipse).

Теперь, когда я переключился на org.springframework/spring-hibernate3/2.0.8, проблема, похоже, исчезла. Есть еще две версии класса, но они кажутся совместимыми.

UPDATE

На самом деле, правильный модуль для классов поддержки hibernate3 для Spring 3.0.x, кажется:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring-version}</version> 
    </dependency> 
Смежные вопросы

 Смежные вопросы