View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.transport.jms.config;
8   
9   import org.mule.config.spring.factories.InboundEndpointFactoryBean;
10  import org.mule.config.spring.factories.OutboundEndpointFactoryBean;
11  import org.mule.config.spring.handlers.AbstractMuleNamespaceHandler;
12  import org.mule.config.spring.parsers.MuleDefinitionParser;
13  import org.mule.config.spring.parsers.assembly.configuration.PrefixValueMap;
14  import org.mule.config.spring.parsers.generic.ChildDefinitionParser;
15  import org.mule.config.spring.parsers.processors.CheckExclusiveAttributes;
16  import org.mule.config.spring.parsers.specific.FilterDefinitionParser;
17  import org.mule.config.spring.parsers.specific.MessageProcessorDefinitionParser;
18  import org.mule.config.spring.parsers.specific.TransactionDefinitionParser;
19  import org.mule.config.spring.parsers.specific.endpoint.TransportEndpointDefinitionParser;
20  import org.mule.config.spring.parsers.specific.endpoint.TransportGlobalEndpointDefinitionParser;
21  import org.mule.endpoint.URIBuilder;
22  import org.mule.transport.jms.JmsClientAcknowledgeTransactionFactory;
23  import org.mule.transport.jms.JmsConnector;
24  import org.mule.transport.jms.JmsTransactionFactory;
25  import org.mule.transport.jms.activemq.ActiveMQJmsConnector;
26  import org.mule.transport.jms.activemq.ActiveMQXAJmsConnector;
27  import org.mule.transport.jms.filters.JmsPropertyFilter;
28  import org.mule.transport.jms.filters.JmsSelectorFilter;
29  import org.mule.transport.jms.jndi.SimpleJndiNameResolver;
30  import org.mule.transport.jms.mulemq.MuleMQJmsConnector;
31  import org.mule.transport.jms.mulemq.MuleMQXAJmsConnector;
32  import org.mule.transport.jms.transformers.JMSMessageToObject;
33  import org.mule.transport.jms.transformers.ObjectToJMSMessage;
34  import org.mule.transport.jms.weblogic.WeblogicJmsConnector;
35  import org.mule.transport.jms.websphere.WebsphereJmsConnector;
36  
37  /**
38   * Registers Bean Definition Parsers for the "jms" namespace.
39   */
40  public class JmsNamespaceHandler extends AbstractMuleNamespaceHandler
41  {
42  
43      public static final String QUEUE = "queue";
44      public static final String TOPIC = "topic";
45      public static final String NUMBER_OF_CONSUMERS_ATTRIBUTE = "numberOfConsumers";
46      public static final String NUMBER_OF_CONCURRENT_TRANSACTED_RECEIVERS_ATTRIBUTE = "numberOfConcurrentTransactedReceivers";
47      public static final String NUMBER_OF_CONSUMERS_PROPERTY = "numberOfConcurrentTransactedReceivers";
48      public static final String[][] JMS_ATTRIBUTES = new String[][]{new String[]{QUEUE}, new String[]{TOPIC}};
49  
50      public void init()
51      {
52          registerJmsTransportEndpoints();
53  
54          registerMuleBeanDefinitionParser("connector", new JmsConnectorDefinitionParser()).addAlias(
55              NUMBER_OF_CONSUMERS_ATTRIBUTE, NUMBER_OF_CONSUMERS_PROPERTY).registerPreProcessor(
56              new CheckExclusiveAttributes(new String[][]{
57                  new String[]{NUMBER_OF_CONCURRENT_TRANSACTED_RECEIVERS_ATTRIBUTE},
58                  new String[]{NUMBER_OF_CONSUMERS_ATTRIBUTE}}));
59          registerBeanDefinitionParser("custom-connector", new JmsConnectorDefinitionParser());
60          registerBeanDefinitionParser("activemq-connector", new JmsConnectorDefinitionParser(ActiveMQJmsConnector.class));
61          registerBeanDefinitionParser("activemq-xa-connector", new JmsConnectorDefinitionParser(ActiveMQXAJmsConnector.class));
62          
63          registerBeanDefinitionParser("mulemq-connector", new MuleMQConnectorDefinitionParser(MuleMQJmsConnector.class));
64          registerBeanDefinitionParser("mulemq-xa-connector", new MuleMQConnectorDefinitionParser(MuleMQXAJmsConnector.class));
65          
66          registerBeanDefinitionParser("weblogic-connector", new JmsConnectorDefinitionParser(WeblogicJmsConnector.class));
67          registerBeanDefinitionParser("websphere-connector", new JmsConnectorDefinitionParser(WebsphereJmsConnector.class));
68  
69          registerBeanDefinitionParser("transaction", new TransactionDefinitionParser(JmsTransactionFactory.class));
70          registerBeanDefinitionParser("client-ack-transaction", new TransactionDefinitionParser(JmsClientAcknowledgeTransactionFactory.class));
71          
72          registerBeanDefinitionParser("jmsmessage-to-object-transformer", new MessageProcessorDefinitionParser(JMSMessageToObject.class));
73  
74          registerBeanDefinitionParser("object-to-jmsmessage-transformer", new MessageProcessorDefinitionParser(ObjectToJMSMessage.class));
75          registerBeanDefinitionParser("property-filter", new FilterDefinitionParser(JmsPropertyFilter.class));
76          registerBeanDefinitionParser("selector", new FilterDefinitionParser(JmsSelectorFilter.class));
77          registerBeanDefinitionParser("default-jndi-name-resolver", new ChildDefinitionParser("jndiNameResolver", SimpleJndiNameResolver.class));
78          registerBeanDefinitionParser("custom-jndi-name-resolver", new ChildDefinitionParser("jndiNameResolver"));
79      }
80  
81      /**
82       * Need to use the most complex constructors as have mutually exclusive address aattributes
83       */
84      protected void registerJmsTransportEndpoints()
85      {
86          registerJmsEndpointDefinitionParser("endpoint", new TransportGlobalEndpointDefinitionParser(JmsConnector.JMS, TransportGlobalEndpointDefinitionParser.PROTOCOL, TransportGlobalEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES, JMS_ATTRIBUTES, new String[][]{}));
87          registerJmsEndpointDefinitionParser("inbound-endpoint", new TransportEndpointDefinitionParser(JmsConnector.JMS, TransportEndpointDefinitionParser.PROTOCOL, InboundEndpointFactoryBean.class, TransportEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES, JMS_ATTRIBUTES, new String[][]{}));
88          registerJmsEndpointDefinitionParser("outbound-endpoint", new TransportEndpointDefinitionParser(JmsConnector.JMS, TransportEndpointDefinitionParser.PROTOCOL, OutboundEndpointFactoryBean.class, TransportEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES, JMS_ATTRIBUTES, new String[][]{}));
89      }
90  
91      protected void registerJmsEndpointDefinitionParser(String element, MuleDefinitionParser parser)
92      {
93          parser.addAlias(QUEUE, URIBuilder.PATH);
94          parser.addAlias(TOPIC, URIBuilder.PATH);
95          parser.addMapping(TOPIC, new PrefixValueMap(TOPIC + ":"));
96          registerBeanDefinitionParser(element, parser);
97      }
98  
99  }
100