Как использовать несколько свойств-заполнителей в JBoss Fuse Blueprint? - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь использовать несколько файлов свойств из каталога etc в JBoss Fuse (6.3) Blueprint .Мой первый подход был следующим:

<cm:property-placeholder persistent-id="foo" />
<cm:property-placeholder persistent-id="bar" />

Я думал, что это сработает, как описано в Документация Red Hat :

Использованиенесколько заполнителей свойств в Blueprint

Разрешено определять несколько заполнителей свойств в XML-файле Blueprint (то есть определять несколько элементов cm: property-placeholder, которые ссылаются на разные постоянные идентификаторы).Однако следует помнить одну вещь: это может привести к конфликту, если два свойства из разных заполнителей свойств имеют одинаковые имена.В этом случае следующие правила определяют, какое свойство имеет приоритет:

  1. Явно определенные параметры свойств (например, определенные в файле etc/PersistentID.cfg) имеют приоритет над параметрами свойств по умолчанию (определенными вэлемент cm:default-properties).

  2. Если существует более одного явного параметра для данного свойства, параметр из последнего заполнителя свойства в файле Blueprint имеет приоритет.

  3. Настройки свойств по умолчанию (определенные в элементе cm:default-properties) имеют самый низкий приоритет.

Но затем я получил ошибкучто Multiple placeholders with the same prefix and suffix are not allowed:

2018-05-15 17:43:59,065 | ERROR | /s42http1/deploy | BlueprintContainerImpl           | 22 - org.apache.aries.blueprint.core - 1.8.0 | Unable to start blueprint container for bundle myBlueprint/0.0.1.SNAPSHOT
org.osgi.service.blueprint.container.ComponentDefinitionException: Multiple placeholders with the same prefix and suffix are not allowed
        at org.apache.aries.blueprint.ext.PlaceholdersUtils.validatePlaceholder(PlaceholdersUtils.java:49)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.compendium.cm.CmNamespaceHandler.parsePropertyPlaceholder(CmNamespaceHandler.java:318)[20:org.apache.aries.blueprint.cm:1.1.0]
        at org.apache.aries.blueprint.compendium.cm.CmNamespaceHandler.parse(CmNamespaceHandler.java:199)[20:org.apache.aries.blueprint.cm:1.1.0]
        at org.apache.aries.blueprint.parser.Parser.parseCustomElement(Parser.java:1369)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.parser.Parser.loadComponents(Parser.java:427)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.parser.Parser.populate(Parser.java:331)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:350)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:277)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:300)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:269)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:265)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:255)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)[22:org.apache.aries.blueprint.core:1.8.0]
        at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1127)[org.apache.felix.framework-4.4.1.jar:]
        at org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)[org.apache.felix.framework-4.4.1.jar:]
        at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:484)[org.apache.felix.framework-4.4.1.jar:]
        at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4429)[org.apache.felix.framework-4.4.1.jar:]
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2100)[org.apache.felix.framework-4.4.1.jar:]
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976)[org.apache.felix.framework-4.4.1.jar:]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260)[10:org.apache.felix.fileinstall:3.6.4]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233)[10:org.apache.felix.fileinstall:3.6.4]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundles(DirectoryWatcher.java:1221)[10:org.apache.felix.fileinstall:3.6.4]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:515)[10:org.apache.felix.fileinstall:3.6.4]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365)[10:org.apache.felix.fileinstall:3.6.4]
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316)[10:org.apache.felix.fileinstall:3.6.4]

Итак, я установил placeholder-prefix и placeholder-suffix:

<cm:property-placeholder persistent-id="foo" />
<cm:property-placeholder persistent-id="bar" 
    placeholder-prefix="$(" placeholder-suffix=")"/>

С этим я смогу получить доступ к etc/foo.cfg с$ {} и etc/bar.cfg Свойства с $ (), верно?

Нет:

Caused by: java.io.IOException: Could not open $(bar_property) as a file, class path resource, or URL.
        at org.apache.camel.util.jsse.JsseParameters.resolveResource(JsseParameters.java:182)[199:org.apache.camel.camel-core:2.17.0.redhat-630329]
        at org.apache.camel.util.jsse.KeyStoreParameters.createKeyStore(KeyStoreParameters.java:174)[199:org.apache.camel.camel-core:2.17.0.redhat-630329]
        at org.apache.camel.util.jsse.KeyManagersParameters.createKeyManagers(KeyManagersParameters.java:108)[199:org.apache.camel.camel-core:2.17.0.redhat-630329]
        at org.apache.camel.util.jsse.SSLContextParameters.createSSLContext(SSLContextParameters.java:256)[199:org.apache.camel.camel-core:2.17.0.redhat-630329]
        at org.apache.camel.component.http4.HttpComponent.createConnectionRegistry(HttpComponent.java:285)[296:org.apache.camel.camel-http4:2.17.0.redhat-630329]
        at org.apache.camel.component.http4.HttpComponent.createEndpoint(HttpComponent.java:227)[296:org.apache.camel.camel-http4:2.17.0.redhat-630329]
        at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:114)[199:org.apache.camel.camel-core:2.17.0.redhat-630329]
        at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:569)[199:org.apache.camel.camel-core:2.17.0.redhat-630329]
        ... 36 more

И я проверил, что bar_property существует в etc/bar.cfg.

Так как же использовать несколько свойств-заполнителей в JBoss Fuse Blueprints?Я использую JBoss Fuse 6.3.0.329 .

1 Ответ

0 голосов
/ 15 мая 2018

Когда я набирал этот вопрос, я нашел ответ прямо над цитируемым разделом документации RedHat ( Отладка резиновой утки ;-):

Синтаксис {{prefix}} заменяет значение переменной prefix в XML-файл чертежа. Свойства OSGi устанавливаются с использованием следующих элементов XML:

cm:property-placeholder
Этот элемент дает вам доступ к свойствам, связанным с указанным постоянным идентификатором. После определения этого элемента вы можете использовать синтаксис {{PropName}} для замены переменных, принадлежащих указанному постоянному идентификатору.

cm:property-placeholder/cm:default-properties
При желании можно указать значения по умолчанию для свойств, определив элементы cm:property внутри элемента cm:default-properties. Если соответствующий файл etc/PersistentID.cfg определяет значения свойств, они будут использоваться вместо этого.

Таким образом, определение свойства-заполнителя было следующим:

<cm:property-placeholder persistent-id="foo" />
<cm:property-placeholder persistent-id="bar" 
    placeholder-prefix="$(" placeholder-suffix=")"/>

Но в моем примере это свойство должно использоваться с {{bar_property}} вместо $(bar_property).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...