Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 限制插件之间贡献的扩展点数据_Eclipse_Eclipse Plugin_Osgi_Eclipse 3.4 - Fatal编程技术网

Eclipse 限制插件之间贡献的扩展点数据

Eclipse 限制插件之间贡献的扩展点数据,eclipse,eclipse-plugin,osgi,eclipse-3.4,Eclipse,Eclipse Plugin,Osgi,Eclipse 3.4,我有2个我正在构建的eclipse插件;让我们称他们为插件A和插件B 插件A需要许可证才能运行,插件B是免费的。我在插件B中创建了一个扩展点,插件A为其提供(在某些情况下覆盖)数据。如果插件a未获得许可(无需检查插件是否可以启动),我想找到一种方法来忽略插件B中的数据 eclipse中是否有这样的机制允许我完成这样的壮举?我目前的解决方法是检查插件是否已启动(通过捆绑包),以及插件是否未尝试启动。如果插件A未经许可,我会在start()方法中抛出一个异常。要求 因此,您正在编写两个插件 插件B有

我有2个我正在构建的eclipse插件;让我们称他们为插件A和插件B

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


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

要求

因此,您正在编写两个插件

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

接近

OSGi的安全模型主要构建在默认Java权限和SecurityManager之上。本演示文稿中有来自的讨论。我希望围绕这一点建立一个许可证制度是可能的

您的解决方案听起来似乎可行,但是,有两个问题:

  • 阻止bundle启动可能会阻止注册任何服务,但会影响扩展注册表中的更改吗?i、 e.使用plugin.xml注册的扩展。我想DS服务可以,但我得试试
  • 停止捆绑包可能还不够-以后可以重新启动吗?我可能希望卸载它
  • 未经许可的捆绑包是告诉用户许可的机会。那么,您如何告诉用户该捆绑包未获得许可,无法使用,顺便说一句,下面是您如何许可它的
到目前为止,您还没有提到许可证将如何实施。我猜你会选择LicenseService,甚至可能是singleton


一定要把你的发现报告出来。

要求

因此,您正在编写两个插件

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

接近

OSGi的安全模型主要构建在默认Java权限和SecurityManager之上。本演示文稿中有来自的讨论。我希望围绕这一点建立一个许可证制度是可能的

您的解决方案听起来似乎可行,但是,有两个问题:

  • 阻止bundle启动可能会阻止注册任何服务,但会影响扩展注册表中的更改吗?i、 e.使用plugin.xml注册的扩展。我想DS服务可以,但我得试试
  • 停止捆绑包可能还不够-以后可以重新启动吗?我可能希望卸载它
  • 未经许可的捆绑包是告诉用户许可的机会。那么,您如何告诉用户该捆绑包未获得许可,无法使用,顺便说一句,下面是您如何许可它的
到目前为止,您还没有提到许可证将如何实施。我猜你会选择LicenseService,甚至可能是singleton


请报告您的发现。

我能想到的一个可能的解决方案是,您将一个类从插件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
      }
    }
IExtensionPoint extensionPoint=registry.getExtensionPoint(“mypoint”);
IConfigurationElement[]elements=extensionPoint.getConfigurationElements();
for(int i=0;i
我能想到的一个可能的解决方案是,将一个类从插件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
      }
    }
IExtensionPoint extensionPoint=registry.getExtensionPoint(“mypoint”);
IConfigurationElement[]elements=extensionPoint.getConfigurationElements();
for(int i=0;i
如果未获得许可,A不应该检查其许可证本身,不覆盖/不提供任何数据(或覆盖提供相同的数据)?为什么把许可证检查的负担放在B身上,而B根本不在乎(因为它是免费的)


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

A不应该检查其许可证本身,也不应该覆盖/不提供任何数据(或覆盖提供相同的数据)