[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