JBoss hornetq SVN: r9356 - trunk/native/src.
by do-not-reply@jboss.org
Author: clebert.suconic(a)jboss.com
Date: 2010-06-23 12:22:04 -0400 (Wed, 23 Jun 2010)
New Revision: 9356
Modified:
trunk/native/src/disktest.cpp
Log:
updating disktest to calculate sync rate
Modified: trunk/native/src/disktest.cpp
===================================================================
--- trunk/native/src/disktest.cpp 2010-06-23 12:16:46 UTC (rev 9355)
+++ trunk/native/src/disktest.cpp 2010-06-23 16:22:04 UTC (rev 9356)
@@ -21,6 +21,31 @@
}
+struct io_event *events;
+
+
+
+void checkEvents(int & result)
+{
+ for (int errCheck = 0 ; errCheck < result; errCheck++)
+ {
+ long result = events[errCheck].res;
+ if (result < 0)
+ {
+ fprintf (stderr, "error on writing AIO\n");
+ exit(-1);
+ }
+ else
+ {
+ struct iocb * iocbp = events[errCheck].obj;
+ delete iocbp;
+ }
+ }
+
+
+}
+
+
/**
* Authored by Clebert Suconic @ redhat . com
* Licensed under LGPL
@@ -30,29 +55,47 @@
char * directory;
int numberOfFiles;
int fileSize = 10 * 1024 * 1024;
- int bufferSize = 128 * 1024;
+ int bufferSize = 0;
void * preAllocBuffer = 0;
+ int preAllocBufferSize = 128 * 1024;
+ void * buffer = 0;
int maxAIO = 500;
- if (arg != 3)
+ if (arg != 4)
{
- fprintf (stderr, "usage disktest <directory> <numberOfFiles>\n");
+ fprintf (stderr, "usage disktest <directory> <numberOfFiles> <bufferSize>\n");
exit(-1);
}
directory = param[1];
numberOfFiles = atoi(param[2]);
+ bufferSize = atoi(param[3]);
+
+ if (bufferSize % 512 != 0)
+ {
+ fprintf (stderr, "Buffer size needs to be a multiple of 512\n");
+ exit(-1);
+ }
- if (posix_memalign(&preAllocBuffer, 512, bufferSize))
+ if (posix_memalign(&preAllocBuffer, 512, preAllocBufferSize))
{
fprintf (stderr, "Error allocating buffer");
exit(-1);
}
- memset(preAllocBuffer, 0, bufferSize);
+ memset(preAllocBuffer, 0, preAllocBufferSize);
+
+ if (posix_memalign(&buffer, 512, bufferSize))
+ {
+ fprintf (stderr, "Error allocating buffer");
+ exit(-1);
+ }
+
+ memset(buffer, 0, bufferSize);
+
fprintf (stderr, "====================================================================================\n");
fprintf (stderr, " Step 1: preAllocate files\n");
fprintf (stderr, "====================================================================================\n");
@@ -70,7 +113,7 @@
int handle = open (file, O_RDWR | O_CREAT | O_DIRECT, 0666);
- for (long size = 0; size < fileSize ; size += bufferSize)
+ for (long size = 0; size < fileSize ; size += preAllocBufferSize)
{
if (write(handle, preAllocBuffer, bufferSize) < 0)
{
@@ -83,7 +126,7 @@
long endfile = getTime();
- fprintf (stderr, "Total time to allocate file = %ld milliseconds, Bytes/millisecond = %ld\n", (endfile - startfile), (fileSize / (endfile - startfile)));
+ fprintf (stderr, "Total time to allocate file = %ld milliseconds, Bytes/millisecond = %f\n", (endfile - startfile), ((float)fileSize / ((float)endfile - (float)startfile)));
}
@@ -122,7 +165,7 @@
io_queue_init(maxAIO, &aioContext);
- struct io_event *events = (struct io_event *)malloc (maxAIO * sizeof (struct io_event));
+ events = (struct io_event *)malloc (maxAIO * sizeof (struct io_event));
int handle = open(file, O_RDWR | O_CREAT | O_DIRECT, 0666);
@@ -130,49 +173,56 @@
long startAIO = getTime();
+ int writesReceived = 0;
+
for (long position = 0 ; position < fileSize; position += bufferSize)
{
- writes++;
+ writes++;
struct iocb * iocb = new struct iocb();
- ::io_prep_pwrite(iocb, handle, preAllocBuffer, bufferSize, position);
+ ::io_prep_pwrite(iocb, handle, buffer, bufferSize, position);
iocb->data = (void *)position;
+
+
if (io_submit(aioContext, 1, &iocb) < 0)
{
- fprintf (stderr, "Error on submitting AIO\n");
- exit(-1);
+ // the write queue is probably full, need to take out some events and try again
+ short passed = 0;
+ for (int retry=0; retry < 10; retry++)
+ {
+ int result = io_getevents(aioContext, 1, maxAIO, events, 0);
+
+ writesReceived += result;
+
+ checkEvents(result);
+
+ if (io_submit(aioContext, 1, &iocb) >= 0)
+ {
+ passed = 1;
+ break;
+ }
+ }
+ if (!passed)
+ {
+ fprintf (stderr,"Error on submitting AIO\n");
+ exit(-1);
+ }
}
}
- int writesReceived = 0;
while (writesReceived < writes)
{
int result = io_getevents(aioContext, 1, maxAIO, events, 0);
writesReceived += result;
-
-
- for (int errCheck = 0 ; errCheck < result; errCheck++)
- {
- long result = events[i].res;
- if (result < 0)
- {
- fprintf (stderr, "error on writing AIO\n");
- exit(-1);
- }
- else
- {
- struct iocb * iocbp = events[errCheck].obj;
- delete iocbp;
- }
- }
+ checkEvents(result);
}
long endAIO = getTime();
- fprintf (stderr, "Total time to write file = %ld milliseconds, Bytes/millisecond = %ld\n", (endAIO - startAIO), (fileSize / (endAIO - startAIO)));
+ fprintf (stderr, "Total time to write file = %ld milliseconds, Bytes/millisecond = %ld, Writes/Syncs per millisecond = %ld \n", (endAIO - startAIO), (fileSize / (endAIO - startAIO)), (writes / (endAIO - startAIO)));
free (events);
14 years, 8 months
JBoss hornetq SVN: r9355 - in trunk: examples/javaee/jms-bridge/server and 1 other directories.
by do-not-reply@jboss.org
Author: ataylor
Date: 2010-06-23 08:16:46 -0400 (Wed, 23 Jun 2010)
New Revision: 9355
Modified:
trunk/docs/user-manual/en/jms-bridge.xml
trunk/examples/javaee/jms-bridge/server/jms-bridge-jboss-beans.xml
trunk/examples/jms/jms-bridge/server1/hornetq-beans.xml
Log:
HORNETQ-393 - add timeout code around JNDI lookup in JMSBridgeImpl to deal with network outages
Modified: trunk/docs/user-manual/en/jms-bridge.xml
===================================================================
--- trunk/docs/user-manual/en/jms-bridge.xml 2010-06-22 20:09:07 UTC (rev 9354)
+++ trunk/docs/user-manual/en/jms-bridge.xml 2010-06-23 12:16:46 UTC (rev 9355)
@@ -172,6 +172,14 @@
<key>java.naming.factory.url.pkgs</key>
<value>org.jboss.naming:org.jnp.interfaces"</value>
</entry>
+ <entry>
+ <key>jnp.timeout</key>
+ <value>5000</value>
+ </entry>
+ <entry>
+ <key>jnp.sotimeout</key>
+ <value>5000</value>
+ </entry>
</map>
</constructor>
</bean>
@@ -403,6 +411,25 @@
your specific application.</para>
</note>
</section>
+ <section>
+ <title>Time outs and the JMS bridge</title>
+ <para>There is a possibility that the target or source server will not be available at some point in time.
+ If this occurs then the bridge will try <literal>Max Retries</literal> to reconnect every
+ <literal>Failure Retry Interval</literal> milliseconds as specified in the JMS Bridge definition.</para>
+ <para>However since a third party JNDI is used, in this case the JBoss naming server, it is possible for the
+ JNDI lookup to hang if the network were to disappear during the JNDI lookup. To stop this occuring the JNDI
+ definition can be configured to time out if this occurs. To do this set the <literal>jnp.timeout</literal>
+ and the <literal>jnp.sotimeout</literal> on the Initial Context definition. The first sets the connection
+ timeout for the initial connection and the second the read timeout for the socket.</para>
+ <note>
+ <para>Once the initial JNDI connection has succeeded all calls are made using RMI. If you want to control
+ the timeouts for the RMI connections then this can be done via system properties. JBoss uses Sun's RMI
+ and the properties can be found <ulink
+ url="http://java.sun.com/j2se/1.5.0/docs/guide/rmi/sunrmiproperties.html">here</ulink>.
+ The default connection timeout is 10 seconds and the default read timeout is 18 seconds.</para>
+ </note>
+ <para>If you implement your own factories for looking up JMS resources then you will have to bear in mind timeout issues.</para>
+ </section>
<section>
<title>Examples</title>
<para>Please see <xref linkend="examples.javaee.jms-bridge"/> which shows how to configure
Modified: trunk/examples/javaee/jms-bridge/server/jms-bridge-jboss-beans.xml
===================================================================
--- trunk/examples/javaee/jms-bridge/server/jms-bridge-jboss-beans.xml 2010-06-22 20:09:07 UTC (rev 9354)
+++ trunk/examples/javaee/jms-bridge/server/jms-bridge-jboss-beans.xml 2010-06-23 12:16:46 UTC (rev 9355)
@@ -119,6 +119,14 @@
<key>java.naming.factory.url.pkgs</key>
<value>org.jboss.naming:org.jnp.interfaces"</value>
</entry>
+ <entry>
+ <key>jnp.timeout</key>
+ <value>5000</value>
+ </entry>
+ <entry>
+ <key>jnp.sotimeout</key>
+ <value>5000</value>
+ </entry>
</map>
</constructor>
</bean>
Modified: trunk/examples/jms/jms-bridge/server1/hornetq-beans.xml
===================================================================
--- trunk/examples/jms/jms-bridge/server1/hornetq-beans.xml 2010-06-22 20:09:07 UTC (rev 9354)
+++ trunk/examples/jms/jms-bridge/server1/hornetq-beans.xml 2010-06-23 12:16:46 UTC (rev 9355)
@@ -186,6 +186,14 @@
<key>java.naming.factory.url.pkgs</key>
<value>org.jboss.naming:org.jnp.interfaces"</value>
</entry>
+ <entry>
+ <key>jnp.timeout</key>
+ <value>5000</value>
+ </entry>
+ <entry>
+ <key>jnp.sotimeout</key>
+ <value>5000</value>
+ </entry>
</map>
</constructor>
</bean>
@@ -211,6 +219,14 @@
<key>java.naming.factory.url.pkgs</key>
<value>org.jboss.naming:org.jnp.interfaces"</value>
</entry>
+ <entry>
+ <key>jnp.timeout</key>
+ <value>5000</value>
+ </entry>
+ <entry>
+ <key>jnp.sotimeout</key>
+ <value>5000</value>
+ </entry>
</map>
</constructor>
</bean>
14 years, 8 months
JBoss hornetq SVN: r9354 - trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector.
by do-not-reply@jboss.org
Author: clebert.suconic(a)jboss.com
Date: 2010-06-22 16:09:07 -0400 (Tue, 22 Jun 2010)
New Revision: 9354
Modified:
trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java
Log:
tweak on test
Modified: trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java
===================================================================
--- trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java 2010-06-22 19:56:19 UTC (rev 9353)
+++ trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java 2010-06-22 20:09:07 UTC (rev 9354)
@@ -1048,6 +1048,8 @@
assertEquals("VALUE1", tm.getStringProperty("PROP1"));
assertEquals("VALUE2", tm.getStringProperty("PROP2"));
+ tm.acknowledge();
+
}
finally
{
14 years, 8 months
JBoss hornetq SVN: r9353 - trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector.
by do-not-reply@jboss.org
Author: clebert.suconic(a)jboss.com
Date: 2010-06-22 15:56:19 -0400 (Tue, 22 Jun 2010)
New Revision: 9353
Modified:
trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java
Log:
Adding test to investigate a customer / user issue
Modified: trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java
===================================================================
--- trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java 2010-06-22 19:53:54 UTC (rev 9352)
+++ trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java 2010-06-22 19:56:19 UTC (rev 9353)
@@ -19,6 +19,7 @@
import java.util.concurrent.CountDownLatch;
import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Message;
import javax.jms.MessageConsumer;
@@ -26,6 +27,7 @@
import javax.jms.Session;
import javax.jms.TextMessage;
+import org.hornetq.jms.client.HornetQConnectionFactory;
import org.hornetq.jms.tests.HornetQServerTestCase;
import org.hornetq.jms.tests.util.ProxyAssertSupport;
@@ -937,14 +939,19 @@
// Test case proposed by a customer on this user forum:
// http://community.jboss.org/thread/153426?tstart=0
- public void under_investigation_testMultipleConsumers() throws Exception
+ public void testMultipleConsumers() throws Exception
{
Connection conn = null;
try
{
- conn = getConnectionFactory().createConnection();
+ ConnectionFactory factory = getConnectionFactory();
+ HornetQConnectionFactory hcf = (HornetQConnectionFactory) factory;
+ hcf.setConsumerWindowSize(0);
+
+ conn = hcf.createConnection();
+
conn.setClientID("SomeClientID");
conn.start();
14 years, 8 months
JBoss hornetq SVN: r9352 - trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector.
by do-not-reply@jboss.org
Author: clebert.suconic(a)jboss.com
Date: 2010-06-22 15:53:54 -0400 (Tue, 22 Jun 2010)
New Revision: 9352
Modified:
trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java
Log:
Adding test to investigate a customer / user issue
Modified: trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java
===================================================================
--- trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java 2010-06-22 15:25:48 UTC (rev 9351)
+++ trunk/tests/jms-tests/src/org/hornetq/jms/tests/selector/SelectorTest.java 2010-06-22 19:53:54 UTC (rev 9352)
@@ -933,7 +933,125 @@
}
}
}
+
+
+ // Test case proposed by a customer on this user forum:
+ // http://community.jboss.org/thread/153426?tstart=0
+ public void under_investigation_testMultipleConsumers() throws Exception
+ {
+ Connection conn = null;
+ try
+ {
+ conn = getConnectionFactory().createConnection();
+
+ conn.setClientID("SomeClientID");
+
+ conn.start();
+
+ Session session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
+
+ MessageProducer msgProducer = session.createProducer(HornetQServerTestCase.queue1);
+
+ TextMessage tm;
+ /* Publish messages */
+ tm = session.createTextMessage();
+ tm.setText("1");
+ tm.setStringProperty("PROP1", "VALUE1");
+ msgProducer.send(tm);
+ System.out.println ("Sent message with id [" + tm.getJMSMessageID() + "]");
+
+ tm = session.createTextMessage();
+ tm.setText("2");
+ tm.setStringProperty("PROP1", "VALUE1");
+ msgProducer.send(tm);
+ System.out.println ("Sent message with id [" + tm.getJMSMessageID() + "]");
+
+ tm = session.createTextMessage();
+ tm.setText("3");
+ tm.setStringProperty("PROP2", "VALUE2");
+ msgProducer.send(tm);
+ System.out.println ("Sent message with id [" + tm.getJMSMessageID() + "]");
+
+ tm = session.createTextMessage();
+ tm.setText("4");
+ tm.setStringProperty("PROP2", "VALUE2");
+ msgProducer.send(tm);
+ System.out.println ("Sent message with id [" + tm.getJMSMessageID() + "]");
+
+ tm = session.createTextMessage();
+ tm.setText("5");
+ tm.setStringProperty("PROP1", "VALUE1");
+ msgProducer.send(tm);
+ System.out.println ("Sent message with id [" + tm.getJMSMessageID() + "]");
+
+ tm = session.createTextMessage();
+ tm.setText("6");
+ tm.setStringProperty("PROP1", "VALUE1");
+ tm.setStringProperty("PROP2", "VALUE2");
+ msgProducer.send(tm);
+ System.out.println ("Sent message with id [" + tm.getJMSMessageID() + "]");
+ msgProducer.close();
+ msgProducer = null;
+
+
+ MessageConsumer msgConsumer = session.createConsumer(HornetQServerTestCase.queue1, "PROP2 = 'VALUE2'");
+
+ tm = (TextMessage) msgConsumer.receive(5000);
+
+ assertNotNull(tm);
+
+ assertEquals("3", tm.getText());
+ assertEquals("VALUE2", tm.getStringProperty("PROP2"));
+
+ tm.acknowledge();
+
+ conn.close(); // this should close the consumer, producer and session associated with the connection
+
+
+ // Reopen the connection and consumer
+
+ conn = getConnectionFactory().createConnection();
+ conn.start();
+
+ session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
+
+ msgConsumer = session.createConsumer(HornetQServerTestCase.queue1);
+
+ tm = (TextMessage)msgConsumer.receive(5000);
+ assertEquals("1", tm.getText());
+ assertEquals("VALUE1", tm.getStringProperty("PROP1"));
+
+
+ tm = (TextMessage)msgConsumer.receive(5000);
+ assertEquals("2", tm.getText());
+ assertEquals("VALUE1", tm.getStringProperty("PROP1"));
+
+ tm = (TextMessage)msgConsumer.receive(5000);
+ assertEquals("4", tm.getText());
+ assertEquals("VALUE2", tm.getStringProperty("PROP2"));
+
+
+ tm = (TextMessage)msgConsumer.receive(5000);
+ assertEquals("5", tm.getText());
+ assertEquals("VALUE1", tm.getStringProperty("PROP1"));
+
+ tm = (TextMessage)msgConsumer.receive(5000);
+ assertEquals("6", tm.getText());
+ assertEquals("VALUE1", tm.getStringProperty("PROP1"));
+ assertEquals("VALUE2", tm.getStringProperty("PROP2"));
+
+ }
+ finally
+ {
+ if (conn != null)
+ {
+ conn.close();
+ }
+ }
+
+ }
+
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
14 years, 8 months
JBoss hornetq SVN: r9351 - trunk/src/main/org/hornetq/core/postoffice/impl.
by do-not-reply@jboss.org
Author: jmesnil
Date: 2010-06-22 11:25:48 -0400 (Tue, 22 Jun 2010)
New Revision: 9351
Modified:
trunk/src/main/org/hornetq/core/postoffice/impl/PostOfficeImpl.java
Log:
page messages under a transaction
* when a message is paged under a transaction, commit the tx (if it was started here) before returning to effectively page the message
Modified: trunk/src/main/org/hornetq/core/postoffice/impl/PostOfficeImpl.java
===================================================================
--- trunk/src/main/org/hornetq/core/postoffice/impl/PostOfficeImpl.java 2010-06-22 13:49:58 UTC (rev 9350)
+++ trunk/src/main/org/hornetq/core/postoffice/impl/PostOfficeImpl.java 2010-06-22 15:25:48 UTC (rev 9351)
@@ -613,12 +613,18 @@
}
else
{
- boolean depage = context.getTransaction().getProperty(TransactionPropertyIndexes.IS_DEPAGE) != null;
+ Transaction tx = context.getTransaction();
+ boolean depage = tx.getProperty(TransactionPropertyIndexes.IS_DEPAGE) != null;
if (!depage && message.storeIsPaging())
{
- getPageOperation(context.getTransaction()).addMessageToPage(message);
-
+
+ getPageOperation(tx).addMessageToPage(message);
+ if (startedTx)
+ {
+ tx.commit();
+ }
+
return;
}
}
14 years, 8 months
JBoss hornetq SVN: r9350 - trunk/tests/src/org/hornetq/tests/integration/cluster/bridge.
by do-not-reply@jboss.org
Author: jmesnil
Date: 2010-06-22 09:49:58 -0400 (Tue, 22 Jun 2010)
New Revision: 9350
Modified:
trunk/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeWithPagingTest.java
Log:
remove non-ascii character
Modified: trunk/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeWithPagingTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeWithPagingTest.java 2010-06-22 13:29:47 UTC (rev 9349)
+++ trunk/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeWithPagingTest.java 2010-06-22 13:49:58 UTC (rev 9350)
@@ -206,7 +206,7 @@
{
System.out.println("<<< " + i);
ClientMessage r1 = cons1.receive(1500);
- Assert.assertNotNull("did not receive message n�" + i, r1);
+ Assert.assertNotNull("did not receive message " + i, r1);
Assert.assertEquals(i, r1.getObjectProperty(propKey));
r1.acknowledge();
}
14 years, 8 months
JBoss hornetq SVN: r9349 - trunk/tests/src/org/hornetq/tests/integration/cluster/bridge.
by do-not-reply@jboss.org
Author: jmesnil
Date: 2010-06-22 09:29:47 -0400 (Tue, 22 Jun 2010)
New Revision: 9349
Modified:
trunk/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeWithPagingTest.java
Log:
https://jira.jboss.org/browse/HORNETQ-382
* reduce test value to make the issue appear faster (at message 306 on my laptop)
* add missing message ack
Modified: trunk/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeWithPagingTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeWithPagingTest.java 2010-06-21 16:13:48 UTC (rev 9348)
+++ trunk/tests/src/org/hornetq/tests/integration/cluster/bridge/BridgeWithPagingTest.java 2010-06-22 13:29:47 UTC (rev 9349)
@@ -139,8 +139,8 @@
AddressSettings addressSettings = new AddressSettings();
addressSettings.setRedeliveryDelay(0);
- addressSettings.setMaxSizeBytes(10485760);
- addressSettings.setPageSizeBytes(1048576);
+ addressSettings.setMaxSizeBytes(1048576);
+ addressSettings.setPageSizeBytes(104857);
addressSettings.setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE);
server0.getConfiguration().getAddressesSettings().put("#", addressSettings);
@@ -185,7 +185,7 @@
};
t.start();
- final int numMessages = 5000;
+ final int numMessages = 500;
SimpleString propKey = new SimpleString("propkey");
@@ -206,8 +206,9 @@
{
System.out.println("<<< " + i);
ClientMessage r1 = cons1.receive(1500);
- Assert.assertNotNull(r1);
+ Assert.assertNotNull("did not receive message n�" + i, r1);
Assert.assertEquals(i, r1.getObjectProperty(propKey));
+ r1.acknowledge();
}
session0.close();
14 years, 8 months
JBoss hornetq SVN: r9348 - in trunk: src/main/org/hornetq/jms/management/impl and 1 other directories.
by do-not-reply@jboss.org
Author: jmesnil
Date: 2010-06-21 12:13:48 -0400 (Mon, 21 Jun 2010)
New Revision: 9348
Modified:
trunk/src/main/org/hornetq/api/jms/management/JMSServerControl.java
trunk/src/main/org/hornetq/jms/management/impl/JMSServerControlImpl.java
trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlTest.java
trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlUsingJMSTest.java
Log:
https://jira.jboss.org/browse/HORNETQ-422: Expose durable option on JMSServerControl for createQueue
* add createQueue(..., boolean durable) method to JMSServerControl to let user create non-durable JMS queues through management API
Modified: trunk/src/main/org/hornetq/api/jms/management/JMSServerControl.java
===================================================================
--- trunk/src/main/org/hornetq/api/jms/management/JMSServerControl.java 2010-06-21 12:15:34 UTC (rev 9347)
+++ trunk/src/main/org/hornetq/api/jms/management/JMSServerControl.java 2010-06-21 16:13:48 UTC (rev 9348)
@@ -60,7 +60,7 @@
// Operations ----------------------------------------------------
/**
- * Creates a JMS Queue.
+ * Creates a durable JMS Queue.
*
* @return {@code true} if the queue was created, {@code false} else
*/
@@ -68,7 +68,7 @@
boolean createQueue(@Parameter(name = "name", desc = "Name of the queue to create") String name) throws Exception;
/**
- * Creates a JMS Queue with the specified name and JNDI binding.
+ * Creates a durable JMS Queue with the specified name and JNDI binding.
*
* @return {@code true} if the queue was created, {@code false} else
*/
@@ -77,7 +77,7 @@
@Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings) throws Exception;
/**
- * Creates a JMS Queue with the specified name and JNDI binding.
+ * Creates a durable JMS Queue with the specified name, JNDI binding and selector.
*
* @return {@code true} if the queue was created, {@code false} else
*/
@@ -86,7 +86,18 @@
@Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings,
@Parameter(name = "selector", desc = "the jms selector") String selector) throws Exception;
+ /**
+ * Creates a JMS Queue with the specified name, durability, selector and JNDI binding.
+ *
+ * @return {@code true} if the queue was created, {@code false} else
+ */
+ @Operation(desc = "Create a JMS Queue", impact = MBeanOperationInfo.ACTION)
+ boolean createQueue(@Parameter(name = "name", desc = "Name of the queue to create") String name,
+ @Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings,
+ @Parameter(name = "selector", desc = "the jms selector") String selector,
+ @Parameter(name = "durable", desc = "durability of the queue") boolean durable) throws Exception;
+
/**
* Destroys a JMS Queue with the specified name.
*
Modified: trunk/src/main/org/hornetq/jms/management/impl/JMSServerControlImpl.java
===================================================================
--- trunk/src/main/org/hornetq/jms/management/impl/JMSServerControlImpl.java 2010-06-21 12:15:34 UTC (rev 9347)
+++ trunk/src/main/org/hornetq/jms/management/impl/JMSServerControlImpl.java 2010-06-21 16:13:48 UTC (rev 9348)
@@ -253,7 +253,7 @@
final String discoveryAddress,
final int discoveryPort,
final String jndiBindings) throws Exception
- {
+ {
checkStarted();
clearIO();
@@ -269,30 +269,32 @@
{
blockOnIO();
}
- }
+ }
-
- public boolean createQueue(@Parameter(name = "name", desc = "Name of the queue to create") String name) throws Exception
+ public boolean createQueue(String name) throws Exception
{
- return createQueue(name, null, null);
+ return createQueue(name, null, null, true);
}
-
-
public boolean createQueue(final String name, final String jndiBindings) throws Exception
{
- return createQueue(name, jndiBindings, null);
+ return createQueue(name, jndiBindings, null, true);
}
- public boolean createQueue(@Parameter(name = "name", desc = "Name of the queue to create") String name, @Parameter(name = "jndiBindings", desc = "comma-separated list of JNDI bindings (use ',' if u need to use commas in your jndi name)") String jndiBindings, @Parameter(name = "selector", desc = "the jms selector") String selector) throws Exception
+ public boolean createQueue(String name, String jndiBindings, String selector) throws Exception
{
+ return createQueue(name, jndiBindings, selector, true);
+ }
+
+ public boolean createQueue(String name, String jndiBindings, String selector, boolean durable) throws Exception
+ {
checkStarted();
clearIO();
try
{
- boolean created = server.createQueue(true, name, selector, true, JMSServerControlImpl.toArray(jndiBindings));
+ boolean created = server.createQueue(true, name, selector, durable, JMSServerControlImpl.toArray(jndiBindings));
if (created)
{
sendNotification(NotificationType.QUEUE_CREATED, name);
@@ -326,7 +328,7 @@
}
}
- public boolean createTopic(@Parameter(name = "name", desc = "Name of the topic to create") String name) throws Exception
+ public boolean createTopic(String name) throws Exception
{
return createTopic(name, null);
}
Modified: trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlTest.java 2010-06-21 12:15:34 UTC (rev 9347)
+++ trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlTest.java 2010-06-21 16:13:48 UTC (rev 9348)
@@ -39,6 +39,7 @@
import org.hornetq.core.config.DiscoveryGroupConfiguration;
import org.hornetq.core.config.impl.ConfigurationImpl;
import org.hornetq.core.logging.Logger;
+import org.hornetq.core.postoffice.QueueBinding;
import org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory;
import org.hornetq.core.remoting.impl.invm.InVMConnectorFactory;
import org.hornetq.core.remoting.impl.invm.TransportConstants;
@@ -228,6 +229,30 @@
Assert.assertTrue(fakeJMSStorageManager.persistedJNDIMap.get(queueName).contains(bindings[2]));
}
+ public void testCreateNonDurableQueue() throws Exception
+ {
+ String queueName = RandomUtil.randomString();
+ String binding = RandomUtil.randomString();
+
+ UnitTestCase.checkNoBinding(context, binding);
+ checkNoResource(ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queueName));
+
+ JMSServerControl control = createManagementControl();
+ control.createQueue(queueName, binding, null, false);
+
+ Object o = UnitTestCase.checkBinding(context, binding);
+ Assert.assertTrue(o instanceof Queue);
+ Queue queue = (Queue)o;
+ Assert.assertEquals(queueName, queue.getQueueName());
+ QueueBinding queueBinding = (QueueBinding)server.getPostOffice().getBinding(new SimpleString("jms.queue." + queueName));
+ assertFalse(queueBinding.getQueue().isDurable());
+ checkResource(ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queueName));
+
+ // queue is not durable => not stored
+ Assert.assertNull(fakeJMSStorageManager.destinationMap.get(queueName));
+ Assert.assertNull(fakeJMSStorageManager.persistedJNDIMap.get(queueName));
+ }
+
public void testDestroyQueue() throws Exception
{
String queueJNDIBinding = RandomUtil.randomString();
Modified: trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlUsingJMSTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlUsingJMSTest.java 2010-06-21 12:15:34 UTC (rev 9347)
+++ trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlUsingJMSTest.java 2010-06-21 16:13:48 UTC (rev 9348)
@@ -179,6 +179,11 @@
return (Boolean)proxy.invokeOperation("createQueue", name, jndiBindings, selector);
}
+ public boolean createQueue(String name, String jndiBindings, String selector, boolean durable) throws Exception
+ {
+ return (Boolean)proxy.invokeOperation("createQueue", name, jndiBindings, selector, durable);
+ }
+
public boolean createTopic(final String name) throws Exception
{
return (Boolean)proxy.invokeOperation("createTopic", name);
14 years, 8 months
JBoss hornetq SVN: r9347 - trunk/tests/src/org/hornetq/tests/integration/jms/server/management.
by do-not-reply@jboss.org
Author: jmesnil
Date: 2010-06-21 08:15:34 -0400 (Mon, 21 Jun 2010)
New Revision: 9347
Added:
trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlRestartTest.java
Log:
JMS queue creation with JMX and server restart
* add test to create a durable queue with JMX, restart the server and check the JMS queue is still there
Added: trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlRestartTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlRestartTest.java (rev 0)
+++ trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlRestartTest.java 2010-06-21 12:15:34 UTC (rev 9347)
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package org.hornetq.tests.integration.jms.server.management;
+
+import javax.jms.Queue;
+
+import junit.framework.Assert;
+
+import org.hornetq.api.core.TransportConfiguration;
+import org.hornetq.api.core.management.ObjectNameBuilder;
+import org.hornetq.api.jms.management.JMSServerControl;
+import org.hornetq.core.config.Configuration;
+import org.hornetq.core.config.impl.ConfigurationImpl;
+import org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory;
+import org.hornetq.core.server.HornetQServer;
+import org.hornetq.core.server.HornetQServers;
+import org.hornetq.jms.persistence.JMSStorageManager;
+import org.hornetq.jms.persistence.impl.journal.JMSJournalStorageManagerImpl;
+import org.hornetq.jms.server.impl.JMSServerManagerImpl;
+import org.hornetq.tests.integration.management.ManagementControlHelper;
+import org.hornetq.tests.integration.management.ManagementTestBase;
+import org.hornetq.tests.unit.util.InVMContext;
+import org.hornetq.tests.util.RandomUtil;
+import org.hornetq.tests.util.UnitTestCase;
+import org.hornetq.utils.TimeAndCounterIDGenerator;
+
+/**
+ * A JMSServerControlRestartTest
+ *
+ * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ *
+ *
+ */
+public class JMSServerControlRestartTest extends ManagementTestBase
+{
+
+ // Constants -----------------------------------------------------
+
+ // Attributes ----------------------------------------------------
+
+ protected InVMContext context;
+
+ private HornetQServer server;
+
+ private JMSServerManagerImpl serverManager;
+
+ // Static --------------------------------------------------------
+
+ // Constructors --------------------------------------------------
+
+ // Public --------------------------------------------------------
+
+ public void testCreateDurableQueueAndRestartServer() throws Exception
+ {
+ String queueName = RandomUtil.randomString();
+ String binding = RandomUtil.randomString();
+
+ UnitTestCase.checkNoBinding(context, binding);
+ checkNoResource(ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queueName));
+
+ JMSServerControl control = ManagementControlHelper.createJMSServerControl(mbeanServer);
+ control.createQueue(queueName, binding);
+
+ Object o = UnitTestCase.checkBinding(context, binding);
+ Assert.assertTrue(o instanceof Queue);
+ Queue queue = (Queue)o;
+ assertEquals(queueName, queue.getQueueName());
+ checkResource(ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queueName));
+
+ serverManager.stop();
+
+ checkNoBinding(context, binding);
+ checkNoResource(ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queueName));
+
+ serverManager.start();
+
+ o = UnitTestCase.checkBinding(context, binding);
+ Assert.assertTrue(o instanceof Queue);
+ queue = (Queue)o;
+ assertEquals(queueName, queue.getQueueName());
+ checkResource(ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queueName));
+ }
+
+ // Package protected ---------------------------------------------
+
+ // Protected -----------------------------------------------------
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ Configuration conf = new ConfigurationImpl();
+ conf.setSecurityEnabled(false);
+ conf.setJMXManagementEnabled(true);
+ conf.getAcceptorConfigurations().add(new TransportConfiguration(InVMAcceptorFactory.class.getName()));
+ server = HornetQServers.newHornetQServer(conf, mbeanServer, false);
+
+ context = new InVMContext();
+
+ JMSStorageManager storage = new JMSJournalStorageManagerImpl(new TimeAndCounterIDGenerator(),
+ server.getConfiguration(),
+ server.getReplicationManager());
+
+ serverManager = new JMSServerManagerImpl(server, null, storage);
+ serverManager.setContext(context);
+ serverManager.start();
+ serverManager.activated();
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
+ serverManager.stop();
+
+ server.stop();
+
+ serverManager = null;
+
+ server = null;
+
+ super.tearDown();
+ }
+
+ // Private -------------------------------------------------------
+
+ // Inner classes -------------------------------------------------
+
+}
14 years, 8 months