Система работает нормально, используя Pax-runner, но не работает с Karaf.Datastax исключение.Бассейн занят - PullRequest
0 голосов
/ 22 ноября 2018

Я работаю над функцией, здесь, в компании, которая стремится заменить развертывание OSGi (которое теперь использует Pax-runner с равноденствием в качестве фреймворка, используя pax: provision), для полного контейнера Karaf.Вот шаги, которые я делаю:

1 - Запустите pax: directory вместо «pax: provision», чтобы сгенерировать файл с именем config.ini , где имеет порядок запуска пакетов.

2- Я копирую все пакеты, которые были объединены в папку с помощью pax: directory , в корневой каталог karaf.

3- Я создал проект Java (KarafProvisioner), пакет osgi, который читает пакеты из config.ini и запускает пакеты jar.Логика сети показана ниже.

@Activate
protected void activate(BundleContext pBundleContext) throws IOException, InvalidSyntaxException, BundleException
{
    LOG.info(LogConstants.ACTIVATING_SERVICE, this);
    while (getActiveBundles(pBundleContext) < pBundleContext.getBundles().length - 2)
    {
        startAllBundles(pBundleContext);
    }
    File bundleList = new File(BUNDLE_LIST);
    String bundleListString = FileUtils.readFileToString(bundleList, "UTF-8");
    Matcher regexBundleNameMatcher = regexBundleName.matcher(bundleListString);
    while (regexBundleNameMatcher.find() == true)
    {
        String jarBundle = regexBundleNameMatcher.group(0);
        Matcher regexBundleSymbolicNameMatcher = regexBundleSymbolicName.matcher(jarBundle);
        String bundle = "";
        if (regexBundleSymbolicNameMatcher.find())
        {
            bundle = regexBundleSymbolicNameMatcher.group(0);
        }
        if (true
                && !bundle.contains(FELIX_SCR)
                && !bundle.contains(FELIX_WEBCONSOLE)
                && !bundle.contains(EQUINOX_CM)
                && !bundle.contains(COMMONS_IO)
                && !bundle.contains(JAVAX_MAIL)
                && !bundle.contains(OPS4J_PAX_LOGGING_API)
                && !bundle.contains(JETTY_GROUP_ID))
        {
            startBundle(pBundleContext, jarBundle, bundle);
            long bundleID = findBundle(pBundleContext, bundle);
            BUNDLE_STATUS status = getBundleStatusByID(pBundleContext, bundleID);
            while (status == BUNDLE_STATUS.STARTING)
            {
                status = getBundleStatusByID(pBundleContext, bundleID);
            }
        }
    }
    //Start Devenv Configurator
    //        startBundle(pBundleContext, bundleNameDevenvConfigurator, DEVENV_CONFIGURATOR);
    //Continue verifying until all the possible bundles have been active
    while (getActiveBundles(pBundleContext) < pBundleContext.getBundles().length - 5)
    {
        startAllBundles(pBundleContext);
    }
    LOG.info(LogConstants.ACTIVATED_SERVICE, this);
}

С помощью этого комплекта KarafProvisioner я могу запустить все комплекты и поставить цикл, чтобы продолжать все начинать.Все выглядит как работает, потому что все 350 пакетов, которые есть в системе, являются ACTIVE .

Obs .

  • Я уже пытался создать файл functions.xml для автоматического развертывания приложения, но он не работал.

  • Я загружаю Karafс функцией веб-консоли, поэтому Karaf запускается по умолчанию примерно с 50 пакетами, такими как logf4j, jetty и так далее.Я запускаю свой KarafProvisioner по умолчанию вместе с этой функцией.

  • При использовании pax-runner все пакеты запускаются нормально.И система работает нормально.

Этот подход работает частично, потому что все пакеты находятся в режиме ACTIVE, но ПРОБЛЕМА это:

Приложение использует базу данных Cassandra с внутренним Java-проектом, который инкапсулирует все операции, и создает общий интерфейс для управления хранилищем.При использовании pax-runner все работает нормально, но при использовании Karaf эта ошибка отображается:

%PARSER_ERROR[Exception]ConfidentialInternalInterfaceExcpetion: Server overloaded. The query could not be executed at the specified priority level
at ConfidentialInternalInterfaceProject(ExceptionHandler.java:65)
at ConfidentialInternalInterfaceProject(PersistenceHandler.java:840)
at ConfidentialInternalInterfaceProject(PersistenceHandler.java:852)
at ConfidentialInternalInterfaceProject(PersistenceHandler.java:1041)
at ConfidentialInternalInterfaceProject(PersistenceHandler.java:1061)
at ConfidentialInternalInterfaceProject(PersistenceHandler.java:517)
at ConfidentialInternalInterfaceProject(StorageConfigurationBootstrap.java:105)
at ConfidentialInternalInterfaceProject(CilInitializer.java:182)
at ConfidentialInternalInterfaceProject(DevenvConfigurator.java:743)
at ConfidentialInternalInterfaceProject(DevenvConfigurator.java:53)
at ConfidentialInternalInterfaceProject(DevenvConfigurator.java:916)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.0.1:64169 (com.datastax.driver.core.exceptions.BusyPoolException: [/127.0.0.1] Pool is busy (no available connection and timed out after 5000 MILLISECONDS)))
at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:84)
at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:37)
at com.datastax.driver.core.DriverThrowables.propagateCause(DriverThrowables.java:37)
at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:245)
at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:68)
at ConfidentialInternalInterfaceProject(PersistenceHandler.java:836)
... 11 common frames omitted

Мои вопросы:

1- тот факт, что я использую вспомогательный пакет для загрузки всех оставшихся пакетов, влияет на поток системы?Учитывая, что все становится АКТИВНЫМ с использованием pax-runner.

2- Имеет ли проблема с Cassandra, интерфейсом и датастаксом какую-либо связь с OSGi? (Obs. 1- Интерфейс использует свойство из среды OSGi, чтобы узнать хост и порт базы данных Cassandra, и это свойство в порядке. 2- База данных запущена и проверяет это с помощью Dbeaver и cqlsh .)

3- Есть ли способ решить эту проблему без изменения интерфейса?Может быть, с использованием какой-либо конфигурации?

Опять же, с использованием pax-runner equinox простых комплектов) все работает отлично.Проблема возникает, когда я пытаюсь развернуть приложение в контейнере Karaf.

...