2014-09-21 1:19 GMT+02:00 Lars-Fredrik Smedberg <[email protected]>:
> When you say "...which shares nothing with your controller by default..." > you mean that I have to let the observer inject the controller, I assume > the controller needs to be atleast @RequestScoped as well (and not > dependent)... > dependent in a requestscoped bean an work but i guess you are right > > Could I also pass the controller as part of the actual event.... such as > fire(new MyEvent(this)) inside the controller? > > yes but then you dont have the cdi proxy anymore if you had one (can be ok or not depending what you use of it, ie scope only or not) > What you mean by "...not through the observer itself (even if possible if > you get the observer injected but then the observer pattern is broken)..." > > if the sender knows about the observer then you just call the method and forget about events > Regards > LF > > > > On Sun, Sep 21, 2014 at 1:08 AM, Romain Manni-Bucau <[email protected] > > wrote: > >> 1. yes or later (depend your impl actually) >> 2. yes but the bean is the observer which shares nothing with your >> controller by default >> 3. same as 2 but yes >> 4. true, that's most of the time what is the best since you pass the >> state through the event or an injection, not through the observer >> itself (even if possible if you get the observer injected but then the >> observer pattern is broken) >> >> >> Romain Manni-Bucau >> Twitter: @rmannibucau >> Blog: http://rmannibucau.wordpress.com/ >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> Github: https://github.com/rmannibucau >> >> >> 2014-09-21 0:55 GMT+02:00 Lars-Fredrik Smedberg <[email protected]>: >> > @Romain >> > >> > Maybe I'm slow or the hour is late :).... just so that I get it all: >> > >> > 1. I assume the actual CDI event is fired e.g. in the start method of >> > MyRequestController, correct? >> > 2. If I only observe MyEvent in a @RequestScoped bean I assume that no >> other >> > parallell ongoing request will see/observe the same event, correct? >> > 3. I assume that I could also observe the event in a @SessionScoped >> bean and >> > the event would atleast be kept within the same session, correct? >> > 4. If I observe MyEvent in an @ApplicationScoped bean I assume that >> > particular bean will receive all events fired? >> > >> > >> > >> > On Sun, Sep 21, 2014 at 12:43 AM, Romain Manni-Bucau < >> [email protected]> >> > wrote: >> >> >> >> public class MyRequestController { >> >> void stopAll() {} >> >> } >> >> >> >> >> >> class Observer { >> >> @Inject MyRequestController controller; >> >> >> >> >> >> void observes(@Observes MyEvent event ) { controller.stopAll(); } >> >> } >> >> >> >> public class MyServlet extends HttpServlet { >> >> @Inject MyRequestController controller; >> >> void service(req, resp) { >> >> controller.start(....); >> >> } >> >> } >> >> >> >> >> >> Romain Manni-Bucau >> >> Twitter: @rmannibucau >> >> Blog: http://rmannibucau.wordpress.com/ >> >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> >> Github: https://github.com/rmannibucau >> >> >> >> >> >> 2014-09-21 0:36 GMT+02:00 Lars-Fredrik Smedberg <[email protected]>: >> >> > @Romain >> >> > >> >> > Could you please give me a short example (psuedo code)... not quite >> sure >> >> > if >> >> > I get it... >> >> > >> >> > Thanks >> >> > LF >> >> > >> >> > On Sun, Sep 21, 2014 at 12:26 AM, Romain Manni-Bucau >> >> > <[email protected]> >> >> > wrote: >> >> >> >> >> >> what I usually do is to either get injected in the observer or pass >> as >> >> >> event parameter something related to the request. Can be your >> 'request >> >> >> processor' >> >> >> >> >> >> >> >> >> Romain Manni-Bucau >> >> >> Twitter: @rmannibucau >> >> >> Blog: http://rmannibucau.wordpress.com/ >> >> >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> >> >> Github: https://github.com/rmannibucau >> >> >> >> >> >> >> >> >> 2014-09-21 0:20 GMT+02:00 Lars-Fredrik Smedberg <[email protected] >> >: >> >> >> > @Romain >> >> >> > >> >> >> > By "request scoped event" you mean that all @Observes methods for >> >> >> > that >> >> >> > particular event is in @RequestScoped beans or is it possible to >> fire >> >> >> > events >> >> >> > so they are only visible to the current request? >> >> >> > >> >> >> > >> >> >> > On Sun, Sep 21, 2014 at 12:06 AM, Romain Manni-Bucau >> >> >> > <[email protected]> >> >> >> > wrote: >> >> >> >> >> >> >> >> oh sorry, read async (the habit). In this case a request scoped >> even >> >> >> >> should work >> >> >> >> >> >> >> >> >> >> >> >> Romain Manni-Bucau >> >> >> >> Twitter: @rmannibucau >> >> >> >> Blog: http://rmannibucau.wordpress.com/ >> >> >> >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> >> >> >> Github: https://github.com/rmannibucau >> >> >> >> >> >> >> >> >> >> >> >> 2014-09-20 23:51 GMT+02:00 Lars-Fredrik Smedberg >> >> >> >> <[email protected]>: >> >> >> >> > @Romain >> >> >> >> > >> >> >> >> > Its an synchronous task, not async. How can I then make sure no >> >> >> >> > events >> >> >> >> > are >> >> >> >> > shared between requests? (or did I misunderstand your answer >> >> >> >> > perhaps?) >> >> >> >> > >> >> >> >> > Regards >> >> >> >> > LF >> >> >> >> > >> >> >> >> > On Sat, Sep 20, 2014 at 11:48 PM, Romain Manni-Bucau >> >> >> >> > <[email protected]> >> >> >> >> > wrote: >> >> >> >> >> >> >> >> >> >> if that's async then you have no guarantee out of the box >> that it >> >> >> >> >> will >> >> >> >> >> work, I wouldn't bet on it without being bound to a particular >> >> >> >> >> container >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> Romain Manni-Bucau >> >> >> >> >> Twitter: @rmannibucau >> >> >> >> >> Blog: http://rmannibucau.wordpress.com/ >> >> >> >> >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> >> >> >> >> Github: https://github.com/rmannibucau >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> 2014-09-20 23:35 GMT+02:00 Lars-Fredrik Smedberg >> >> >> >> >> <[email protected]>: >> >> >> >> >> > Hi Romain and Mark >> >> >> >> >> > >> >> >> >> >> > I was exploring the thoughts of using CDI Events to perform >> >> >> >> >> > something >> >> >> >> >> > like >> >> >> >> >> > this. >> >> >> >> >> > >> >> >> >> >> > 1. In a request start a syncrhonous task >> >> >> >> >> > 2. The task would at some points during the process (not >> >> >> >> >> > always, >> >> >> >> >> > depends >> >> >> >> >> > on >> >> >> >> >> > some business decisions) send events that the starter of the >> >> >> >> >> > task >> >> >> >> >> > could >> >> >> >> >> > observe and possible change the outcome of the task. >> >> >> >> >> > 3. When the task is finished the request that started it >> >> >> >> >> > returns >> >> >> >> >> > an >> >> >> >> >> > answer >> >> >> >> >> > to the client >> >> >> >> >> > >> >> >> >> >> > Another way would be to create normal listeners (normal >> e.g. as >> >> >> >> >> > used >> >> >> >> >> > in >> >> >> >> >> > Swing, addActionListener...) >> >> >> >> >> > >> >> >> >> >> > Is the CDI Event way something to consider (seems more >> >> >> >> >> > elegant)? I >> >> >> >> >> > would >> >> >> >> >> > not >> >> >> >> >> > want observers of different requests (threads) see each >> others >> >> >> >> >> > events. >> >> >> >> >> > >> >> >> >> >> > Regards >> >> >> >> >> > LF >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > On Sat, Sep 20, 2014 at 7:46 AM, Mark Struberg >> >> >> >> >> > <[email protected]> >> >> >> >> >> > wrote: >> >> >> >> >> >> >> >> >> >> >> >> s/mathing/matching/g >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> > On Saturday, 20 September 2014, 7:46, Mark Struberg >> >> >> >> >> >> > <[email protected]> >> >> >> >> >> >> > wrote: >> >> >> >> >> >> > > Yes all beans which are in active contests and have a >> >> >> >> >> >> > > mathing >> >> >> >> >> >> > > observer >> >> >> >> >> >> > > method. >> >> >> >> >> >> > >> >> >> >> >> >> > >> >> >> >> >> >> > How does it work: >> >> >> >> >> >> > >> >> >> >> >> >> > 1.) We collect all ObserverMethods which match the type >> and >> >> >> >> >> >> > generics >> >> >> >> >> >> > info >> >> >> >> >> >> > >> >> >> >> >> >> > 2.) From those ObserverMethods we filter out all which do >> >> >> >> >> >> > not >> >> >> >> >> >> > fit >> >> >> >> >> >> > the >> >> >> >> >> >> > qualifier >> >> >> >> >> >> > >> >> >> >> >> >> > 3.) Then we iterate over all the ObserverMethods and do >> the >> >> >> >> >> >> > following >> >> >> >> >> >> > >> >> >> >> >> >> > 3.1) if the Scope of the bean containing the >> ObserverMethod >> >> >> >> >> >> > is >> >> >> >> >> >> > not >> >> >> >> >> >> > active -> >> >> >> >> >> >> > skip it. (this can happen if you e.g. have a >> SessionScoped >> >> >> >> >> >> > bean >> >> >> >> >> >> > in >> >> >> >> >> >> > an >> >> >> >> >> >> > @Scheduled >> >> >> >> >> >> > management thread) >> >> >> >> >> >> > >> >> >> >> >> >> > 3.2) if there is already a Contextual Instance in the >> >> >> >> >> >> > Context >> >> >> >> >> >> > of >> >> >> >> >> >> > the >> >> >> >> >> >> > Scope we >> >> >> >> >> >> > call the observer method on that instance. >> >> >> >> >> >> > >> >> >> >> >> >> > 3.3.) if there is NO active Contextual Instance of the >> bean >> >> >> >> >> >> > containing >> >> >> >> >> >> > the >> >> >> >> >> >> > observer method yet and the @Observes has >> >> >> >> >> >> > javax.enterprise.event.Reception.ALWAYS (which is the >> >> >> >> >> >> > default) >> >> >> >> >> >> > then >> >> >> >> >> >> > we >> >> >> >> >> >> > will >> >> >> >> >> >> > first create the Contextual Instance and then call the >> >> >> >> >> >> > method. >> >> >> >> >> >> > >> >> >> >> >> >> > 3.4) ATTENTION: There is a special rule for @Dependent >> >> >> >> >> >> > scoped >> >> >> >> >> >> > beans. >> >> >> >> >> >> > For >> >> >> >> >> >> > those >> >> >> >> >> >> > we must create a NEW instance every time and after the >> >> >> >> >> >> > observer >> >> >> >> >> >> > method >> >> >> >> >> >> > returns >> >> >> >> >> >> > we will throw the instance away immediately. >> >> >> >> >> >> > If you have a @Dependent bean injected into some other >> >> >> >> >> >> > normalscoped >> >> >> >> >> >> > beans then >> >> >> >> >> >> > CDI will NOT invoke the observer methods on those >> instances! >> >> >> >> >> >> > Which >> >> >> >> >> >> > effectively >> >> >> >> >> >> > renders observing events in @Dependent beans pretty much >> >> >> >> >> >> > useless. >> >> >> >> >> >> > Just >> >> >> >> >> >> > as a side >> >> >> >> >> >> > note... >> >> >> >> >> >> > >> >> >> >> >> >> > >> >> >> >> >> >> > LieGrue, >> >> >> >> >> >> > strub >> >> >> >> >> >> > >> >> >> >> >> >> > >> >> >> >> >> >> > >> >> >> >> >> >> > >> >> >> >> >> >> >> On Friday, 19 September 2014, 23:09, Romain Manni-Bucau >> >> >> >> >> >> > <[email protected]> wrote: >> >> >> >> >> >> >> > Hi >> >> >> >> >> >> >> >> >> >> >> >> >> >> basically the scope will be the one of the observing >> bean. >> >> >> >> >> >> >> There >> >> >> >> >> >> >> is >> >> >> >> >> >> >> no >> >> >> >> >> >> >> filter by scope in notification triggering. >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> Romain Manni-Bucau >> >> >> >> >> >> >> Twitter: @rmannibucau >> >> >> >> >> >> >> Blog: http://rmannibucau.wordpress.com/ >> >> >> >> >> >> >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> >> >> >> >> >> >> Github: https://github.com/rmannibucau >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> 2014-09-19 22:00 GMT+02:00 Lars-Fredrik Smedberg >> >> >> >> >> >> > <[email protected]>: >> >> >> >> >> >> >>> Hi! >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> When firing an CDI-Event, beans in what scope will be >> >> >> >> >> >> >>> able >> >> >> >> >> >> >>> to >> >> >> >> >> >> >>> @Observe >> >> >> >> >> >> > it? >> >> >> >> >> >> >>> Is it @ApplicationScoped, @SessionScoped belonging to >> >> >> >> >> >> >>> the >> >> >> >> >> >> >>> same >> >> >> >> >> >> >>> session >> >> >> >> >> >> > as >> >> >> >> >> >> >>> the one it was fired from and @RequestScoped >> belonging >> >> >> >> >> >> >>> to >> >> >> >> >> >> >>> the >> >> >> >> >> >> >>> same >> >> >> >> >> >> > thread >> >> >> >> >> >> >> as >> >> >> >> >> >> >>> the one it was fired from? (We do not use any JSF and >> >> >> >> >> >> > @ConversationScoped >> >> >> >> >> >> >>> beans). >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> Could someone clarify this and if possible point to >> some >> >> >> >> >> >> >>> specs >> >> >> >> >> >> >>> and >> >> >> >> >> >> > chapters >> >> >> >> >> >> >>> for me to read about it in more detail? I did look in >> >> >> >> >> >> >>> JSR299 >> >> >> >> >> >> >>> but >> >> >> >> >> >> >>> I >> >> >> >> >> >> > might >> >> >> >> >> >> >>> have overlooked it. >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> Thanks >> >> >> >> >> >> >>> Lars-Fredrik >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> -- >> >> >> >> >> >> >>> Med vänlig hälsning / Best regards >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> Lars-Fredrik Smedberg >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> STATEMENT OF CONFIDENTIALITY: >> >> >> >> >> >> >>> The information contained in this electronic message >> and >> >> >> >> >> >> >>> any >> >> >> >> >> >> >>> attachments to this message are intended for the >> >> >> >> >> >> >>> exclusive >> >> >> >> >> >> >>> use >> >> >> >> >> >> >>> of >> >> >> >> >> >> >>> the >> >> >> >> >> >> >>> address(es) and may contain confidential or >> privileged >> >> >> >> >> >> >>> information. >> >> >> >> >> >> >>> If >> >> >> >> >> >> >>> you are not the intended recipient, please notify >> >> >> >> >> >> >>> Lars-Fredrik >> >> >> >> >> >> > Smedberg >> >> >> >> >> >> >>> immediately at [email protected], and destroy all >> >> >> >> >> >> >>> copies >> >> >> >> >> >> >>> of >> >> >> >> >> >> >>> this >> >> >> >> >> >> >>> message and any attachments. >> >> >> >> >> >> >> >> >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > >> >> >> >> >> > -- >> >> >> >> >> > Med vänlig hälsning / Best regards >> >> >> >> >> > >> >> >> >> >> > Lars-Fredrik Smedberg >> >> >> >> >> > >> >> >> >> >> > STATEMENT OF CONFIDENTIALITY: >> >> >> >> >> > The information contained in this electronic message and any >> >> >> >> >> > attachments to this message are intended for the exclusive >> use >> >> >> >> >> > of >> >> >> >> >> > the >> >> >> >> >> > address(es) and may contain confidential or privileged >> >> >> >> >> > information. >> >> >> >> >> > If >> >> >> >> >> > you are not the intended recipient, please notify >> Lars-Fredrik >> >> >> >> >> > Smedberg >> >> >> >> >> > immediately at [email protected], and destroy all copies >> of >> >> >> >> >> > this >> >> >> >> >> > message and any attachments. >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > >> >> >> >> > -- >> >> >> >> > Med vänlig hälsning / Best regards >> >> >> >> > >> >> >> >> > Lars-Fredrik Smedberg >> >> >> >> > >> >> >> >> > STATEMENT OF CONFIDENTIALITY: >> >> >> >> > The information contained in this electronic message and any >> >> >> >> > attachments to this message are intended for the exclusive use >> of >> >> >> >> > the >> >> >> >> > address(es) and may contain confidential or privileged >> >> >> >> > information. >> >> >> >> > If >> >> >> >> > you are not the intended recipient, please notify Lars-Fredrik >> >> >> >> > Smedberg >> >> >> >> > immediately at [email protected], and destroy all copies of >> this >> >> >> >> > message and any attachments. >> >> >> > >> >> >> > >> >> >> > >> >> >> > >> >> >> > -- >> >> >> > Med vänlig hälsning / Best regards >> >> >> > >> >> >> > Lars-Fredrik Smedberg >> >> >> > >> >> >> > STATEMENT OF CONFIDENTIALITY: >> >> >> > The information contained in this electronic message and any >> >> >> > attachments to this message are intended for the exclusive use of >> the >> >> >> > address(es) and may contain confidential or privileged >> information. >> >> >> > If >> >> >> > you are not the intended recipient, please notify Lars-Fredrik >> >> >> > Smedberg >> >> >> > immediately at [email protected], and destroy all copies of this >> >> >> > message and any attachments. >> >> > >> >> > >> >> > >> >> > >> >> > -- >> >> > Med vänlig hälsning / Best regards >> >> > >> >> > Lars-Fredrik Smedberg >> >> > >> >> > STATEMENT OF CONFIDENTIALITY: >> >> > The information contained in this electronic message and any >> >> > attachments to this message are intended for the exclusive use of the >> >> > address(es) and may contain confidential or privileged information. >> If >> >> > you are not the intended recipient, please notify Lars-Fredrik >> Smedberg >> >> > immediately at [email protected], and destroy all copies of this >> >> > message and any attachments. >> > >> > >> > >> > >> > -- >> > Med vänlig hälsning / Best regards >> > >> > Lars-Fredrik Smedberg >> > >> > STATEMENT OF CONFIDENTIALITY: >> > The information contained in this electronic message and any >> > attachments to this message are intended for the exclusive use of the >> > address(es) and may contain confidential or privileged information. If >> > you are not the intended recipient, please notify Lars-Fredrik Smedberg >> > immediately at [email protected], and destroy all copies of this >> > message and any attachments. >> > > > > -- > Med vänlig hälsning / Best regards > > Lars-Fredrik Smedberg > > STATEMENT OF CONFIDENTIALITY: > The information contained in this electronic message and any > attachments to this message are intended for the exclusive use of the > address(es) and may contain confidential or privileged information. If > you are not the intended recipient, please notify Lars-Fredrik Smedberg > immediately at [email protected], and destroy all copies of this > message and any attachments. >
