[FMW, MFT] Customizing Oracle MFT File Rename Java Callout

原文はこちら。
https://blogs.oracle.com/SOA/entry/customizing_oracle_mft_file_rename

Review and Use Case

それでは、このCustomizing MFTシリーズの前回の概要エントリをすべて理解されたことかと思うので、カスタムアクション(コールアウト)というコンポーネントを完全に理解し、Oracle MFTドキュメントの「Processing Transfers with Custom Callouts」の章にある、改行文字の変換サンプルをビルドされ、MFTエンジン内部でファイル名を変更するしくみを実装するという、別の現実世界のシナリオを作成する準備が整っているはずです。
Customizing Oracle MFT with Java Overview
https://blogs.oracle.com/SOA/entry/customizing_oracle_mft
http://orablogs-jp.blogspot.jp/2014/12/customizing-oracle-mft-with-java.html
Oracle® Fusion Middleware Using Oracle Managed File Transfer
Processing Transfers with Custom Callouts
Understanding Custom Callouts
https://docs.oracle.com/middleware/1213/mft/MFTUG/mftug_exts.htm#MFTUG4266
内部と言っているのは、ファイルをファイルシステムに書き出す、もしくはリモートFTPサーバに書き出し、配信後にファイル名を変更するユースケースと区別するためです。このユースケースは、ソースから流入するファイルの名前にタイムスタンプのような余分な文字が含まれている場合に、標準のJavaの正規表現を使って取り除くというものです。つまり、order20151011.xmlをorder.xmlに変更したり、customer12345.csvをcustomer.csvと変更します。

Components

XML Config File

ご存じのように、コールアウト・アクションにはそれぞれインターフェースを定義するXMLの設定ファイルが必要です。以下はこのサンプルの設定ファイルで、アクション名、ライブラリ名、ヘルプテキスト、デザイナで設定されるパラメータなどを定めています。このサンプルをターゲット前処理で使います。2個のパラメータ(SourceExpとReplaceWith)を使います。コールアウト設定ファイルの構成方法の詳細は前回のエントリで説明していますので、理解が不明瞭であれば再読してください。先へ進むため、とりあえずファイルを以下のリンクからダウンロードするか、お気に入りのテキストエディタに以下のXMLをコピー&ペーストして、RenameRegesp.xmlという名前で保存し、そのファイルをRenameRegespというフォルダを新規作成し保存してください。
RenameRegexp.xml
https://blogs.oracle.com/SOA/resource/mftblog/RenameRegexp.xml
<?xml version="1.0" encoding="UTF-8"?>
  <mft:Callouts xmlns:mft="http://xmlns.oracle.com/mft"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.oracle.com/mft callout.xsd ">
    <mft:Callout description="Rename Regexp" 
      helpText="File Rename with Regular Expressions"
      groupName="Target-pre" timeout="300"
      implementationClass="com.oracle.callout.sample.RenameRegexp"
      libraryName="RenameRegexp.jar" name="RenameRegexp">
    <mft:Parameter description="SourceExp" mandatory="true"
      helpText="Source Regular Expression Pattern" 
      name="SourceExp" parameterType="string"/>
    <mft:Parameter description="ReplaceWith" mandatory="true"
      helpText="ReplaceWith Regular Expression Pattern"
      name="ReplaceWith" parameterType="string"/>
   </mft:Callout>
</mft:Callouts>

Java Source Code

ご存じのように、ソース、ターゲットの前処理、後処理コールアウト用の様々なAPIがあります。この例ではターゲット前処理インターフェースを説明しています。これは以前の改行文字変換であったような、ファイルの内容を変更するものではありません。このトピックを確認したい場合には、以下のドキュメントをご覧ください。
Oracle® Fusion Middleware Using Oracle Managed File Transfer
Processing Transfers with Custom Callouts
Java Code Requirements and Tips
https://docs.oracle.com/middleware/1213/mft/MFTUG/mftug_exts.htm#MFTUG4270
このJavaクラスは、実行時にデザイナ転送アーティファクトで設定される正規表現を置換するため、2個の文字列を受け取ります。このサンプルで使われる、ファイル名変更のためのこの新しい興味深いコードは、PluginContext.getTransformedInputFileNameとPluginOutput.setNewFileNameというメソッドです。正規表現の置換は、昔からあって信頼できるString.replaceAllを使い、1行のコードで実装しています。以下がコードスニペットです。
PluginOutput out = new PluginOutput();
oldfname = pluginContext.getTransformedInputFileName() ;
newfname = getNewname(oldfname, SourceExp, ReplaceWith);
if (newfname != null && newfname.length() > 0) { 
    out.setNewFileName(newfname);
}
...
public String getNewname(String oldfname, String srcexp, String repexp) {
        return oldfname.replaceAll(srcexp, repexp);
}
RenameRegexp.javaファイルをダウンロードし、RenameRegexpフォルダ内にcom/oracle/callout/sampleという子ディレクトリを新規作成し、その中に配置してください。
RenameRegexp.java
https://blogs.oracle.com/SOA/resource/mftblog/RenameRegexp.java

