Смешивание декларативных bean-компонентов и аннотированных bean-компонентов: org.hibernate.HibernateException Сессия не найдена для текущего потока

Я получаю «Сеанс не найден для текущего потока». Я предполагаю, что проблема заключается в смешивании декларативных компонентов xml и аннотированных компонентов. Далее я возобновлю свою конфигурацию.

Моя библиотека

Весна 3.1.4 Спящий режим 4

applicationContext.xml

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

<context:component-scan 
    base-package="com.mycompany.dao.core, com.mycompany.services.core,
                  com.mycompany.permissionEvaluator" />

<import resource="model-core-security.xml" />

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
... (sessionFactory ecc...)

model-core-security.xml

<bean id="expressionHandler"
class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
    <property name="permissionEvaluator" ref="permissionEvaluator" />
</bean>

<security:global-method-security
    pre-post-annotations="enabled">
    <security:expression-handler ref="expressionHandler" />
</security:global-method-security>

С компонентным сканированием я создаю bean-компоненты: AccountService, AccountDAO и PermissionEvaluator.

AccountService.java (com.mycompany.services)

@Service("accountService")
@Transactional
public class AccountServiceImpl implements AccountService {

    @Resource
    private AccountDAO accountDAO;

   ...
}

AccountDAO.java (com.mycompany.dao)

@Repository
@Transactional
public class HibernateAccountDAOImpl implements AccountDAO {

   ...query...
}

(AccountService и AccountDAO являются транзакционными)

Теперь в AccountController.java я вызываю accountService.listAccounts(), и все в порядке!

Но если я добавлю AccountService в класс PermissionEvaluator (следующий фрагмент), AccountController получит Сеанс не найден для текущего потока при вызове accountService.listAccounts()

PermissionEvaluator.java (com.mycompany.permissionEvaluator)

Component("permissionEvaluator")
public class PermissionEvaluatorImpl implements PermissionEvaluator {

    @Resource
    private AccountService accountService;

    ...
}

Я использую PermissionEvaluator (с AccountService, AccountDAO), созданный компонентом-сканированием в bean-компоненте expressionHandler, объявленном в model-core-security.xml.

Может ли это быть причиной «сеанса для текущего потока не найдено»?


person Fabio Formosa    schedule 13.02.2014    source источник


Ответы (1)


@Transactional какой у тебя импортный пакет

импортировать org.springframework.transaction.annotation.Transactional; ??

Вы можете попробовать импортировать "import javax.transaction.Transactional;"

person pmx    schedule 01.06.2014