Indeed, it was an issue with duplicate copies of the class.  But I'm still not convinced I should be getting this error.  Is this a parent-first vs parent-last class loading issue?

The LoginManager.class is part of my ejbs.jar archive.

In my EAR, I had the following
- ejbs.jar
- webapp.war
   \- WEB-INF/lib
      \- ejbs.jar


I am deploying the with default classloading mechanism (I believe it is parent-first).  But based on the https://docs.jboss.org/author/display/WFLY10/Class+Loading+in+WildFly, I seem to understand that the Local Resources (ie: classes within my WAR) would have a higher dependence than those from the EAR:

In order of highest priority to lowest priority
  1. System Dependencies - These are dependencies that are added to the module automatically by the container, including the Java EE api's.
  2. User Dependencies - These are dependencies that are added through jboss-deployment-structure.xml or through the Dependencies: manifest entry.
  3. Local Resource - Class files packaged up inside the deployment itself, e.g. class files from WEB-INF/classes or WEB-INF/lib of a war.
  4. Inter deployment dependencies - These are dependencies on other deployments in an ear deployment. This can include classes in an ear's lib directory, or classes defined in other ejb jars. 

If that is the case, is my problem that I have the EJB implementation class in my WAR as well?  Is my war only supposed to have a copy of the LoginManager interface and not the actual impl code as well?  Wouldn't that still cause an issue in that my EJB interface and implementation is in the root/ejbs.jar and I have an additional copy of the interface in my war?

Thanks,

Eric


On Mon, Apr 17, 2017 at 6:01 PM, Stuart Douglas <sdouglas@redhat.com> wrote:
It sounds like a class loading problem. You likely have two copies of
ejbs.LoginManager, and somehow you are using the wrong one. If you
look at the output of
System.out.println(LoginManager.class.getClassLoader()) and
System.out.println(CDI.current().select(clazz).get().getClass().getClassLoader())
it should give you a clue.

This is not an Undertow issue.

Stuart

On Fri, Apr 14, 2017 at 11:52 AM, Eric B <ebenzacar@gmail.com> wrote:
> 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, 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
>
>
> _______________________________________________
> undertow-dev mailing list
> undertow-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/undertow-dev