1

私が構築している 2 つの Eclipse プラグインがあります。それらをプラグインAとプラグインBと呼びましょう...

プラグイン A を実行するにはライセンスが必要で、プラグイン B は世界中で無料です。プラグイン A がデータを提供する (場合によってはオーバーライドする) 拡張ポイントをプラグイン B に作成しました。プラグイン A がライセンスされていない場合、プラグイン B のそのデータを無視する方法を見つけたいと思います (プラグインが起動できるかどうかを確認する必要はありません)。

私がそのような偉業を成し遂げることを可能にするそのようなメカニズムは日食にありますか? 私の現在の回避策は、プラグインが(バンドルを介して)開始されているかどうか、および開始しようとしていないかどうかを確認することです。プラグイン A がライセンスされていない場合、start()メソッドで例外をスローします。

4

3 に答える 3

1

A はライセンス自体を確認し、ライセンスが付与されていない場合、データを上書き/提供しない (または同一のデータを提供して上書きする) べきではありませんか? 基本的にBが気にしないのに(無料なので)、Bにライセンスチェックの負担をかけるのはなぜですか。

ライセンスが見つからない場合は、A を制限付きモードで起動することを選択します。また、jamesh が提案したように、ユーザーにライセンスを提供する機会を与えたい場合があります。

于 2009-03-07T12:35:51.940 に答える
0

考えられる解決策の 1 つは、プラグイン A からプラグイン B にクラスを提供することです。次に、プラグイン B が投稿アイテムを読み取るときに、このクラスのインスタンスを作成しようとすることができます。

プラグイン A のクラスは、ライセンスされていない場合、コンストラクターで例外をスローできます。これにより、プラグイン A からの情報を無視できることがプラグイン B に通知されます。

プラグイン B で可能な実装は次のようになります。

    IExtensionPoint extensionPoint = registry.getExtensionPoint("mypoint");
    IConfigurationElement[] elements = extensionPoint.getConfigurationElements();
    for (int i = 0; i < elements.length; i++) {
      try {
        (License)elements[i].createExecutableExtension("class");
        // ..... Read any other items you need....
      }
      catch(LicenceException e){
        // Plugin is invalid, do not use
      }
    }
于 2009-01-29T08:34:37.537 に答える
0

要件

つまり、2 つのプラグインを作成しています。

プラグイン B には拡張ポイントがあります。ユーザーがプラグイン A のバンドルとライセンスを持っている場合、プラグイン A はプラグイン B の EP に拡張機能を提供する必要があります。

アプローチ

OSGi のセキュリティー・モデルは、大部分がデフォルトの Java Permissions と SecurityManager の上に構築されています。このプレゼンテーションには、Apache Felixによるディスカッションがあります。これを中心にライセンススキームを構築することが可能になると思います。

回避策は機能するように聞こえますが、いくつかの懸念事項があります。

  • バンドルの開始を停止すると、サービスが登録されなくなる可能性がありますが、拡張レジストリの変更に影響しますか? つまり、plugin.xml を使用して登録された拡張機能です。DS サービスは大丈夫だと思いますが、試してみる必要があります。
  • バンドルを停止するだけでは不十分な場合があります。後で再び開始できますか? 私はおそらくそれをアンインストールしたいと思うでしょう。
  • ライセンスのないバンドルは、ライセンスについてユーザーに伝える機会です。では、バンドルがライセンスされておらず、使用できないことをユーザーにどのように伝えますか?ところで、ライセンスを取得する方法は次のとおりです。

これまでのところ、ライセンスがどのように実装されるかについては何も言われていません。LicenseService、またはおそらくシングルトンに行くと思います。

あなたが見つけたことを報告してください。

于 2009-01-28T17:38:06.257 に答える