系统可以很好地使用pax-runner,但不与卡拉夫工作税务例外游泳池很忙

unftdfkk  于 2021-06-15  发布在  Cassandra
关注(0)|答案(0)|浏览(277)

我正在公司开发一个特性,它旨在替代osgideploy(它现在使用paxrunner和equinox作为框架,使用pax:provision),一个完整的卡拉夫集装箱。以下是我正在做的步骤:
1-运行pax:directory instead “的”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个包都处于活动状态。
obs公司。
我已经尝试生成features.xml来自动部署应用程序,但是没有成功。
我用webconsole特性引导karaf,因此karaf默认启动时大约有50个bundle,比如logf4j、jetty等等。我启动我的karafprovisioner作为默认值与此功能一起使用。
使用pax runner,所有捆绑包正常启动。系统运行良好。
此方法部分有效,因为所有捆绑包都处于活动模式,但问题是:
该应用程序使用一个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的问题,接口和datastax,是否与osgi相关?(obs。1-接口使用osgi环境的一个属性来了解cassandra数据库的主机和端口,这个属性是可以的。2-启动数据库,并使用dbeaver和cqlsh对此进行检查。)
3-有没有办法在不修改接口的情况下解决这个问题?也许使用一些配置?
同样,使用pax runner(使用equinox简单包)一切都很好。当我尝试在karaf容器中部署应用程序时,问题就出现了。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题