private void _registerServletContext(ServletContext servletContext) {
    BundleContext bundleContext = _framework.getBundleContext();

    Hashtable<String, Object> properties = new Hashtable<String, Object>();

    properties.put(ServicePropsKeys.BEAN_ID, ServletContext.class.getName());
    properties.put(ServicePropsKeys.ORIGINAL_BEAN, Boolean.TRUE);
    properties.put(ServicePropsKeys.VENDOR, ReleaseInfo.getVendor());

    bundleContext.registerService(
        new String[] {ServletContext.class.getName()}, servletContext, properties);
  }
  protected void registerPortalInitialized() {
    Registry registry = RegistryUtil.getRegistry();

    Map<String, Object> properties = new HashMap<>();

    properties.put("module.service.lifecycle", "portal.initialized");
    properties.put("service.vendor", ReleaseInfo.getVendor());
    properties.put("service.version", ReleaseInfo.getVersion());

    _portalModuleServiceLifecycleServiceRegistration =
        registry.registerService(
            ModuleServiceLifecycle.class, new ModuleServiceLifecycle() {}, properties);

    properties = new HashMap<>();

    properties.put("bean.id", ServletContext.class.getName());
    properties.put("original.bean", Boolean.TRUE);
    properties.put("service.vendor", ReleaseInfo.getVendor());

    _servletContextServiceRegistration =
        registry.registerService(ServletContext.class, getServletContext(), properties);
  }
  private void _registerService(BundleContext bundleContext, String beanName, Object bean) {

    Set<Class<?>> interfaces = _getInterfaces(bean);

    if (interfaces.isEmpty()) {
      return;
    }

    List<String> names = new ArrayList<String>(interfaces.size());

    for (Class<?> interfaceClass : interfaces) {
      String interfaceClassName = interfaceClass.getName();

      if (!_isIgnoredInterface(interfaceClassName)) {
        names.add(interfaceClassName);
      }
    }

    if (names.isEmpty()) {
      return;
    }

    Hashtable<String, Object> properties = new Hashtable<String, Object>();

    Map<String, Object> osgiBeanProperties = OSGiBeanProperties.Convert.fromObject(bean);

    if (osgiBeanProperties != null) {
      properties.putAll(osgiBeanProperties);
    }

    properties.put(ServicePropsKeys.BEAN_ID, beanName);
    properties.put(ServicePropsKeys.ORIGINAL_BEAN, Boolean.TRUE);
    properties.put(ServicePropsKeys.VENDOR, ReleaseInfo.getVendor());

    bundleContext.registerService(names.toArray(new String[names.size()]), bean, properties);
  }
  private Map<String, String> _buildFrameworkProperties(Class<?> clazz) {
    Map<String, String> properties = new HashMap<String, String>();

    properties.put(Constants.BUNDLE_DESCRIPTION, ReleaseInfo.getReleaseInfo());
    properties.put(Constants.BUNDLE_NAME, ReleaseInfo.getName());
    properties.put(Constants.BUNDLE_VENDOR, ReleaseInfo.getVendor());
    properties.put(Constants.BUNDLE_VERSION, ReleaseInfo.getVersion());
    properties.put(FrameworkPropsKeys.FELIX_FILEINSTALL_DIR, _getFelixFileInstallDir());
    properties.put(FrameworkPropsKeys.FELIX_FILEINSTALL_LOG_LEVEL, _getFelixFileInstallLogLevel());
    properties.put(
        FrameworkPropsKeys.FELIX_FILEINSTALL_POLL,
        String.valueOf(PropsValues.MODULE_FRAMEWORK_AUTO_DEPLOY_INTERVAL));
    properties.put(
        FrameworkPropsKeys.FELIX_FILEINSTALL_TMPDIR,
        SystemProperties.get(SystemProperties.TMP_DIR));
    properties.put(
        Constants.FRAMEWORK_BEGINNING_STARTLEVEL,
        String.valueOf(PropsValues.MODULE_FRAMEWORK_BEGINNING_START_LEVEL));
    properties.put(Constants.FRAMEWORK_BUNDLE_PARENT, Constants.FRAMEWORK_BUNDLE_PARENT_APP);
    properties.put(Constants.FRAMEWORK_STORAGE, PropsValues.MODULE_FRAMEWORK_STATE_DIR);

    properties.put("eclipse.security", null);
    properties.put("java.security.manager", null);
    properties.put("org.osgi.framework.security", null);

    ProtectionDomain protectionDomain = clazz.getProtectionDomain();

    CodeSource codeSource = protectionDomain.getCodeSource();

    URL codeSourceURL = codeSource.getLocation();

    properties.put(FrameworkPropsKeys.OSGI_FRAMEWORK, codeSourceURL.toExternalForm());

    File frameworkFile = new File(codeSourceURL.getFile());

    properties.put(FrameworkPropsKeys.OSGI_INSTALL_AREA, frameworkFile.getParent());

    Properties extraProperties =
        PropsUtil.getProperties(PropsKeys.MODULE_FRAMEWORK_PROPERTIES, true);

    for (Map.Entry<Object, Object> entry : extraProperties.entrySet()) {
      String key = (String) entry.getKey();
      String value = (String) entry.getValue();

      // We need to support an empty string and a null value distinctly.
      // This is due to some different behaviors between OSGi
      // implementations. If a property is passed as xyz= it will be
      // treated as an empty string. Otherwise, xyz=null will be treated
      // as an explicit null value.

      if (value.equals(StringPool.NULL)) {
        value = null;
      }

      properties.put(key, value);
    }

    String systemPackagesExtra = _getSystemPackagesExtra();

    properties.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, systemPackagesExtra);

    return properties;
  }
  protected void processStartupEvents() throws Exception {

    // Print release information

    Class<?> clazz = getClass();

    ClassLoader classLoader = clazz.getClassLoader();

    try (InputStream inputStream =
        classLoader.getResourceAsStream("com/liferay/portal/events/dependencies/startup.txt")) {

      System.out.println(_toString(inputStream));
    }

    System.out.println("Starting " + ReleaseInfo.getReleaseInfo() + "\n");

    if (_log.isDebugEnabled()) {
      _log.debug("Portal Resiliency - NOT SUPPORTED");
    }

    // Shutdown hook

    if (_log.isDebugEnabled()) {
      _log.debug("Add shutdown hook");
    }

    Runtime runtime = Runtime.getRuntime();

    runtime.addShutdownHook(new Thread(new ShutdownHook()));

    // MySQL version

    DB db = DBManagerUtil.getDB();

    if ((db.getDBType() == DBType.MYSQL) && GetterUtil.getFloat(db.getVersionString()) < 5.6F) {

      throw new ServletException(
          "Please upgrade to at least MySQL 5.6.4. The portal no "
              + "longer supports older versions of MySQL.");
    }

    // Check required build number

    if (_log.isDebugEnabled()) {
      _log.debug("Check required build number");
    }

    DBUpgrader.checkRequiredBuildNumber(ReleaseInfo.getParentBuildNumber());

    Registry registry = RegistryUtil.getRegistry();

    Map<String, Object> properties = new HashMap<>();

    properties.put("module.service.lifecycle", "database.initialized");
    properties.put("service.vendor", ReleaseInfo.getVendor());
    properties.put("service.version", ReleaseInfo.getVersion());

    _dbModuleServiceLifecycleServiceRegistration =
        registry.registerService(
            ModuleServiceLifecycle.class, new ModuleServiceLifecycle() {}, properties);

    // Check class names

    if (_log.isDebugEnabled()) {
      _log.debug("Check class names");
    }

    ClassNameLocalServiceUtil.checkClassNames();
  }