Uploaded image for project: 'Application Server 3  4  5 and 6'
  1. Application Server 3 4 5 and 6
  2. JBAS-6054

@EJB injection in JSP fails for local interface

    XMLWordPrintable

Details

    • Bug
    • Resolution: Obsolete
    • Major
    • No Release
    • JBossAS-5.0.0.CR2
    • EJB
    • None
    • Workaround Exists
    • Hide

      Use "mappedName" attribute in @EJB annotation.

      Show
      Use "mappedName" attribute in @EJB annotation.

    Description

      I will attach a sample for this problem.
      To verify the code:
      The attached EAR contains EJB, Web and ApplicationClient projects, one EJB "GeometricModelBean" with remote and local interfaces. The web project uses injection, the application client performs a JNDI lookup.

      The JSP tries to inject a local and a remote interface in "GeometricModelTest.jsp" (http://localhost:8080/StatelessWeb/GeometricModelTest.jsp)

      <%!
      @EJB()
      GeometricModelRemote geometricModel;

      @EJB()
      GeometricModelLocal geometricModelLocal;
      %>

      The local interface injection will fail with this exception (from server console):

      21:46:31,421 ERROR [FieldBeanProperty] failed to set value Proxy to jboss.j2ee:ear=Stateless.ear,jar=StatelessEJB.jar,name=GeometricModelBean,service=EJB3 implementing [interface org.jboss.ejb3.proxy.intf.EjbProxy, interface de.fhw.komponentenarchitekturen.knauf.stateless.GeometricModelRemote, interface org.jboss.ejb3.proxy.intf.SessionProxy] on field de.fhw.komponentenarchitekturen.knauf.stateless.GeometricModelLocal org.apache.jsp.GeometricModelTest_jsp.geometricModelLocal
      java.lang.IllegalArgumentException: Can not set de.fhw.komponentenarchitekturen.knauf.stateless.GeometricModelLocal field org.apache.jsp.GeometricModelTest_jsp.geometricModelLocal to $Proxy245
      at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
      at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
      at sun.reflect.UnsafeObjectFieldAccessorImpl.set(Unknown Source)
      at java.lang.reflect.Field.set(Unknown Source)
      at org.jboss.injection.lang.reflect.FieldBeanProperty.set(FieldBeanProperty.java:74)
      at org.jboss.injection.JndiPropertyInjector.inject(JndiPropertyInjector.java:119)
      at org.jboss.web.tomcat.service.TomcatInjectionContainer.processInjectors(TomcatInjectionContainer.java:361)
      at org.jboss.web.tomcat.service.TomcatInjectionContainer.processAnnotations(TomcatInjectionContainer.java:404)
      at org.jboss.web.tomcat.service.TomcatInjectionContainer.newInstance(TomcatInjectionContainer.java:261)
      at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:145)
      at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
      at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
      .....

      It works, if I specifiy a "mappedName" attribute (pointing to the default bean name).
      <%!
      @EJB()
      GeometricModelRemote geometricModel;

      @EJB(mappedName="Stateless/GeometricModelBean/local")
      GeometricModelLocal geometricModelLocal;
      %>

      For servlets, the local interface injection works fine (also in the sample at URL http://localhost:8080/StatelessWeb/servlet/GeometricModelServlet)

      Attachments

        Activity

          People

            rhn-engineering-cdewolf Carlo de Wolf
            wolfgangknauf Wolfgang Knauf
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: