我正在公司开发一个特性,它旨在替代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容器中部署应用程序时,问题就出现了。
暂无答案!
目前还没有任何答案,快来回答吧!