Shelf Life
PreEmptive Protection - DashO では、アプリケーションに Shelf Life(使用期限)を導入することができます。 Shelf Life(使用期限)はアプリケーションの在庫管理機能で、期限切れや通知のロジックをアプリケーションに追加することを可能にするものです。このロジックは、アプリケーションを終了することによって、期限切れポリシーを実施します。たとえば、ベータ版のアプリケーションを特定の日で期限切れになるようにすることができます。アプリケーションの期限切れを特定の日、あるいは開始日からの日数でスケジュールできます。また、オプションとして、期限切れになる前の警告期間を指定できます。期限切れの情報は、アプリケーション内に置くことも、暗号化された外部のトークン ファイルから読み取ることもできます。後者では、アプリケーションを再構築するのではなく、新しいトークン ファイルを発行することにより、アプリケーションの有効期限を延長することができます。Shelf Life チェックは、アプリケーション内の 1 つ以上の場所に追加できます。
アクティブ化キー
Shelf Life の使用を開始するには、PreEmptive Solutions から Shelf Life Activation Key を入手する必要があります。このキーは、期限切れの情報を含んでいるトークンを生成するために使用されます。PreEmptive は、トークンを生成し、アプリケーションを識別するためのキーを含むデータ ファイルを発行します。このキーが DashO によって読み取られるのは、コードにチェックが差し込まれたとき、あるいは、コードがコンパイル済みバイナリ以外で管理されている場合にトークンが生成されたときです。キー ファイルの場所は、ユーザー インターフェイスまたはプロジェクト構成ファイルで指定することができます。
Shelf Life トークン
Shelf Life トークンは、アプリケーションおよび期限切れ情報を含んでいる暗号化されたデータのセットです。アプリケーションに挿入するか、またはアプリケーションの外部に保存することができます。外部に保存されたトークンを作成するために、DashO ユーザー インターフェイス、tokengenerator
コマンド ライン ユーティリティ、または Ant タスクを使用できます。
トークンの期限切れと警告の情報は、ユーザー インターフェイスを介して、あるいは Shelf Life アノテーションを介して入力することで、ソース コードに追加されます。期限切れと警告の日付は、2 つの異なる方法で指定できます。
絶対日付 – 有効期限が切れる日、または警告期間が始まる日の固定日付を指定できます。
相対日付 – 有効期限は開始日からの日数です。警告期間は、期限切れの前の日数です。
絶対日付と相対日付を組み合わせることができます。たとえば、2021/1/1 に有効期限が切れ、期限切れになる 30 日前に警告を発する、とすることができます。期限切れの情報はトークンを作成するために必要ですが、警告の情報は任意です。
Shelf Life チェック
ShelfLifeCheck アノテーションは、Shelf Life チェックが行われるアプリケーション内の位置を定義するために使用されます。ソースに @ShelfLifeCheck
アノテーションを追加したり、Checks — Shelf Lifeパネルから ShelfLifeCheck を追加したりできます。ソースにアノテーションを追加した場合は、DashO をインストールした場所の lib
フォルダーにある dasho-annotations.jar
と共にコンパイルする必要があります。既定では、DashO はこれらのアノテーションへの参照を解除します。解除しても、jar はアプリケーションの実行時に必要がないため、アプリケーションと共に配布しないでください。
期限切れの情報が Checks — Shelf Life パネルで設定される場合、Shelf Life チェックを追加するには、最低でもキー ファイルと有効期限、そしてアノテーションが 1 つだけ必要です。
@ShelfLifeCheck
public static void main(final String[] args){
if(args.length == 0){
System.out.println("Hello no name");
} else {
System.out.println("Hello " + args[0]);
}
}
これは、main()
の冒頭でアプリケーションに Shelf Life チェックを追加します。また、すべての情報をアノテーション属性として指定することができます。
@ShelfLifeCheck(expirationDate = "01/01/2021", warningPeriod = "30")
public static void main(final String[] args){
// ...
}
属性、日付、期間、フィールド/メソッド参照の値はすべて文字列です。これにより、DashO のプロパティや環境変数の値を使用して、それらをパラメーター化することが可能です。
@ShelfLifeCheck(expirationDate = "01/01/${exp_year}", warningPeriod = "${warn_period}")
public static void main(final String[] args){
// ...
}
相対的な有効期限
期限切れは、動的な開始日からの日数で指定することができます。開始日には、インストールの日付、アプリケーションが最初に実行された日付などが挙げられます。開始日は、アプリケーションによって実行時に提供されます。
@ShelfLifeCheck(startDateSource = "@getInstallDate()", expirationPeriod = "90")
public static void main(final String[] args){
// ...
}
private static Date getInstallDate(){
return new Date(Preferences.userRoot().node("MyApp").getInt("installDate", 0));
}
開始日のソースとして、静的メソッドやインスタンス メソッド、あるいはフィールドを使用できます。詳細については、ソースおよび操作の指定を参照してください。
外部に保存されたトークン
前の例では、DashO は Shelf Life トークンをアプリケーションに埋め込みました。トークンは、ファイルやリソースとして外部で保存および管理し、実行時に読み取ることもできます。
@ShelfLifeCheck(tokenSource = "@getToken()")
public static void main(final String[] args){
// ...
}
private static Reader getToken(){
return new InputStreamReader(HelloWorld.class.getClassLoader().
getResourceAsStream("expiry.dat"));
}
トークンのソースは、(たとえば、ファイルから読み取ったときに)トークン データを提供する java.io.Reader
を返す型のフィールド、または引数のないメソッドです。詳細については、ソースおよび操作の指定を参照してください。
Shelf Life の操作
ShelfLifeCheck
が実行されたとき、アプリケーションの有効期限が切れている場合の既定の操作は、メッセージを System.out
(またはダイアログ)に出力し、リターン コード 1
で終了することです。
このアプリケーションは 2017 年 1 月 1 日に有効期限が切れました。
アプリケーションが警告期間に入っている場合は、メッセージが System.out
(またはダイアログ)に出力され、実行は継続されます。
このアプリケーションは 2017 年 12 月 31 日に有効期限が切れます。
メモ:Android の場合、期限終了時に取る既定の操作は、チェックが差し込まれている
Activity
を閉じることです。Activity
に差し込まれていない場合は、RuntimeException
をスローします。
より洗練されたアプリケーションにするために、カスタムのアプリケーション操作を指定することができます。
@ShelfLifeCheck(action = "@check()")
public static void main(final String[] args){
// ...
}
private static void check(Token token) {
if(token.isExpired()){
JOptionPane.showMessageDialog(null,
"The application expired on " + token.getExpirationDate(),
"Expired",
JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
if(token.isInWarning()){
JOptionPane.showMessageDialog(null,
"The application will expire in " +
token.getDaysTillExpiration() + " days",
"Expiration Warning",
JOptionPane.WARNING_MESSAGE);
}
}
操作は、その後で実行する操作を決定するために使用される Shelf Life トークンに渡されます。
トークン クラス リファレンス
Shelf lifeトークンは、com.preemptive.instrumentation.Token
クラスで表され、shelflife-java.jar
と shelflife-android.jar
にパッケージされています。 このクラスは、トークンの期限と警告日に関する情報を提供すると共に、トークンに追加されたプロパティにアクセスできるようにします。
メモ:
Shelf Life チェックを差し込んでいる場合には、Shelf Life ランタイム クラスはプロジェクトの出力に自動的にマージされます。 プロジェクトをサポートするため、または入力として、shelflife-java.jar
やshelflife-android.jar
をインクルードする必要はありません。
メソッド
hasWarningDate()
public boolean hasWarningDate()
トークンに警告日が設定されているかどうか。
戻り値:
トークンに警告日が設定されている場合は、true
。
getWarningDate()
public java.util.Date getWarningDate()
トークンに格納されている警告日を取得します。
戻り値:
警告日(または、何も設定されていない場合は、null
)。
getExpirationDate()
public java.util.Date getExpirationDate()
トークンに格納されている有効期限を取得します。
戻り値:
有効期限。
isInWarning()
public boolean isInWarning()
現在の時刻が警告日の翌日以降であるかどうか。
戻り値:
現在の時刻が警告日の翌日以降である場合は、true
。トークンに警告日が含まれていない場合には、false
が返されます。
isExpired()
public boolean isExpired()
トークンの有効期限が切れているかどうか。
戻り値:
トークンに期限データが設定されていて、かつ現在の時刻が有効期限の翌日以降である場合は、true
。
getID()
public java.lang.String getID()
トークンの作成に使用する Shelf Life ID を取得します。
戻り値:
トークンの作成に使用する Shelf Life ID。
getDaysTillExpiration()
public int getDaysTillExpiration()
有効期限までの日数を取得します。
戻り値:
有効期限までの日数。
getProperties()
public java.util.Properties getProperties()
トークンに格納されているプロパティを取得します。
戻り値:
トークンに格納されているプロパティ。
getToken(File)
public static Token getToken(java.io.File file)
ファイルに格納されているトークンを読み取ります。このメソッドは、相対日付が含まれるトークンに対しては使用できません。相対日付が含まれるトークンに対して使用するメソッドは、getToken(Date, File) です。
パラメーター:
file
- base64 文字列としてエンコードされたトークンが含まれるファイル。
戻り値:
トークン(または、トークンがファイルから読み取られない場合は、null
)。
getToken(Date, File)
public static Token getToken(java.util.Date startDate,
java.io.File file)
ファイルから、相対日付を使用するトークンを読み取ります。
パラメーター:
startDate
- 相対日付の開始日。
file
- base64 文字列としてエンコードされたトークンが含まれるファイル。
戻り値:
トークン(または、トークンがファイルから読み取られない場合は、null)。
関連項目:
getToken(Reader)
public static Token getToken(java.io.Reader reader)
トークンを読み取ります。このメソッドは、相対日付が含まれるトークンに対しては使用できません。相対日付が含まれるトークンに対して使用するメソッドは、getToken(Date, Reader) です。
パラメーター:
reader
- base64 文字列としてエンコードされたトークンの格納先。この格納先は、このメソッドの終了時に閉じられます。
戻り値:
抽出されたトークン(エラーの場合は null
)。
getToken(Date, Reader)
public static Token getToken(java.util.Date startDate,
java.io.Reader reader)
トークンを読み取ります。
パラメーター:
reader
- base64 文字列としてエンコードされたトークンの格納先。この格納先は、このメソッドの終了時に閉じられます。
戻り値:
抽出されたトークン(エラーの場合は null
)。
関連項目:
getToken(String)
public static Token getToken(java.lang.String encoded)
文字列に格納されているトークンを読み取ります。このメソッドは、相対日付が含まれるトークンに対しては使用できません。相対日付が含まれるトークンに対して使用するメソッドは、getToken(Date, String) です。
パラメーター:
encoded
- base64 文字列としてエンコードされたトークン。
戻り値:
抽出されたトークン(エラーの場合は null)。
getToken(Date, String)
public static Token getToken(java.util.Date startDate,
java.lang.String encoded)
文字列に格納されているトークンを読み取ります。
パラメーター:
encoded
- base64 文字列としてエンコードされたトークン
戻り値:
抽出されたトークン(エラーの場合は null
)。
関連項目: