[undertow-dev] ClassCastException when retrieving a beans from CDI with Weld Proxy beans

Eric B ebenzacar at gmail.com
Thu Apr 13 21:52:07 EDT 2017


I posted this problem on StackOverflow, but after doing more research, I'm
not sure if this is a Weld, JBoss/WildFly or undertow issue.  Or whether
its a framework issue, or how the framework is being used.  If this is not
the correct list, can you please let me know which list/group I should be
directing the issue to?

I'm running into a strange problem and error message that I do not
understand. I'm running my application on JBoss 7 EAP.

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

I'm trying to programatically retrieve an EJB from the CDI context by using
its interface and am getting this error message. I've created a sample
proof-of-concept that is trying to retrieve EJB beans from the CDI context

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);
    }}

It is being called as:

LoginManager login = getSesionBean(LoginManager.class);

with my EJB defined as:

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

I don't understand it. I'm expecting the bean being retrieved from the
context to be a proxy. Shouldn't it be castable to my interface? Otherwise,
how am I supposed to retrieve it?

More interestingly, this does not seem to be a consistent error; sometimes
the code works fine. Sometimes it fails. I haven't been able to determine
what makes it work or throw an exception.

I found a related issue here <https://issues.jboss.org/browse/WELD-1498>,
but not sure if this is the same problem and/or which version of Weld is
used in JB7EAP. I'm including the following dependency in my application:

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

Am I doing something completely wrong? If this is a Weld bug, can I use a
different proxy system than Weld?  Is this even configurable in undertow?


Thanks,


Eric
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/undertow-dev/attachments/20170413/79e8d8ad/attachment-0001.html 


More information about the undertow-dev mailing list