[cdi-dev] [JBoss JIRA] (CDI-137) Changing ProcessManagedBean getBean Method Signature

Antoine Sabot-Durand (JIRA) issues at jboss.org
Mon Jan 5 09:00:32 EST 2015


     [ https://issues.jboss.org/browse/CDI-137?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Antoine Sabot-Durand updated CDI-137:
-------------------------------------
    Description: 
Currently ProcessSessionBean class signature is
{code:java}
public class ProcessSessionBean<T> extends ProcessManagedBean<Object>{}
{code}
Therefore, observers work as

Example: 
{code:java}
@Stateless
public class Elephant{}

public void observe(@Observes ProcessBean<Elephant>)  // --> Not allowed
public void observe(@Observes ProcessSessionBean<Elephant>) // --> Allowed
{code}

Pete said that main reason of using ProcessManagedBean<Object> is that
{quote}
{{ProcessBean<X>}} offers a method {{getBean()}} which returns {{Bean<X>}}. {{Bean<X>}} has a method {{create()}} which returns an {{X}}. If we were to have {{ProcessSessionBean<X> extends ProcessManagedBean<X>}} then this would imply that you can create something of type, which in the case of a session bean is the bean class (which can't be created for EJBs with local or remote business interfaces). So ProcessSessionBean is correct as is.
{quote}

Main reason of using the {{ProcessSessionBean}} event is to observe "Session Bean Class" registration, not the observe for the session bean local interface/s.

Moreover, other methods in the interface hierarchy of {{ProcessSessionBean}} gets {{<X>}} into the account, for example {{AnnotatedType<X> getAnnotatedBeanClass()}} returns the AnnotatedType representing the bean class.

Therefore, it is more convenient to change "ProcessManagedBean getBean"  method  declaration as {{public <T> Bean<T> getBean();}} where {{T}} is the local/local view interface of the session bean.

And change the {{ProcessSessionBean}} signature as

{code:java}
public class ProcessSessionBean<X> extends ProcessManagedBean<X>{}
{code}

Also See https://issues.jboss.org/browse/CDITCK-215

  was:
Currently ProcessSessionBean class signature is
public class ProcessSessionBean<T> extends ProcessManagedBean<Object>{}

Therefore, observers work as

Example: 
{code:java}
@Stateless
public class Elephant{}

public void observe(ProcessBean<Elephant>)  // --> Not allowed
public void observe(ProcessSessionBean<Elephant>) // --> Allowed
{code}

Pete said that main reason of using ProcessManagedBean<Object> is that
{quote}
{{ProcessBean<X>}} offers a method {{getBean()}} which returns {{Bean<X>}}. {{Bean<X>}} has a method {{create()}} which returns an {{X}}. If we were to have {{ProcessSessionBean<X> extends ProcessManagedBean<X>}} then this would imply that you can create something of type, which in the case of a session bean is the bean class (which can't be created for EJBs with local or remote business interfaces). So ProcessSessionBean is correct as is.
{quote}

Main reason of using the {{ProcessSessionBean}} event is to observe "Session Bean Class" registration, not the observe for the session bean local interface/s.

Moreover, other methods in the interface hierarchy of {{ProcessSessionBean}} gets {{<X>}} into the account, for example {{AnnotatedType<X> getAnnotatedBeanClass()}} returns the AnnotatedType representing the bean class.

Therefore, it is more convenient to change "ProcessManagedBean getBean"  method  declaration as {{public <T> Bean<T> getBean();}} where {{T}} is the local/local view interface of the session bean.

And change the {{ProcessSessionBean}} signature as

{code:java}
public class ProcessSessionBean<X> extends ProcessManagedBean<X>{}
{code}

Also See https://issues.jboss.org/browse/CDITCK-215



> Changing ProcessManagedBean getBean Method Signature
> ----------------------------------------------------
>
>                 Key: CDI-137
>                 URL: https://issues.jboss.org/browse/CDI-137
>             Project: CDI Specification Issues
>          Issue Type: Bug
>          Components: Portable Extensions
>    Affects Versions: 1.0
>            Reporter: Gurkan Erdogdu
>             Fix For: TBD
>
>
> Currently ProcessSessionBean class signature is
> {code:java}
> public class ProcessSessionBean<T> extends ProcessManagedBean<Object>{}
> {code}
> Therefore, observers work as
> Example: 
> {code:java}
> @Stateless
> public class Elephant{}
> public void observe(@Observes ProcessBean<Elephant>)  // --> Not allowed
> public void observe(@Observes ProcessSessionBean<Elephant>) // --> Allowed
> {code}
> Pete said that main reason of using ProcessManagedBean<Object> is that
> {quote}
> {{ProcessBean<X>}} offers a method {{getBean()}} which returns {{Bean<X>}}. {{Bean<X>}} has a method {{create()}} which returns an {{X}}. If we were to have {{ProcessSessionBean<X> extends ProcessManagedBean<X>}} then this would imply that you can create something of type, which in the case of a session bean is the bean class (which can't be created for EJBs with local or remote business interfaces). So ProcessSessionBean is correct as is.
> {quote}
> Main reason of using the {{ProcessSessionBean}} event is to observe "Session Bean Class" registration, not the observe for the session bean local interface/s.
> Moreover, other methods in the interface hierarchy of {{ProcessSessionBean}} gets {{<X>}} into the account, for example {{AnnotatedType<X> getAnnotatedBeanClass()}} returns the AnnotatedType representing the bean class.
> Therefore, it is more convenient to change "ProcessManagedBean getBean"  method  declaration as {{public <T> Bean<T> getBean();}} where {{T}} is the local/local view interface of the session bean.
> And change the {{ProcessSessionBean}} signature as
> {code:java}
> public class ProcessSessionBean<X> extends ProcessManagedBean<X>{}
> {code}
> Also See https://issues.jboss.org/browse/CDITCK-215



--
This message was sent by Atlassian JIRA
(v6.3.11#6341)


More information about the cdi-dev mailing list