2

我正在尝试在此处描述为 Szenario #2 或 #3 的共享环境中使用基于 Equinox 的应用程序。

安装是通过 p2 控制器使用 buckminster 创建的 p2 站点完成的。

我希望多个用户可以使用共享安装,但有自己的配置区域,以便他们可以单独更新应用程序。我的问题是 p2 更新在这种情况下不再起作用:它找不到更改的插件并返回“没有要更新的内容”,尽管这不是真的。

在我寻找答案的过程中,我发现 p2 更新一旦使用非默认配置区域 (osgi.configuration.area) 就会停止工作,即使是本地安装也是如此。

我认为这可能是由于对个人资料的查询存在问题。我用这段代码做了更多的测试来获得根特性(我知道它是唯一一个以“de.emsw.gosa.feature”开头的id):

private IInstallableUnit findRootFeature(IProfile profile) {
    IInstallableUnit[] userVisibleRoot = profile.query(new UserVisibleRootQuery(), null).toArray(IInstallableUnit.class);
    if (userVisibleRoot.length > 0) {
        for (IRequirement requirement : userVisibleRoot[0].getRequirements()) {
            IMatchExpression<IInstallableUnit> matchExpression = requirement.getMatches();
            String id = matchExpression.getParameters()[0].toString();
            if (id.startsWith("de.emsw.gosa.feature")) { //$NON-NLS-1$
                IInstallableUnit[] queryResult = profile.query(QueryUtil.createIUQuery(id), null).toArray(IInstallableUnit.class);
                return getLatestVersion(queryResult);
            }
        }
    }
    return null;
}

private IInstallableUnit getLatestVersion(IInstallableUnit[] queryResult) {
    if (queryResult.length == 0)
        return null;
    IInstallableUnit latest = queryResult[0];
    if (queryResult.length > 1) {
        for (int i = 1; i < queryResult.length; i++) {
            if (queryResult[i].getVersion().compareTo(latest.getVersion()) > 0) {
                latest = queryResult[i];
            }
        }
    }
    return latest;
}

使用标准的本地安装,此代码按预期工作并返回已安装的根功能。对于服装配置区域,找不到根特征,因为

profile.query(QueryUtil.createIUQuery(id), null)

返回一个空结果。

有没有人对这种情况或任何其他指针有任何经验?

如果感兴趣,这是配置文件(包括 osgi.configuration.area):

#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser
#Tue May 14 11:09:34 CEST 2013
eclipse.p2.profile=gosa
osgi.instance.area.default=@user.home/Anwendungsdaten/gosa/client/data
osgi.configuration.area=@user.home/Anwendungsdaten/gosa/client/configuration
osgi.nl=de_DE
osgi.framework=file\:plugins/org.eclipse.osgi_3.8.0.v20120529-1548.jar
equinox.use.ds=true
osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.0.300.v20110815-1744.jar@1\:start
org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
eclipse.product=de.emsw.gosa.product.client.product
osgi.splashPath=platform\:/base/plugins/de.emsw.gosa.images
osgi.framework.extensions=
osgi.bundles.defaultStartLevel=4
eclipse.application=de.emsw.gosa.product.client.ClientApplication
eclipse.p2.data.area=@config.dir/../p2

谢谢你的帮助!克里斯托夫

4

0 回答 0