- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编写一个 JUnitTest,它可以确保我的 Karaf 服务器正常启动并且所有(需要的)Bundle 都已安装并处于 Activity 状态。
为此我有一个测试,调用一个辅助方法“assertBundleState”来确保给定的 Bundle 处于给定的状态。测试如下所示:
@Test (timeout=30000L)
public void testBundlesStarted() throws Exception {
assertBundleState("bundle.Name", BundleLifecycleState.Active);
... <other bundles in similar way>
}
这在过去工作得很好。从未达到超时。
不幸的是,我现在必须加载一个包,这需要更长的时间才能启动。因此,在执行测试时,Bundles 尚未启动。因此测试失败。
我已经在 BeforeClass 方法中尝试过 sleep ,但我对这个解决方案并不是很满意。因为我不能确保给定的 sleep 时间在每台机器上每次都足够。所以我正在寻找一些基于事件的解决方案来与 Karaf 交互。
@BeforeClass
public static void init() throws Exception {
Thread.sleep(120000L);
}
有没有人知道我可以如何以更好的方式解决它?谢谢
最佳答案
听起来 assertBundleState
可以成功确定 Karaf 服务器是否已启动并“准备就绪”。但问题是你不知道要等多久才能检查这个;如果您等待的时间不够长,就会有漏报的风险;如果等待的时间过长,那么您的构建运行时间就会被错误地延长。
我假设您无法注册某种监听器或回调 Hook ,Karaf 服务器将在“准备就绪”时调用这些 Hook 。事实上,即使那是可能的,您仍然必须应对失败情况,即 Karaf 服务器未启动(因此永远无法调用监听器)。
因此,我认为您只需等待 Karaf 服务器可用,并隐藏 Thread.sleep
调用的丑陋之处以及等待时间过长可能造成的时间损失。你可以使用 Awaitility勾选那些框。例如:
@Test
public void aTest() {
// run your test
// this will wait until Karaf is available for at most 10 seconds
// and will check every 100ms so if Karaf becomes available earlier
// than 10 seconds then the test will complete almost as soon as
// it becomes available but if Karaf does not become available
// within 10 seconds then the test will fail
await().atMost(10, SECONDS).until(karafIsAvailable());
// assert
// ...
}
private Callable<Boolean> karafIsAvailable() {
return new Callable<Boolean>() {
public Boolean call() throws Exception {
// return true if your condition has been met
// e.g. assertBundleState
return ...;
}
};
}
关于java - Karaf Startup 的 JUnitTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47323120/
我是 apache karaf 的新手。 当我通过在 Windows 计算机上执行 bat 文件来启动 apache karaf 时。它一直给我以下错误 C:\karaf\apache-karaf-4
在 feature.xml(Apache Karaf 配置机制)标签中 feature有一个 dependency属性。这个属性有什么作用? 例如: custom-feature-name 我在哪里可
当我使用 dev:create-dump 时,转储中的线程堆栈不完整。是否可以将 Karaf 配置为: 转储全部堆栈? 检测死锁? 最佳答案 dev:create-dump : 创建一个带有信息的存档
如何从 karaf> 提示符为特定包设置不同的日志级别? log:set TRACE为所有人设置 TRACE 级别的日志记录。我想要 INFO/DEBUG 用于特定包的 ROOT 和 TRACE 级别
我正在尝试使用 Karaf 来托管 REST 服务。我使用的是 4.0.0 M2 版本(因为我的原型(prototype)还处于早期阶段)。根据我的拼凑,为了托管 REST 服务,我可以使用 Kara
不幸的是,称为 Karaf 的 OSGi 容器实现的文档很差。概念被擦掉,术语之间的关系没有建立。 我在阅读了 Karaf 开发人员撰写的文本后得出的结论(我猜?): 当 OSGi 容器中没有其他包(
我正在使用 karaf 服务器来部署和安装功能。我安装了一个功能“测试功能”,然后我从存储库中删除了它。在激活其他一些功能时,它给了我一个异常(exception)—— org.osgi.servic
Karaf v2.3.0,org.apache.aries.blueprint.core:1.0.1,在从另一个包导入的服务上调用接口(interface)方法时抛出 ClassCastExcepti
我正在学习 Karaf,按照本教程:https://github.com/cschneider/Karaf-Tutorial/tree/master/tasklist 我按照要求构建了它。然后我尝试像
我目前正在为 karaf 开发 bundle 并有一些问题... 我写了一个基于 cxf 的 bundle/webservice,我尝试在 karaf 中部署它,但它无法启动那个 bundle,因为它
如何在Karaf中设置虚拟主机? Karaf 嵌入了 Jetty,因此我使用以下内容制作了 context.xml 并将其放入 /etc 文件夹中: / /webapps/testWAB_w
我正在学习 Karaf,按照本教程:https://github.com/cschneider/Karaf-Tutorial/tree/master/tasklist 我按照要求构建了它。然后我尝试像
mvn:org.antlr/antlr4-runtime/4.5.3 wrap:mvn:org.antlr/antlr4-runtime/4.0 我有两个功能正在使用antlr
如何在 apache karaf 中重复之前的命令?我尝试了向上和向下箭头,但没有收到之前的命令。 最佳答案 如果您阅读了 Apache Karaf 的手册,则可以使用默认箭头在命令历史记录中导航;
我有一个关于 karaf 和功能加载的问题。我有一个 kar 文件,其中包含我的应用程序的所有 bundle 。它在PROD环境上发布。它是基于版本 4.0.4 的自定义构建离线 Karaf - 并且
我已经尝试过此 link 中的组件工厂示例。接口(interface): package com.java.examplefactoryservice; public interface Exampl
我正在运行 Karaf,我在 persistence.xml 中有一个数据源(指向 SQL Server DB),并且我正在尝试执行插入查询。 但是我遇到了这个异常: javax.persistenc
我决定在 OSGI 和 Karaf 之上构建一个应用程序——我真的很喜欢这些东西。但是,我在本地开发机器上的日常部署有点挣扎。我的意思是.. 我做了一个改变,然后我想在我本地的 Karaf 实例上测试
我对 Apache Karaf 到底是什么有点困惑。 您能否说 Apache Karaf 包括以下内容: Apache Felix(OSGi 4.2 框架的实现) Apache Aries(Bluep
是否有人设法在Apache Karaf上运行Grails 3应用程序? 有一个关于如何使用Grails 2进行操作的教程,但它似乎已经过时且容易出错。 我将不胜感激,即使它是高级要点,也能提供任何帮助
我是一名优秀的程序员,十分优秀!