Next in thread → Next in month →

RE: [wsrp-coord] Questions about events

From
Tamari, Yossi <>
Date
2003-08-13T08:12:37+00:00
ID
Thread
RE: [wsrp-coord] Questions about events
-----Original Message-----
From: Michael Freedman 
  [mailto:]
Sent: Wednesday, August 13, 
  2003 1:45 AM
To: 
Subject: 
  Re: [wsrp-coord] Questions about events

  
"Supporting properties" is an extension/upgrade to our existing property 
  mechanism that allows portlets to send/receive data values between the 
  consumer and other portlets.  I.e. Rather then a portlets data depending 
  on either its current model state or values passed in the request from the 
  client, "supporting properties" allows a portlet to in addition depend on the 
  state of another portlet.  This is commonly used to orient  a set of 
  related portlets within a page.  For example I may have various news 
  syndication portlets on a page that I would like to display current articles 
  based on a new category I can set in another portlet -- i.e. one portlet to 
  choose the focus while the other portlets display article/data constrained to 
  this focus.  

As Yossi has pointed out any general purpose event 
  mechanism we define should be capable of also supporting transmitting portlet 
  state.  There are reasons however to represent/model this function 
  independently:
    a) better fit for the user case(s).  The 
  above scenario not only requires the ability to communicate new values when 
  state changes but also initial values.  For example the portlet that sets 
  the focus likely has a customization property for setting the default topic. 
   Its more natural to ask for these initial values directly vs. sending an 
  event.  
    b) provides a simpler programming/design model. 
   Events typically represent actions [verbs].  Its certainly possible 
  to represent data [changes] as actions.  Choosing not to reduces the 
  portlet developers design decisions to merely what data do I want to expose 
  vs. what events/actions will I communicate.  This has an important impact 
  on the page developer/end user/receiving portlet developer when they are 
  wiring based on state as the firing portlet will likely have many events that 
  carry similar state.  Mapping data value X to data value Y is a simpler 
  model for such users then Mapping data value X from event M and data value X 
  from event Q and data value X from event W to data value Y.  Basically, 
  "supporting properties" constrains portlet developers [makes it simpler for 
  them to design their portlets] and results in simpler systems 
  overall.
[Yossi Tamari] I have a few comments regarding this:
First of 
  all, as you said at the end of the message, the properties a portlet 
  exposes for coordination is completely different than the properties 
  it exposes for customization. Therefore the initial state is as much a 
  problem with properties as it is with events.
