jsr372-experts@javaserverfaces-spec-public.java.net

[jsr372-experts] Re: why PushContext cannot be obtained from FacesContext?

From: Bauke Scholtz <balusc_at_gmail.com>
Date: Fri, 2 Sep 2016 11:20:16 +0200

Hi,

I reimplemented FacesContext#getPushContext() locally and now I recall
fragments of why I removed it afterwards. I guess it was due to the
somewhat unnatural API. The PushContext is also available when when
FacesContext is not available such as when an asynchronous EJB method
callbacks a managed bean method in order to send out a push message. And,
creating the PushContext requires a "channel name" argument, which means
the API looks like facesContext.getPushContext("channelName").

At least, it doesn't block any unit tests.

If there are no objections, I will create a new spec issue to add below
method to FacesContext:

    /**
     * <p class="changed_added_2_3">Return the {_at_link PushContext} instance
associated with given push channel name.
     * Due to the asynchronous nature of push, it is strongly recommended
inject it via <code>&#64;</code>{_at_link Push}
     * as the {_at_link FacesContext} is not necessarily available at the
moment the push message needs to be sent.</p>
     *
     * @param channel The name of the push channel.
     * @return Instance of <code>PushContext</code> associated with given
push channel name.
     */
    public abstract PushContext getPushContext(String channel);


Cheers, B


On Fri, Sep 2, 2016 at 3:45 AM, Leonardo Uribe <leonardo.uribe_at_irian.at>
wrote:

> Hi
>
> Ok, now I understand. Thanks for the clarifications.
>
> regards,
>
> Leonardo Uribe
>
> 2016-09-01 16:47 GMT-05:00 arjan tijms <arjan.tijms_at_gmail.com>:
>
>> Hi,
>>
>> On Thu, Sep 1, 2016 at 5:59 AM, Leonardo Uribe <leonardo.uribe_at_irian.at>
>> wrote:
>>
>>> My reasoning is in JSF there is always a way to do certain things
>>> programmatically.
>>>
>>
>> This often can be done with the CDI APIs just as well. The entry point is
>> CDI.current().select(SomeBean.class, ...);
>>
>> Basically, if it can be injected it can typically be obtained that way.
>>
>>
>>> For example Application.evaluateExpressionGet(...) to get beans using
>>> EL, but some new features seem to work only with CDI or maybe rely too much
>>> on it.
>>>
>>
>> Some features indeed work with CDI only, but the Java EE platform and JSF
>> among it has been moving towards that already in EE 7. @FlowScoped is a CDI
>> only feature as well, as is @Transactional in JTA. MVC and the Security API
>> are fully CDI based to begin with.
>>
>>
>>
>>> The annotation syntax using @Inject and @Push is nice, but I'm
>>> suspicious about why PushContext extends Serializable. I don't understand
>>> why extends from this interface, or if this is necessary.
>>>
>>
>> In order to inject into a beans with a passivating scope, the injection
>> target has to Serializable.
>>
>> Kind regards,
>> Arjan Tijms
>>
>>
>>
>>>
>>> regards,
>>>
>>> Leonardo Uribe
>>>
>>
>>
>