EJB 2无状态会话Bean中的Spring会话范围bean

时间:2010-09-02 20:40:18

标签: java spring ejb

我正在使用Spring向旧的EJB 2应用程序添加一些功能。 EJB使用的Spring应用程序上下文是Web应用程序的父上下文,如here所述。

我正在尝试在EJB中使用会话范围的bean。有问题的bean是从EJB应用程序上下文初始化的。

但是,在尝试访问bean时出现此错误:

Caused by: java.lang.IllegalStateException: No Scope registered for scope 'session'

From what I've read,这是因为parentContextKey不是WebApplicationContext的实例。有没有人对如何使这个工作有想法?

2 个答案:

答案 0 :(得分:2)

您可以尝试手动注册范围:

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
        <map>
            <entry key="session">
                <bean class="org.springframework.web.context.request.SessionScope"/>
            </entry>
        </map>
    </property>
</bean>

我想它应该可以工作,因为SessionScope本身只依赖于RequestContextListener公开的线程绑定请求上下文,并且不依赖于应用程序上下文。

答案 1 :(得分:0)

您只能在Spring WebApplicationContext中使用会话范围的Spring bean。没有解决这个问题 - 没有WebApplicationContext,没有会话范围。

也许如果你解释了你想要实现的目标,我们可以进一步提供帮助。您是否可能将有状态会话EJB与servlet会话混淆?他们不是一回事。