首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在EJB上获取SessionContext

无法在EJB上获取SessionContext
EN

Stack Overflow用户
提问于 2012-02-29 01:55:57
回答 2查看 6.1K关注 0票数 0

我无法在EJB上获取SessionContext对象。我尝试了4 Ways to Get EJBContext in EJB 3上建议的所有选项,但都不起作用。例如,我的项目中的以下代码...

代码语言:javascript
复制
@Stateful
public class SecurityService {
    @Resource
    private SessionContext context;

    @PostConstruct
    public void init() {
    }
}

..。在部署过程中生成以下异常:

代码语言:javascript
复制
[#|2012-02-28T14:35:02.805-0300|SEVERE|glassfish3.1.1|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=18;_ThreadName=admin-thread-pool-4848(5);|The log message is null.
java.lang.NullPointerException
    at com.sun.appserv.connectors.internal.api.AppSpecificConnectorClassLoaderUtil.detectResourceInRA(AppSpecificConnectorClassLoaderUtil.java:266)
    at com.sun.appserv.connectors.internal.api.AppSpecificConnectorClassLoaderUtil.processDescriptorForRAReferences(AppSpecificConnectorClassLoaderUtil.java:211)
    at com.sun.appserv.connectors.internal.api.AppSpecificConnectorClassLoaderUtil.processDescriptorForRAReferences(AppSpecificConnectorClassLoaderUtil.java:130)
    at com.sun.appserv.connectors.internal.api.AppSpecificConnectorClassLoaderUtil.detectReferredRARs(AppSpecificConnectorClassLoaderUtil.java:118)
    at com.sun.appserv.connectors.internal.api.ConnectorClassLoaderServiceImpl.getConnectorClassLoader(ConnectorClassLoaderServiceImpl.java:111)
    at com.sun.enterprise.v3.server.ClassLoaderHierarchyImpl.getConnectorClassLoader(ClassLoaderHierarchyImpl.java:117)

如果我删除@Resource注解,它就会部署,但不起作用(我已经尝试过使用JNDI和前面提到的其他方法)。

我使用的是Glassfish 3.1.1,我的项目是使用CDI的JSF和使用JPA的服务本地EJB。我尝试过在CDI上注入SessionContext,但收到了相同的错误。我的EJB是用注释配置的,而我的beans.xml没有配置(但存在)。

一件奇怪的事情是,通过JNDI lookup,我在@PostConstruct init()方法的java:/comp/EJBContext路径上获得了一个SessionContextImpl类型的对象。但是,一旦调用另一个EJB方法(?),它就会变为null。并且它不包含用户的角色数据(调用isCallerInRole()会抛出异常)。而且,它也不是EJBContext对象。

我使用Maven将WAR中的所有内容打包,Java EE的依赖项被标记为已提供,如下所示:

代码语言:javascript
复制
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
</dependency>

在我看来,容器根本没有提供SessionContext (EJBCOntext)。我不知道这是否可能,我也不知道如何解决这个问题。

如果你对此有什么想法,我会很高兴听到的。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-14 01:43:58

好吧,我已经升级到Glassfish 3.1.2了,这个问题已经解决了。现在我可以按预期注入javax.ejb.SessionContext了。

特别感谢@perissf的帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-02-29 05:57:50

如果您的主体已使用j_security_check登录,则可以在EJBManagedBean中注入SecurityContext,并检索主体和角色的信息,如下所示:

代码语言:javascript
复制
@Context private SecurityContext context;
....
boolean isInRole = context.isUserInRole("A role");
Principal p = context.getUserPrincipal();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9487185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档