PreEmptive Protection - DashO v8.1 User Guide

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 アノテーションを介して入力されます。アノテーションは、ソースに追加するか、DashO の仮想アノテーションを使って追加することができます。期限切れと警告の日付は、2 つの異なる方法で指定できます。

絶対日付 – 有効期限が切れる日、または警告期間が始まる日の固定日付を指定できます。

相対日付 – 有効期限は開始日からの日数です。警告期間は、期限切れの前の日数です。

絶対日付と相対日付を組み合わせることができます。たとえば、2021/1/1 に有効期限が切れ、期限切れになる 30 日前に警告を発する、とすることができます。期限切れの情報はトークンを作成するために必要ですが、警告の情報は任意です。

Shelf Life チェック

ShelfLifeCheck アノテーションは、Shelf Life チェックが行われるアプリケーション内の位置を定義するために使用されます。ソースに @ShelfLifeCheck アノテーションを追加したり、Injection – Shelf Life Check パネルから ShelfLifeCheck を追加したりできます。ソースにアノテーションを追加した場合は、DashO をインストールした場所の lib フォルダーにある dasho-annotations.jar と共にコンパイルする必要があります。既定では、DashO はこれらのアノテーションへの参照を解除します。そのため、アプリケーションの実行時に jar は必要なく、jar をアプリケーションと共に配布する必要はありません。

期限切れの情報が Injection – Shelf Life Check パネルで設定される場合、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 に出力し、ゼロ以外のリターン コードで終了することです。

このアプリケーションは 201611 日に有効期限が切れました。

アプリケーションが警告期間に入っている場合は、メッセージが System.out に出力され、実行は継続されます。

このアプリケーションは 2016 年 12 月 31 日に有効期限が切れます。

より洗練されたアプリケーションにするために、カスタムのアプリケーション操作を指定することができます。

@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 の Analytics メッセージ

有効期限が間もなく切れる、もしくは切れたアプリケーションを追跡できるよう、Shelf Life は Analytics メッセージを送信することができます。ShelfLifeCheck には sendMessage プロパティがあります。

@ShelfLifeCheck(sendMessage = true)
public static void main(final String[] args){
    // ...
}

アプリケーションに ApplicationStart が既に含まれている場合は、さらにアノテーションを加える必要はありません。PreEmptive Analytics を使用して期限切れを追跡する場合は、アプリケーションを識別するアノテーションを加える必要があります。

@ShelfLifeCheck(sendMessage = true)
@CompanyId("DF29A894-C1AB-5947-E0A2-0D9779CFFB63")
@ApplicationId("F0000FDA-9500-1B92-9564-A9DA3D8C3CF0")
public static void main(final String[] args){
    // ...
}

その後、ShelfLifeCheck は自動的に ApplicationStartApplicationStop を処理し、期限切れのメッセージを送信します。Android アプリケーションにインストルメンテーションを差し込む場合の追加情報については、PreEmptive Analytics の概要を参照してください。

メモ:

また、アプリケーションを識別するために、ShelfLifeCheck を使って次のいずれかのアノテーションを追加することができます。CompanyCompanyIdCompanyNameApplicationApplicationIdApplicationNameApplicationTypeApplicationVersionApplicationVersionSourceApplicationInstanceIdSource、および UseSsl

PreEmptive Protection - DashO Version v8.1.0. Copyright © 2017 PreEmptive Solutions, LLC