[
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