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

Ales Justin updated WELD-921:
-----------------------------

    Fix Version/s: 1.2.0.Beta1
                       (was: 1.1.3.Final)

    
> Incorrect handling of business interfaces for EJBs (where defining class of 
> business method is not the Business interface of the EJBs) 
> ---------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: WELD-921
>                 URL: https://issues.jboss.org/browse/WELD-921
>             Project: Weld
>          Issue Type: Bug
>          Components: Weld SPI
>    Affects Versions: 1.1.0.Final, 1.1.1.Final
>            Reporter: Sivakumar Thyagarajan
>             Fix For: 1.2.0.Beta1
>
>         Attachments: chat-log.txt, jboss7-weld-ejb-abstract-local.zip
>
>
> This is based on the scenario described in 
> http://java.net/jira/browse/GLASSFISH-16186
> - @Named @Stateless TimeProviderImpl extends SimpleTimeProvider implements 
> LocalTimeProvider.
> - SimpleTimeProvider implements TimeProvider (the latter defining some 
> methods, the former implementing them. No annotations.)
> - LocalTimeProvider is @Local and also extends TimeProvider and does nothing 
> more.
> So the Local Business interface is LocalTimeProvider.
> The following injection is performed on a SessionScoped Bean
>   @Inject
>   private LocalTimeProvider timeProvider1;
> The Weld bean proxy for the SessionBean Object reference being 
> injected(timeProvider1) tries to get [1] the BusinessObject when a method is 
> invoked on it. Weld seems to use [2] the declaring class of the method being 
> invoked to determine the business interface. Though the business interface of 
> the Bean is set to com.dummy.time.LocalTimeProvider, the class that declares 
> the method being invoked ("getThisMonth()") is com.dummy.time.TimeProvider.
> Therefore, the Weld implementation calls 
> SessionObjectReferenceImpl.getBusinessObject("com.dummy.time.TimeProvider"), 
> which fails, as TimeProvider is not a Business interface. As per [3], the 
> businessInterfaceType must be a type of the business interface of the bean. 
> Is Weld incorrect in mapping the method to its declaring interface. Weld must 
> instead use the injected type as the business interface, while trying to get 
> the business object.
> [1] 
> https://github.com/weld/core/blob/76c31d311cf1ff449eb2d5c80943b913651bed96/impl/src/main/java/org/jboss/weld/bean/proxy/EnterpriseBeanProxyMethodHandler.java#L123
> [2]https://github.com/weld/core/blob/76c31d311cf1ff449eb2d5c80943b913651bed96/impl/src/main/java/org/jboss/weld/bean/proxy/EnterpriseBeanProxyMethodHandler.java#L146
> [3] 
> https://github.com/weld/api/blob/master/weld-spi/src/main/java/org/jboss/weld/ejb/api/SessionObjectReference.java#L31
>  

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        
_______________________________________________
weld-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/weld-issues

Reply via email to