0

Quartz.net 1.xから2.xに移行していますが、何らかの理由で、ジョブ/トリガーを作成したスケジューラーのインスタンス名が非常に重要であるように見えます...SCHED_NAMEほとんどのクォーツテーブルに列が追加されました。 apperasこれらのジョブ/トリガーを作成したゼロスレッドスケジューラインスタンスが、それらをフェッチして表示するために使用されるインスタンスとは異なる名前を持っている場合、データベースに格納されているすべてのジョブ/トリガーを取得する方法はありません...

質問をよりよく理解するために、私がクォーツをどのように使用しているかについてもう少し詳しく説明します...

ほとんどのジョブ/トリガーの作成に使用されるUIがあり、quartz.net 1.xを使用しているときに、アプリの機能領域に応じて異なる名前のゼロスレッドスケジューラのインスタンスを作成していましたが、すべてを取得するのに問題はありませんでしたこれらは、異なる名前のインスタンスによってトリガーされます。私がquartz.net2.xを使い始めたとき、UIに表示するために既存のトリガーを取得するために使用されたインスタンスとは異なる名前のインスタンスによって作成されたジョブ/トリガーは、使用時に返されません。IScheduler.GetJobDetailそのIScheduler.GetTriggersOfJobため、単一のインスタンスを使用するようにUIを変更しました。それはその問題を解決しました。

ただし、Windowsサービスもあり、このサービスは、ファイルが.NETオブジェクトによって監視されるホットフォルダーにドロップされるたびにカスタムファイルプロセッサオブジェクトをインスタンス化するFileSystemWatcherため、このファイルプロセッサオブジェクトのすべてのインスタンスでquartz.netゼロスレッドスケジューラを作成する必要があります複数のファイルが同時にドロップされる可能性があるため、およびファイルプロセッサオブジェクトの2つのインスタンスがquart.netゼロスレッドスケジューラのインスタンスを作成しようとした場合に、ドロップされたファイルを処理するジョブをスケジュールするために、一意の名前を使用します。 quartz.netで例外を引き起こす同じ名前。その結果、Windowsサービスによって作成されたこれらのジョブ/トリガーはUIで使用されるゼロスレッドスケジューラに表示されなくなり、Windowsサービスによって作成されたこれらのトリガーはUIに表示されなくなります。

とにかく、私の質問は、quartz.net 2.xのスケジューラーのインスタンス名に関係なく、データベースからすべてのジョブ/トリガーを取得する方法があります。そうでない場合、この問題を解決する方法についてのアイデアはありますか?SCHED_NAMEまた、なぜすべてのテーブルに追加されたのか、2.xでスケジューラー名が非常に重要になった理由、およびこの変更を行う背後にある考え方について、誰かが洞察を持っていますか?

編集:うわー、これを理解するために数時間を費やしました、そして(私が何かを逃していない限り)このスケジューラー名の問題のためにQuartz.net2に深刻な欠陥があるようですそしてここに理由があります...

マルチスレッドスケジューラのインスタンス名とは異なるインスタンス名を持つゼロスレッドスケジューラによって作成されたトリガーは、マルチスレッドスケジューラによって無視され、使用されるすべてのスケジューラが同じインスタンス名を持っている場合(またはQuartz.netを許可した場合)すべてのスケジューラーにデフォルトのインスタンス名を付けます)これらのスレッドで作成されたすべてのゼロスレッドスケジューラーは同じ名前で作成され、Quartzで例外が発生するため、複数の同時スレッドでトリガーを作成することは不可能になります...

4

1 に答える 1

0

私が見つけた唯一の解決策は、ゼロスレッドまたはマルチスレッドスケジューラのインスタンス名の提供を完全に諦めることです。

これにより、すべてのスケジューラー名がデフォルトにQuartzSchedulerなり、任意のスケジューラーによって作成されたすべてのジョブ/トリガーが、UIがジョブ/トリガーを表示および管理するために使用するゼロスレッドスケジューラーに表示されます...

また、複数のファイルを一度にホットフォルダーにドロップすることでホットフォルダーをテストしました。その結果、FileProcessorそれぞれが独自のゼロスレッドスケジューラを使用して複数のカスタムオブジェクトがインスタンス化され、これらすべてが同時に作成されたゼロスレッドのためにQuartzによって例外が発生することはありませんでした。同じデフォルト名を使用するスケジューラー。

スケジューラーごとに異なるインスタンス名を引き続き使用できるようにしたいと思いますが、これで問題が解決したため、許容できる解決策です。

于 2013-02-26T23:14:28.840 に答える