0

I've tried to use JMSAppender following the instructions found here. I'm trying to use it in the MuleStudio environment with ActiveMQ.

I added the following to my log4j.xml file:

<appender name="jms" class="org.apache.log4j.net.JMSAppender">
    <param name="InitialContextFactoryName" value="org.apache.activemq.jndi.ActiveMQInitialContextFactory" />
    <param name="ProviderURL" value="tcp://localhost:61616" />
    <param name="TopicBindingName" value="logTopic" />
    <param name="TopicConnectionFactoryBindingName" value="ConnectionFactory" />
</appender>
<logger name="org.apache.activemq">
    <appender-ref ref="console" />
</logger>

I created a jndi.properties file in the classpath with the contents:

topic.logTopic=logTopic

I added activemq-core-5.7.0.jar into MuleStudio's classpath.

When I try to run the Mule application, I get the exception show below that the topic name could not be found.

I used ActiveMQ's console to manually create the topic, but that didn't change anything.

What am I doing wrong?

The console log output:

log4j: Class name: [org.apache.log4j.net.JMSAppender]
log4j: Setting property [initialContextFactoryName] to [org.apache.activemq.jndi.ActiveMQInitialContextFactory].
log4j: Setting property [providerURL] to [tcp://localhost:61616].
log4j: Setting property [topicBindingName] to [logTopic].
log4j: Setting property [topicConnectionFactoryBindingName] to [ConnectionFactory].
log4j: Getting initial context.
log4j: Looking up [ConnectionFactory]
log4j: About to create TopicConnection.
log4j: Creating TopicSession, non-transactional, in AUTO_ACKNOWLEDGE mode.
log4j: Looking up topic name [logTopic].
log4j:ERROR Could not find name [logTopic].
log4j:ERROR Error while activating options for appender named [jms].
javax.naming.NameNotFoundException: logTopic
    at org.apache.activemq.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:235)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at org.apache.log4j.net.JMSAppender.lookup(JMSAppender.java:245)
    at org.apache.log4j.net.JMSAppender.activateOptions(JMSAppender.java:222)
    at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
    at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:295)
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:176)
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:191)
    at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:523)
    at org.apache.log4j.xml.DOMConfigurator.parseRoot(DOMConfigurator.java:492)
    at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:1001)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:867)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:773)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483)
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
    at org.apache.log4j.Logger.getLogger(Logger.java:117)
    at org.mule.module.logging.LoggerReferenceHandler.<init>(LoggerReferenceHandler.java:28)
    at org.mule.module.logging.MuleLogFactory.<init>(MuleLogFactory.java:41)
    at org.apache.commons.logging.LogFactory.<clinit>(LogFactory.java:32)
    at org.mule.module.launcher.CompositeDeploymentListener.<init>(CompositeDeploymentListener.java:24)
    at org.mule.tooling.server.application.ApplicationDeployer.main(ApplicationDeployer.java:108)
Tad
  • 517
  • 8
  • 30

1 Answers1

0

Need to do the following:

  1. create a jndi.properties file in the mule/conf dir that has topic.logTopic=logTopic
  2. put the following jars in the mule/lib/boot: activemq-client-5.8.0.jar, geronimo-j2ee-management_1.1_spec-1.0.1.jar, geronimo-jms_1.1_spec-1.1.1.jar
  3. add the following to your log4j.properties for the service
    # settings for specific packages
    log4j.logger.org.mule=INFO
    log4j.logger.com.mule.support=INFO
    #log4j.logger.org.mule.api.processor.LoggerMessageProcessor=${custom-level}
    log4j.logger.httpclient.wire.header=DEBUG, jms

    log4j.logger.org.apache.activemq=INFO, stdout
    ## Configure 'jms' appender. You'll also need jndi.properties file in order to make it work
    log4j.appender.jms=org.apache.log4j.net.JMSAppender
    log4j.appender.jms.InitialContextFactoryName=org.apache.activemq.jndi.ActiveMQInitialContextFactory
    log4j.appender.jms.ProviderURL=tcp://localhost:61616
    log4j.appender.jms.TopicBindingName=logTopic
    log4j.appender.jms.TopicConnectionFactoryBindingName=ConnectionFactory
Lucas Trzesniewski
  • 50,214
  • 11
  • 107
  • 158