Compile, Package and Install

この章では以下の環境変数が設定済みであるとします。
  • $MW_HOME :MFTがインストールされている場所
  • $JAVA_HOME : JDK7がインストールされている場所

Compile

コマンドプロンプトから以下のコマンドを実行します。
$JAVA_HOME/bin/javac -classpath $MW_HOME/mft/modules/oracle.mft_12.1.3.0/core-12.1.1.0.jar com/oracle/callout/sample/RenameRegexp.java

Package

JDKのjarコマンドを使い、javaのjarファイルを以下のように作成します。
$JAVA_HOME/bin/jar cvf RenameRegexp.jar com/oracle/callout/sample/RenameRegexp.class

Install

これは2段階で実施します。まず、jarファイルをMFTサーバのcalloutsフォルダに配置し、続いて設定XMLファイルをインポートします。以下のようにコピーコマンドを使います。ドメイン名は皆さんの環境に合わせて変更してください。
cp RenameRegexp.jar $MW_HOME/user_projects/domains/<Domain_Name>/mft/callouts/
[注意]このコールアウトを使うファイル転送のMFTエクスポートファイルがある場合、これをインポートし、以下のWESTのステップをスキップできます。

続いて、WLSTコマンドを使い、RenameRegesp.xmlファイルをインポートします。
$MW_HOME/mft/common/bin/wlst.sh
WebLogic Serverに対し、ホスト名、ポート番号、管理者の資格証明を使い接続します。
connect("weblogic", "<PASSWORD>, "t3://<host>:<port>")
WLSTのCreateCalloutコマンドで、ファイルの場所を指定します。
  createCallouts('/home/oracle/mft/callouts/RenameRegexp/RenameRegexp.xml')
listCallouts() コマンドを使って正しく設定できたことを確認します。
listCallouts()
exit() コマンドでWLSTを終了します。
exit()

Deploy a Transfer and Test

この章では、Javaの正規表現に関する知識が必要です。この実装はJavaのString.replaceAllメソッドを使用しています。外部ツールを使い、事前に作成された正規表現をテストしておくことをおすすめします。様々なツールが利用可能ですが、MFTデザイナに設定する前に正規表現をテストするためのオンラインツールとして、www.regexplanet.comはなかなかよいと思います。
RegexPlanet - Online Regular Expression (Regex) Testing and Cookbook for: Go, Haskell, Java, JavaScript, .Net, Perl, PHP, Python, Ruby, Tcl & XRegExp
http://www.regexplanet.com/
この例では、以下のパラメータ値を使ってファイルorder20151011.xmlをorder.xmlへと変換するとしましょう。
  SourceExpr:  ([A-z])\d+(.*)
  ReplaceWith: $1$2

Design and Deploy

この時点で、RenameRegexpコールアウト・アクションは転送ターゲット前処理UIに現れており、任意の転送で利用する準備が整っています。デザイナに移動し、"Rename Transfer"という転送を作成します。この転送は、"Rename FTP Source"と"Rename FTP Target"という、ソースとターゲットで構成されています。FTP埋込みソースは"/rename/in"を使い、FTPリモートターゲットは"/rename/out"を使います。転送は以下のようなスクリーンショットになっているはずです。

下のスクリーンショットのように、以下のパラメータを使って、転送の前処理アクションを構成する必要があります。

  SourceExpr:  ([A-z])\d+(.*)
  ReplaceWith: $1$2

保存し、他のOracle MFT転送のようにこの転送をデプロイします。

Test

任意のFTPクライアントを使ってMFT埋込みFTPサーバに接続し、"order20151011.xml"というファイルを"/rename/in"フォルダにコピーします。完了すると、MFT監視コンソールに移動し、以下のような転送レポートを確認します。

おめでとうございます!これで非常に便利かつ設定可能で再利用可能な名前変更のためのカスタム・コールアウトを実装しました。このカスタム・コールアウトは任意の転送ターゲット前処理アクションで利用できますが、たった76行のコードでできています。この転送の完全なエクスポートファイルはこちらからダウンロードいただけます。

0 件のコメント:

コメントを投稿