[jboss-svn-commits] JBL Code SVN: r20867 - in labs/jbossesb/trunk/product: rosetta/src/org/jboss/internal/soa/esb/couriers and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 2 03:36:52 EDT 2008
Author: mark.little at jboss.com
Date: 2008-07-02 03:36:52 -0400 (Wed, 02 Jul 2008)
New Revision: 20867
Modified:
labs/jbossesb/trunk/product/docs/ProgrammersGuide.odt
labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java
labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/InVMEpr.java
labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/InVMCourierUnitTest.java
labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/helpers/tests/InVMUnitTest.java
Log:
http://jira.jboss.com/jira/browse/JBESB-1807
Modified: labs/jbossesb/trunk/product/docs/ProgrammersGuide.odt
===================================================================
(Binary files differ)
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-07-02 05:37:24 UTC (rev 20866)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/InVMCourier.java 2008-07-02 07:36:52 UTC (rev 20867)
@@ -27,6 +27,7 @@
import org.jboss.soa.esb.couriers.CourierException;
import org.jboss.soa.esb.message.Message;
+import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -55,7 +56,8 @@
private long deliveryTimeout = 0;
private boolean isActive = true;
-
+ private boolean passByReference = true;
+
/**
* Objects of this class should only be instantiated by internal
* implementations
@@ -82,6 +84,8 @@
} else {
deliveryTimeout = 0;
}
+
+ passByReference = epr.getPassByReference();
}
/**
@@ -102,7 +106,26 @@
}
synchronized (messageQueue) {
- messageQueue.add(message);
+ /*
+ * If not pass-by-reference then use a copy of
+ * the input message.
+ */
+
+ if (!passByReference)
+ {
+ try
+ {
+ messageQueue.add(message.copy());
+ }
+ catch (IOException ex)
+ {
+ logger.warn("Could not create a copy of message to pass by value: "+ex);
+
+ return false;
+ }
+ }
+ else
+ messageQueue.add(message);
// Notify 1 waiting pickup thread of the delivery...
messageQueue.notify();
Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/InVMEpr.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/InVMEpr.java 2008-07-02 05:37:24 UTC (rev 20866)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/InVMEpr.java 2008-07-02 07:36:52 UTC (rev 20867)
@@ -38,7 +38,7 @@
/**
* A helper class for using in-VM communication.
*
- * EPR: invm://servicename[?lockstep[#waittime]]
+ * EPR: invm://servicename[/pass-by-reference][?lockstep[#waittime]]
*
* where lockstep can be either true or false and waittime is the lockstep wait
* time in milliseconds. If lockstep is false then any value specified for
@@ -47,7 +47,8 @@
* e.g.,
*
* invm://myservice?true#20000 invm://myservice invm://myservice?false (same as
- * invm://myservice)
+ * invm://myservice) or invm://myservice/false?false (first false is pass-by-reference
+ * value, which in this case means pass the message by value, i.e., copy it).
*
* You can have a lockstep service, where the sender thread is tied to the one
* that does the execution (equivalent to the sender thread doing the work
@@ -74,10 +75,14 @@
public static final String LOCKSTEP_WAIT_TIME_TAG = "lockstepWait";
+ public static final String PASS_BY_VALUE = "passByValue";
+
private boolean _lockstep = false;
private boolean _lockstepTime = false;
+ private boolean _passByReference = false;
+
public InVMEpr(EPR epr)
{
setAddr(epr.getAddr());
@@ -111,6 +116,11 @@
getAddr().addExtension(LOCKSTEP_WAIT_TIME_TAG, nl.item(i).getTextContent());
_lockstepTime = true;
}
+ if (tag.equals(PASS_BY_VALUE))
+ {
+ getAddr().addExtension(PASS_BY_VALUE, nl.item(i).getTextContent());
+ _lockstepTime = true;
+ }
}
}
}
@@ -128,6 +138,7 @@
String serviceId = uri.getHost();
String lockstep = uri.getQuery();
String lockstepTime = uri.getFragment();
+ String passByReference = uri.getPath();
if (serviceId == null)
throw new URISyntaxException(uri.toString(),
@@ -136,7 +147,7 @@
if ("true".equalsIgnoreCase(lockstep))
{
setLockstep(true);
-
+
if (lockstepTime != null)
{
try
@@ -149,6 +160,9 @@
}
}
}
+
+ if ("/false".equalsIgnoreCase(passByReference))
+ setPassByReference(false);
}
public String getServiceId()
@@ -224,7 +238,30 @@
_lockstepTime = true;
}
+
+ public boolean getPassByReference ()
+ {
+ String passByReference = getAddr().getExtensionValue(PASS_BY_VALUE);
+ if (passByReference == null) // default
+ return true;
+
+ if ("false".equalsIgnoreCase(passByReference))
+ return false;
+ else
+ return true;
+ }
+
+ public void setPassByReference (boolean val)
+ {
+ if (_passByReference)
+ throw new IllegalStateException("Pass by reference already set!");
+
+ getAddr().addExtension(PASS_BY_VALUE, "" + val);
+
+ _passByReference = true;
+ }
+
public String toString()
{
return "InVMEpr [ " + super.getAddr().extendedToString() + " ]";
Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/InVMCourierUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/InVMCourierUnitTest.java 2008-07-02 05:37:24 UTC (rev 20866)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/InVMCourierUnitTest.java 2008-07-02 07:36:52 UTC (rev 20867)
@@ -130,7 +130,24 @@
Assert.assertEquals(consumer.valid(), true);
}
+
+ @Test
+ public void testPassByValueDeliver() throws Exception {
+ InVMEpr epr = new InVMEpr(new URI("invm://serviceid5/false?true#2000"));
+ InVMCourier courier = new InVMCourier(epr);
+ Producer producer = new Producer(courier);
+ Consumer consumer = new Consumer(courier);
+ consumer.start();
+ producer.start();
+
+ consumer.join(TIMEOUT) ;
+ Assert.assertTrue("Consumer valid", consumer.valid()) ;
+
+ Assert.assertEquals(consumer.valid(), true);
+ }
+
+
@Test
public void test_single_Courier_Creation() throws URISyntaxException,
MalformedEPRException, CourierException {
Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/helpers/tests/InVMUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/helpers/tests/InVMUnitTest.java 2008-07-02 05:37:24 UTC (rev 20866)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/helpers/tests/InVMUnitTest.java 2008-07-02 07:36:52 UTC (rev 20867)
@@ -49,6 +49,20 @@
fail(ex.toString());
}
}
+
+ public void testPassByReference ()
+ {
+ try
+ {
+ InVMEpr epr = new InVMEpr(new URI("invm://myservice/false?true#1234"));
+
+ assertEquals(epr.getPassByReference(), false);
+ }
+ catch (Exception ex)
+ {
+ fail(ex.toString());
+ }
+ }
public void testSetGet ()
{
More information about the jboss-svn-commits
mailing list