You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@airavata.apache.org by Lahiru Gunathilake <gl...@gmail.com> on 2011/09/16 19:06:36 UTC
Why parsing unnecessary Object to all the methods in Subject
interface - GFac core
Hi Devs,
I did a quick review of gfac architecture, while doing that I had a feeling
that gfac-core notification implementation is having unnecessary complexity.
I noticed following things.
It has a base interface called Subject which is expecting Ojbect to most of
the methods and it never used.
Then ExecutionContext has a Notifier as a member and it has set of
Notifiable object and each notifiable has again Notifier (workflow-tracking
Notifier ojbect) objects.
I think class naming is very confuse when someone look in to the code
because there are two type of Notifier objects, I think we need to change
the class names...
Regards
Lahiru
--
System Analyst Programmer
PTI Lab
Indiana University
Re: Why parsing unnecessary Object to all the methods in Subject
interface - GFac core
Posted by Lahiru Gunathilake <gl...@gmail.com>.
Hi Patnachai,
Thanks for the nice explanation, I do not have any issues with this
design(It looks good) but I have seen some unnecessary things in the code !
I will change the bad naming of classes in GFac, I prefer using the objects
parse in notifier methods so that we know who sent these notificaition ( we
always parse "this" as the input for oject). i will try to change the
notification message.
Regards
Lahiru
On Fri, Sep 16, 2011 at 2:27 PM, Patanachai Tangchaisin <
ptangcha@umail.iu.edu> wrote:
> On 09/16/2011 01:06 PM, Lahiru Gunathilake wrote:
>
>> Hi Devs,
>>
>> I did a quick review of gfac architecture, while doing that I had a
>> feeling
>> that gfac-core notification implementation is having unnecessary
>> complexity.
>> I noticed following things.
>>
>>
>> It has a base interface called Subject which is expecting Ojbect to most
>> of
>> the methods and it never used.
>>
>> Then ExecutionContext has a Notifier as a member and it has set of
>> Notifiable object and each notifiable has again Notifier
>> (workflow-tracking
>> Notifier ojbect) objects.
>>
>> I think class naming is very confuse when someone look in to the code
>> because there are two type of Notifier objects, I think we need to change
>> the class names...
>>
>> Regards
>> Lahiru
>>
>>
>>
>> Hi Lahiru,
>
> I think the reason is "Notifier" is a common name.
> And yes, you can change it to GfacNotifiable or GfacNotifier or anything
> else.
>
> For GFAC architecture, let's assume that it doesn't have Workflow-tracking
> notifier implementation.
> Notification implementation in GFAC is designed base on "Observer" pattern.
> - "Subject" is a topic that can be used in the system.
> - "Notifiable" is one who is notified.
> - "Notifier" is one who send out notification to whoever listens
> (Notifiable).
>
> Like publisher/subscriber, so there can be multiple Notifiables for one
> Notifier (Multiple subscribers listens to one publisher) or One Notifiable
> can listen to multiple Notifier (a subscriber subscribes to multiple
> publishers).
>
> For example,
> - Subject can be about startOfExecution, fileTransferDone, etc.
> - SystemOutNotifiable is a Notifiable that will write everything that it
> hears (from Notifier) to System.out.
> - SystemOutNotifier can write down everything that it is going to send out
> to System.out and also it might want to change messages before sending out
> to listeners by adding its name in front of the messages.
> If SystemOutNotifiable registers itself with SystemOutNotifier, then for a
> notification there will be 2 stand output one from Notifier (without
> modification) and one from Notifiable (with the Notifier's name in front of
> the message).
>
> Right now there is only one implementation of Notifier (DefaultNotifier).
> Its job is simple, send out whatever it gets from invoker (GFAC) to
> Notifiables who register with it.
>
> So, back to Workflow-tracking Notifiable. From the GFAC point of view, it
> doesn't know (and care) what Notifiables will do when they are notified.
> Actually, it doesn't either know what Notifier will do. It just gets
> Notifier object and send notification out according to Subject when it
> needs. In case of WorkflowTrackingNotifiable, its job is to listen to a
> notification (Subject) sent out from GFAC and send this notification out in
> the WorkflowTracking context by using Notifier (in WorkflowTracking
> package).
> It is possible to implement WorkflowTracking context as a GFAC's Notifier.
> For example, it converts all Gfac notification context to WorkflowTracking
> context and send this context out to whoever listens (Notifiables).
>
> About, "Object" in the Subject is used to identify GFAC components who send
> out the notification e.g. Provider, Scheduler, etc. I think we can remove it
> if it is not used. (Notifiable don't want to know which components send out
> the message). It is overly designed.
>
> I don't know if this is too complex or not. I think we can simplify it if
> we want or change to other design pattern. For example, if we just want a
> simpler interface for Subject, we can remove unnecessary method and add more
> specific Subject class for each GFAC Components or Abstract class with
> intercept and interpret a message before sent out.
>
> Regards,
> Patanachai Tangchaisin
>
--
System Analyst Programmer
PTI Lab
Indiana University
Re: Why parsing unnecessary Object to all the methods in Subject
interface - GFac core
Posted by Patanachai Tangchaisin <pt...@umail.iu.edu>.
On 09/16/2011 01:06 PM, Lahiru Gunathilake wrote:
> Hi Devs,
>
> I did a quick review of gfac architecture, while doing that I had a feeling
> that gfac-core notification implementation is having unnecessary complexity.
> I noticed following things.
>
>
> It has a base interface called Subject which is expecting Ojbect to most of
> the methods and it never used.
>
> Then ExecutionContext has a Notifier as a member and it has set of
> Notifiable object and each notifiable has again Notifier (workflow-tracking
> Notifier ojbect) objects.
>
> I think class naming is very confuse when someone look in to the code
> because there are two type of Notifier objects, I think we need to change
> the class names...
>
> Regards
> Lahiru
>
>
>
Hi Lahiru,
I think the reason is "Notifier" is a common name.
And yes, you can change it to GfacNotifiable or GfacNotifier or anything
else.
For GFAC architecture, let's assume that it doesn't have
Workflow-tracking notifier implementation.
Notification implementation in GFAC is designed base on "Observer" pattern.
- "Subject" is a topic that can be used in the system.
- "Notifiable" is one who is notified.
- "Notifier" is one who send out notification to whoever listens
(Notifiable).
Like publisher/subscriber, so there can be multiple Notifiables for one
Notifier (Multiple subscribers listens to one publisher) or One
Notifiable can listen to multiple Notifier (a subscriber subscribes to
multiple publishers).
For example,
- Subject can be about startOfExecution, fileTransferDone, etc.
- SystemOutNotifiable is a Notifiable that will write everything that it
hears (from Notifier) to System.out.
- SystemOutNotifier can write down everything that it is going to send
out to System.out and also it might want to change messages before
sending out to listeners by adding its name in front of the messages.
If SystemOutNotifiable registers itself with SystemOutNotifier, then for
a notification there will be 2 stand output one from Notifier (without
modification) and one from Notifiable (with the Notifier's name in front
of the message).
Right now there is only one implementation of Notifier
(DefaultNotifier). Its job is simple, send out whatever it gets from
invoker (GFAC) to Notifiables who register with it.
So, back to Workflow-tracking Notifiable. From the GFAC point of view,
it doesn't know (and care) what Notifiables will do when they are
notified. Actually, it doesn't either know what Notifier will do. It
just gets Notifier object and send notification out according to Subject
when it needs. In case of WorkflowTrackingNotifiable, its job is to
listen to a notification (Subject) sent out from GFAC and send this
notification out in the WorkflowTracking context by using Notifier (in
WorkflowTracking package).
It is possible to implement WorkflowTracking context as a GFAC's
Notifier. For example, it converts all Gfac notification context to
WorkflowTracking context and send this context out to whoever listens
(Notifiables).
About, "Object" in the Subject is used to identify GFAC components who
send out the notification e.g. Provider, Scheduler, etc. I think we can
remove it if it is not used. (Notifiable don't want to know which
components send out the message). It is overly designed.
I don't know if this is too complex or not. I think we can simplify it
if we want or change to other design pattern. For example, if we just
want a simpler interface for Subject, we can remove unnecessary method
and add more specific Subject class for each GFAC Components or Abstract
class with intercept and interpret a message before sent out.
Regards,
Patanachai Tangchaisin