「現在のスレッドのセッションが見つかりません」というメッセージが表示されます。問題は、宣言型 xml Bean と注釈付き Bean を混在させることにあると思います。次に、構成を再開します。
MyLibrary プロジェクト
春 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...)
モデル-コア-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>
component-scan を使用して、AccountService、AccountDAO、および PermissionEvaluator の Bean を作成します。
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 e AccountDAO はトランザクションです)
ここで、AccountController.java 内でaccountService.listAccounts ()を呼び出します。これで問題ありません。
しかし、AccountService を PermissionEvaluator クラスに挿入すると (次のスニペット)、accountService.listAccounts()を呼び出すと、AccountController は現在のスレッドで No Session found を取得します。
PermissionEvaluator.java (com.mycompany.permissionEvaluator)
Component("permissionEvaluator")
public class PermissionEvaluatorImpl implements PermissionEvaluator {
@Resource
private AccountService accountService;
...
}
model-core-security.xmlで宣言されたexpressionHandler beanにcomponent-scanで作成したPermissionEvaluator(with AccountService, AccountDAO)を使用しています。
「現在のスレッドのセッションが見つかりません」の原因でしょうか?