[jboss-svn-commits] JBL Code SVN: r18648 - in labs/jbossesb/trunk/product/rosetta: tests/src/org/jboss/soa/esb/listeners/config/mappers and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Mar 1 12:00:30 EST 2008


Author: beve
Date: 2008-03-01 12:00:29 -0500 (Sat, 01 Mar 2008)
New Revision: 18648

Added:
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapperUnitTest.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_jms_jca.xml
Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java
Log:
Work for JBESB-1563 "Extend jms-jca-provider to support activation-config properties"
reopend to add check for the default activation-config properties.


Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java	2008-02-29 23:52:57 UTC (rev 18647)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java	2008-03-01 17:00:29 UTC (rev 18648)
@@ -21,6 +21,7 @@
 
 package org.jboss.soa.esb.listeners.config.mappers;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
@@ -49,6 +50,7 @@
 import org.jboss.soa.esb.listeners.jca.JcaJMSMessageAwareComposer;
 import org.jboss.soa.esb.listeners.jca.JcaMessageAwareListener;
 import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 /**
  * Performs the mapping of a <jms-listener> XSD based configuration to the "ConfigTree"
@@ -153,7 +155,15 @@
 		toElement.setAttribute(JMSEpr.JMS_SECURITY_PRINCIPAL_TAG, messageFilter.getJmsSecurityPrincipal());
 		toElement.setAttribute(JMSEpr.JMS_SECURITY_CREDENTIAL_TAG, messageFilter.getJmsSecurityCredential());
 	}
-
+    
+    /*
+     * @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 JmsMessageFilter messageFilter)
@@ -195,25 +205,7 @@
         }
         
         final Element activationConfigElement = YADOMUtil.addElement(listenerNode, JcaConstants.ELEMENT_ACTIVATION_CONFIG) ;
-        /*
-         * 	Add user specified activation-config. These may be overridden if one of
-         * 	- destination
-         * 	- providerAdapterJNDI
-         * 	- destinationType
-         * 	- messageSelector
-         * 	- maxMessages
-         */
-        ActivationConfig activationConfig = jmsJcaProvider.getActivationConfig();
-        if ( activationConfig != null )
-        {
-            List<Property> propertyList = activationConfig.getPropertyList();
-            for (Iterator<Property> iterator = propertyList.iterator(); iterator.hasNext();)
-    		{
-    			Property prop = iterator.next();
-                addPropertyElement(activationConfigElement, prop.getName(), prop.getValue()) ;
-    		}
-        }
-        addPropertyElement(activationConfigElement, "destination", messageFilter.getDestName()) ;
+         addPropertyElement(activationConfigElement, "destination", messageFilter.getDestName()) ;
         final int destType = messageFilter.getDestType().intValue() ;
         if (destType == DestType.INT_QUEUE)
         {
@@ -236,7 +228,37 @@
         {
             addPropertyElement(activationConfigElement, "maxMessages", Integer.toString(listener.getMaxThreads())) ;
         }
+        
+		final List<String> defaultPropertyNames = getDefaultActivationConfigNames( activationConfigElement );
+		log.debug("Default activation-config properties :" + defaultPropertyNames );
+        
+		/*
+		 * 	add user activation-config properties specified in the provider element.
+		 */
+        ActivationConfig activationConfig = jmsJcaProvider.getActivationConfig();
+        if ( activationConfig != null )
+        {
+            List<Property> propertyList = activationConfig.getPropertyList();
+            for (Iterator<Property> iterator = propertyList.iterator(); iterator.hasNext();)
+    		{
+    			Property prop = iterator.next();
+    			if ( defaultPropertyNames.contains( prop.getName() ))
+        			throw new ConfigurationException( "activation-config already contains [" + prop.getName() + "], which cannot be overridden");
+    			
+                addPropertyElement(activationConfigElement, prop.getName(), prop.getValue()) ;
+    		}
+        }
     }
+    
+    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)

