[jboss-svn-commits] JBL Code SVN: r29511 - labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Sep 30 05:44:27 EDT 2009
Author: kevin.conner at jboss.com
Date: 2009-09-30 05:44:26 -0400 (Wed, 30 Sep 2009)
New Revision: 29511
Modified:
labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120/JmsListenerMapper.java
Log:
Add support for ActivationMapper: JBESB-2860
Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120/JmsListenerMapper.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120/JmsListenerMapper.java 2009-09-30 08:42:09 UTC (rev 29510)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers120/JmsListenerMapper.java 2009-09-30 09:44:26 UTC (rev 29511)
@@ -21,16 +21,16 @@
package org.jboss.soa.esb.listeners.config.mappers120;
-import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
-import javax.jms.Queue;
-import javax.jms.Topic;
-
import org.apache.log4j.Logger;
import org.jboss.soa.esb.ConfigurationException;
import org.jboss.soa.esb.addressing.eprs.JMSEpr;
+import org.jboss.soa.esb.common.ModulePropertyManager;
import org.jboss.soa.esb.dom.YADOMUtil;
import org.jboss.soa.esb.listeners.ListenerTagNames;
import org.jboss.soa.esb.listeners.config.xbeanmodel120.JmsProviderType;
@@ -43,14 +43,17 @@
import org.jboss.soa.esb.listeners.config.xbeanmodel120.PropertyDocument.Property;
import org.jboss.soa.esb.listeners.gateway.JmsGatewayListener;
import org.jboss.soa.esb.listeners.gateway.PackageJmsMessageContents;
+import org.jboss.soa.esb.listeners.jca.ActivationMapper;
import org.jboss.soa.esb.listeners.jca.JcaConstants;
import org.jboss.soa.esb.listeners.jca.JcaGatewayListener;
import org.jboss.soa.esb.listeners.jca.JcaJMSInflowMessageProcessorAdapter;
import org.jboss.soa.esb.listeners.jca.JcaJMSMessageAwareComposer;
import org.jboss.soa.esb.listeners.jca.JcaMessageAwareListener;
+import org.jboss.soa.esb.util.ClassUtil;
import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
+import com.arjuna.common.util.propertyservice.PropertyManager;
+
/**
* Performs the mapping of a <jms-listener> XSD based configuration to the "ConfigTree"
* style configuration, adding the "ConfigTree" listener config to the "root" node.
@@ -58,6 +61,8 @@
* @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
*/
public class JmsListenerMapper {
+ // The default JMS JCA adapter.
+ private static final String DEFAULT_JMS_ADAPTER = "jms-ra.rar" ;
@SuppressWarnings("unused")
private static Logger log = Logger.getLogger( JmsListenerMapper.class );
@@ -99,7 +104,7 @@
final Class<?> gatewayClass ;
if (provider instanceof JmsJcaProvider) {
final JmsJcaProvider jmsJcaProvider = (JmsJcaProvider)provider ;
- mapJmsJcaAttributes(listener, listenerNode, jmsJcaProvider, messageFilter) ;
+ mapJmsJcaAttributes(listener, listenerNode, bus, jmsJcaProvider, messageFilter) ;
gatewayClass = JcaGatewayListener.class ;
} else {
gatewayClass = JmsGatewayListener.class ;
@@ -158,20 +163,12 @@
toElement.setAttribute(JMSEpr.TRANSACTED_TAG, Boolean.toString( messageFilter.getTransacted()));
}
- /*
- * @throws ConfigurationException is one of the following activation-config
- * properties are overridden:
- * - destination
- * - destinationType
- * - messageSelector
- * - maxMessages
- */
private static void mapJmsJcaAttributes(final JmsListener listener,
- final Element listenerNode, final JmsJcaProvider jmsJcaProvider,
+ final Element listenerNode, final JmsBus bus, final JmsJcaProvider jmsJcaProvider,
final JmsMessageFilter messageFilter)
throws ConfigurationException {
setAttribute(listenerNode, JcaConstants.ATTRIBUTE_ADAPTER,
- jmsJcaProvider.getAdapter(), "jms-ra.rar") ;
+ jmsJcaProvider.getAdapter(), DEFAULT_JMS_ADAPTER) ;
setAttribute(listenerNode, JcaConstants.ATTRIBUTE_ENDPOINT_CLASS,
jmsJcaProvider.getEndpointClass(), JcaJMSInflowMessageProcessorAdapter.class.getName()) ;
setAttribute(listenerNode, JcaConstants.ATTRIBUTE_MESSAGING_TYPE,
@@ -206,36 +203,35 @@
JcaJMSMessageAwareComposer.class.getName()) ;
}
- final Element activationConfigElement = YADOMUtil.addElement(listenerNode, JcaConstants.ELEMENT_ACTIVATION_CONFIG) ;
- addPropertyElement(activationConfigElement, "destination", messageFilter.getDestName()) ;
- if (jmsJcaProvider.isSetProviderAdapterJNDI())
- {
- addPropertyElement(activationConfigElement, "providerAdapterJNDI", jmsJcaProvider.getProviderAdapterJNDI()) ;
- }
+ final ActivationMapper activationMapper = getActivationMapper(listener, bus, jmsJcaProvider) ;
+ final Map<String, String> activationConfigValues = new HashMap<String, String>() ;
+ activationMapper.setDestination(activationConfigValues, messageFilter.getDestName()) ;
+ activationMapper.setProviderAdapterJNDI(activationConfigValues, jmsJcaProvider.getProviderAdapterJNDI()) ;
final int destType = messageFilter.getDestType().intValue() ;
if (destType == DestType.INT_QUEUE)
{
- addPropertyElement(activationConfigElement, "destinationType", Queue.class.getName()) ;
+ activationMapper.setDestinationType(activationConfigValues, true) ;
}
else if (destType == DestType.INT_TOPIC)
{
- addPropertyElement(activationConfigElement, "destinationType", Topic.class.getName()) ;
+ activationMapper.setDestinationType(activationConfigValues, false) ;
}
else
{
throw new ConfigurationException("Unknown destination type: " + messageFilter.getDestType()) ;
}
- if (messageFilter.getSelector() != null)
+ activationMapper.setMessageSelector(activationConfigValues, messageFilter.getSelector()) ;
+ final Integer maxThreads = (listener.isSetMaxThreads() ? new Integer(listener.getMaxThreads()) : null) ;
+ activationMapper.setMaxThreads(activationConfigValues, maxThreads) ;
+
+ final Element activationConfigElement = YADOMUtil.addElement(listenerNode, JcaConstants.ELEMENT_ACTIVATION_CONFIG) ;
+ for(Map.Entry<String, String> entry: activationConfigValues.entrySet())
{
- addPropertyElement(activationConfigElement, "messageSelector", messageFilter.getSelector()) ;
+ addPropertyElement(activationConfigElement, entry.getKey(), entry.getValue()) ;
}
- if (listener.getMaxThreads() > 0)
- {
- addPropertyElement(activationConfigElement, "maxMessages", Integer.toString(listener.getMaxThreads())) ;
- }
- final List<String> defaultPropertyNames = getDefaultActivationConfigNames( activationConfigElement );
+ final Set<String> defaultPropertyNames = activationConfigValues.keySet() ;
log.debug("Default activation-config properties :" + defaultPropertyNames );
/*
@@ -256,16 +252,6 @@
}
}
- private static List<String> getDefaultActivationConfigNames(final Element activationConfigElement )
- {
- NodeList defaultActivationProperties = activationConfigElement.getElementsByTagName( "property" );
- final List<String> defaultPropertyNames = new ArrayList<String>(5);
- for (int i = defaultActivationProperties.getLength() ; i-->0 ; )
- defaultPropertyNames.add(defaultActivationProperties.item( i ).getAttributes().getNamedItem( "name" ).getNodeValue() );
-
- return defaultPropertyNames;
- }
-
private static void setAttribute(final Element listenerNode,
final String name, final String value)
{
@@ -296,4 +282,85 @@
propertyElement.setAttribute("name", name) ;
propertyElement.setAttribute("value", value) ;
}
+
+ private static ActivationMapper getActivationMapper(final JmsListener listener,
+ final JmsBus bus, final JmsJcaProvider jmsJcaProvider)
+ throws ConfigurationException
+ {
+ final String activationMapper = getActivationMapperClass(listener, bus, jmsJcaProvider); ;
+ if (activationMapper == null)
+ {
+ throw new ConfigurationException("Could not locate ActivationMapper for adapter " + jmsJcaProvider.getAdapter()) ;
+ }
+ final Class activationMapperClass ;
+ try
+ {
+ activationMapperClass = ClassUtil.forName(activationMapper.trim(), JmsListenerMapper.class) ;
+ }
+ catch (final ClassNotFoundException cnfe)
+ {
+ throw new ConfigurationException("Could not locate activation mapper class " + activationMapper, cnfe) ;
+ }
+
+ if (!ActivationMapper.class.isAssignableFrom(activationMapperClass))
+ {
+ throw new ConfigurationException("Activation mapper class " + activationMapper + " does not implement ActivationMapper interface") ;
+ }
+ try
+ {
+ return (ActivationMapper)(activationMapperClass.newInstance()) ;
+ }
+ catch (final Throwable th)
+ {
+ throw new ConfigurationException("Failed to instantiate activation mapper class " + activationMapper, th) ;
+ }
+ }
+
+ private static String getActivationMapperClass(final JmsListener listener,
+ final JmsBus bus, final JmsJcaProvider jmsJcaProvider)
+ throws ConfigurationException
+ {
+ final String listenerActivationMapper = findProperty(listener.getPropertyList(), ListenerTagNames.JCA_ACTIVATION_MAPPER) ;
+ if (listenerActivationMapper != null)
+ {
+ return listenerActivationMapper ;
+ }
+
+ final String busActivationMapper = findProperty(bus.getPropertyList(), ListenerTagNames.JCA_ACTIVATION_MAPPER) ;
+ if (busActivationMapper != null)
+ {
+ return busActivationMapper ;
+ }
+
+ final String providerActivationMapper = findProperty(jmsJcaProvider.getPropertyList(), ListenerTagNames.JCA_ACTIVATION_MAPPER) ;
+ if (providerActivationMapper != null)
+ {
+ return providerActivationMapper ;
+ }
+
+ final String adapter = (jmsJcaProvider.getAdapter() == null ? DEFAULT_JMS_ADAPTER : jmsJcaProvider.getAdapter()) ;
+
+ final PropertyManager propertyManager = ModulePropertyManager.getPropertyManager(ModulePropertyManager.JCA_MODULE);
+ final String activationMapper = propertyManager.getProperty("org.jboss.soa.esb.jca.activation.mapper." + adapter) ;
+ if (activationMapper == null)
+ {
+ throw new ConfigurationException("Could not locate activation mapper for adapter " + adapter) ;
+ }
+ return activationMapper ;
+ }
+
+ private static String findProperty(final List<Property> properties, final String name)
+ {
+ if ((properties != null) && (name != null))
+ {
+ for(Property property: properties)
+ {
+ if (name.equals(property.getName()))
+ {
+ return property.getValue() ;
+ }
+ }
+ }
+ return null ;
+ }
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list