1

Pentaho 5.3 (SP201505) JCR フォルダーから Windows ファイル システム フォルダー (同じサーバー上、Server 2008 R2 Enterprise) にファイルを移動する Kettle ジョブを作成しました。ジョブの「移動」部分では、 [ソース ファイルの削除] オプションを選択して [ファイルのコピー]ステップを使用します。

最初に、ジョブは期待どおりに実行され、すべてのファイルがソース JCR フォルダーから宛先ファイル システム フォルダーに移動されます。

このジョブが再び実行される前に、Pentaho ユーザーは新しいファイルをソース JCR フォルダーに配置しました。ただし、次にこのジョブを実行すると、PUC 内からファイルを参照できても、ソース JCR フォルダーにファイルが表示されなくなります。

私はSpoon内からジョブを実行しています(コーディングとテスト中)。VFS プロトコルjcr-solutionを使用して、JCR フォルダー内のファイルにアクセスしています。

このジョブは、JCR フォルダへの変更を確認するために、実行するたびに何らかのリポジトリの更新を行う必要がありますか? また、必要な場合、ジョブ内でこれをどのように行うのでしょうか?

4

1 に答える 1

0

どうやら、JCR ファイル システムの複数のインスタンスは動的に一貫性がありません。

プラグインPentaho Repository Synchronizerをリバース エンジニアリングし、JCR のローカル インスタンスを更新する方法を見つけました。更新は、PDI 変換ステップUser Defined Java Classの次のコード セグメントを介して実行できます。このコードは、ファイル システムのルート URI がRootURIという名前の入力フィールドにあることを想定しています。

import org.apache.commons.vfs.FileObject;
import org.pentaho.di.core.vfs.KettleVFS;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
    try
    {
        // Get a row from the input hop.
        Object[] r=getRow();

        // Are we are done?
        if (r==null) 
        {
            // Yes.
            setOutputDone();
            return false;
        }

        // No, pick up the file system root URI from a field named RootURI.
        // RootURI example: "jcr-solution:http://admin:password@localhost:8080/pentaho!/"
        String fileName=get(Fields.In,"RootURI").getString(r);

        // Get the file system object and close it.
        FileObject jcrObject=KettleVFS.getFileObject(fileName);
        if ((jcrObject!=null)&&(jcrObject.exists()))
        {
            KettleVFS.getInstance().getFileSystemManager().closeFileSystem(jcrObject.getFileSystem());
            KettleVFS.getInstance().getFileSystemManager().getFilesCache().close();
            //System.out.println("*** JCR Refreshed ***");
        }

        return true;

    }
    catch (Exception e)
    {
        throw new KettleException(e);
    }
}

上記の解決策は私の問題を解決したようです。

于 2015-06-08T21:45:59.800 に答える