从CDI检索bean时的类转换异常

时间:2017-04-13 19:39:04

标签: java java-ee cdi jboss-weld

我遇到了一个我不明白的奇怪问题和错误信息。我在JBoss 7 EAP上运行我的应用程序。

Caused by: java.lang.ClassCastException: Cannot cast ejbs.LoginManager$417755913$Proxy$_$$_Weld$EnterpriseProxy$ to ejbs.LoginManager

我正在尝试使用其接口以编程方式从CDI上下文中检索EJB,并收到此错误消息。我已经创建了一个示例概念验证,试图从CDI上下文中检索EJB bean

public <T> T getSesionBean(Class<T> clazz, String name) {
    Properties properties = new Properties();

    try {
        InitialContext initContext = new InitialContext();

        return clazz.cast(CDI.current().select(clazz).get());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        throw new RuntimeException(e);
    }
}

它被称为:

LoginManager login = getSesionBean(LoginManager.class);

将我的EJB定义为:

@Stateless(name="LoginManager")
@Local(LoginManager.class)
@LocalBinding(jndiBinding="LoginManager")
public class LoginManagerBean implements LoginManager {
...
...
...
}

我不明白。我期待从上下文中检索的bean是代理。它不应该可以转换为我的界面吗?否则,我该如何找回它?

更有趣的是,这似乎不是一致的错误;有时代码工作正常。有时会失败。我无法确定是什么使它起作用或抛出异常。

我发现了一个相关的问题here,但不确定这是否是同一个问题和/或JB7EAP中使用的是哪个版本的Weld。我在我的应用程序中包含以下依赖项:

    <dependency>
        <groupId>org.wildfly</groupId>
        <artifactId>wildfly-ejb-client-bom</artifactId>
        <version>10.1.0.Final</version>
        <type>pom</type>
    </dependency>

我做错了吗?如果这是一个Weld错误,我可以使用与Weld不同的代理系统吗?

0 个答案:

没有答案