1
2
3
4
5
6
7
8
9
10 package org.mule.transport.jms.config;
11
12 import org.mule.config.spring.factories.InboundEndpointFactoryBean;
13 import org.mule.config.spring.factories.OutboundEndpointFactoryBean;
14 import org.mule.config.spring.handlers.AbstractMuleNamespaceHandler;
15 import org.mule.config.spring.parsers.MuleDefinitionParser;
16 import org.mule.config.spring.parsers.assembly.configuration.PrefixValueMap;
17 import org.mule.config.spring.parsers.generic.ChildDefinitionParser;
18 import org.mule.config.spring.parsers.processors.CheckExclusiveAttributes;
19 import org.mule.config.spring.parsers.specific.FilterDefinitionParser;
20 import org.mule.config.spring.parsers.specific.MessageProcessorDefinitionParser;
21 import org.mule.config.spring.parsers.specific.TransactionDefinitionParser;
22 import org.mule.config.spring.parsers.specific.endpoint.TransportEndpointDefinitionParser;
23 import org.mule.config.spring.parsers.specific.endpoint.TransportGlobalEndpointDefinitionParser;
24 import org.mule.endpoint.URIBuilder;
25 import org.mule.transport.jms.JmsClientAcknowledgeTransactionFactory;
26 import org.mule.transport.jms.JmsConnector;
27 import org.mule.transport.jms.JmsTransactionFactory;
28 import org.mule.transport.jms.activemq.ActiveMQJmsConnector;
29 import org.mule.transport.jms.activemq.ActiveMQXAJmsConnector;
30 import org.mule.transport.jms.filters.JmsPropertyFilter;
31 import org.mule.transport.jms.filters.JmsSelectorFilter;
32 import org.mule.transport.jms.jndi.SimpleJndiNameResolver;
33 import org.mule.transport.jms.mulemq.MuleMQJmsConnector;
34 import org.mule.transport.jms.mulemq.MuleMQXAJmsConnector;
35 import org.mule.transport.jms.transformers.JMSMessageToObject;
36 import org.mule.transport.jms.transformers.ObjectToJMSMessage;
37 import org.mule.transport.jms.weblogic.WeblogicJmsConnector;
38 import org.mule.transport.jms.websphere.WebsphereJmsConnector;
39
40
41
42
43 public class JmsNamespaceHandler extends AbstractMuleNamespaceHandler
44 {
45
46 public static final String QUEUE = "queue";
47 public static final String TOPIC = "topic";
48 public static final String NUMBER_OF_CONSUMERS_ATTRIBUTE = "numberOfConsumers";
49 public static final String NUMBER_OF_CONCURRENT_TRANSACTED_RECEIVERS_ATTRIBUTE = "numberOfConcurrentTransactedReceivers";
50 public static final String NUMBER_OF_CONSUMERS_PROPERTY = "numberOfConcurrentTransactedReceivers";
51 public static final String[][] JMS_ATTRIBUTES = new String[][]{new String[]{QUEUE}, new String[]{TOPIC}};
52
53 public void init()
54 {
55 registerJmsTransportEndpoints();
56
57 registerMuleBeanDefinitionParser("connector", new JmsConnectorDefinitionParser()).addAlias(
58 NUMBER_OF_CONSUMERS_ATTRIBUTE, NUMBER_OF_CONSUMERS_PROPERTY).registerPreProcessor(
59 new CheckExclusiveAttributes(new String[][]{
60 new String[]{NUMBER_OF_CONCURRENT_TRANSACTED_RECEIVERS_ATTRIBUTE},
61 new String[]{NUMBER_OF_CONSUMERS_ATTRIBUTE}}));
62 registerBeanDefinitionParser("custom-connector", new JmsConnectorDefinitionParser());
63 registerBeanDefinitionParser("activemq-connector", new JmsConnectorDefinitionParser(ActiveMQJmsConnector.class));
64 registerBeanDefinitionParser("activemq-xa-connector", new JmsConnectorDefinitionParser(ActiveMQXAJmsConnector.class));
65
66 registerBeanDefinitionParser("mulemq-connector", new MuleMQConnectorDefinitionParser(MuleMQJmsConnector.class));
67 registerBeanDefinitionParser("mulemq-xa-connector", new MuleMQConnectorDefinitionParser(MuleMQXAJmsConnector.class));
68
69 registerBeanDefinitionParser("weblogic-connector", new JmsConnectorDefinitionParser(WeblogicJmsConnector.class));
70 registerBeanDefinitionParser("websphere-connector", new JmsConnectorDefinitionParser(WebsphereJmsConnector.class));
71
72 registerBeanDefinitionParser("transaction", new TransactionDefinitionParser(JmsTransactionFactory.class));
73 registerBeanDefinitionParser("client-ack-transaction", new TransactionDefinitionParser(JmsClientAcknowledgeTransactionFactory.class));
74
75 registerBeanDefinitionParser("jmsmessage-to-object-transformer", new MessageProcessorDefinitionParser(JMSMessageToObject.class));
76
77 registerBeanDefinitionParser("object-to-jmsmessage-transformer", new MessageProcessorDefinitionParser(ObjectToJMSMessage.class));
78 registerBeanDefinitionParser("property-filter", new FilterDefinitionParser(JmsPropertyFilter.class));
79 registerBeanDefinitionParser("selector", new FilterDefinitionParser(JmsSelectorFilter.class));
80 registerBeanDefinitionParser("default-jndi-name-resolver", new ChildDefinitionParser("jndiNameResolver", SimpleJndiNameResolver.class));
81 registerBeanDefinitionParser("custom-jndi-name-resolver", new ChildDefinitionParser("jndiNameResolver"));
82 }
83
84
85
86
87 protected void registerJmsTransportEndpoints()
88 {
89 registerJmsEndpointDefinitionParser("endpoint", new TransportGlobalEndpointDefinitionParser(JmsConnector.JMS, TransportGlobalEndpointDefinitionParser.PROTOCOL, TransportGlobalEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES, JMS_ATTRIBUTES, new String[][]{}));
90 registerJmsEndpointDefinitionParser("inbound-endpoint", new TransportEndpointDefinitionParser(JmsConnector.JMS, TransportEndpointDefinitionParser.PROTOCOL, InboundEndpointFactoryBean.class, TransportEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES, JMS_ATTRIBUTES, new String[][]{}));
91 registerJmsEndpointDefinitionParser("outbound-endpoint", new TransportEndpointDefinitionParser(JmsConnector.JMS, TransportEndpointDefinitionParser.PROTOCOL, OutboundEndpointFactoryBean.class, TransportEndpointDefinitionParser.RESTRICTED_ENDPOINT_ATTRIBUTES, JMS_ATTRIBUTES, new String[][]{}));
92 }
93
94 protected void registerJmsEndpointDefinitionParser(String element, MuleDefinitionParser parser)
95 {
96 parser.addAlias(QUEUE, URIBuilder.PATH);
97 parser.addAlias(TOPIC, URIBuilder.PATH);
98 parser.addMapping(TOPIC, new PrefixValueMap(TOPIC + ":"));
99 registerBeanDefinitionParser(element, parser);
100 }
101
102 }
103