[jboss-svn-commits] JBL Code SVN: r8384 - in labs/jbossesb/trunk/product: core/listeners/src/org/jboss/soa/esb/listeners/config core/listeners/src/org/jboss/soa/esb/listeners/config/mappers core/listeners/tests/src/org/jboss/soa/esb/listeners/config etc/schemas/xml
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Dec 18 12:05:27 EST 2006
Author: tfennelly
Date: 2006-12-18 12:05:19 -0500 (Mon, 18 Dec 2006)
New Revision: 8384
Added:
labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/MapperUtil.java
labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/UntypedListenerMapper.java
Modified:
labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java
labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java
labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java
labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/GeneratorUnitTest.java
labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/jbossesb_config_01.xml
labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd
Log:
Added support for generic listener/bus/provider types. This is to support people adding their own listener + bus + provider impleemntations.
Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java 2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java 2006-12-18 17:05:19 UTC (rev 8384)
@@ -30,6 +30,7 @@
import org.jboss.soa.esb.listeners.config.mappers.ActionMapper;
import org.jboss.soa.esb.listeners.config.mappers.JmsListenerMapper;
import org.jboss.soa.esb.listeners.config.mappers.NotificationMapper;
+import org.jboss.soa.esb.listeners.config.mappers.UntypedListenerMapper;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -88,7 +89,7 @@
if(listener instanceof JmsListener) {
listenerConfigTree = JmsListenerMapper.map(root, (JmsListener)listener, model);
} else {
- throw new ConfigurationException("Unsupported ESB Aware listener type [" + listener.getClass().getName() + "]. No mapper class configured.");
+ listenerConfigTree = UntypedListenerMapper.map(root, listener, model);
}
// Locate the Service to which the listener is bound...
Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java 2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/GatewayGenerator.java 2006-12-18 17:05:19 UTC (rev 8384)
@@ -27,6 +27,7 @@
import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
import org.jboss.soa.esb.listeners.config.JmsListenerDocument.JmsListener;
import org.jboss.soa.esb.listeners.config.mappers.JmsListenerMapper;
+import org.jboss.soa.esb.listeners.config.mappers.UntypedListenerMapper;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -82,7 +83,7 @@
if(gateway instanceof JmsListener) {
JmsListenerMapper.map(root, (JmsListener)gateway, model);
} else {
- throw new ConfigurationException("Unsupported Gateway listener type [" + gateway.getClass().getName() + "]. No mapper class configured.");
+ UntypedListenerMapper.map(root, gateway, model);
}
}
}
Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java 2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/JmsListenerMapper.java 2006-12-18 17:05:19 UTC (rev 8384)
@@ -52,8 +52,7 @@
* @throws ConfigurationException Invalid listener configuration.
*/
public static Element map(Element root, JmsListener listener, XMLBeansModel model) throws ConfigurationException {
- Element listenerNode = YADOMUtil.addElement(root, "listener-config");
- Service service = model.getService(listener);
+ Element listenerNode = YADOMUtil.addElement(root, "jms-listener-config");
JmsBus bus;
JmsProvider provider;
@@ -68,16 +67,15 @@
throw new ConfigurationException("Invalid bus config [" + listener.getBusidref() + "]. Should be contained within a <jms-provider> instance. Unexpected exception - this should have caused a validation error!");
}
+ // Map the standard listener attributes - common across all listener types...
+ MapperUtil.mapDefaultAttributes(listener, listenerNode, model);
+ // Map the <property> elements targeted at the listener.
+ MapperUtil.mapProperties(listener, listenerNode, model);
+
if(listener.getIsGateway()) {
- listenerNode.setAttribute(ListenerTagNames.TARGET_SERVICE_CATEGORY_TAG, service.getCategory());
- listenerNode.setAttribute(ListenerTagNames.TARGET_SERVICE_NAME_TAG, service.getName());
listenerNode.setAttribute("gatewayClass", JmsGatewayListener.class.getName());
} else {
- listenerNode.setAttribute(ListenerTagNames.SERVICE_CATEGORY_NAME_TAG, service.getCategory());
- listenerNode.setAttribute(ListenerTagNames.SERVICE_NAME_TAG, service.getName());
- listenerNode.setAttribute(ListenerTagNames.SERVICE_DESCRIPTION_TAG, service.getDescription());
listenerNode.setAttribute("listenerClass", JmsQueueListener.class.getName());
- listenerNode.setAttribute(ListenerTagNames.EPR_DESCRIPTION_TAG, listener.getName());
}
JmsMessageFilter messageFilter = listener.getJmsMessageFilter();
Added: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/MapperUtil.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/MapperUtil.java 2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/MapperUtil.java 2006-12-18 17:05:19 UTC (rev 8384)
@@ -0,0 +1,96 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+
+package org.jboss.soa.esb.listeners.config.mappers;
+
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.ListenerTagNames;
+import org.jboss.soa.esb.listeners.config.Bus;
+import org.jboss.soa.esb.listeners.config.Listener;
+import org.jboss.soa.esb.listeners.config.Provider;
+import org.jboss.soa.esb.listeners.config.YADOMUtil;
+import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
+import org.jboss.soa.esb.listeners.config.PropertyDocument.Property;
+import org.jboss.soa.esb.listeners.config.ServiceDocument.Service;
+import org.w3c.dom.Element;
+
+/**
+ * Mapper utility methods.
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+abstract class MapperUtil {
+
+ /**
+ * Map all default listener attributes onto the target listener ConfigTree.
+ * @param listener The listener configuration instance.
+ * @param target The target DOM ConfigTree listener element.
+ * @param model The model.
+ */
+ protected static void mapDefaultAttributes(Listener listener, Element target, XMLBeansModel model) {
+ Service service = model.getService(listener);
+
+ if(listener.getIsGateway()) {
+ target.setAttribute(ListenerTagNames.TARGET_SERVICE_CATEGORY_TAG, service.getCategory());
+ target.setAttribute(ListenerTagNames.TARGET_SERVICE_NAME_TAG, service.getName());
+ } else {
+ target.setAttribute(ListenerTagNames.SERVICE_CATEGORY_NAME_TAG, service.getCategory());
+ target.setAttribute(ListenerTagNames.SERVICE_NAME_TAG, service.getName());
+ target.setAttribute(ListenerTagNames.SERVICE_DESCRIPTION_TAG, service.getDescription());
+ target.setAttribute(ListenerTagNames.EPR_DESCRIPTION_TAG, listener.getName());
+ }
+ }
+
+ /**
+ * Map all the properties targeted at the supplied listener onto the target element.
+ * <p/>
+ * This involves copying the properties from the associated bus and provider nodes.
+ * @param listener The listener config instance.
+ * @param target The target DOM ConfigTree listener element.
+ * @param model The model.
+ * @throws ConfigurationException Bad bis configuration.
+ */
+ protected static void mapProperties(Listener listener, Element target, XMLBeansModel model) throws ConfigurationException {
+ Bus bus = model.getBus(listener.getBusidref());
+ Provider provider = model.getProvider(bus);
+
+ // Map the properties from the provider config...
+ mapProperties(provider.getPropertyArray(), target);
+ // Map the properties from the bus config...
+ mapProperties(bus.getPropertyArray(), target);
+ // Map the properties from the listener config...
+ mapProperties(listener.getPropertyArray(), target);
+ }
+
+ /**
+ * Map all the supplied properties onto the target element.
+ * @param target The target DOM element.
+ * @param properties The properties to be mapped.
+ */
+ private static void mapProperties(Property[] properties, Element target) {
+ // Map the property elements to actions attributes...
+ for(Property property : properties) {
+ target.setAttribute(property.getName(), property.getValue());
+ }
+
+ // Remove any empty attributes set on the action config...
+ YADOMUtil.removeEmptyAttributes(target);
+ }
+}
Added: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/UntypedListenerMapper.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/UntypedListenerMapper.java 2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/config/mappers/UntypedListenerMapper.java 2006-12-18 17:05:19 UTC (rev 8384)
@@ -0,0 +1,59 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+
+package org.jboss.soa.esb.listeners.config.mappers;
+
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.config.Listener;
+import org.jboss.soa.esb.listeners.config.YADOMUtil;
+import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
+import org.w3c.dom.Element;
+
+/**
+ * Perform a mapping for an "untyped" listener configuration.
+ * <p/>
+ * By "untyped" we mean that the listener type is not defined in the XSD, but instead is being
+ * defined using the base <listener> type, mapping all it's associated
+ * <property> values (including those of the associated bus and provider) onto the listener
+ * ConfigTree as attributes.
+ *
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public class UntypedListenerMapper {
+
+ /**
+ * @param root
+ * @param listener
+ * @param model
+ * @return
+ * @throws ConfigurationException
+ */
+ public static Element map(Element root, Listener listener, XMLBeansModel model) throws ConfigurationException {
+ Element listenerNode = YADOMUtil.addElement(root, "listener-config");
+
+ // Map the standard listener attributes - common across all listener types...
+ MapperUtil.mapDefaultAttributes(listener, listenerNode, model);
+ // Map the <property> elements targeted at the listener.
+ MapperUtil.mapProperties(listener, listenerNode, model);
+
+ return listenerNode;
+ }
+}
Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/GeneratorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/GeneratorUnitTest.java 2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/GeneratorUnitTest.java 2006-12-18 17:05:19 UTC (rev 8384)
@@ -99,7 +99,7 @@
assertEquals(1, gatewayListener.getMaxThreads());
List<Listener> awareListeners = model.getESBAwareListeners();
- assertEquals(1, awareListeners.size());
+ assertEquals(2, awareListeners.size());
JmsListener awareListener = (JmsListener)awareListeners.get(0);
assertEquals("Bank-Listener", awareListener.getName());
assertEquals("local-jms", awareListener.getBusidref());
@@ -110,6 +110,11 @@
assertEquals(JmsMessageFilter.DestType.TOPIC, listenerDestination.getDestType());
assertEquals("service='Reconciliation'", listenerDestination.getSelector());
+ Listener untypedAwareListener = awareListeners.get(1);
+ assertEquals("Bank-Listener-Generic", untypedAwareListener.getName());
+ assertEquals("my-generic-bus", untypedAwareListener.getBusidref());
+ assertTrue(!untypedAwareListener.getIsGateway());
+
Service gatewayService = model.getService(gatewayListener);
Service awareService = model.getService(awareListener);
assertEquals(gatewayService, awareService);
Modified: labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/jbossesb_config_01.xml
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/jbossesb_config_01.xml 2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/core/listeners/tests/src/org/jboss/soa/esb/listeners/config/jbossesb_config_01.xml 2006-12-18 17:05:19 UTC (rev 8384)
@@ -14,6 +14,15 @@
<jms-message-filter dest-type="QUEUE" dest-name="queue/A" selector="service='Reconciliation'" />
</jms-bus>
</jms-provider>
+
+ <provider>
+ <property name="my-generic-provider" value="my-generic-provider#someattribvalue" />
+
+ <bus busid="my-generic-bus">
+ <property name="my-generic-bus" value="my-generic-bus#someattribvalue" />
+ </bus>
+ </provider>
+
</providers>
<services>
<service category="Bank" name="Reconciliation" description="Bank Reconciliation Service">
@@ -23,12 +32,19 @@
is-gateway="true"
busidref="server1-jms"
maxThreads="1"/>
+
<jms-listener name="Bank-Listener"
is-gateway="false"
busidref="local-jms"
maxThreads="2">
<jms-message-filter dest-type="TOPIC" dest-name="queue/B" selector="service='Reconciliation'" />
</jms-listener>
+
+ <listener name="Bank-Listener-Generic"
+ is-gateway="false"
+ busidref="my-generic-bus">
+ <property name="my-generic-listener" value="my-generic-listener#someattribvalue" />
+ </listener>
</listeners>
<actions>
Modified: labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd
===================================================================
--- labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd 2006-12-18 15:03:08 UTC (rev 8383)
+++ labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd 2006-12-18 17:05:19 UTC (rev 8384)
@@ -7,7 +7,7 @@
elementFormDefault="qualified">
<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
- Document root.
+ Document root + some basic types.
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888-->
<xsd:element name="jbossesb" >
@@ -18,6 +18,13 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
+
+ <xsd:element name="property">
+ <xsd:complexType>
+ <xsd:attribute name="name" use="required" type="xsd:string"/>
+ <xsd:attribute name="value" type="xsd:string"/>
+ </xsd:complexType>
+ </xsd:element>
<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
Provider and Bus base types.
@@ -32,15 +39,19 @@
</xsd:element>
<xsd:complexType name="provider">
<xsd:sequence>
+ <xsd:element ref="jesb:property" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="jesb:bus" maxOccurs="unbounded" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
- <xsd:element name="provider" type="jesb:provider" abstract="true"/>
+ <xsd:element name="provider" type="jesb:provider"/>
<xsd:complexType name="bus">
+ <xsd:sequence>
+ <xsd:element ref="jesb:property" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
<xsd:attribute name="busid" use="required" type="xsd:string" />
</xsd:complexType>
- <xsd:element name="bus" type="jesb:bus" abstract="true"/>
+ <xsd:element name="bus" type="jesb:bus" />
<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
Service and Action types.
@@ -82,12 +93,6 @@
<xsd:attribute name="process" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
- <xsd:element name="property">
- <xsd:complexType>
- <xsd:attribute name="name" use="required" type="xsd:string"/>
- <xsd:attribute name="value" type="xsd:string"/>
- </xsd:complexType>
- </xsd:element>
<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
Listener base types.
@@ -101,10 +106,14 @@
</xsd:complexType>
</xsd:element>
<xsd:complexType name="listener">
+ <xsd:sequence>
+ <xsd:element ref="jesb:property" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="busidref" use="required" type="xsd:string" />
<xsd:attribute name="is-gateway" use="required" type="xsd:boolean" />
</xsd:complexType>
- <xsd:element name="listener" type="jesb:listener" abstract="true"/>
+ <xsd:element name="listener" type="jesb:listener" />
<!-- 88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
JMS Type Implementations.
@@ -154,7 +163,6 @@
<xsd:sequence>
<xsd:element ref="jesb:jms-message-filter" maxOccurs="1" minOccurs="0"/>
</xsd:sequence>
- <xsd:attribute name="busidref" use="required" type="xsd:string" />
<xsd:attribute name="maxThreads" use="required" type="xsd:int" />
</xsd:extension>
</xsd:complexContent>
More information about the jboss-svn-commits
mailing list