|
ファイル コントロールを使用すると、ファイル システム内でファイルの読み込みや書き込み、または追加を簡単に行えます。この節のトピックでは、ファイル コントロールの使用方法について説明します。コントロール インスタンスをビジネス プロセスに追加する方法については、「ビジネス プロセスでコントロールを使用する」を参照してください。
ファイル コントロールを使用すると、ファイル システム内でファイルの読み込みや書き込み、または追加を簡単に行えます。ファイルの型は、XmlObject、RawData (バイナリ)、String のいずれかです。ファイル コントロールを作成するときに、指定したディレクトリに格納されているファイルに一致するファイル タイプを選択します。
また、ファイル コントロールは、コピー、名前の変更、削除などのファイル操作をサポートしています。特定のディレクトリに格納されているファイルのリストを取得することもできます。
ファイル コントロールはファイルに対する操作を実行します。各ファイル コントロールは特定の操作を実行するようにカスタマイズします。
ここでは、新しいファイル コントロールの作成方法について説明し、Java ファイル内のファイル コントロールの宣言の例を示します。
コントロール インスタンスをビジネス プロセスに追加する方法については、「ビジネス プロセスでコントロールを使用する」を参照してください。
新しいファイル コントロールを作成してビジネス プロセスに追加できます。新しいファイル コントロールを定義するには
注意 : | [データ パレット] ビューが Oracle Workshop for WebLogic に表示されない場合は、メニュー バーから [ウィンドウ|ビューの表示|データ パレット] をクリックします。 |
[Insert control: ファイル] ダイアログ ボックスが表示されます。
ディレクトリ名は、ドライブとパスを指定した、ディレクトリの絶対パス名です。たとえば、有効なディレクトリ名は以下のとおりです。
C:\directory (Windows)
/directory (Unix)
\\servername\sharename\directory (Win32 UNC)
ピリオド (.
) を入力して現在の作業ディレクトリを指定することもできます。[ディレクトリ名] フィールドにフォワード スラッシュ (/
) を入力すると、次のように解釈されます。
*
) などのワイルドカード文字を指定した場合、ファイル マスクとして使用されます。ワイルドカード文字は、ディレクトリ内のファイルのリストを取得するために指定します。その他の操作ではワイルドカード文字を使用できません。
[ファイル名フィルタ] フィールドはコントロールの挿入時には省略可能ですが、省略した場合は、ファイル操作の実行前にこのプロパティが動的に設定される必要があります。
write(String
data
)
、write(XmlObject
data
)
、または write(RawData
data
)
など) が生成されます。たとえば、ディレクトリに XML ドキュメントが格納されている場合は、コントロールで生成される read/write メソッドが XmlObject 変数を受け付けるように、型を XmlObject に設定する必要があります。RawData および String 型の場合も同様です。readLine()
メソッドが作成されます。
レコード サイズまたは区切り文字列を指定して、行を定義できます。
警告 : | 処理されるファイルに指定した区切り文字列が存在しない場合、アプリケーションの動作は予期されないものになります。 |
レコード サイズまたは区切り文字列が指定されていない場合、ファイルは一度に 1 行ずつ処理されます。ライン フィード ('\n')、キャリッジ リターン ('\r')、またはキャリッジ リターンとそのすぐ後に続くライン フィードのいずれかがあると、1 行の終わりと見なされます。このファイル処理方法は、どのサイズのファイルでも使用できます。
注意 : | 行を定義する際に、レコード サイズと区切り文字列の両方を指定することはできません。 |
ファイル コントロールで使用できるメソッドについては、FileControl インタフェースを参照してください。
新しいファイル コントロールを作成すると、その宣言が Java ファイルに表示されます。次のコード スニペットに、ファイル コントロールの宣言の例を示します。
package requestquote;
import com.bea.control.FileControl;
import org.apache.beehive.controls.api.bean.ControlExtension;
import com.bea.wli.control.dynamicProperties.FileControlPropertiesDocument;
/*
* カスタム ファイル コントロール。
*/
@ControlExtension
@FileControl.FileInfo(directoryName = "C:/bea/")
public interface FileCntrl extends com.bea.control.FileControl {
@FileControl.IOOperation(ioType = FileIOType.READLINE, delimiterString = "")
String readline();
static final long serialVersionUID = 1L;
public FileCntrl create();
}
@FileControl.FileInfo および com.bea.control.FileControl.IOOperation
アノテーションに示される実際の属性は、コントロールの挿入時に使用したダイアログ ボックスで入力した値によって異なります。
@FileControl
アノテーションは、ファイル コントロールの動作を制御します。@FileControl
アノテーションのすべての属性は省略可能で、それぞれにデフォルト値があります。
詳細については、FileControl インタフェースを参照してください。
上のサンプルの TaxControlFile
というファイル コントロールは、FileControl
の拡張として宣言されています。com.bea.control.FileControl.IOOperation
アノテーションでは、ファイル操作が readline (tax_file.txt
をレコード単位で読み込む) であり、レコード サイズが指定されています。
ファイル コントロールは、ファイルの読み込み、ファイルの書き込み、ファイルへのデータの追加など、ファイルに対する操作を実行します。ファイル コントロールを使用して、ファイルのコピー、名前の変更、削除も行えます。
通常は操作するファイルごとに個別のファイル コントロールをコンフィグレーションします。ファイル コントロールの設定はいくつかの方法で指定できます。1 つは、デザイン ビューでファイル コントロールのプロパティを設定する方法です。もう 1 つは、FileControl
インタフェースの setProperties メソッドを呼び出す方法です。ファイル コントロールのコンフィグレーション プロパティは動的に変更できます。現在のプロパティ設定を取得するには、getProperties()
メソッドを使用します。
次の節では、ファイル コントロールのコンフィグレーション方法について説明します。
[プロパティー] ペインでコントロールのプロパティを設定することによって、デザイン ビューでファイル コントロールの動作を指定できます。これらのプロパティは、コード内でファイル コントロールを識別する @FileControl
および @FileControl.Operation
アノテーションの属性に対応しています。以下の属性は、ファイル コントロールのクラスレベルおよびメソッドレベルのコンフィグレーション属性を指定します。
FileControl.SFtp
アノテーションの詳細については、「SFTP 用のファイル コントロール アノテーション」を参照してください。
バイナリ ファイルを使って転送を行う際にファイル コントロールの FtpToLocal()
を使用する場合は、以下のアノテーションをソース ビューに配置してください。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@PropertySet(
prefix = 'FileTransferMode',
externalConfig = false,
optional = true,
hasSetters = false
)
public @interface FileTransferMode
{
/**
* このオプションでは、SFTP プロパティを名前/値ペアのリストとして指定する
*/
@FeatureInfo(shortDescription = 'File Transfer Mode when using
SFTP/FTP')
TransferMode value() default TransferMode.BINARY;
}
注意 : | 上記のアノテーションを使用しないと、バイナリ ファイルが破損します。SFTP を使用している間は、この手順に従う必要があります。 |
@FileControl
アノテーションの属性を使用したファイル コントロールのデフォルト動作の指定については、FileControl インタフェースを参照してください。
ファイル コントロールを宣言してコンフィグレーションすると、そのメソッドをアプリケーションから呼び出してファイル操作を実行したり、コンフィグレーションを変更したりできます。各メソッドの詳細については、FileControl インタフェースを参照してください。
ファイル操作の実行やファイル コントロールの再コンフィグレーションには、FileControl インタフェースの以下のメソッドを使用します。
ファイル コントロールでは、ファイルが格納されるのを待機するコールバックは提供されません。ビジネス プロセスでファイルが格納されるのを待機する必要がある場合は、ファイル イベント ジェネレータ機能を使用します。ビジネス プロセスでは、特定のディレクトリでのファイル処理が必要になる場合、メッセージ ブローカ サブスクライブ コントロールを使用してチャネルをサブスクライブできます。次に、ファイル イベント ジェネレータをコンフィグレーションして、目的のディレクトリにファイルが格納されたときに、ファイルの内容を保持する関連付けられたチャネルにメッセージをパブリッシュするようにします。
ファイル コントロールは、read()
メソッドで例外が発生するとエラー ハンドラを呼び出します。(例外はファイルの内容が無効な場合に発生します)。エラー ハンドラは error ディレクトリにファイルを移動します。ただし、error ディレクトリがコンフィグレーションされていない場合、エラー ハンドラは「ファイルまたはディレクトリが存在しません」という例外を送出します。例外に関する有益な情報を参照できるように、エラー ハンドラによって送出される例外はログに記録され、Oracle WebLogic Server Console にも表示されます。また、元の例外は再送出されます。
SFTP (SSH File Transfer Protocol) は、安全で信頼性の高いファイル転送機能を提供する通信プロトコルです。通常は、SSH-2 プロトコルと一緒に使用します。
ファイル コントロールでは、ファイル システム上または FTP サーバ上のファイルの読み取り、ファイルへの書き込み、および追加がサポートされています。また、ファイル システム上または FTP サーバ上のファイルのコピー、名前変更、および削除もサポートされています。さらには、ファイル コントロールを使用して、SFTP サーバ上のファイルを操作することも可能です。
SFTP にはサービス プロバイダ インタフェース (SPI) が含まれており、サード パーティの SFTP クライアント実装にファイル イベント ジェネレータやファイル コントロールをプラグインできます。WLI が提供するデフォルトの SPI 実装では、SSHTools の SFTP クライアント API (J2SSH) が使用されています。RSA および DSA の両方のキー ペアがサポートされます。
J2SSH を使用するデフォルトの SFTP SPI 実装では、以下の認証方法がサポートされます。
注意 : | SPI を拡張して、他の認証方法をサポートすることも可能です。 |
ファイル コントロールを SFTP 用にコンフィグレーションするには、次の手順に従います。
@FileControl.SFtp
を追加し、必要に応じてアノテーションを追加します (図 6-2 を参照)。
ファイル コントロールでは、以下のアノテーションがサポートされます。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD})
@PropertySet(
prefix = "SFtpCustomProperty",
externalConfig = false,
optional = true,
hasSetters = false
)
public @interface SFtpCustomProperty
{
@FeatureInfo(shortDescription = "SFTP property name")
@AnnotationMemberTypes.Text
String name() default Constants.ANNOTATION_VAL_NOT_SPECIFIED;
@FeatureInfo(shortDescription = "SFTP property value")
@AnnotationMemberTypes.Text
String value() default Constants.ANNOTATION_VAL_NOT_SPECIFIED;
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD})
@PropertySet(
prefix = "SFtp",
externalConfig = false,
optional = true,
hasSetters = false
)
public @interface SFtp {
@FeatureInfo(shortDescription="specifies the name of the SFTP host, for example, sftp://sftp.bea.com")
@AnnotationMemberTypes.Text
String hostName() ;
@FeatureInfo(shortDescription = "specifies the SFTP server port number")
@AnnotationMemberTypes.Int
int port() default 22;
@FeatureInfo(shortDescription = "specifies the authentication method to use for authenticating to SFTP server")
SFtpAuthMethod authMethod() default SFtpAuthMethod.PASSWORD_BASED_AUTHENTICATION;
@FeatureInfo(shortDescription="specifies the login name of the SFTP user")
@AnnotationMemberTypes.Text
String userName()default Constants.ANNOTATION_VAL_NOT_SPECIFIED;
@FeatureInfo(shortDescription="the SFTP user's password in case of PASSWORD_BASED_AUTHENTICATION")
@AnnotationMemberTypes.Text
String password() default Constants.ANNOTATION_VAL_NOT_SPECIFIED;
@FeatureInfo(shortDescription="alias for a user's password")
@AnnotationMemberTypes.Optional
@AnnotationMemberTypes.Text
String passwordAlias()default Constants.ANNOTATION_VAL_NOT_SPECIFIED;
@FeatureInfo(shortDescription = "path to the user/host private key file")
@AnnotationMemberTypes.Text
String privateKey() default Constants.ANNOTATION_VAL_NOT_SPECIFIED;
@FeatureInfo(shortDescription = "Passphrase for the private key")
@AnnotationMemberTypes.Text
String passphrase() default Constants.ANNOTATION_VAL_NOT_SPECIFIED;
@FeatureInfo(shortDescription = "alias for the private key's passphrase")
@AnnotationMemberTypes.Text
String passphraseAlias() default Constants.ANNOTATION_VAL_NOT_SPECIFIED;
@FeatureInfo(shortDescription = "additional SFTP properties as a list of name/value pairs")
@AnnotationMemberTypes.Optional
SFtpCustomProperties customProperties()default @SFtpCustomProperties({});
@FeatureInfo(shortDescription="local directory when transferring files between remote file system and the local directory")
@AnnotationMemberTypes.Text
String localDirectory() ;
}
Oracle Workshop for WebLogic の [プロパティ] ペインには、以下のアノテーション属性が表示されます (図 6-3 を参照)。
WLI には SFTP 用のフレームワークが提供されるため、独自のライブラリを接続できます。SSHTools をインストールするには、次の手順に従います。
J2SSH 0.2.9
をローカル ディレクトリにダウンロードします。j2ssh-core-0.2.9.jar
と j2ssh-common-0.2.9.jar
を
BEA_HOME\wli_10.3\lib
ディレクトリにコピーします。注意 : | このパス名の中の BEA_HOME は、Oracle WebLogic Integration をインストールしたディレクトリです。 |
この列挙は SSH のバージョンを表し、以下の定数が定義されています。
この列挙は、SFTP サーバで使用する認証方法を表します。以下の定数が定義されています。
PASSWORD_BASED_AUTHENTICATION
: この定数は、パスワードベースの認証を定義します。ユーザがこの認証方法を使用するためには、ユーザ名/パスワード ペアを提供する必要があります。HOST_BASED_AUTHENTICATION
: この定数は、ホストベースの認証を定義します。ユーザは、SFTP サーバに接続するクライアント コンピュータのプライベート キーを提供する必要があります。PUBLIC_KEY_BASED_AUTHENTICATION
: この定数は、公開鍵ベースの認証を定義します。ユーザは、SFTP サーバに接続するユーザのプライベート キーを提供する必要があります。OTHER_AUTHENTICATION_METHOD
: この定数は、WLI でサポートされないその他の認証方法を定義します。
このクラスは、SFTP クライアント例外を表します。SFTP クライアント例外とは、SPI 実装から送出する必要のある汎用的な例外カテゴリです。SPI が実装されている場合は、例外を SFtpClientException
でラップして上位レベルに送出することで、どのような例外でも送出できます。この例外のインタフェースは、以下に示すとおりです。
public SFtpClientException()
:デフォルトのコンストラクタpublic SFtpClientException(String message)
: SFTP クライアント例外を、指定された詳細メッセージを使用して構築するpublic SFtpClientException(String message, Throwable cause)
: SFTP クライアント例外を、指定された詳細メッセージと元の例外を使用して構築するpublic SFtpClientException(Throwable cause)
: SFTP クライアント例外を、指定された元の例外を使用して構築する
この列挙は、SFTP サーバ上のファイルの属性を表します。表 6-4 に、この列挙のインタフェースの一覧を示します。
この列挙は、SFTP クライアント インタフェースを表します。サード パーティの SFTP クライアント実装をファイル イベント ジェネレータやファイル コントロールにプラグインするためには、SFTP クライアント インタフェースを実装する必要があります。このインタフェースが提供するメソッドを使用すると、SFTP サーバへの接続、SFTP サーバでの認証、ファイルの取得、ファイル一覧の作成、ファイルの名前変更や削除、および SFTP サーバへのファイルの転送などを行うことができます。表 6-5 では、このインタフェースについて説明します。
/tmp/test/test1/test2 の場合を考える。tmp ディレクトリがすでに存在する場合は、このメソッドを実行することでディレクトリ test 、test1 、および test2 が作成される。このメソッドは、いずれかのディレクトリがすでに存在する場合でも失敗しない。パスは、絶対パスか、現在の作業ディレクトリとの相対パスで指定できる。例外を送出する場合は、その例外を SFtpClientException でラップする必要がある。呼び出し側には、このラップされた例外が返される。
|
|
ユーザは、これらのメソッドを実装するだけでなく、SFtpClient
の実装内に以下のコンストラクタを定義する必要があります。
このクラスは、SFtpClient
インタフェースを実装し、SFtpClient
インタフェース内のすべてのメソッドのデフォルト実装を提供します。これらの実装済みメソッドの多くは変更なしで使用できますが、このクラスでは、ユーザ名、パスワード、プライベート キー、パスフレーズ、認証方法、カスタム プロパティなど、さまざまなプロパティを設定できます。
このクラスは、SFtpClient
のファクトリ クラスを表します。このクラスを使用することで、SFtpClient
のインスタンスを作成できます。WLI コンソールを使用してサード パーティの SFTP クライアント実装をファイル イベント ジェネレータやファイル コントロールに追加するためには、このクラスを実装する必要があります。詳細については、「SPI をコンフィグレーションする」を参照してください。この実装クラスがコンフィグレーションされていない場合は、SFtpClientFactory
のデフォルト実装が使用されます。デフォルト実装は、com.bea.wli.sftp.j2ssh.impl.J2SSHSFtpClientFactory
によって提供され、SSHTools の SFTP クライアント実装 (J2SSH) に依存します。
public static SFtpClientFactory newInstance(String factoryName)
throws SFtpClientException
: この静的メソッドは、SFtpClientFactory
の新しいインスタンスを作成するために使用します。新しいインスタンスは、Oracle WebLogic Integration Administration Console でコンフィグレーションした SFTP クライアント ファクトリ クラス名に基づいて作成されます。このプロパティがコンフィグレーションされていない場合は、SFTP クライアント ファクトリ com.bea.wli.sftp.j2ssh.impl.J2SSHSFtpClientFactory
のデフォルト実装が返されます。public abstract SFtpClient createSFtpClient(String hostName)
: このメソッドは、指定されたホスト名とデフォルト ポート番号 22 に基づいて、SFtpClient
のインスタンスを作成するために使用します。public abstract SFtpClient createSFtpClient(String hostName, int portNumber)
: このメソッドは、指定されたホスト名とポート番号に基づいて、SFtpClient
の新しいインスタンスを作成するために使用します。
SPI を使用してサード パーティの SFTP クライアント実装をプラグインするには、次の手順に従います。
http://adminserver:port/wliconsole
という URL を入力します。 注意 : | ここで、adminserver は Oracle WebLogic Integration の管理サーバのホスト名または IP アドレスで、port はそのサーバのリスン ポートです。たとえば、「http://localhost:7001/wliconsole」のように入力すると、Oracle WebLogic Integration Administration Console を開くことができます。 |
Oracle WebLogic Integration Administration Console のホーム ページが表示されます。
注意 : | Oracle WebLogic Integration Administration Console はパスワードで保護されています。サーバを起動する前に、コンフィグレーション ウィザードを使用して WLI ドメインを作成する必要があります。コンフィグレーション ウィザードを使用したドメイン作成の詳細については、「WebLogic ドメインの作成」を参照してください。 |
SPI 実装をサーバ クラス パスに追加するには、次の手順に従います。
WLI で使用できる SFTP 参照実装は、\BEA_Home\wli_10.3\samples\sftp_ref_impl
ディレクトリに格納されています。ソース ファイルをビルドするために使用するデフォルトのビルド スクリプトも用意されています。この参照実装は、SSH Tools の J2SSH に基づいています。
\BEA_Home\wlserver_10.3\commom\bin
ディレクトリにあります。\BEA_Home\wli_10.3\samples\sftp_ref_impl
に変更します。
を実行します。\BEA_Home\wli_10.3\samples\sftp_ref_impl\build\ar
に作成されます。
ここでは、SFTP 実装をテストするアプリケーションを設計する例を示します。
ビジネス プロセスの詳細については、『ビジネス プロセス構築ガイド』および『チュートリアル : 初めてのビジネス プロセス設計』を参照してください。
この節では、ビジネス プロセスのコンテキストで使用されるファイル コントロールのサンプルを示します。このサンプルでは、ファイル コントロール インスタンスは、ユーザの要求にトリガされて、指定された場所にファイルを書き込みます。このサンプルでは、クライアント要求ノードを含む新しいビジネス プロセスを作成済みであることを前提としています。
ビジネス プロセスは「File Request」というクライアント要求ードで開始されます。クライアント要求ノードは、クライアントがプロセスに要求を送信するプロセス内のポイントを表します。この場合、クライアントはプロセスの fileRequest()
メソッドを呼び出して、新しい顧客の情報を格納したファイルをファイル システムに書き込みます。
要求されたファイルをファイル システムに書き込むように、ビジネス プロセスを設計するには、次の手順を実行します。
このシナリオでは、ファイル コントロールの 1 つのインスタンスをビジネス プロセスに追加します。
[コントロールの挿入 : ファイル] ダイアログ ボックスが表示されます。
ファイル コントロールのインスタンスが myFile という名前でプロジェクト内に作成され、データ パレット に表示されます。
FileControlPropertiesDocument write(XmlObject someData)
FileControlPropertiesDocument write(com.bea.xml.XmlObject someData)
write
() メソッドが予期するデータ型 XmlObject someData
が設定されています。InputDocument CustFile
) が表示されます。[割り当てる変数を選択します] フィールドで、矢印をクリックしてプロジェクト内の変数のリストを表示します。次に、requestCustFile(InputDocument) を選択します。
これで、ファイル コントロール ノードの設計は完了しました。
実行時に、XmlObject 型の変数をクライアント要求メソッドに渡します。ファイル システムの指定された場所に顧客ドキュメントが書き込まれます。