JPA с Spring-security-ACL

Можно ли использовать JPA в весеннем ACL безопасности, я вижу только реализацию jdbc. вот моя настройка JPA в beans:

<beans:bean id="producerService" class="cz.services.RepositoryProducerService" />
<jpa:repositories base-package="cz.repository" />

<beans:bean id="myEmf"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <beans:property name="dataSource" ref="dataSource" />
    <beans:property name="packagesToScan" value="cz.models" />
    <beans:property name="jpaVendorAdapter">
        <beans:bean
            class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </beans:property>
    <beans:property name="jpaProperties">
        <beans:props>

            <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect
            </beans:prop>
            <beans:prop key="hibernate.show_sql">true</beans:prop>
        </beans:props>
    </beans:property>
</beans:bean>

<beans:bean id="transactionManager"
    class="org.springframework.orm.jpa.JpaTransactionManager">
    <beans:property name="entityManagerFactory" ref="myEmf" />
</beans:bean>

<beans:bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <beans:property name="url"
        value="jdbc:mysql://localhost:3306/mydb?zeroDateTimeBehavior=convertToNull&amp;characterEncoding=UTF-8" />

    <beans:property name="username" value="root" />
    <!--<property name="password" value="test" /> -->
    <beans:property name="password" value="test1"></beans:property>
</beans:bean>

но у меня проблема с менеджером транзакций, потому что я использую org.springframework.orm.jpa.JpaTransactionManager вместо:

org.springframework.jdbc.datasource.DataSourceTransactionManager.

Основная проблема заключается в том, что когда я начинаю создавать acl, при первой попытке у меня должна быть запущена транзакция исключения, это вторая попытка (вернитесь и попробуйте снова), все в порядке.

Вот ошибка с первой попытки:

java.lang.IllegalArgumentException: Transaction must be running
    at org.springframework.util.Assert.isTrue(Assert.java:65)
    at org.springframework.security.acls.jdbc.JdbcMutableAclService.createOrRetrieveSidPrimaryKey(JdbcMutableAclService.java:218)
    at org.springframework.security.acls.jdbc.JdbcMutableAclService$1.setValues(JdbcMutableAclService.java:135)
    at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:899)
    at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:890)

Может кто-то помочь мне с этим? Спасибо


person Daris    schedule 27.02.2014    source источник


Ответы (1)


Проблема решена! :)

Я ищу этот менеджер транзакций JPA весной

Фрагмент из JavaDoc Spring 3:

Этот диспетчер транзакций также поддерживает прямой доступ к источнику данных внутри транзакции (т. Е. Простой код JDBC, работающий с тем же источником данных). Это позволяет смешивать сервисы, которые обращаются к JPA, и сервисы, которые используют простой JDBC (без ведома JPA)!

но проблема была в моем cglib - я должен использовать

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

и удалите @Transactional из репозитория интерфейсных JPA.

Я тоже нашел решение: Какая транзакция менеджер, который я должен использовать для шаблона JBDC. При использовании JPA?

надеюсь, кому-то это поможет.

person Daris    schedule 27.02.2014