[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