[weld-issues] [JBoss JIRA] Commented: (WELD-921) Incorrect handling of business interfaces for EJBs (where defining class of business method is not the Business interface of the EJBs)
Marcos Antonio (JIRA)
jira-events at lists.jboss.org
Mon Aug 8 13:55:24 EDT 2011
[ https://issues.jboss.org/browse/WELD-921?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12619465#comment-12619465 ]
Marcos Antonio commented on WELD-921:
-------------------------------------
It seems that this issue is not solved yet. This discussion seems to be related to it: http://community.jboss.org/thread/170318?tstart=60
> 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.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the weld-issues
mailing list