On 02/23/2012 05:23 PM, Laszlo Hornyak wrote:
> 
> ----- Original Message -----
>> From: "Yair Zaslavsky" <[email protected]>
>> To: "Laszlo Hornyak" <[email protected]>
>> Cc: [email protected]
>> Sent: Thursday, February 23, 2012 1:31:03 PM
>> Subject: Re: [Engine-devel] [backend] a little confusion about the quartz 
>> jobs
>>
>> On 02/14/2012 06:49 PM, Laszlo Hornyak wrote:
>>>
>>>
>>> ----- Original Message -----
>>>> From: "Yair Zaslavsky" <[email protected]>
>>>> To: [email protected]
>>>> Sent: Tuesday, February 14, 2012 2:01:41 PM
>>>> Subject: Re: [Engine-devel] [backend] a little confusion about the
>>>> quartz jobs
>>>>
>>>> On 02/14/2012 02:21 PM, Mike Kolesnik wrote:
>>>>>> hi,
>>>>>>
>>>>>> I was playing with the quartz jobs in the backend and I thought
>>>>>> this
>>>>>> is an area where some simplification and/or cleanup would be
>>>>>> useful.
>>>>>>
>>>>>>  - SchedulerUtil interface would be nice to hide quartz from the
>>>>>>  rest
>>>>>>  of the code, but it very rarely used, the clients are bound to
>>>>>>  it's
>>>>>>  single implementation, SchedulerUtilQuartzImpl through it's
>>>>>>  getInstance() method.
>>>>>
>>>>> I think the whole class name is misleading, since usually when I
>>>>> imagine a utils class, it's a simple class that does some menial
>>>>> work for me in static methods, and not really calls anything else
>>>>> or even has an instance.
>>>> +1
>>>
>>> Agreed, I will rename it.
>>>
>>>>>
>>>>> Maybe the class can be renamed to just Scheduler, or
>>>>> ScheduleManager which will be more precise.
>>>>>
>>>>>>  - It was designed to be a local EJB, Backend actually expects
>>>>>>  it
>>>>>>  to
>>>>>>  be injected. (this field is not used)
>>>>>>  - when scheduling a job, you call schedule...Job(Object
>>>>>>  instance,
>>>>>>  String methodName, ...) however, it is not the _methodname_
>>>>>>  that
>>>>>>  the executor will look for
>>>>>>  - instead, it will check the OnTimerMethodAnnotation on all the
>>>>>>  methods. But this annotation has everywhere the methodName as
>>>>>>  value
>>>>>>  - JobWrapper actually iterates over all the methods to find the
>>>>>>  one
>>>>>>  with the right annotation
>>>>>>
>>>>>> So a quick simplification could be:
>>>>>>  - The annotation is not needed, it could be removed
>>>>>>  - JobWrapper could just getMethod(methodName, argClasses)
>>>>>>  instead
>>>>>>  of
>>>>>>  looking for the annotation in all of the methods
>>>>>
>>>>> Sounds good, or maybe just keep the annotation and not the method
>>>>> name in the call/annotation since then if the method name changes
>>>>> it won't break and we can easily locate all jobs by searching for
>>>>> the annotation..
>> This is why the annotations were introduced in the first place, we
>> have
>> too much places in code where we rely on usage of strings and
>> reflection
>> , so if a method name gets changed, the code stops working after
>> being
>> compiled.
>> As this is the case, we should consider sticking to @OnTimer
>> annotation,
>> but maybe a proper documentation on the motivation for it should be
>> added.
> 
> I understand your decision but...
>  - the methods are usually about 5-10 lines below the schedule.*Job call, it 
> is very hard not to notice the connection
>  - for safe and easy refactoring, it could be better to pass over a callback
Callback will introduce some limitations (I don't need to tell what are
the limitations of anonymous inner classes :) )
>  - plus in the schedule.*Job call it could then be better to check if such 
> method still exists, should throw an IllegalArgumentException if not there in 
> this case we could catch the problem right at the cause, not when scheduled
That depends on what point you start scheduling - do we schedule all our
jobs on startup?

> 
>>
>>>>>
>>>>>>  - I am really not for factoryes, but if we want to separate the
>>>>>>  interface from the implementation, then probably a
>>>>>>  SchedulerUtilFactory could help here. The dummy implementation
>>>>>>  would do just the very same thing as the
>>>>>>  SchedulerUtilQuartzImpl.getInstance()
>>>>>>  - I would remove the reference to SchedulerUtil from Backend as
>>>>>>  well, since it is not used. Really _should_ the Backend class
>>>>>>  do
>>>>>>  any scheduling?
>>>>>
>>>>> Backend does schedule at least one job in it's Initialize()
>>>>> method..
>>>> Yes, we have the DbUsers cache manager that performs periodic
>>>> checks
>>>> for
>>>> db users against AD/IPA.
>>>> This scheduler should start upon @PostConstruct (or any logical
>>>> equivalent).
>>>>
>>>
>>> Yes but I am not sure this should happen right there. All the other
>>> service installs it's own jobs, so maybe SessionDataContainer
>>> should do so as well. It would look more consistent.
>>>
>>>>> Maybe the class should be injected, but I don't know if that
>>>>> happens so maybe that's why it's unused.
>>>>>
>>>>>>
>>>>>> Please share your thoughts.
>>>>>>
>>>>>> Thank you,
>>>>>> Laszlo
>>>>>> _______________________________________________
>>>>>> Engine-devel mailing list
>>>>>> [email protected]
>>>>>> http://lists.ovirt.org/mailman/listinfo/engine-devel
>>>>>>
>>>>> _______________________________________________
>>>>> Engine-devel mailing list
>>>>> [email protected]
>>>>> http://lists.ovirt.org/mailman/listinfo/engine-devel
>>>>
>>>> _______________________________________________
>>>> Engine-devel mailing list
>>>> [email protected]
>>>> http://lists.ovirt.org/mailman/listinfo/engine-devel
>>>>
>>
>>

_______________________________________________
Engine-devel mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-devel

Reply via email to