Package com.quickwebframework.entity

Examples of com.quickwebframework.entity.BundleInfo


      Bundle[] allBundles = bundle.getBundleContext().getBundles();

      Map<Bundle, List<String>> bundleClassPathListMap = new HashMap<Bundle, List<String>>();

      for (Bundle tmpBundle : allBundles) {
        BundleInfo tmpBundleInfo = BundleUtils.getBundleInfo(tmpBundle);
        List<String> tmpBundleExportPackageList = tmpBundleInfo.getExportPackageList();
       
        for (String tmpBundleExportPackageInfo : tmpBundleExportPackageList) {
          // 已找到对应Bundle的路径列表
          List<String> foundClassPathList = new ArrayList<String>();
          for (String importPackage : importPackageList) {
View Full Code Here


    if (requiredBundleNameList != null && !requiredBundleNameList.isEmpty()) {
      for (String requireBundleName : requiredBundleNameList) {
        Bundle requireBundle = BundleUtils.getBundleByName(
            bundle.getBundleContext(), requireBundleName);

        BundleInfo requireBundleInfo = BundleUtils
            .getBundleInfo(requireBundle);
        // 处理reuiredBundles中的资源
        List<String> requireBundleExportPackageList = requireBundleInfo
            .getExportPackageList();
        if (requireBundleExportPackageList == null
            || requireBundleExportPackageList.isEmpty())
          continue;
View Full Code Here

      IOException {
    List<BundleInfo> bundleInfoList = new ArrayList<BundleInfo>();
    for (InputStream bundleInputStream : bundleInputStreams) {
      // 得到插件的信息
      try {
        BundleInfo bundleInfo = new BundleInfo(bundleInputStream);
        bundleInfoList.add(bundleInfo);
      } catch (Exception ex) {
        log.warn("警告:加载Bundle清单文件信息时失败。原因:" + ex.getMessage());
      }
    }

    // 排出安装顺序
    orderBundleInstallList(bundleInfoList);
    // 排出停止顺序(倒序)
    List<BundleInfo> shouldStopBundleInfoList = getShouldRefreshBundleInfoList(
        bundleInfoList, BundleUtils.getAllBundleInfoList(bundleContext));
    // 按照逆序停止Bundle
    for (int i = 0; i < shouldStopBundleInfoList.size(); i++) {
      BundleInfo bundleInfo = shouldStopBundleInfoList
          .get(shouldStopBundleInfoList.size() - i - 1);
      String bundleName = bundleInfo.getBundleName();
      Bundle bundle = getBundleByName(bundleContext, bundleName);
      if (bundle != null && bundle.getState() == Bundle.ACTIVE) {
        log.debug(String.format("插件智能安装函数:根据依赖关系准备停止[%s]插件!",
            bundleName));
        bundle.stop();
      }
    }
    // 休息0.001秒钟
    try {
      Thread.sleep(1);
    } catch (InterruptedException e) {
    }
    Bundle[] installedBundles = new Bundle[bundleInfoList.size()];

    // 按照顺序安装,注意:此处只是安装并不启动插件
    for (int i = 0; i < bundleInfoList.size(); i++) {
      BundleInfo bundleInfo = bundleInfoList.get(i);
      installedBundles[i] = installOrUpdateBundle(bundleContext,
          bundleInfo);
    }

    try {
      // 刷新Bundle
      Bundle systemBundle = bundleContext.getBundle(0);
      FrameworkWiring frameworkWiring = systemBundle
          .adapt(FrameworkWiring.class);

      for (Bundle bundle : frameworkWiring.getRemovalPendingBundles()) {
        log.debug("RemovalPendingBundle:" + bundle.getSymbolicName());
      }
      frameworkWiring.refreshBundles(null);
    } catch (Error error) {
      log.warn("RemovalPendingBundle error." + error.getMessage());
    }

    // 休息0.001秒钟
    try {
      Thread.sleep(1);
    } catch (InterruptedException e) {
    }

    // 重新排出启动或刷新顺序
    List<BundleInfo> shouldStartBundleInfoList = getShouldRefreshBundleInfoList(
        bundleInfoList, BundleUtils.getAllBundleInfoList(bundleContext));
    orderBundleInstallList(shouldStartBundleInfoList);

    // 按照顺序启动Bundle
    for (int i = 0; i < shouldStartBundleInfoList.size(); i++) {
      BundleInfo bundleInfo = shouldStartBundleInfoList.get(i);
      String bundleName = bundleInfo.getBundleName();
      Bundle bundle = getBundleByName(bundleContext, bundleName);
      if (bundle == null) {
        log.warn(String.format("插件智能安装函数警告:在OSGi容器中未发现名称为[%s]的插件!",
            bundleName));
        continue;
View Full Code Here

   * @param bundle
   * @return
   */
  public static BundleInfo getBundleInfo(Bundle bundle) {
    try {
      BundleInfo newBundleInfo = new BundleInfo();
      Properties prop = new Properties();
      Dictionary<String, String> dict = bundle.getHeaders();
      Enumeration<String> keyEnumeration = dict.keys();
      while (keyEnumeration.hasMoreElements()) {
        String key = keyEnumeration.nextElement();
        prop.put(key, dict.get(key));
      }
      newBundleInfo.loadProperties(prop);
      return newBundleInfo;
    } catch (Exception ex) {
      log.warn(String
          .format("[com.quickwebframework.util.BundleUtil.getBundleInfo]警告:读取插件[%s]的资源文件[%s]时出错,原因:[%s]",
              bundle.getSymbolicName(),
View Full Code Here

    List<BundleInfo> list = new ArrayList<BundleInfo>();

    Bundle[] bundles = bundleContext.getBundles();
    for (Bundle bundle : bundles) {
      BundleInfo bundleInfo = getBundleInfo(bundle);
      list.add(bundleInfo);
    }
    return list;
  }
View Full Code Here

    // 开始排序
    for (int i = 0; i < list.size();) {
      // 是否有对象移动
      boolean isItemMoved = false;

      BundleInfo bundleInfo = list.get(i);

      // 根据Require-Bundle排序
      for (String requireBundleName : bundleInfo
          .getRequireBundleNameList()) {
        // 如果依赖的Bundle不在要安装的插件列表中,则忽略
        if (!bundleNameList.contains(requireBundleName))
          continue;

        int requireBundleIndex = bundleNameList
            .indexOf(requireBundleName);

        // 如果需要的包在此包后面,则移动到前面
        if (requireBundleIndex > i) {
          BundleInfo requireBundleInfo = list.get(requireBundleIndex);
          list.remove(requireBundleIndex);
          list.add(i, requireBundleInfo);

          bundleNameList = getBundleNameList(list);
          isItemMoved = true;
          i++;
          log.debug(String
              .format("安装/更新顺序自动计算算法:因为插件[%s]需要插件[%s],所以将插件[%s]移动到[%s]前面。",
                  bundleInfo.getBundleName(),
                  requireBundleName, requireBundleName,
                  bundleInfo.getBundleName()));
        }
      }

      // 根据Import-Package排序
      for (String importPackage : bundleInfo.getImportPackageList()) {
        // 如果导入的包不在要安装的插件的导出包列表中,则忽略
        if (!exportPackageBundleNameMap.containsKey(importPackage))
          continue;
        String importPackageBelongBundleName = exportPackageBundleNameMap
            .get(importPackage);
        int importPackageBelongBundleIndex = bundleNameList
            .indexOf(importPackageBelongBundleName);

        // 如果需要的包在此包后面,则移动到前面
        if (importPackageBelongBundleIndex > i) {
          BundleInfo importPackageBelongBundle = list
              .get(importPackageBelongBundleIndex);
          list.remove(importPackageBelongBundleIndex);
          list.add(i, importPackageBelongBundle);

          bundleNameList = getBundleNameList(list);
View Full Code Here

      shouldRefreshBundleNameList.add(bundleInfo.getBundleName());
      shouldRefreshBundleInfoList.add(bundleInfo);
    }

    for (int i = 0; i < shouldRefreshBundleInfoList.size(); i++) {
      BundleInfo bundleInfo = shouldRefreshBundleInfoList.get(i);
      String bundleName = bundleInfo.getBundleName();
      List<String> bundleExportPackageList = bundleInfo
          .getExportPackageList();

      // 搜索全部的Bundle
      for (BundleInfo tmpBundleInfo : allBundleInfoList) {
        boolean isTrue = false;
View Full Code Here

  public static URL getBundleResource(Bundle bundle, String resourcePath) {
    URL url = bundle.getResource(resourcePath);
    if (url != null) {
      return url;
    }
    BundleInfo bundleInfo = new BundleInfo(bundle);
    for (String requireBundleName : bundleInfo.getRequireBundleNameList()) {
      url = getBundleResource(
          OsgiContext.getBundleByName(requireBundleName),
          resourcePath);
      if (url != null) {
        return url;
View Full Code Here

TOP

Related Classes of com.quickwebframework.entity.BundleInfo

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.