1

「現在のスレッドのセッションが見つかりません」というメッセージが表示されます。問題は、宣言型 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)を使用しています。

「現在のスレッドのセッションが見つかりません」の原因でしょうか?

4

1 に答える 1

-1

@Transactional インポート パッケージとは

import org.springframework.transaction.annotation.Transactional; ??

「import javax.transaction.Transactional;」をインポートしてみてください。

于 2014-06-01T01:32:35.747 に答える