2

WSS 3.0 でタイマー ジョブを作成しようとしています。私のタイマー ジョブは、XML またはデータベースに保存されている GUID を使用して、SPsite、SPWeb、SPDocumentLibrary (または画像ライブラリ) のオブジェクトを作成します。その後、それらのドキュメントを削除します。

だから私の質問は:私の SPJobLockType 'None' または 'Job' または 'ContentDatabase' は理想的には何ですか?? 以下は、タイマージョブに関するいくつかの記事を読んだ後の私の理解です。私はSharePointを初めて使用するので、どこか間違っている場合は修正してください

  1. 「なし」を使用すると、ジョブはファーム内の各サーバーで実行されます。本当に必要ですか?私の仕事はドキュメントの変更/削除のみであるためです (タイマー ジョブを使用してコンテンツ データベースのみを変更しています。間違っている場合は修正してください)。

  2. ロックタイプ 'Job' を使用すると、ジョブはジョブ作成コードが実行されるサーバーでのみ実行されます.しかし、それは私の要件を満たすことができます(そう思うが、間違っている場合は修正してください).

  3. ContentDatabase LockType についてこの記事を読みました..それは言う

要するに、これはジョブ 1 とほぼ同じです。つまり、1 つのサーバーのみを実行するということです..しかし..Pet​​er が Help needed with custom timerjob in SharePoint 2007 で見つけたように、ジョブは、WebApplication が関連付けられている ContentDatabase ごとに実行されます。 . もう 1 つの (非常に厄介な) 事実は、次のコンテンツ データベースでいつ実行されるか予測できないことです。

ご意見/ご提案をお願いします。

4

1 に答える 1

4

アヌープ、

あなたが説明している「スイープ」タイプのタイマージョブはかなり一般的なものであり、私はさまざまなプロジェクトのために自分でそれらのいくつかを書きました. このタイプのタイマー ジョブでは、一連のサイト、Web、またはリストを処理して、何らかのメンテナンスを実行します。通常、一度に 1 つのサイト/Web/リストを処理するのが最も簡単であり、実行されるタスクは、最大速度で実行する必要があるタイプ (つまり、同時/マルチスレッド処理モデルを必要とするもの) ではありません。すぐに完了します)。

この種のシナリオでは、通常、"Job" の SPJobLockType を使用するようにタイマー ジョブを作成しました。ご指摘のとおり、これにより、ファーム内で任意の時点でタイマー ジョブのインスタンスが 1 つだけ実行されるようになります。これにより、複数のインスタンスが "None" の SPJobLockType で実行された場合に発生する衝突が回避されます。また、"ContentDatabase" の SPJobLockType に関連付けられている操作の紛らわしい (少なくとも私は紛らわしいと思います) メカニズムも回避されます。

これは、私が作成して CodePlex に投稿したタイマー ジョブへのリンクです。説明していたのと同じタイプのスイープを (少し高いレベルで) 実行します: http://blobcachefarmflush.codeplex.com/SourceControl/changeset/view/53851#797787。タイマー ジョブのインスタンスは、次のコード行で FeatureReceiver に作成されます。

BlobCacheFarmFlushTimerJob newJob = new BlobCacheFarmFlushTimerJob(jobName, housingWebApp, null, SPJobLockType.Job);

あなたが書いたことに対する私の理解に基づいて、「ジョブ」の SPJobLockType が適切だと思います。ジョブのインスタンスが一度に 1 つだけ実行されるようにする必要があります (同じジョブの 2 つ以上のインスタンスが同じ SPSite を処理しようとするのを防ぐため)。

それが役立つことを願っています!

于 2009-08-21T13:50:39.247 に答える