[jboss-jira] [JBoss JIRA] Updated: (JBAS-5036) Local home create() implementation returns wrong type
Carlo de Wolf (JIRA)
jira-events at lists.jboss.org
Tue Dec 4 05:21:51 EST 2007
[ http://jira.jboss.com/jira/browse/JBAS-5036?page=all ]
Carlo de Wolf updated JBAS-5036:
--------------------------------
JBoss Forum Reference: http://www.jboss.com/index.html?module=bb&op=viewtopic&t=124195
> Local home create() implementation returns wrong type
> -----------------------------------------------------
>
> Key: JBAS-5036
> URL: http://jira.jboss.com/jira/browse/JBAS-5036
> Project: JBoss Application Server
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Components: EJB3
> Affects Versions: JBossAS-4.2.1.GA
> Reporter: Arto Huusko
> Assigned To: Carlo de Wolf
>
> Local home (and presumably remote, too) implementation for EJB 3 sessions creates an object that is an instance of the local *business* interface of the EJB 3 session, and returns that. This is contrary to EJB 3 specification, which says that local home create methods must return an instance of the local interface of the EJB 3 session (as in: not local business interface).
> The type of the local interface is apparently deduced from the return type of the create method in the local home interface (there is no annotation for it).
> For beans that follow the specification, this causes a class cast exception when create() is called: the local home interface is specified to return an instance of local interface, but the implementation JBoss supplies creates a instance of local business interface (I presume so, because changing local home to return that works), and then we end up with class cast exception.
> There is no workaround other than going against specification in code: define local home interface to return instance of local business interface.
> This simple session, which as far as I can see is exactly according to EJB 3 spec, illustrates the problem, and does not work on JBoss 4.2.1.GA:
> --
> @javax.ejb.Stateless(name="Stateless")
> @javax.ejb.LocalHome(StatelessHome.class)
> @javax.ejb.Local({StatelessLocal.class})
> public class StatelessBean implements StatelessLocal { public void ejbCreate() {} }
> --
> public interface StatelessLocal {}
> --
> public interface StatelessHome extends javax.ejb.EJBLocalHome
> { public StatelessLocal21 create() throws javax.ejb.CreateException;}
> --
> public interface StatelessLocal21 extends javax.ejb.EJBLocalObject, StatelessLocal {}
> --
> When home is looked up, and create is called, the result is:
> java.lang.ClassCastException: $Proxy271 cannot be cast to StatelessLocal21
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list