Я получаю «Сеанс не найден для текущего потока». Я предполагаю, что проблема заключается в смешивании декларативных компонентов 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.
Может ли это быть причиной «сеанса для текущего потока не найдено»?