I was somehow certain that only one instance could pick up a job in the first 
place! You basically run a single instance for the job queuing and that works 
okay?

I notice you have a separated didFinish and finishInit call set there far later 
than mine.

I figure I’m loading before the properties are available. Perhaps a property 
flag triggers something that causes my server issue.

I see a shared instance - okay. And yes, mine gets jobs and those send email 
okay right now…

My framework principal could not be more simple - it sets up in the static and 
provides EO support but it does not have a finishInit Override…I’m not sure 
about the shared instance…I don’t seem to be setting that right now...

In the app main() I set this class up as soon as possible, the other places to 
initialize further down the line, seems to crap out on my server for reasons I 
cannot figure.

public static void main(String[] argv) {
        principal = new TruAnonSchedulerServiceFrameworkPrincipal();

I believe I keep the principal around to keep it in memory, but I’d suppose 
this would be done if I had set the shared instance like you did.

I’d like to clean this up, but I’m worried that you use only one instance!

I thought this EOF would provide a lock so the cluster would handle the queue 
whenever an instance got a chance — but no duplicate emails.

Is this not the case? This framework is really for the cron? Not as a singular 
job queue?



> On Feb 16, 2025, at 9:07 AM, Samuel Pelletier <sam...@samkar.com> wrote:
> 
> I do not have startup problems and use these properties to disable job by 
> default and only start then on the designed instance:
> 
> er.quartzscheduler.schedulerServiceToLaunch=true
> er.quartzscheduler.triggersAutomaticallyPaused=true
> 
> On the instance that should run the tasks I set  
> er.quartzscheduler.triggersAutomaticallyPaused=false
> 
> This cause Quartz to load but no task are started, The is a component in the 
> frameworks to see the current scheduling state and individual task schedule 
> at runtime you can put in your app: <wo:ERQSJobInformations/>.
> 
> Havi you implemented a ERQSSchedulerServiceFrameworkPrincipal derived class 
> as explained in the readme file and call the initializer as described in the 
> readme ?
> 
> * Create your own framework principal and implement the methods: * 
> * 
>     • getListOfJobDescription that is called by the job supervisor to know 
> the list of jobs that must be handled by the Quartz scheduler. * 
>     • newEditingContext() called when a job needs a new ec * 
>     • newEditingContext(final EOObjectStore parent) called when a job needs a 
> new ec * 
> * Read more {@link 
> er.quartzscheduler.util.ERQSSchedulerServiceFrameworkPrincipal#newEditingContext()}
>  * * 
> 
> Here is my code for that. ScheduledJob is my EOEntity use to store task 
> schedule.
> 
> In Application.java...
> 
> @Override
> public void didFinishLaunching() {
> super.didFinishLaunching();
>     new SchedulerPrincipal().finishInitialization();
> }
> 
> public class SchedulerPrincipal extends 
> ERQSSchedulerServiceFrameworkPrincipal {
> EOEditingContext ec = null;
> NSArray<? extends ERQSJobDescription> jobs = null;
> static 
> {
>   setUpFrameworkPrincipalClass(SchedulerPrincipal.class);
> }
> @Override
> public void finishInitialization() {
> super.finishInitialization();
> ERQSSchedulerServiceFrameworkPrincipal.setSharedInstance(this);
> }
> @Override
> protected void initialize() {
> super.initialize();
> }
> @Override
> public NSArray<? extends ERQSJobDescription> 
> getListOfJobDescription(EOEditingContext ec) {
> this.ec = ec;
> jobs = ScheduledJob.fetchAllScheduledJobs(ec);
> return jobs; 
> }
> 
> @Override
> public EOEditingContext newEditingContext() {
> return ERXEC.newEditingContext(); //?
> }
> 
> @Override
> public EOEditingContext newEditingContext(EOObjectStore parent) {
> return ERXEC.newEditingContext(parent); //?
> }
> 
> }
> 
> Samuel
> 
> 
> 
>> Le 15 févr. 2025 à 23:55, Jesse Tayler <jtay...@oeinc.com> a écrit :
>> 
>> Thanks, I seem to have found that by initializing Quartz in my Applicaiton 
>> main(), very early even — I have it working but I GET TWO EMAILS! I have two 
>> instances and they both send the same notifications. Grrr...
>> 
>> I was sure I read code that was locking the Database and I figured a date or 
>> something was being used to prevent that in a cluster? 
>> 
>> I also notice that I do NOT seem to have control over properties? Such as 
>> turning it on/off 
>> 
>> er.quartzscheduler.schedulerServiceToLaunch=true
>> 
>> Vs false seems to have no effect.
>> 
>> I have to spark Quartz up by hand, in my main() and that’s odd — 
>> 
>> Something is afoot!
>> 
>> 
>> 
>>> On Feb 15, 2025, at 11:43 PM, Samuel Pelletier <sam...@samkar.com> wrote:
>>> 
>>> Hi Jesse,
>>> 
>>> I would try to set the main log level to debug and look at the entries... 
>>> There is maybe some hints there.
>>> 
>>> In WOApplication, the code will print uncatched exception to stderr, make 
>>> sure you capture this output.
>>> /*  556 */                 NSLog.err.appendln((Object)("A fatal exception 
>>> occurred: " + throwable.getMessage()));
>>> 
>>> It appears like this in debug console when I trigger an IllegalAccessError 
>>> in a framework didFinishInitialization() handler.
>>> févr. 15 23:27:43 AppName[2325] WARN  NSLog  - A fatal exception occurred: 
>>> java.lang.IllegalAccessError
>>> Exception stock trace printed here
>>> 
>>> I have no idea where these 2 lines come from:
>>>> Terminating Session Instance
>>>> New Session Instance
>>> 
>>> Hope this can help.
>>> 
>>> Regards,
>>> 
>>> Samuel
>>> 
>>> 
>>>> Le 14 févr. 2025 à 18:00, Jesse Tayler <jtay...@oeinc.com> a écrit :
>>>> 
>>>> I have the scheduler working but somehow on production, (which is in a 
>>>> container) it simply craps out seemingly right around the time Quartz 
>>>> rolls in.
>>>> 
>>>> So the app starts up and connects to RDBMS as normal. 
>>>> 
>>>> A few seconds in, around the time I would expect Quartz to load up and 
>>>> query- it dies.
>>>> 
>>>> But there’s no error, it seems like the app was asked to shut down?
>>>> 
>>>> A watchdog?
>>>> 
>>>> Too much RAM? 
>>>> 
>>>> Feb 14 17:10:07 TruAnon[2002] DEBUG NSLog  - 0 row(s) processed
>>>> Feb 14 17:10:07 TruAnon[2002] DEBUG NSLog  -  === Commit Internal 
>>>> Transaction
>>>> Terminating Session Instance
>>>> New Session Instance
>>>> APPLICATION SHUTDOWN SEQUENCE COMPLETE
>>>> 
>>>> Boom
>>>> 
>>>> It’s dead and gone.
>>>> 
>>>> Any idea how a WO app can gracefully die like that without any error?
>>>> 
>>>> 
>>> 
>> 
> 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to