Added: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapperUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapperUnitTest.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapperUnitTest.java	2008-03-01 17:00:29 UTC (rev 18648)
@@ -0,0 +1,184 @@
+/*
+ * JBoss, Home of Professional Open Source Copyright 2006, JBoss Inc., and
+ * individual contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of individual
+ * contributors.
+ * 
+ * This is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * 
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
+ * site: http://www.fsf.org.
+ */
+package org.jboss.soa.esb.listeners.config.mappers;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import junit.framework.JUnit4TestAdapter;
+
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.dom.YADOMUtil;
+import org.jboss.soa.esb.listeners.config.Generator;
+import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.JmsBusDocument;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.JmsListenerDocument;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.Listener;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.Provider;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.ActivationConfigDocument.ActivationConfig;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.JmsJcaProviderDocument.JmsJcaProvider;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.JmsListenerDocument.JmsListener;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.PropertyDocument.Property;
+import org.junit.Before;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Unit test for JmsListenerMapper
+ * 
+ * @author Daniel Bevenius
+ *
+ */
+public class JmsListenerMapperUnitTest
+{
+	private static final String ESB_CONFIG = "jbossesb_config_jms_jca.xml";
+	
+	private Element root;
+	private XMLBeansModel model;
+	private JmsListenerDocument.JmsListener jmsListener;
+	private JmsJcaProvider jmsJcaProvider;
+	
+	@Test ( expected = ConfigurationException.class )
+	public void tryToOverrideDestinationActivationConfigProperty() throws ConfigurationException, IOException
+	{
+		callJmsListenerMap( "destination", "/queue/dummyQueue" );
+	}
+	
+	@Test ( expected = ConfigurationException.class )
+	public void tryToOverride_DestinationType_ActivationConfigProperty() throws ConfigurationException, IOException
+	{
+		callJmsListenerMap( "destinationType", "Topic" );
+	}
+	
+	@Test ( expected = ConfigurationException.class )
+	public void tryToOverrideMessageSelectorActivationConfigProperty() throws ConfigurationException, IOException
+	{
+		callJmsListenerMap( "messageSelector", "dummyselector" );
+	}
+	
+	@Test ( expected = ConfigurationException.class )
+	public void tryToOverrideMaxMessagesActivationConfigProperty() throws ConfigurationException, IOException
+	{
+		callJmsListenerMap( "maxMessages", "300" );
+	}
+	
+	//	setup methods
+	
+	@Before
+	public void setup() throws ConfigurationException, IOException
+	{
+		root = createRootElement();
+		model = getXmlBeanModel( ESB_CONFIG );
+		jmsListener = getListener( model );
+		jmsJcaProvider = getJmsJcaProvider( model );
+	}
+	
+	// 	helper methods
+	
+	private void callJmsListenerMap(
+			String activationConfigPropertyName,
+			String activationConfigPropertyValue
+			) throws ConfigurationException
+	{
+		ActivationConfig activationConfig = jmsJcaProvider.getActivationConfig();
+		createActivationProperty( activationConfig, activationConfigPropertyName, activationConfigPropertyValue );
+		
+		JmsListenerMapper.map( root , jmsListener, model );
+	}
+			
+	private Property createActivationProperty( 
+			final ActivationConfig activationConfig, 
+			final String name, 
+			final String value )
+	{
+		Property property = activationConfig.addNewProperty();
+		property.setName( name );
+		property.setValue( value ); 
+		return property;
+	}
+	
+	private JmsListener getListener( final XMLBeansModel model ) throws ConfigurationException
+	{
+		List<Listener> listeners = model.getESBAwareListeners();
+		return (JmsListener) listeners.get(0);
+	}
+	
+	private JmsJcaProvider getJmsJcaProvider( final XMLBeansModel model ) throws ConfigurationException, IOException
+	{
+		List<Listener> listeners = model.getESBAwareListeners();
+		JmsListenerDocument.JmsListener jmsListener = (JmsListener) listeners.get(0);
+		assertEquals ( false, jmsListener.getIsGateway() );
+		
+		JmsBusDocument.JmsBus jmsBus = (JmsBusDocument.JmsBus) model.getBus( jmsListener.getBusidref() );
+		assertNotNull( "JmsBus element should exist", jmsBus );
+		Provider provider = model.getProvider( jmsBus );
+		assertTrue( provider instanceof JmsJcaProvider );
+		return (JmsJcaProvider) provider;
+	}
+	
+	private XMLBeansModel getXmlBeanModel( String fileName ) throws ConfigurationException, IOException
+	{
+		InputStream inputStream = getClass().getResourceAsStream( ESB_CONFIG );
+		GeneratorMock mock = new GeneratorMock( inputStream );
+		XMLBeansModel model = mock.getModel();
+		return model;
+	}
+	
+	private Element createRootElement() throws ConfigurationException
+	{
+		Document doc = YADOMUtil.createDocument();
+		Element root = YADOMUtil.addElement(doc, "jbossesb-gateways");
+		root.setAttribute("parameterReloadSecs", "1000" );
+		return root;
+	}
+	
+	
+	/**
+	 * Just here to get proved access to the XMLBeansModel
+	 *
+	 */
+	private class GeneratorMock extends Generator
+	{
+
+		public GeneratorMock(InputStream config) throws ConfigurationException, IOException
+		{
+			super( config );
+		}
+
+		@Override
+		public XMLBeansModel getModel()
+		{
+			return super.getModel();
+		}
+	}
+	
+	public static junit.framework.Test suite()
+	{
+		return new JUnit4TestAdapter( JmsListenerMapperUnitTest.class );
+	}
+}

Added: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_jms_jca.xml
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_jms_jca.xml	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/config/mappers/jbossesb_config_jms_jca.xml	2008-03-01 17:00:29 UTC (rev 18648)
@@ -0,0 +1,38 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd">
+
+	<providers>
+	
+    	<jms-jca-provider
+            name="JBossMessaging"
+            connection-factory="XAConnectionFactory"
+            jndi-URL="jnp://127.0.0.1:1099"
+            transacted="true"
+            jndi-context-factory="org.jnp.interfaces.NamingContextFactory"
+            jndi-pkg-prefix="org.jboss.naming:org.jnp.interfaces">
+
+            <jms-bus busid="quickstartEsbChannel">
+                <jms-message-filter
+                    dest-type="QUEUE"
+                    dest-name="queue/quickstart_jms_transacted_Request_esb"
+                    selector="CorrelationID = '13'"
+                    transacted="true" />
+            </jms-bus>
+            <activation-config>
+                <property name="dLQMaxResent" value="12"/>
+                <property name="dLQJNDIName" value="/queue/quickstart_jms_transacted_error"/>
+                <property name="reconnectInterval" value="1000"/>
+            </activation-config>
+        </jms-jca-provider>
+	
+    </providers>
+	<services>    
+		<service category="Test2" name="JMSJCATest" description="JMS JCA Test">
+			
+			<listeners>    	    
+				<jms-listener name="JMSListener" busidref="quickstartEsbChannel" maxThreads="1"/>
+			</listeners>
+		</service>
+	</services>
+	
+</jbossesb>




More information about the jboss-svn-commits mailing list