apache-camel - 为什么以下捆绑包处于宽限期?
问题描述
我有两个包含camel-activemq 东西的蓝图文件包。喜欢
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
..
<cm:property-placeholder id="jms.placeholder" persistent-id="com.mycompany.context">
<cm:default-properties>
<cm:property name="activemq.url" value="${activemq.url}" />
<cm:property name="activemq.user" value="${activemq.user}" />
<cm:property name="activemq.password" value="${activemq.password}" />
</cm:default-properties>
</cm:property-placeholder>
..
<camelContext xmlns="http://camel.apache.org/schema/blueprint"
id="quartzCamelPublisher"
autoStartup="true">
<route id="failedMessagePublisher">
<from uri="vm:failedEventQueue" />
<to pattern="InOnly" uri="activemq:queue:not-success"/>
</route>
</camelContext>
<reference id="txMgr" interface="javax.transaction.TransactionManager" />
<bean id="xaConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">
<property name="brokerURL" value="${activemq.url}" />
<property name="userName" value="${activemq.user}" />
<property name="password" value="${activemq.password}" />
<property name="watchTopicAdvisories" value="false" />
</bean>
<bean id="jcaConnectionFactory" class="org.apache.activemq.jms.pool.JcaPooledConnectionFactory"
init-method="start" destroy-method="stop">
<property name="transactionManager" ref="txMgr"/>
<property name="maxConnections" value="10" />
<property name="name" value="amq" />
<property name="connectionFactory" ref="xaConnectionFactory"/>
</bean>
<bean id="jmsTxConf" class="org.apache.activemq.camel.component.ActiveMQConfiguration">
<property name="connectionFactory" ref="jcaConnectionFactory" />
<property name="requestTimeout" value="10000" />
<property name="transactionTimeout" value="30" />
<property name="transacted" value="true" />
<property name="cacheLevelName" value="CACHE_NONE" />
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" >
<property name="configuration" ref="jmsTxConf" />
</bean>
</blueprint>
如果我在第二个捆绑蓝图文件中使用常量值,则一切正常。一旦我在那里使用 ${activemq.url} 之类的配置,它看起来找不到它并尝试无限次数地获取它。第二个捆绑包无法解决。
018-05-22 13:00:13,133 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieving property activemq.url
2018-05-22 13:00:13,133 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieved property activemq.url value from defaults ${activemq.url}
2018-05-22 13:00:13,133 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieving Value from expression: activemq.url
2018-05-22 13:00:13,133 | DEBUG | rint Extender: 2 | CmPropertyPlaceholder | 34 - org.apache.aries.blueprint.cm - 1.1.0 | Retrieving property value activemq.url from configuration with pid com.mycompany.context
2018-05-22 13:00:13,138 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieving property activemq.url
2018-05-22 13:00:13,139 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieved property activemq.url value from defaults ${activemq.url}
2018-05-22 13:00:13,139 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieving Value from expression: activemq.url
2018-05-22 13:00:13,140 | DEBUG | rint Extender: 2 | CmPropertyPlaceholder | 34 - org.apache.aries.blueprint.cm - 1.1.0 | Retrieving property value activemq.url from configuration with pid com.mycompany.context
2018-05-22 13:00:13,140 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieving property activemq.url
2018-05-22 13:00:13,141 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieved property activemq.url value from defaults ${activemq.url}
2018-05-22 13:00:13,141 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieving Value from expression: activemq.url
2018-05-22 13:00:13,141 | DEBUG | rint Extender: 2 | CmPropertyPlaceholder | 34 - org.apache.aries.blueprint.cm - 1.1.0 | Retrieving property value activemq.url from configuration with pid com.mycompany.context
2018-05-22 13:00:13,143 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieving property activemq.url
2018-05-22 13:00:13,143 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieved property activemq.url value from defaults ${activemq.url}
2018-05-22 13:00:13,144 | DEBUG | rint Extender: 2 | PropertyPlaceholder | 35 - org.apache.aries.blueprint.core - 1.8.2 | Retrieving Value from expression: activemq.url
2018-05-22 13:00:13,144 | DEBUG | rint Extender: 2 | CmPropertyPlaceholder | 34 - org.apache.aries.blueprint.cm - 1.1.0 | Retrieving property value activemq.url from
..
..
..
如果我使用第二个配置文件,它只是像 com.mycompany.context_1 这样的重复配置文件,那么第一个包无法通过以下事务相关消息解析。以下捆绑包处于优雅状态的原因是什么?
karaf@root()> bundle:diag 128
ReturnContext :: My Bundle (128)
----------------------------------------------
Status: GracePeriod
Blueprint
22/5/18 12:53 PM
Missing dependencies:
(&(objectClass=org.apache.aries.blueprint.NamespaceHandler)(osgi.service.blueprint.namespace=http://aries.apache.org/xmlns/transactions/v2.0.0))
Declarative Services
karaf@root()> feature:list | grep transaction
transaction-api | 1.2.0 | | Started | enterprise-4.1.2 |
transaction-manager-geronimo | 1.3.3 | | Started | enterprise-4.1.2 | Geronimo Transaction Manager
transaction-manager-narayana | 5.5.2.Final | | Uninstalled | enterprise-4.1.2 | Narayana Transaction Manager
transaction | 2.0.0 | | Started | enterprise-4.1.2 | OSGi Transaction Manager
karaf@root()>
解决方案
从蓝图文件中删除所有默认条目已解决此问题。并且使用 cofig 文件中的属性也可以正常工作。
<?xml version="1.0" encoding="UTF-8"?>
<blueprint ...
<cm:property-placeholder id="jms.placeholder" persistent-id="com.mycompany.context">
<cm:default-properties>
</cm:default-properties>
</cm:property-placeholder>
....
<bean id="xaConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">
<property name="brokerURL" value="${activemq.url}" />
<property name="userName" value="${activemq.user}" />
<property name="password" value="${activemq.password}" />
<property name="watchTopicAdvisories" value="false" />
</bean>
...
</blueprint>
推荐阅读
- php - 用户如何在 EasyAdmin 中查看自己的产品,而管理员可以查看所有产品?
- mysql - SQLSTATE[HY000]:一般错误:1436 共享主机上的线程堆栈溢出
- html - 带有输入字段的 CSS Grid:对齐问题
- laravel - 扩展 Laravel Mix 以预处理响应式图像
- git - 在 Windows 10 上将 Git 与 Visual Studio 2012 一起使用的问题
- swift - 如何在 swift5 中创建类似以下视频的圆形动画?
- flask - 增加 FlaskJsonSchema 错误消息的详细程度
- python - 如何使用 for 循环为列表中的每个项目创建按钮并在文本框下方创建按钮?
- c - 初始化指针的内容是什么?
- python - 使用 numpy 在 Python-Maple 中覆盖数组值