Настройка JDO в Spring 3.1?

I u sed, чтобы все мои DAO расширяли класс JdoDaoSupport , который теперь устарел в Spring 3.1 . Я создал свой собственный класс AbstractJdoDao , который является оболочкой для PersistenceManagerFactory и всех DAO, расширяемых оттуда.Так ли я должен поступать?

Также в документации по JDO кажется, что прямое создание экземпляра PersistenceManagerFactory не является вариантом по умолчанию, но используется ] LocalPersistenceManagerFactoryBean , завернутый в TransactionAwarePersistenceManagerFactoryProxy . Как правильно создать экземпляры этих bean-компонентов и заставить их работать с аннотациями Spring @Transactional .

Вот часть контекста моего приложения, связанная с постоянством:


    
        
            
                
                    org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory
                    appengine
                    true
                    false
                    false
                    true
                    true
                    NONE
                
            
        
    
    





    

Теперь, когда я загружаю страницу с доступом к хранилищу данных:

org.springframework.transaction.CannotCreateTransactionException: Could not open JDO PersistenceManager for transaction; nested exception is java.lang.IllegalStateException: No JDO PersistenceManager bound to thread, and configuration does not allow creation of non-transactional one here
    at org.springframework.orm.jdo.JdoTransactionManager.doBegin(JdoTransactionManager.java:369) ~[spring-orm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) ~[spring-tx-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) ~[spring-tx-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) ~[spring-tx-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) ~[spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at $Proxy15.queryAll(Unknown Source) ~[na:na]
    ...
Caused by: java.lang.IllegalStateException: No JDO PersistenceManager bound to thread, and configuration does not allow creation of non-transactional one here
    at org.springframework.orm.jdo.PersistenceManagerFactoryUtils.doGetPersistenceManager(PersistenceManagerFactoryUtils.java:153) ~[spring-orm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy$PersistenceManagerFactoryInvocationHandler.invoke(TransactionAwarePersistenceManagerFactoryProxy.java:159) ~[spring-orm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at $Proxy13.getPersistenceManager(Unknown Source) ~[na:na]
    at org.springframework.orm.jdo.JdoTransactionManager.doBegin(JdoTransactionManager.java:308) ~[spring-orm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
... 73 common frames omitted

У меня есть мой пример проекта на GitHub . Он использует Google App Engine, поэтому либо запустите его через mvn gae: run в Eclipse (с подключаемым модулем Google для Eclipse), сначала создав проект Eclipse через mvn eclipse: eclipse .

7
задан hleinone 30 January 2012 в 15:25
поделиться