Also, as you said bellow, 
  normally changes will be generated as a 
  result of a user interaction. User interaction is much more naturally 
  described by a verb (event) than by the state change that it causes to a 
  specific portlet. In other words it makes more sense to send an event 
  ItemSelected("umbrella"), than to expose a change to the internal property 
  MyThirdSelectedItemInTheThirdPaneOfTheForm with the value "umbrella". (In 
  other words, in order to make sense, exposing a portlet properties will 
  probably require the portlet to map each of its properties to a nice external 
  name. We don't even know if this portlet has a property for this at all - it 
  may be that when "umbrella" is selected, the only thing that changes is the 
  navigational state (or simply a form is generated with "umbrella" in one of 
  the fields.
Finally, the complex mapping you describe can be 
  needed in the property model as well, since it is very common to require two 
  properties to need to change together (like SelectedItem and 
  Price).

That all being said, though I prefer [and think 
  many portlets will prefer] the state interchange model, its okay if we decide 
  to support both.  I.e. the premise that there are things that are best 
  represented exclusively as actions/verbs. However, if we support both I would 
  expect it to be differentiated.  We would recommend that portlets not use 
  Events to model state interchange/data changes rather events would be used to 
  communicate all other logical portlet actions.
[Yossi 
  Tamari] Of course I disagree with this recommendation. Events should be 
  used to model user interactions. State changes should be used to model 
  logical state changes that have some application logic associated with them. 
  This means state changes are better for more complex, strongly tied, portlet 
  applications, while events are for more loose, UI based 
  coordination. 

As for your questions:
1. Agree 
  with Yossi, namespace:name.
2. Well its the name of the event + associated 
  data.  The data is specified by the event.  It has the same 
  generality as our ModelDescriptions -- i.e. can represent types [its not 
  attribute/value].
3. Actually, anything can send an event.  The most 
  likely culprits are portlets and the consumer itself.  Basically an event 
  is as stated in 2: a namespace:name + data.  As we say later that a 
  broker sits between the sender/receiver we don't ultimately care how many 
  different channels/formats the broker can listen on.  We, obviously will 
  define the WSRP protocol for sending an event from the portlet to the broker. 
   Namespacing will likely be a problem in this system as it will be 
  difficult to guarantee uniqueness.  We may have to define a convention 
  ala Java, namely company.producer.
4. Actually, any part of the 
  consumer/application can receive events.  Again, most typically its other 
  portlets or the consumer itself.  We, obviously, will define the WSRP 
  protocol for posting an event from a broker to a portlet. 
5. No, they are 
  only aware of events.  A event can optionally carry data that publishes a 
  service [port] for the receiver to use for P2P comunication. 
[Yossi 
  Tamari] There are other reasons a receiver may want to know who the 
  sender is. I agree that we can leave this to portlets to define on their own, 
  but there may be value to defining this as an optional parameter in the 
  protocol.  
6. We will likely have to define 
  mechanisms for both synchronous and asynchronous sending of events from 
  portlets.  We will likely only support portlets receiving synchronous 
  events.
7. Leaving out for the moment out-of-band/asynch events, the scope 
  is "Before Rendering".  Event processing, like actions will have to 
  complete before any portlet rendering occurs.  As an event change is 
  typically kicked off as a result of an action [though a consumer will have the 
  rights to send an event when no action has occurred] the scope can largely be 
  thought of as "Action".  This becomes even more true as we have to deal 
  with action/event redirect.  We certainly want an action to be able to 
  return an event & signify a redirect -- with the likely behavior being 
  processes the event chain then do the redirect.  Its unclear whether we 
  want event processors to be able to return their own redirects [I hope 
  not].
8. There is an event broker.  For in-band events the consumer 
  [not the producer] knows the identity of the broker.  For out-of-band 
  events the producer will need to know this identity [or at least a proxy for 
  it.  At a minimum brokers will be required to dispatch posted events to 
  portlets that have published that they want to receive that event [by name]. 
   Many brokers will implement/support a mapping system.  I.e. a 
  portlet publishes: events it sends, events it receives [by name(space)], and 
   mappable events.  Mappable events describe a logical event the 
  portlet would like to receive and requires the broker support 
  defining/dispatching from one event structure to the other.
9. Yes, just 
  like you described.
10. Because there is a broker it is Pub/Sub.  To 
  handle the case where the receiving portlet knows the particular event it 
  wants to receive, then Yossi's namespace wildcarding seems interesting though 
  we will have to balance this with worries that portlets will use this too 
  liberally and cause performance problems.
11. Yes, its part of the "portlet 
  description".  We will have to decide whether to carry it in 
  PortletDescription  i.e. getPortletDecription()/getServiceDescription() 
  or via a separate call.  If the former we likely would want to pass a 
  boolean indicating if we want the information.  If the later the 
  PortletDescription would likely carry a boolean indicating such information 
  exists.
12. One of two ways:  either it publishes explicit events it 
  wants to receive or it publishes logical [mappable] events.  

One 
  question you don't ask about is authorization/security.  Its easy enough 
  for a set of cooperating portlets within a single producer to restrict access 
  to interchanged data by merely not carrying any data in the event.  But 
  how does this work when the porlets aren't in the same producer?  The 
  downside of the broker model is the sender has no control over the who are the 
  receipients of its information.  Will we need to build some support 
  here?
[Yossi Tamari] No. If a sender wants too have security on its 
  payload, it should use encryption on it and make sure only the intended 
  receivers have the key. This is outside of our 
  scope.

And finally, to keep the state interchange model 
  in sync let we reask your questions:

  
    
Are published state categorized? 
    
      
Not explicitly.  State is implicitly 
      namespaced by the producer/portlet that publishes it.

    
Is in the payload of an interchanged state? 
    
      
Its a property list.  GetPortletProperties 
      gets the initial state from the portlet. A portlet posts updated 
      properties by returning a list from an action or a setPortletProperties 
      call.  Likewise a portlet receives updated properties via the 
      setProperties call.  I.e. setProperty is passed some new values that 
      update the protlets internal model.  A side effect of this update may 
      be to change some of the model the portlet publically publishes. 
       Hence it returns a property list so the other portlets that depend 
      on these [new] values can be notified.   

    
Who can post state? 
    
      
Portlets.  Though like events, a receipient 
      of state, doesn't know where it came from -- though its likely from 
      another portlet this is not necessarily the case.

    
Who receives and processes state? 
    
      
As with events, any part of the consumer 
      application can receive/process state.  Typically, its other 
      portlets.  

    
Are senders and receivers aware of each other? 
    
      
Typically no.  However, just as in the case 
      where events transport data we may have to concern ourselves with allowing 
      the senders to authorize the receipt of state.

    
Are state interchange synchronous or asynchronous? 
    
      
State interchange can only be synchronous. 
       If/where asynchronous communication is needed events must be 
      used.

    
What is the scope of an state interchange delivery? 
    
      
Same answer I gave for events above, namely 
      "pre-render". In this case its more suitable to use "pre-render" vs. 
      action as consumers will commonly get/transfer the initial state the first 
      time the scope [page] is accessed and then rely on actions to communicate 
      changes to this state. 

    
Is there an state interchage broker, or the producers distribute the 
    state? 
    
      
There is a state interchange broker known/managed 
      only by the consumer.

    
Do we need to support chaining state interchanges (new state as a 
    response of a setPortletProperties)? 
    
      
Yes.  And we will have to require the 
      consumer deals with cycles/loop detection.

    
What is the distribution model, P2P or Pub/Sub? 
    
      
It is Pub/Sub.  The portlet publishes its 
      "public" model.  Data interchange requires a broker that supports 
      mapping from one model to another.  A portlet doesn't listen for 
      specific data change values of other portlets.

    
How does an portlet publish what state it can supply/receive?  
    
      
Similar answer as events, its part of the portlet 
      description.  We will need to decide whether its shipped directly 
      with the portlet description or the portlet description merely indicates 
      this description is available.  

    
How does an portlet binding/receive state changes? 
    
      
The portlet merely publishes what its public model 
      is [i.e. properties that are settable].  If the consumer supports 
      data wiring the portlet will receive setPortletProperties with appropriate 
      values at the appropriate time. 

One thing we will 
  need to consider with respect to the state interchange model is whether we 
  want/need to clearly differentiate between publishes entity persistent state 
  for the purposes of allowing the consumer to implement the customization UI 
  vs. publishes entity state [be it persistent or transient] for the purposes of 
  expressing its public model in use for this state interchange mechanism. 
   I don't think an entity would want the all customization data to become 
  public from an interchange point of view merely because it defers/prefers to 
  let the consumer control this UI.  We should be able to account for this 
  easily by separating the published descriptions.  For 
  identification/security reasons we may have to also separate the  get/set 
  APIs.   

      -Mike-

Alejandro 
  Abdelnur wrote:

  I'm not sure I understand what it means support properties then, 
    could  somebody explain it to me? 

Thanks. 

Alejandro 
    

On Monday, August 11, 2003, at 01:44  AM, Tamari, Yossi wrote: 
    

    1. With name and namespace. 
2. XML. 
3. 
      What you said. 
4. What you said, but the consumer is also part of the 
      cycle, and can  do stuff. 
5. No. (Maybe we should add a parameter 
      that identifies the sender, if  we have such an identifier, listeners 
      can always ignore this). 
6. What you said. 
7. What you said. 
      
8. What you said. 
9. What you said, but the consumer can decide to 
      stop distributing  events for a request at some point (what's the 
      point, if the user  request has already timed out?). We should 
      probably define a minimum  number of cycles a consumer must respect. 
      
10. What you said. A portlet can also subscribe to an event 
      namespace,  and got all the events in this namespace. 
11. The 
      "portlet descriptor" you suggest sounds like Java. In the  
      PortletDescription. 
12. What you said. 

I like this quiz, but I 
      think it ignores the fact that there is a  group in our SC that 
      really feel we need to support properties, at  least together with 
      events. I am fine with supporting just events. 
      

    Yossi. 

-----Original Message----- 
      
From: Alejandro Abdelnur [mailto:] 
      
Sent: Friday, August 08, 2003 3:54 AM 
To:  
      
Subject: [wsrp-coord] Questions about events 

Hi there, 
      

I have the impression we are a little unorganized right now :). 
      

Following is a list of questions I think it will help us to define 
      the 
scope and some high-level characteristics of the eventing model we 
      want 
to build. Once we agree on the answers to these we can create a 
      second 
set of questions based on the answers to the first set and so 
      on. 

  1. Are events categorized? 
  2. What is in the 
      payload of an event? 
  3. Who can send events? 
  4. Who 
      receives and processes events? 
  5. Are senders and receivers 
      aware of each other? 
  6. Are events synchronous or asynchronous? 
      
  7. What is the scope of an event delivery? 
  8. Is 
      there an event broker, or the producers distribute the events? 
  
      9. Do we need to support event sequences (new events as a response 
      
     of an event processing)? 
10. What is the 
      distribution model, P2P or Pub/Sub? 
11. How an event-creator and an 
      event-listener advertise the events 
     they 
      create/produce? 
12. How does an event-listener do a binding to receive 
      events? 

My answers: 

  1. Yes, with a name. 
      
  2. String name-value pairs. 
  3. Portlets, through the 
      producer. 
  4. Portlets, through the producer. 
  5. No. 
      
  6. Synchronous, upon delivery the call is blocking until ends 
      
processing. 
  7. a user request, an event is sent and 
      processed during a single  user 
request. 
  8. Yes, the 
      consumer acts as a broker. 
  9. Yes, they broker keeps 
      distributing/receiving/distributing events 
until there are not more 
      events. 
10. Pub/Sub, using the event category name. 
11. In their 
      portlet descriptor. 
12. Mapping in the consumer (a la user categories) 
      

I hope this approach helps. 

Alejandro 

You 
      may leave a Technical Committee at any time by visiting  http://www.oasis-open.org/apps/org/workgroup/wsrp-coord/members/ 
      leave_workgroup.php 

You may leave a Technical Committee at any 
      time by visiting  http://www.oasis-open.org/apps/org/workgroup/wsrp-coord/members/ 
      leave_workgroup.php 

You may leave a Technical 
    Committee at any time by visiting http://www.oasis-open.org/apps/org/workgroup/wsrp-coord/members/leave_workgroup.php
Next in thread → Next in month →