Greetings again, Dejan:
I tried setting up another Remote broker using the 5.40 release, just dropping
my existing configuration files into place.
I'm getting this parsing error on startup:
ERROR: java.lang.RuntimeException: Failed to execute start task. Reason:
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 86
in XML document from class path resource [activemq.xml] is invalid; nested
exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid
content was found starting with element 'amq:destinationPolicy'. One of
'{"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:producerSystemUsage,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:proxyConnectors,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:regionBroker,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:services,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:shutdownHooks,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:sslContext,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:systemUsage,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:taskRunnerFactory,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:tempDataStore,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:transportConnectorURIs,
"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>:transportConnectors,
WC[##other:"http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>]}'
is expected.
The content of my activemq.xml is pasted below. Even though i'm forcing the
schemaLocation to
http://activemq.apache.org/schema/core/activemq-core-5.3.0.xsd, is AMQ trying
to validate teh file against the 5.4.0 schema?
<beans
xmlns="http://www.springframework.org/schema/beans"<http://www.springframework.org/schema/beans>
xmlns:amq="http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<http://www.w3.org/2001/XMLSchema-instance>
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.3.0.xsd">
<!--
Allows us to use system properties as variables in this configuration
file. For more information, see the Javadoc:
http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html
-->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>file:${activemq.base}/conf/messaging.conf</value>
<value>file:${activemq.base}/conf/credentials.properties</value>
</list>
</property>
</bean>
<!--
The <broker> element is used to configure the ActiveMQ broker. Tips: -
Change the brokerName attribute to something unique
-->
<broker
xmlns="http://activemq.apache.org/schema/core"<http://activemq.apache.org/schema/core>
brokerName="${ApplianceID}" useJmx="true" advisorySupport="true"
dataDirectory="${activemq.base}/data">
<!-- Define Queue and Topic Names -->
<destinations>
<!-- for remote_messaging app -->
<queue
physicalName="org.nwea.queues.local.inbound.notifications_and_alerts"/>
<queue
physicalName="org.nwea.queues.local.internal.invalidmessages"/>
<queue
physicalName="org.nwea.queues.local.internal.updated_entities_to_mto"/>
<queue
physicalName="org.nwea.queues.local.internal.notifications_and_alerts"/>
<queue
physicalName="org.nwea.queues.local.internal.from_central.hold_for_upgrade"/>
<queue physicalName="org.nwea.queues.local.outbound.data_updates"/>
<!-- for Reports app -->
<queue physicalName="inbound.rptreq.q"/>
<queue physicalName="internal.largerptreq.q"/>
<queue physicalName="internal.rptreq.q"/>
<queue physicalName="inbound.tt2etl.q"/>
<queue physicalName="internal.tt2etl.q"/>
</destinations>
<plugins>
<jaasAuthenticationPlugin configuration="activemq-domain"/>
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry topic=">"
read="admins"
write="admins"
admin="admins"/>
<authorizationEntry topic="ActiveMQ.Advisory.>"
read="remotepeer"
write="remotepeer"
admin="remotepeer"/>
<authorizationEntry topic="org.nwea.topics.>"
write="remotepeer"
admin="remotepeer"/>
<authorizationEntry queue=">"
read="admins"
write="admins"
admin="admins"/>
<authorizationEntry
queue="org.nwea.queues.central.>"
read="remotepeer"
admin="remotepeer"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
<!--
Examples of destination-specific policies using destination names or
wildcards. For more information, see:
http://activemq.apache.org/per-destination-policies.html
http://activemq.apache.org/destination-features.html
http://activemq.apache.org/slow-consumer-handling.html
http://activemq.apache.org/subscription-recovery-policy.html
-->
<destinationPolicy>
<policyMap>
<policyEntries>
<!-- originally set to 5mb -->
<policyEntry queue=">" producerFlowControl="true"
memoryLimit="${remote_baseQueueMemory}mb"/>
<policyEntry topic=">" producerFlowControl="true"
memoryLimit="${remote_baseTopicMemory}mb">
<dispatchPolicy>
<!--
Use total ordering, see:
http://activemq.apache.org/total-ordering.html
-->
<strictOrderDispatchPolicy/>
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<!--
Upon subscription, receive the last image sent
on the
destination.
-->
<lastImageSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
</policyEntry>
<!-- nwea dead letter policy -->
<!--
http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd.html
-->
<!-- originally set to 100mb -->
<policyEntry queue="org.nwea.>"
memoryLimit="${remote_deadLetterQueueMemory}mb">
<deadLetterStrategy>
<individualDeadLetterStrategy processExpired="true"
processNonPersistent="true"
queuePrefix="nwea_dlq_queue.">
</individualDeadLetterStrategy>
</deadLetterStrategy>
</policyEntry>
<!-- originally set to 100mb -->
<policyEntry topic="org.nwea.>"
memoryLimit="${remote_deadLetterTopicMemory}mb">
<deadLetterStrategy>
<individualDeadLetterStrategy processExpired="true"
processNonPersistent="true"
topicPrefix="nwea_dlq_topic.">
</individualDeadLetterStrategy>
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<!--
The managementContext is used to configure how ActiveMQ is exposed
in
JMX. By default, ActiveMQ uses the MBean server that is started by
the JVM. For more information, see:
http://activemq.apache.org/jmx.html
-->
<managementContext>
<!-- originally set to true, port 1199 -->
<managementContext createConnector="${remote_enableJmx}"
connectorPort="${remote_jmxConnectorPort}"/>
</managementContext>
<!--
The network connectors are used to create a network of brokers. For
more information, see:
http://activemq.apache.org/networks-of-brokers.html
-->
<networkConnectors>
<networkConnector name="${ApplianceID}"
userName="${networkConnectorUserName}"
password="${networkConnectorPassword}"
uri="static://(ssl://${Central.ServerHostname}:${central_sslPortNumber})"
duplex="true"
dynamicOnly="true">
<dynamicallyIncludedDestinations>
<queue physicalName="org.nwea.queues.central.>"/>
<topic physicalName="org.nwea.topics.>"/>
</dynamicallyIncludedDestinations>
<staticallyIncludedDestinations>
<queue physicalName="org.nwea.queues.central.>"/>
<topic physicalName="org.nwea.topics.>"/>
</staticallyIncludedDestinations>
</networkConnector>
</networkConnectors>
<!--
Configure message persistence for the broker. The default
persistence mechanism is the AMQ store (identified by the
amqPersistenceAdapter). For more information, see:
http://activemq.apache.org/persistence.html
-->
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data/${ApplianceID}/kahadb"
indexWriteBatchSize="1000" enableIndexWriteAsync="true"
enableJournalDiskSyncs="false"/>
</persistenceAdapter>
<!-- ssl configuration -->
<sslContext>
<sslContext
keyStore="file:${activemq.base}/conf/broker.ks"<file:${activemq.base}/conf/broker.ks>
keyStorePassword="password"
trustStore="file:${activemq.base}/conf/broker.ts"<file:${activemq.base}/conf/broker.ts>
trustStorePassword="password"/>
</sslContext>
<!--
The systemUsage controls the maximum amount of space the broker will
use before slowing down producers. For more information, see:
http://activemq.apache.org/producer-flow-control.html
-->
<systemUsage>
<systemUsage>
<memoryUsage>
<!-- originally set to 100 mb -->
<memoryUsage limit="${remote_systemMemoryUsage} mb"/>
</memoryUsage>
<storeUsage>
<!-- originally set to 1 gb -->
<storeUsage limit="${remote_systemStoreUsage} gb"/>
</storeUsage>
<tempUsage>
<!-- originally set to 200 mb -->
<tempUsage limit="${remote_systemTempUsage} mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<!--
The transport connectors expose ActiveMQ over a given protocol to
clients and other brokers. For more information, see:
http://activemq.apache.org/configuring-transports.html
-->
<transportConnectors>
<!-- by convention we use 51616 and 51617 (for ssl) so as not to
conflict with Geronimo's embedded ActiveMQ defaults (61616 & 61617) -->
<transportConnector name="openwire"
uri="tcp://0.0.0.0:${remote_openwirePortNumber}"/>
<transportConnector name="ssl"
uri="ssl://0.0.0.0:${remote_sslPortNumber}"/>
</transportConnectors>
</broker>
<jetty
xmlns="http://mortbay.com/schemas/jetty/1.0"<http://mortbay.com/schemas/jetty/1.0>>
<connectors>
<nioConnector port="8161"/>
</connectors>
<handlers>
<webAppContext contextPath="/admin"
resourceBase="${activemq.base}/webapps/admin" logUrlOnStart="true"/>
</handlers>
</jetty>
<!-- CAMEL ROUTING CONFIGURATIONS -->
<import resource="camel_remote_messaging.xml"/>
<import resource="camel_reports.xml"/>
</beans>
Joe Niski
IS Development | NWEA
PHONE 503.212.3382 | FAX 503.639.7873
NWEA.ORG<3D%22http://www.nwea.org/%22> | Partnering to Help All Kids Learn
On 08/17/2010 03:26 AM, Dejan Bosanac wrote:
Hi Joe,
this sounds like a bug. Did you tested it with some newer version of
ActiveMQ (as there was a lot of work in that area since 5.0.3)
Can you test newly released 5.4.0
http://repo1.maven.org/maven2/org/apache/activemq/apache-activemq/5.4.0/
and see if the problem still exists?
If it's still there, it would be great if you could raise a Jira
issue, ideally with a test case.
Cheers
--
Dejan Bosanac - http://twitter.com/dejanb
Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net
On Tue, Aug 17, 2010 at 2:00 AM, Joe Niski
<[email protected]><mailto:[email protected]> wrote:
> i have a network of 2 brokers, let's call them "Remote" and "Central",
> running on ActiveMQ 5.0.3, in a store-and-forward configuration. i inherited
> this setup, i did not design it, but it seems like a generally solid
> configuration.
>
> On the Remote broker, there are topics (e.g. "org.nwea.topics.license") that
> have durable subscriptions to topics of the same name on the Central broker.
> Messages that are published to topics on the Central broker find their way to
> Remote really fast - as long as the Remote is online when the message is
> published. Messages that are published when Remote is offline are never
> picked up by the remote.
>
> i have a j2ee application that contains MDBs that are annotated to have
> durable subscriptions to the topics on the Remote broker.
>
> The NetworkConnector configuration in the Remote broker's activemq.xml looks
> like this:
>
> <networkConnectors>
> <networkConnector name="${ApplianceID}"
> userName="${networkConnectorUserName}"
> password="${networkConnectorPassword}"
>
> uri="static://(ssl://${Central.ServerHostname}:${central_sslPortNumber})"
> duplex="true"
> dynamicOnly="true">
> <dynamicallyIncludedDestinations>
> <queue physicalName="org.nwea.queues.central.>"/>
> <topic physicalName="org.nwea.topics.>"/>
> </dynamicallyIncludedDestinations>
> <staticallyIncludedDestinations>
> <queue physicalName="org.nwea.queues.central.>"/>
> <topic physicalName="org.nwea.topics.>"/>
> </staticallyIncludedDestinations>
> </networkConnector>
> </networkConnectors>
>
> In reading through the book "ActiveMQ in Action" and reviewing the online
> docs at http://activemq.apache.org/networks-of-brokers.html, it seems that we
> should use the default setting for "dynamicOnly", "false" (the docs say "if
> true, only forward messages if a consumer is active on the connected broker").
>
> However, when i set "dynamicOnly" to false, i see numerous startup errors and
> NullPointerExceptions in the Remote activemq.log, and connection errors in
> Central's logs. The Remote log simply reads:
> [DemandForwardingBridge.serviceLocalException]: Network connection between
> vm://remotebroker.msg02.nweacolo.pvt#24 and
> ssl://msg01.se.nweacolo.pvt/192.168.1.94:51617 shutdown due to a local error:
> java.lang.NullPointerException
>
> With "dynamicOnly" set to true, the log shows that existing durable
> subscriptions are reconnecting during startup.
>
> Playing with the "prefetchSize" and "networkTTL" attributes for
> <networkConnector> on Remote (vaguely recommended in the docs) doesn't seem
> to have any effect.
>
> This seems very similar to this issue from February 2009:
> http://old.nabble.com/Confusion-about-dynamicOnly-NetworkConnector-property-td22211600.html,
> which didn't seem to get resolved.
>
> Any insight, recommendations, or help are most appreciated.
> --
>
> Joe Niski
> IS Development | NWEA
> NWEA.ORG<3D%22http://www.nwea.org/%22> | Partnering to Help All Kids Learn
>