Я написал @компонент в DS, который предполагается создать и активировать в нескольких экземплярах. Чтобы проверить, что я написал экзамен по экзамену pax, где я загружаю karaf и добавил scr. Все работает отлично, но ... это не будет создавать экземпляры служб, пока метод испытания закончились, таким образом, не дает мне никакого места, чтобы делать утверждения и т.д.Конфигурация Admin и декларативные службы, не созданные во время фазы тестирования экзамена pax
@Test
public final void testing() throws Exception {
props = createProperties(user, pass, host);
cfg = configurationAdmin.
createFactoryConfiguration(CouchbaseConnectionProvider.SVC_NAME);
cfg.update(props);
final ServiceTracker tracker = new ServiceTracker(bundleContext, CouchbaseConnectionProvider.class, null);
tracker.open();
CouchbaseConnectionProvider svc = (CouchbaseConnectionProvider) tracker.waitForService(5000);
// It will wait 5s and after testing exits it will create the service
}
Что я здесь делаю неправильно? С момента выхода метода он будет правильно создавать и активировать услугу со всеми свойствами.
Могу добавить, что метод испытаний с использованием нити «ion (3) -127.0.0.1» и когда DS создает экземпляр использует поток «84-b6b23468b652» ».
Приветствия, Марио
Update 3 Там, где на самом деле две ошибки, одна на моей стороне и один в другом месте (в ФЕЛИКС CM?), Так как конфиг где доступ к которой мой интерфейс осущ расслоение через некоторое время (в то время как контейнер закрывался), но он должен быть действительно привязан к пакету тестирования pax (и, конечно же, к CM) и никогда не был «свободным: d», когда контейнер закрывался. Где это ошибка, я не знаю - я завершу минималистский проект mvn и попробую парней felix cm, и я опубликую здесь обновление.
Update 2 Я подал ошибку (https://ops4j1.jira.com/browse/PAXEXAM-725), если кто-то заинтересован, чтобы следить за прогрессом (если есть ошибка;))
Update 1 Это моя конфигурация в TestClass
package se.crossbreed.foundation.persistence.provider.couchbase;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class CouchbaseConnectionProviderTests extends CbTestBase {
...
}
Вот конфигурация в TestClass, который будет использовать базовый класс для вариантов базовых.
@org.ops4j.pax.exam.Configuration
public Option[] config() {
List<Option> options = super.baseConfig();
options.addAll(Arrays
.asList(features(karafStandardRepo, "scr"),
mavenBundle()
.groupId("se.crossbreed.foundation.persistence")
.artifactId(
"se.crossbreed.foundation.persistence.core")
.versionAsInProject(),
mavenBundle().groupId("io.reactivex")
.artifactId("rxjava").versionAsInProject(),
mavenBundle()
.groupId("se.crossbreed.ports.bundles")
.artifactId(
"se.crossbreed.ports.bundles.couchbase.java-client")
.versionAsInProject(),
mavenBundle()
.groupId("se.crossbreed.foundation.persistence")
.artifactId(
"se.crossbreed.foundation.persistence.provider.couchbase")
.versionAsInProject()));
// above bundle is the one I'm trying to test and where
// this test resides in (project wise)
return options.toArray(new Option[] {});
}
Базовая конфигурация получается из базового класса
protected List<Option> baseConfig() {
return new ArrayList<Option>(
Arrays.asList(new Option[] {
logLevel(LogLevel.INFO),
karafDistributionConfiguration().frameworkUrl(karafUrl)
.unpackDirectory(new File("target", "exam"))
.useDeployFolder(false),
configureConsole().ignoreLocalConsole(),
mavenBundle().groupId("biz.aQute.bnd")
.artifactId("bndlib").version("${version.bndlib}"),
mavenBundle()
.groupId("se.crossbreed.foundation")
.artifactId(
"se.crossbreed.foundation.core.annotations")
.versionAsInProject(),
mavenBundle()
.groupId("se.crossbreed.foundation")
.artifactId(
"se.crossbreed.foundation.core.interfaces")
.versionAsInProject() }));
}
Пакет для теста
package se.crossbreed.foundation.persistence.provider.couchbase;
И CouchbaseConnectionProvider находится на том же пакете
package se.crossbreed.foundation.persistence.provider.couchbase;
import se.crossbreed.foundation.persistence.core.CbDbConnectionProvider;
public interface CouchbaseConnectionProvider extends CbDbConnectionProvider {
public final static String SVC_NAME = "couchbase.connection.provider";
}
ntation:
package se.crossbreed.foundation.persistence.provider.couchbase.impl;
@Component(immediate = true, name =
CouchbaseConnectionProvider.SVC_NAME, provide = {
CouchbaseConnectionProvider.class, CbDbConnectionProvider.class,
CbService.class }, properties = { "providerType=DOCUMENT" },
configurationPolicy = ConfigurationPolicy.require)
public class CouchbaseConnectionProviderImpl implements
CouchbaseConnectionProvider { ... }
Вот структура проекта Поставщика Couchbase и тест, который я неисправного чтобы добраться до работы (пока после испытания закончились;).
Или, скорее, я сделал то, что я использую правильное расположение пакета, так как это то, что нужно, а не первый захват ... cheers/mario –