【问题标题】:Limiting contributed extension point data between plugins限制插件之间贡献的扩展点数据
【发布时间】:2010-10-03 14:31:39
【问题描述】:

我正在构建 2 个 eclipse 插件;我们称它们为插件 A 和插件 B...

插件 A 需要许可证才能运行,插件 B 对全世界免费。我在插件 B 中创建了一个扩展点,插件 A 贡献(并且在某些情况下覆盖)数据。如果插件 A 未获得许可(无需检查插件是否可以启动),我想找到一种方法来忽略插件 B 中的数据。

eclipse中是否有这样的机制可以让我完成这样的壮举?我目前的解决方法是检查插件是否已启动(通过捆绑包)以及是否未尝试启动它。如果插件 A 未经许可,我会在 start() 方法中抛出异常。

【问题讨论】:

    标签: eclipse eclipse-plugin osgi eclipse-3.4


    【解决方案1】:

    如果 A 未获得许可,是否不应该检查其许可证本身并且不覆盖/不提供任何数据(或通过提供相同的数据来覆盖)?既然 B 根本不在乎(因为它是免费的),为什么还要将许可证检查的负担交给 B。

    如果找不到许可证,我会选择 A 以受限模式启动。您可能还 - 正如 jamesh 建议的那样 - 想让用户有机会提供许可证,例如带有一个额外的 A-UI 插件,通知用户缺少许可证并提供许可证。

    【讨论】:

      【解决方案2】:

      要求

      所以,您正在编写两个插件。

      插件 B 有一个扩展点。如果用户拥有插件 A 的捆绑包和许可证,那么插件 A 应该为插件 B 中的 EP 贡献扩展。

      方法

      OSGi 的安全模型主要建立在默认的 Java Permissions 和 SecurityManager 之上。此演示文稿中有来自Apache Felix 的讨论。我希望可以围绕此建立一个许可计划。

      您的解决方法听起来可行,但是有几个问题:

      • 停止启动捆绑包可能会阻止注册任何服务,但它会影响扩展注册表中的更改吗?即使用 plugin.xml 注册的那些扩展。我猜 DS 服务应该没问题,但我必须尝试一下。
      • 停止捆绑可能还不够 - 以后可以重新启动它吗?我可能希望它卸载。
      • 未经许可的捆绑包是告诉用户有关许可的机会。那么,您如何告诉用户该捆绑包未获得许可,并且将无法使用,顺便说一句,这就是您许可它的方式。

      到目前为止,您还没有说明如何实施许可证。我猜你会选择 LicenseService,甚至可能是单例。

      请报告您的发现。

      【讨论】:

        【解决方案3】:

        我能想到的一个可能的解决方案是,您将插件 A 中的一个类贡献给插件 B。然后,当插件 B 读取贡献项时,它可以尝试创建该类的一个实例。

        插件 A 中的类如果未获得许可,则可以在构造函数中抛出一些异常。这将告诉插件 B 来自插件 A 的信息可以忽略。

        插件 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
              }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-10
          • 2015-07-10
          • 1970-01-01
          相关资源
          最近更新 更多