[jboss-svn-commits] JBL Code SVN: r21426 - in labs/jbossesb/trunk/product: etc/schemas/xml and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 11 06:53:32 EDT 2008


Author: kevin.conner at jboss.com
Date: 2008-08-11 06:53:32 -0400 (Mon, 11 Aug 2008)
New Revision: 21426

Modified:
   labs/jbossesb/trunk/product/docs/ProgrammersGuide.odt
   labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java
Log:
Allow transacted InVm Listeners: JBESB-1925

Modified: labs/jbossesb/trunk/product/docs/ProgrammersGuide.odt
===================================================================
(Binary files differ)

Modified: labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd
===================================================================
--- labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd	2008-08-11 10:47:02 UTC (rev 21425)
+++ labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd	2008-08-11 10:53:32 UTC (rev 21426)
@@ -306,6 +306,13 @@
                     </xsd:documentation>
                 </xsd:annotation>
             </xsd:attribute>
+            <xsd:attribute name="invmTransacted" type="xsd:boolean">
+                <xsd:annotation>
+                    <xsd:documentation xml:lang="en">
+                        Should the InVM listener execute in a transacted environment?
+                    </xsd:documentation>
+                </xsd:annotation>
+            </xsd:attribute>
 		</xsd:complexType>
 	</xsd:element>
 

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java	2008-08-11 10:47:02 UTC (rev 21425)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java	2008-08-11 10:53:32 UTC (rev 21426)
@@ -245,7 +245,7 @@
                 messageQueue.notify();
             }
 
-            if (isTransactional())
+            if ((message != null) && isTransactional())
             {
                 /*
                  * Return the message, but don't remove it from the queue until the transaction

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java	2008-08-11 10:47:02 UTC (rev 21425)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ESBAwareGenerator.java	2008-08-11 10:53:32 UTC (rev 21426)
@@ -30,9 +30,14 @@
 import org.jboss.soa.esb.listeners.config.xbeanmodel.FsListenerDocument.FsListener;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.FtpListenerDocument.FtpListener;
 import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.JmsBusDocument.JmsBus;
+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.JmsMessageFilterDocument.JmsMessageFilter;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.ServiceDocument.Service;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.SqlBusDocument.SqlBus;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.SqlListenerDocument.SqlListener;
+import org.jboss.soa.esb.listeners.config.xbeanmodel.SqlProviderDocument.SqlProvider;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.ScheduledListenerDocument.ScheduledListener;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.*;
 import org.jboss.soa.esb.listeners.config.mappers.*;
@@ -55,7 +60,6 @@
     /**
 	 * XMLBeans based configuration model instance.
 	 */
-	@SuppressWarnings("unused")
 	private XMLBeansModel model;
 	
 	/**
@@ -116,10 +120,63 @@
 
         listenerNode.setAttribute(ListenerTagNames.MAX_THREADS_TAG, YADOMUtil.getAttribute(properties, ListenerTagNames.MAX_THREADS_TAG, "1"));
 
+        listenerNode.setAttribute(ListenerTagNames.TRANSACTED_TAG, Boolean.toString(getInVMTransacted(service))) ;
         YADOMUtil.removeEmptyAttributes(eprNode);
 
         ActionMapper.map(listenerNode, service, model);
     }
+    
+    /**
+     * Try to find the InVM transacted value.  Check to see if the transacted attribute
+     * has been explicitly set on the service.  If it has not been explicitly set then we
+     * check to see if any of the listener/bus configurations are transacted and assume the
+     * InVM is implicitly transacted.
+     * 
+     * @param service The current service.
+     * @return true if transacted, false otherwise.
+     */
+    private boolean getInVMTransacted(final Service service)
+        throws ConfigurationException
+    {
+        if (service.isSetInvmScope()) {
+            return service.getInvmTransacted() ;
+        } else {
+            for (Listener listener: service.getListeners().getListenerList()) {
+                if (listener instanceof ScheduledListener) {
+                    if (((ScheduledListener)listener).getTransacted())
+                        return true ;
+                }
+                else if (listener instanceof JmsListener) {
+                    final Bus bus = model.getBus(listener.getBusidref()) ;
+                    if (!(bus instanceof JmsBus))
+                        continue ;
+                    
+                    final Provider provider = model.getProvider(bus) ;
+                    if (provider instanceof JmsJcaProvider) {
+                        // Jms JCA provider defaults to true
+                        final JmsJcaProvider jmsJcaProvider = (JmsJcaProvider)provider ;
+                        if (!jmsJcaProvider.isSetTransacted() || jmsJcaProvider.getTransacted())
+                            return true ;
+                    } else if (provider instanceof JmsProviderType) {
+                        JmsMessageFilter filter = ((JmsListener)listener).getJmsMessageFilter() ;
+                        if (filter == null)
+                            filter = ((JmsBus)bus).getJmsMessageFilter() ;
+                        if ((filter != null) && filter.getTransacted())
+                            return true ;
+                    }
+                } else if (listener instanceof SqlListener) {
+                    final Bus bus = model.getBus(listener.getBusidref()) ;
+                    if (!(bus instanceof SqlBus))
+                        continue ;
+                    
+                    final Provider provider = model.getProvider(bus) ;
+                    if ((provider instanceof SqlProvider) && ((SqlProvider)provider).getTransacted())
+                        return true ;
+                }
+            }
+            return false ;
+        }
+    }
 
     /**
 	 * Add a single ESB Aware Listener configuration node to configuration root. 




More information about the jboss-svn-commits mailing list