<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-169571142208866968</id><updated>2011-10-18T18:13:34.957-07:00</updated><category term='l'/><title type='text'>The HornetQ Team Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-8071778182216925321</id><published>2011-10-18T06:09:00.000-07:00</published><updated>2011-10-18T06:22:48.432-07:00</updated><title type='text'>Stomp 1.1 Support in HornetQ</title><content type='html'>HornetQ now supports the Stomp 1.1 protocol and will be available in the next release, for now though it is part of trunk in the SVN repository.
&lt;br/&gt;
&lt;div style="margin-bottom: 0in;"&gt;Stomp 1.1 specification is an update to Stomp 1.0 and is backward compatible.  New features include protocol negotiation, heartbeat, the NACK frame and virtual hosting.

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;An example 'stomp 1.1' is also available in the SVN repository which demonstrates a stomp client that uses one of the new features 'protocol negotiation', lets take a look at the example now.

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt; &lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;1. Configuring a HornetQ Stomp Server

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;First of all we need to configure the server to allow stomp connections by adding a stomp acceptor, this is the same as stomp 1.0. &lt;/div&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;acceptor name="stomp-acceptor"&amp;gt;
&amp;lt;factory-class&amp;gt;org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory&amp;lt;/factory-class&amp;gt;   
&amp;lt;param key="protocol" value="stomp" /&amp;gt;
&amp;lt;param key="port" value="61613" /&amp;gt;
&amp;lt;/acceptor&amp;gt;
&lt;/pre&gt;&lt;div style="margin-bottom: 0in;"&gt;2. Connection Negotiation

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Once the HornetQ Stomp server is up and running, it is up to the Stomp client to decide which Stomp specification to use to communicate with HornetQ. This is done by connection negotiation. The Stomp1.1 example shows how to do this &lt;pre class="java" name="code"&gt;// Step 1. Create a TCP socket to connect to the Stomp port
Socket socket = new Socket("localhost", 61613);

// Step 2. Send a CONNECT frame to connect to the server
String connectFrame = "CONNECT\n" +
"accept-version:1.1\n" +
"host:localhost\n" +
"login:guest\n" +
"passcode:guest\n" +
"request-id:1\n" +
"\n" +
END_OF_FRAME;

sendFrame(socket, connectFrame);
&lt;/pre&gt;&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;In the above code you can see that the client sends a CONNECT stomp frame with the accept-version set to 1.1, this tells the server that the client is using the 1.1 protocol.
&lt;br/&gt;
Also new to 1.1 is the host header which is used to configure the virtual host to use, although HornetQ supports setting the header it doesn't support virtual hosts. All other headers are standard Stomp 1.0 headers.

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;If the server accepts the connection request, it will return a 'CONNECTED' stomp with a 'version' header whose value is 1.1. The example prints this to the console: &lt;div style="margin-bottom: 0in;"&gt;...&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;[java] response: CONNECTED&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;[java] version:1.1&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;[java] session:1337300467&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;[java] server:HornetQ/2.2.5  HornetQ Messaging Engine&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;[java] response-id:1&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;...

&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;3. Sending and receiving messages.

&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;Once connected, the client can send and receive Stomp messages with the connection. The example illustrates how to send a stomp message: &lt;/div&gt;&lt;pre class="java" name="code"&gt;// Step 3. Send a SEND frame (a Stomp message) to the
// jms.queue.exampleQueue address with a text body
String text = "Hello World from Stomp 1.1 !";
String message = "SEND\n" +
 "destination:jms.queue.exampleQueue\n" +
 "\n" +
 text +
 END_OF_FRAME;
sendFrame(socket, message);
&lt;/pre&gt;&lt;div style="margin-bottom: 0in;"&gt;You can see this is very much the same as a Stomp 1.0 client. The message will be sent to the destination 'jms.queue.exampleQueue'. For the mapping of destination headers to HornetQ jms addresses please refer to the HornetQ's User Manual.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;
Note: Please pay attention to the leading and trailing spaces in the headers. Stomp 1.0 usually trims off the spaces before processing. But in Stomp 1.1, those spaces are preserved. So in Stomp1.1 unnecessary spaces in headers may result in strange errors which is difficult to find.

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt; 4. Enabling Heartbeats

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;One important feature added to Stomp 1.1 is the heartbeats used to monitor the underlying connection. The heart-beating is established at connection time, using a special header 'heart-beat' in CONNECT frame. For example:&lt;/div&gt;&lt;pre class="java" name="code"&gt;CONNECT
accept-version:1.1
host:127.0.0.1
login:guest
passcode:guest
heart-beat:500,1000
&lt;/pre&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;Once connected with the above frame, the HornetQ server will make sure that a stomp frame (or a heartbeat byte) is sent to the client every 1 second (1000 milliseconds). Meanwhile the client should send a stomp frame (or a heartbeat byte) for every 500 milliseconds.&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;HornetQ server will deem a connection to be broken if it hasn't receive a stomp frame from the client via this connection for a time longer than 2 times of the client heart-beat interval (i.e. 2*500). So for the above case, if it hasn't receive any frame within a second, the server will close the connection.

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;Note: HornetQ specifies a minimum value for both client and server heart-beat intervals. The minimum interval for both client and server heartbeats is 500 milliseconds. That means if a client sends a CONNECT frame with heartbeat values lower than 500, the server will defaults the value to 500 milliseconds regardless the values of the 'heart-beat' header in the frame.

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;The HornetQ 1.1 implementation also has several performance improvements however we will continue to improve this over the coming months.

&lt;/div&gt;&lt;br/&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;For more information read the stomp &lt;a href="http://stomp.github.com/stomp-specification-1.1.html"&gt;specification&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0in;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-8071778182216925321?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/8071778182216925321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2011/10/stomp-11-support-in-hornetq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8071778182216925321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8071778182216925321'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2011/10/stomp-11-support-in-hornetq.html' title='Stomp 1.1 Support in HornetQ'/><author><name>Howard Gao</name><uri>http://www.blogger.com/profile/15113334996390213293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-1656984727171860137</id><published>2011-09-01T10:00:00.000-07:00</published><updated>2011-09-01T10:29:55.249-07:00</updated><title type='text'>HornetQ on JBoss AS7</title><content type='html'>Now that JBoss AS 7.0.1 has been released which includes messaging and MDB's I thought we would write a quick tutorial on how to get started deploying JMS resources and MDB's.&lt;br /&gt;
&lt;br /&gt;
We have recently blogged about our achievements on SpecJMS and EAP 5.1.2 and of course the version shipped with AS7 has all the same functionality and performance levels that are available in the EAP platform.&lt;br /&gt;
&lt;br /&gt;
This tutorial will demonstrate how HornetQ is configured on AS7, I Will explain the main concepts of how to configure HornetQ server configuration and JMS resources and also provide an example MDB that we can run.  So first of all you will need to download AS7 from &lt;a href="http://www.jboss.org/jbossas/downloads/"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you download the 'everything' version as the web profile does not contain messaging or MDB's by default.&lt;br /&gt;
&lt;br /&gt;
In AS7 there's is a single configuration file, either &lt;span style="font-style: italic;"&gt;standalone.xml&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;domain.xml&lt;/span&gt;, which is broken into subsystems. These files are pretty much identical although there are differences however this is beyond the scope of this article. For more information on AS7 and its configuration take a look at the AS7 users guide &lt;a href="http://community.jboss.org/wiki/JBossAS7UserGuide"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
By default the messaging subsystem isn't enabled however a preview configuration is provided that does contain a messaging subsystem. these are standalone-preview.xml and domain-preview.xml, for this tutorial we will use the standalone-preview.xml. To run the preview configuration simply execute the command from the bin directory:&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;  ./standalone.sh --server-config=standalone-preview.xml&lt;/span&gt;   &lt;br /&gt;
&lt;br /&gt;
You should see the HornetQ server started along with some JMS resources, quick wasn't it.  Now lets take a closer look at the messaging configuration itself. Each subsystem has its own domain named that is defined by a schema, the schema for the messaging subsystem can be found in docs/schema/jboss-as-messaging_1_0.xsd in the AS7 distribution.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;If you search for &lt;span style="font-style: italic;"&gt;jboss:domain:messaging&lt;/span&gt; in the standalone-preview.xml you will find the HornetQ subsystem configuration.&lt;br /&gt;
&lt;br /&gt;
If you have used HornetQ standalone or in JBoss 6 you will be familiar with some of the configuration. The first part is basically the same as in the &lt;span style="font-style: italic;"&gt;hornetq-configuration.xml&lt;/span&gt; file. This looks like:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;!-- Default journal file size is 10Mb, reduced here to 100k for faster first boot --&amp;gt;
&amp;lt;journal-file-size&amp;gt;102400&amp;lt;/journal-file-size&amp;gt;
&amp;lt;journal-min-files&amp;gt;2&amp;lt;/journal-min-files&amp;gt;
&amp;lt;journal-type&amp;gt;NIO&amp;lt;/journal-type&amp;gt;
&amp;lt;!-- disable messaging persistence --&amp;gt;
&amp;lt;persistence-enabled&amp;gt;false&amp;lt;/persistence-enabled&amp;gt;

&amp;lt;connectors&amp;gt;
&amp;lt;netty-connector name="netty" binding="messaging"&amp;gt;
&amp;lt;netty-connector name="netty-throughput" binding="messaging-throughput"&amp;gt;
   &amp;lt;param key="batch-delay" value="50"&amp;gt;
&amp;lt;/netty-connector&amp;gt;
&amp;lt;in-vm-connector name="in-vm" id="0"&amp;gt;
&amp;lt;/in-vm-connector&amp;gt;

&amp;lt;acceptors&amp;gt;
&amp;lt;netty-acceptor name="netty" binding="messaging"&amp;gt;
&amp;lt;netty-acceptor name="netty-throughput" binding="messaging-throughput"&amp;gt;
   &amp;lt;param key="batch-delay" value="50"&amp;gt;
   &amp;lt;param key="direct-deliver" value="false"&amp;gt;
&amp;lt;/netty-acceptor&amp;gt;
&amp;lt;in-vm-acceptor name="in-vm" id="0"&amp;gt;
&amp;lt;/in-vm-acceptor&amp;gt;

&amp;lt;security-settings&amp;gt;
&amp;lt;security-setting match="#"&amp;gt;
   &amp;lt;permission type="createNonDurableQueue" roles="guest"&amp;gt;
   &amp;lt;permission type="deleteNonDurableQueue" roles="guest"&amp;gt;
   &amp;lt;permission type="consume" roles="guest"&amp;gt;
   &amp;lt;permission type="send" roles="guest"&amp;gt;
&amp;lt;/permission&amp;gt;
&amp;lt;/permission&amp;gt;

&amp;lt;address-settings&amp;gt;
&amp;lt;!--default for catch all--&amp;gt;
&amp;lt;address-setting match="#"&amp;gt;
   &amp;lt;dead-letter-address&amp;gt;jms.queue.DLQ&amp;lt;/dead-letter-address&amp;gt;
   &amp;lt;expiry-address&amp;gt;jms.queue.ExpiryQueue&amp;lt;/expiry-address&amp;gt;
   &amp;lt;redelivery-delay&amp;gt;0&amp;lt;/redelivery-delay&amp;gt;
   &amp;lt;max-size-bytes&amp;gt;10485760&amp;lt;/max-size-bytes&amp;gt;
   &amp;lt;message-counter-history-day-limit&amp;gt;10&amp;lt;/message-counter-history-day-limit&amp;gt;
   &amp;lt;address-full-policy&amp;gt;BLOCK&amp;lt;/address-full-policy&amp;gt;
&amp;lt;/address-setting&amp;gt;
&amp;lt;/address-settings&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
This is the basic server configuration and the configuration of connectors and acceptors. The only difference here to the standalone HornetQ configuration is that the connectors and acceptors use bindings rather than explicitly defining hosts and ports, these can be found in the &lt;span style="font-style: italic;"&gt;socket-binding-group&lt;/span&gt; part of the configuration.&lt;br /&gt;
&lt;br /&gt;
For more information on configuring the core server please refer to the HornetQ user manual.&lt;br /&gt;
The rest of the subsystem configuration is all JMS resources. firstly you will see some JMS connection factories of which there are two types. Firstly basic HornetQ connection factories:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&lt;/pre&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;connection-factory name="RemoteConnectionFactory"&amp;gt;
&amp;lt;connectors&amp;gt;
   &amp;lt;connector-ref connector-name="netty"/&amp;gt;
&amp;lt;/connectors&amp;gt;
&amp;lt;entries&amp;gt;
   &amp;lt;entry name="RemoteConnectionFactory"/&amp;gt;
&amp;lt;/entries&amp;gt;
&amp;lt;/connection-factory&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
These are basically normal connection factories that would be looked up via any external client and controlled via HornetQ itself.  Secondly you will see pooled connection factories, like so:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&lt;/pre&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;pooled-connection-factory name="hornetq-ra"&amp;gt;
&amp;lt;transaction mode="xa"/&amp;gt;
&amp;lt;connectors&amp;gt;
   &amp;lt;connector-ref connector-name="in-vm"/&amp;gt;
&amp;lt;/connectors&amp;gt;
&amp;lt;entries&amp;gt;
   &amp;lt;entry name="java:/JmsXA"/&amp;gt;
&amp;lt;/entries&amp;gt;
&amp;lt;/pooled-connection-factory&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
These are pooled connection factories and although connect to HornetQ the connections themselves are under the control of the application server. If you have previous experience with older versions of the application server this is the connection factory that would be typically defined in the &lt;span style="font-style: italic;"&gt;jms-ds.xml&lt;/span&gt; configuration file.&lt;br /&gt;
&lt;br /&gt;
The pooled connection factories also define the incoming connection factory for MDB's, the name of the connection factory refers to the resource adapter name used by the MDB, in previous Jboss application servers this is typically the configuration found in the &lt;span style="font-style: italic;"&gt;ra.xml&lt;/span&gt; config file that defined the resource adapter.&lt;br /&gt;
Lastly you will see some destinations defined like so:&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&lt;/pre&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;jms-destinations&amp;gt;
 &amp;lt;jms-queue name="testQueue"&amp;gt;
    &amp;lt;entry name="queue/test"/&amp;gt;
 &amp;lt;/jms-queue&amp;gt;
 &amp;lt;jms-topic name="testTopic"&amp;gt;
    &amp;lt;entry name="topic/test"/&amp;gt;
 &amp;lt;/jms-topic&amp;gt;
&amp;lt;/jms-destinations&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
These are your basic JMS Topics and Queues where entry name is their location in JNDI.&lt;br /&gt;
Now lets take a simple MDB example build and deploy it and configure the server for it. A sample MDB and client can be found &lt;a href="https://github.com/andytaylor/HornetQ-AS7-examples"&gt;here&lt;/a&gt; and uses Maven to build. Download it and run &lt;span style="font-style: italic;"&gt;mvn package&lt;/span&gt; to build the application ear file.&lt;br /&gt;
&lt;br /&gt;
The example is a simple request/response pattern so before we deploy the MDB we need to configure 2 queues mdbQueue and mdbReplyQueue like so:  &lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&lt;/pre&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;jms-queue name="mdbQueue"&amp;gt;
 &amp;lt;entry name="queue/mdbQueue"/&amp;gt;
&amp;lt;/jms-queue&amp;gt;
&amp;lt;jms-queue name="mdbReplyQueue"&amp;gt;
  &amp;lt;entry name="queue/mdbReplyQueue"/&amp;gt;
&amp;lt;/jms-queue&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
now restart (or start) the Application Server and copy the ear file from mdb/mdb-ear/target to the standalone/deployments directory in the AS7 installation. you should now see the mdb deployed.  Now we can run the client, simply run the command &lt;span style="font-style: italic;"&gt;mvn -Pclient test&lt;/span&gt; and the client will send a message and hopefully receive a message in reply.&lt;br /&gt;
&lt;br /&gt;
Congratulations, you have now configured HornetQ and deployed an MDB.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-1656984727171860137?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/1656984727171860137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2011/06/hornetq-on-jboss-as7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/1656984727171860137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/1656984727171860137'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2011/06/hornetq-on-jboss-as7.html' title='HornetQ on JBoss AS7'/><author><name>Andy Taylor</name><uri>http://www.blogger.com/profile/04912964439431734087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-2674056014618001994</id><published>2011-07-13T07:35:00.000-07:00</published><updated>2011-07-15T10:18:30.505-07:00</updated><title type='text'>8.2 million messages / second with SpecJMS</title><content type='html'>&lt;div&gt; The latest version of HornetQ as part of JBoss EAP 5.1.2 has once again been
        benchmarked against SPECjms2007 (c).&lt;/div&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;div&gt; HornetQ is also included on JBoss AS7, which contains the same improvements we have made to achieve this performance. You will also be able to get the same performance figures with JBoss AS7.&lt;/div&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;div&gt;This latest benchmark has outperformed HornetQ's latest publication by a good margin
            already. &lt;/div&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;div&gt;With this latest result HornetQ sustained a load of about 8 million messages per
            second. &lt;/div&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;div&gt; SpecJMS is a peer reviewed benchmark and is the first industry standard and has strict
            rules as to how each messaging system is configured. This is to make sure that vendors
            don't cheat when it comes to persistence and transactional requirements etc. &lt;a
                href="http://www.spec.org/"&gt;SPEC&lt;/a&gt; is an independent corporation comprised of
            representatives from commercial and academic organisations. The corporation creates many
            industry standard benchmarks for &lt;a href="http://www.spec.org/benchmarks.html#java"
                &gt;Java&lt;/a&gt; amongst &lt;a href="http://www.spec.org/benchmarks.html"&gt;others&lt;/a&gt;. The
            benchmark simulates how a Message System would be used in a real world &lt;a
                href="http://www.spec.org/jms2007/docs/DesignDocument.html#S12"&gt;scenario&lt;/a&gt;.
        &lt;/div&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;div&gt; The
            software supports three topologies, Horizontal, Vertical and Freeform. Only Horizontal
            and Vertical can be used for publishing a result. Freeform can be useful to create a
            custom workload to test the Messaging System for a given usecase. &lt;/div&gt;
        &lt;div&gt;
            &lt;br/&gt;
        &lt;/div&gt;

        &lt;div&gt; Horizontal Topology is where the benchmark scales the number of Topic Subscriptions
            and Queues whereas a Vertical topology has a fixed number of queues but sends varying
            volumes of messages depending on the scale. &lt;/div&gt;
        &lt;div&gt;
        &lt;/div&gt;
        &lt;div&gt;* The Horizontal results can be found &lt;a
                href="http://www.spec.org/jms2007/results/res2011q2/jms2007-20110614-00029.html"
                &gt;here&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;* and the Vertical results &lt;a
                href="http://www.spec.org/jms2007/results/res2011q2/jms2007-20110614-00028.html"
                &gt;here&lt;/a&gt;. &lt;/div&gt;
        &lt;div&gt;
            &lt;br/&gt;
        &lt;/div&gt;
        &lt;div&gt;The scale is configured by setting the BASE configuration property value. At first
            glance the results can look quite confusing but here is a breakdown of the
            results:&lt;/div&gt;
        &lt;div&gt;
        &lt;/div&gt;
        &lt;div&gt;
        &lt;/div&gt;
        &lt;div&gt;- What this means in terms of actual performance:&lt;/div&gt;
        &lt;div&gt;
            &lt;br/&gt;
        &lt;/div&gt;
        
        &lt;div&gt; HornetQ sustained a load of about 6 million messages on the vertical topology this can
            be seen by looking at the following &lt;a
                href="http://www.spec.org/jms2007/results/res2011q2/jms2007-20110614-00028.png"
                &gt;graph&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
        &lt;/div&gt;
        &lt;div&gt;&lt;img src="http://www.spec.org/jms2007/results/res2011q2/jms2007-20110614-00028.png"
                alt="Horizontal Topology Graph" width="800" height="600"/&gt;&lt;/div&gt;
        &lt;div&gt;
        &lt;/div&gt;
        &lt;div&gt;
            &lt;br/&gt;
        &lt;/div&gt;
        &lt;div&gt;Horizontally HornetQ achieved about &lt;b&gt;8 million messages per second&lt;/b&gt; which is shown on the runtime &lt;a
                href="http://www.spec.org/jms2007/results/res2011q2/jms2007-20110614-00029.png"
                &gt;graph&lt;/a&gt;. &lt;/div&gt;
        &lt;div&gt;&lt;img src="http://www.spec.org/jms2007/results/res2011q2/jms2007-20110614-00029.png"
                width="800" height="600" alt="Vertical Topology graph"/&gt;&lt;/div&gt;
        &lt;div&gt; The runtime graph is used to show the following: &lt;/div&gt;
        &lt;ul&gt;
            &lt;li&gt;The expected versus actual message rates. These provide a quickly check the
                benchmark driver created enough load for the configured scale.&lt;/li&gt;
            &lt;li&gt;The message sent/received spread. You can expect this because topics are used in the
                benchmark and many clients will receive a single sent message. &lt;/li&gt;
            &lt;li&gt;In the Horizontal topology the spread will be greater than Vertical. Horizontal
                topology by it's nature has a greater distribution of messaging clients. &lt;/li&gt;
        &lt;/ul&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;div&gt; The system configuration &lt;a
                href="http://www.spec.org/jms2007/results/res2011q2/jms2007-20110614-00029.jpg"
                &gt;diagram&lt;/a&gt; shows the hardware installation used for this result and necessary to
            get similar levels of performance. &lt;/div&gt;
        &lt;div&gt;&lt;img src="http://www.spec.org/jms2007/results/res2011q2/jms2007-20110614-00029.jpg"
        width="800" height="600" alt="System configuration"/&gt;&lt;/div&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;div&gt;The server was a 2 chip 4 core CPU with 24576 MB of memory and a 1 GbE network
            interface. The client's, of which there were 4, were 1 chip 4 core CPU with 22528 MB of
            memory and also a 1 GbE network interface. The HornetQ journal is persisted using a
            networked mass storage array available to the messaging server. &lt;/div&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;div&gt; A few options were set on the JVM which were as follows: &lt;/div&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        &lt;ul&gt;
            &lt;li&gt;-XX:+UseLargePages - this enables large pages&lt;/li&gt;
            &lt;li&gt;-XX:LargePageSizeInBytes - set the large page size&lt;/li&gt;
            &lt;li&gt;-Xms and -Xmx - setting these both to 3800m stops any memory resizing delays&lt;/li&gt;
        &lt;/ul&gt;
        
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        
        &lt;div&gt; The following changes were made to the HornetQ Server configuration which were as
        follows&lt;/div&gt;
        
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        
        &lt;ul&gt;
            &lt;li&gt;configuration.journal-min-files - this was set to a large number of files&lt;/li&gt;
            &lt;li&gt;configuration.thread-pool-max-size - increased level of concurrency&lt;/li&gt;
        &lt;/ul&gt;
        &lt;div&gt;&lt;br/&gt;&lt;/div&gt;
        
        &lt;div&gt;
        For more detailed information about the benchmark see the &lt;a
                href="http://www.spec.org/jms2007/docs/DesignDocument.html"&gt;DesignDocument&lt;/a&gt;
            provided by SPEC. Additionally there is an academic &lt;a
                href="http://www.dvs.tu-darmstadt.de/publications/pdf/WorkloadCharSPECjms2007.pdf"
                &gt;paper&lt;/a&gt; detailing the workload characterization in greater detail. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-2674056014618001994?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/2674056014618001994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2011/07/82-million-messages-second-with-specjms.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2674056014618001994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2674056014618001994'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2011/07/82-million-messages-second-with-specjms.html' title='8.2 million messages / second with SpecJMS'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-5085999717532959563</id><published>2011-06-17T10:29:00.000-07:00</published><updated>2011-06-17T10:31:31.495-07:00</updated><title type='text'>HornetQ 2.2.5 released</title><content type='html'>HornetQ 2.2.5.Final will be the first HornetQ release included in the long awaited JBoss AS7. It also contains fixes for paging performance, journal compacting and message priorities amongst others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-5085999717532959563?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/5085999717532959563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2011/06/hornetq-225-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/5085999717532959563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/5085999717532959563'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2011/06/hornetq-225-released.html' title='HornetQ 2.2.5 released'/><author><name>Andy Taylor</name><uri>http://www.blogger.com/profile/04912964439431734087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-2338910337631841253</id><published>2011-05-05T18:50:00.000-07:00</published><updated>2011-05-05T21:44:44.053-07:00</updated><title type='text'>HornetQ is rocking out this week</title><content type='html'>&lt;p&gt;Since I started working on HornetQ, this was the best week ever.&lt;p&gt;

&lt;p&gt;First the presentation on Judcon had a full room. Even though I suck (at least I think) on presenting, HornetQ shined out by itself as I was showing the new features and the work we have done.&lt;/p&gt;

&lt;p&gt;Paging has a new model, more performant and non-blocking. On HornetQ 2.2.2 the syncs on paging are also batched through timers, what really improves performance on page mode also.&lt;/p&gt;
&lt;P&gt;The atomic and transparent failover is really enterprise level.&lt;/p&gt;
&lt;p&gt;And a lot of cool stuff!&lt;/p&gt;
&lt;p&gt;Regarding paging, Drew Dahlke wrote a nice blog entry about how performant is paging on HornetQ on paging:&lt;/p&gt;

&lt;P&gt;&lt;a href="http://drewdahlke.blogspot.com/2011/05/benchmarking-hornetq-222-paging-mode.html"&gt;http://drewdahlke.blogspot.com/2011/05/benchmarking-hornetq-222-paging-mode.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-2338910337631841253?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/2338910337631841253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2011/05/hornetq-is-rocking-out-this-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2338910337631841253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2338910337631841253'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2011/05/hornetq-is-rocking-out-this-week.html' title='HornetQ is rocking out this week'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-1255350557300750356</id><published>2011-03-30T07:09:00.000-07:00</published><updated>2011-03-30T15:12:35.662-07:00</updated><title type='text'>HornetQ 2.2 Super-HornetQ</title><content type='html'>&lt;p&gt;This is the best HornetQ release ever. HornetQ was already cutting edge but is now even better.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It is available &lt;a href="http://www.jboss.org:80/hornetq/downloads.html"&gt;here&lt;/a&gt; with docs &lt;a href="http://www.jboss.org:80/hornetq/docs.html"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This latest release contains the following improvements in functionality&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;- HornetQ Rest&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks to Bill Burke, we have a brand new and cool rest interface that's being released with 2.2.2. Look for a Judcon presentation just about this topic&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;

&lt;p&gt;- New improved failover.&lt;/p&gt;
&lt;p&gt;Failover now support multiple backups for live servers and also allows automatic fail back to the original live server.&lt;/p&gt;
&lt;p/&gt;
&lt;p&gt;It also supports using shared file systems for shared journal using distributed locks to handle failover. We also guarantee that the backup server will stay completely passive until the main server crashes avoiding split brain occurring.&lt;/p&gt;

&lt;p&gt;- New paging model&lt;/p&gt;
&lt;p&gt;The new model now won't lock the address if you have a lazy consumer on a core-queue (or on the Topic Subscription in JMS terms) which previously caused consumer starvation.
The system will navigate through page files like a cursor, keeping a soft-cache in memory to avoid duplicated references.&lt;/p&gt;
&lt;p&gt;- Large Message Compression&lt;/p&gt;
&lt;p&gt;It is now possible to compress the message body of large messages.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;On the maintenance front thanks to the JBoss QA guys, their thorough testing means we are more confident then ever of delivering a well tested stable piece of software.&lt;/p&gt;

&lt;P&gt;&gt;other improvements include:&lt;/P&gt;
&lt;p&gt;- Improvements on the journal reliability.&lt;/p&gt;
&lt;p&gt;- Clustering reliability&lt;/p&gt;
&lt;p&gt;- XA Integration&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;On the performance front we have made some optimizations:&lt;/p&gt;
&lt;p&gt;- Optimized some non necessary syncs we were doing on the journal&lt;/p&gt;
&lt;p&gt;- Optimized syncs on paging. Paging is now also scaling up syncs when many producers are syncing messages.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Also: HornetQ should be available for EAP users really soon, being a viable alternative for enterprise users who require a supportable alternative.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Many thanks for our contributors and for our QA department.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-1255350557300750356?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/1255350557300750356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2011/03/hornetq-22-super-hornetq.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/1255350557300750356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/1255350557300750356'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2011/03/hornetq-22-super-hornetq.html' title='HornetQ 2.2 Super-HornetQ'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-8982427091798880053</id><published>2010-10-08T07:12:00.000-07:00</published><updated>2010-10-08T07:14:22.452-07:00</updated><title type='text'>Announcement: Stepping down as project lead</title><content type='html'>As of today I'll be stepping down as project lead for the HornetQ project.
&lt;p&gt;
This has been a really hard decision for me to make, after all, HornetQ is my baby, and I've invested a lot of mental as well as emotional effort in getting it to where it is today.
&lt;p&gt;
The last four years have been really tough. Creating a world class messaging system with a tiny team is a formidable job. But getting this far has taken it's toll on me, and I need to step aside and take a rest for a while.
&lt;p&gt;
So what am I going to do next? Not really sure yet, but I'll be taking it easy on sabbatical from Red Hat until the beginning of next year when things should be more clear.
&lt;p&gt;
Where does HornetQ go from here? The future is bright for HornetQ. It's the default messaging provider in JBoss AS 6 and 7, and will shortly be available supported in JBoss EAP.
&lt;p&gt;
I truly believe HornetQ has the potential to be the world's #1 messaging system. We already know it has the best performance, and now we're rounding off the last few features so we can really position ourselves as a true enterprise class messaging system to go against, and win against any system in the market.
&lt;p&gt;
The future is bright :)
&lt;p&gt;
This brings me to....
&lt;p&gt;
I'd also like to announce that Clebert Suconic will be taking over my role as HornetQ project lead :) 
&lt;p&gt;
Congratulations Clebert!
&lt;p&gt;
Clebert is a nice guy and a talented engineer and knows HornetQ back to front having worked on it from the beginning. HornetQ can't be in better hands than Clebert's.
&lt;p&gt;
So, I bid you farewell, and happy messaging!
&lt;p&gt;&lt;p&gt;
Tim Fox&lt;p&gt;
=======&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-8982427091798880053?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/8982427091798880053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/10/announcement-stepping-down-as-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8982427091798880053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8982427091798880053'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/10/announcement-stepping-down-as-project.html' title='Announcement: Stepping down as project lead'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-3970448695445552220</id><published>2010-09-03T03:22:00.000-07:00</published><updated>2010-09-03T03:24:15.819-07:00</updated><title type='text'>HornetQ - the Performance Leader in Enterprise Messaging</title><content type='html'>We have just published a report that compares the throughput performance of the majority of the enterprise messaging market, and HornetQ comes out as #1 :)

In fact, in several uses cases we pretty much destroy the competition.

Read the &lt;a href="https://community.jboss.org/wiki/HornetQ-thePerformanceLeaderinEnterpriseMessaging"&gt;full report&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-3970448695445552220?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/3970448695445552220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/09/hornetq-performance-leader-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/3970448695445552220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/3970448695445552220'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/09/hornetq-performance-leader-in.html' title='HornetQ - the Performance Leader in Enterprise Messaging'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-8052207832855871825</id><published>2010-08-17T23:19:00.001-07:00</published><updated>2010-08-17T23:26:05.484-07:00</updated><title type='text'>HornetQ 2.1.2 Released</title><content type='html'>&lt;p&gt;We have just released 2.1.2, which contains basically bug fixes and a couple improvements.&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;The main work done at this release was making sure compacting and the journal is working fine.&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;The twitter bridge was also made through this release, thanks to our contributor Tomohisa Igarashi.&lt;/p&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-8052207832855871825?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8052207832855871825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8052207832855871825'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/08/hornetq-212-released.html' title='HornetQ 2.1.2 Released'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-3562928532995659187</id><published>2010-08-10T06:04:00.000-07:00</published><updated>2010-08-10T06:08:10.635-07:00</updated><title type='text'>Case Study - How Last.fm Uses HornetQ for Their Streaming Infrastructure</title><content type='html'>&lt;p&gt;We have published a &lt;a href="http://java.dzone.com/articles/case-study-how-lastfm-uses"&gt;case study&lt;/a&gt; about &lt;a href="http://last.fm"&gt;last.fm&lt;/a&gt;'s use of HornetQ in their infrastructure.&lt;/p&gt;

&lt;p&gt;If some of our users have success stories or case studies about HornetQ they want to share, please let &lt;a href="mailto:jmesnil@gmail.com"&gt;us&lt;/a&gt; know.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-3562928532995659187?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/3562928532995659187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/3562928532995659187'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/08/case-study-how-lastfm-uses-hornetq-for.html' title='Case Study - How Last.fm Uses HornetQ for Their Streaming Infrastructure'/><author><name>Jeff Mesnil</name><uri>http://www.blogger.com/profile/16529476669001423527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-7226088867292227393</id><published>2010-06-04T13:45:00.000-07:00</published><updated>2010-06-04T14:03:51.492-07:00</updated><title type='text'>New Stuff on HornetQ 2.1 Final</title><content type='html'>HornetQ 2.0 was already fast as &lt;a href="http://hornetq.blogspot.com/2010/02/jboss-hornetq-sets-record-specjms2007.html"&gt;mentioned&lt;/a&gt; before. And still we have done significant performance improvements on this release.

&lt;br/&gt;&lt;br/&gt;

As a matter of fact, if you are doing light weight message sends you have the option of &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.1.0.Final/user-manual/en/html/perf-tuning.html#d0e11353"&gt;batching multiple sends&lt;/a&gt; and using more of your network resources.

&lt;br/&gt;&lt;br/&gt;

We have also added &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.1.0.Final/user-manual/en/html/interoperability.html#stomp"&gt;Stomp&lt;/a&gt; to our list of native protocols.

&lt;br/&gt;&lt;br/&gt;


As well the possibility of using &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.1.0.Final/user-manual/en/html/interoperability.html#stomp.websockets"&gt;WebSockets&lt;/a&gt; at the browser


&lt;br/&gt;&lt;br/&gt;


We love what we do, HornetQ is already a very strong messaging server, our performance is astonishing and we are full speed ahead on bringing even more improvements on 2.2

&lt;br/&gt;&lt;br/&gt;


Full speed ahead on &lt;a href="https://jira.jboss.org/secure/ReleaseNote.jspa?projectId=12310830&amp;amp;version=12314664"&gt;2.2 &lt;/a&gt;now!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-7226088867292227393?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/7226088867292227393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/06/new-stuff-on-hornetq-21-final.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/7226088867292227393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/7226088867292227393'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/06/new-stuff-on-hornetq-21-final.html' title='New Stuff on HornetQ 2.1 Final'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-5514423465992980833</id><published>2010-06-03T16:52:00.000-07:00</published><updated>2010-06-03T16:53:50.490-07:00</updated><title type='text'>HornetQ 2.1.0.Final</title><content type='html'>I'm glad to announce that HornetQ 2.1.0 is now Final.

http://www.jboss.org/hornetq/downloads.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-5514423465992980833?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/5514423465992980833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/06/hornetq-210final.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/5514423465992980833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/5514423465992980833'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/06/hornetq-210final.html' title='HornetQ 2.1.0.Final'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-836716595583461582</id><published>2010-05-28T10:33:00.000-07:00</published><updated>2010-05-28T13:09:34.527-07:00</updated><title type='text'>HornetQ 2.1.0.CR1 is released</title><content type='html'>We are glad to announce that we just released 2.1.0.CR1.
&lt;br/&gt;&lt;br/&gt;
Look at the release notes for a complete list of changes:
&lt;br/&gt;&lt;br/&gt;
&lt;a href="https://jira.jboss.org/secure/ReleaseNote.jspa?projectId=12310830&amp;amp;version=12314884"&gt;
https://jira.jboss.org/secure/ReleaseNote.jspa?projectId=12310830&amp;amp;version=12314884&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
Also, if you speak chinese, there's now a Chinese Version for the documentation:
&lt;br/&gt;&lt;br/&gt;
&lt;a href="http://www.jboss.org/hornetq/chinesedocs.html"&gt;http://www.jboss.org/hornetq/chinesedocs.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-836716595583461582?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/836716595583461582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/05/hornetq-210cr1-is-released.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/836716595583461582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/836716595583461582'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/05/hornetq-210cr1-is-released.html' title='HornetQ 2.1.0.CR1 is released'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-2497651419697318935</id><published>2010-05-04T14:03:00.000-07:00</published><updated>2010-05-05T13:28:22.575-07:00</updated><title type='text'>Turbo messaging in JBoss AS 6.0 M3 thanks to HornetQ</title><content type='html'>&lt;br/&gt;
We are glad to announce that HornetQ is now the default (built-in) JMS provider in JBoss AS 6, which has just been released.&lt;div&gt;
&lt;div&gt;
&lt;/div&gt;&lt;div&gt;We have done many tests to make sure JEE users will be happy with HornetQ in JBoss AS. We believe these are the main benefits for AS users:&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div&gt;- Native IO on Linux&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div&gt;All the HornetQ data is stored in its journal. JBoss AS 6 now bundles the native HornetQ AIO library for Linux users. &lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div&gt;Don't worry if you don't use Linux though. HornetQ is still *extremely* fast on Windows, Solaris and other platforms.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div&gt;- Deployers.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;We have integrated HornetQ with the application server deployers. You can have your enterprise application (WAR, EAR.. etc) containing HornetQ deployment descriptors in simple config files which is much simpler than the old formats used by JBoss Messaging and JBoss MQ.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div&gt;- Administration&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;We have integrated the JBoss AS admin console with HornetQ. If you don't like XML at all, just use the administrator to maintain your destinations. Simple as click-click&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div&gt;- Enhancements&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;We have made several enhancements to HornetQ during the release of the JBoss Application Server. HornetQ was already fast before as proven by SpecJMS; an industry standard benchmark yet we have made lots of enhancements. Look at the &lt;a href="https://jira.jboss.org/jira/secure/IssueNavigator.jspa?reset=true&amp;&amp;fixfor=12314823&amp;fixfor=12314776&amp;fixfor=12313894&amp;pid=12310830&amp;sorter/field=issuekey&amp;sorter/order=DESC"&gt;release notes&lt;/a&gt; for more information.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-2497651419697318935?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/2497651419697318935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/05/turbo-messaging-in-jboss-as-60-m3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2497651419697318935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2497651419697318935'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/05/turbo-messaging-in-jboss-as-60-m3.html' title='Turbo messaging in JBoss AS 6.0 M3 thanks to HornetQ'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-1609364408168516416</id><published>2010-04-29T05:56:00.000-07:00</published><updated>2010-04-29T06:04:42.846-07:00</updated><title type='text'>Web Sockets Support For HornetQ</title><content type='html'>&lt;p&gt;&lt;a href="http://dev.w3.org/html5/websockets/"&gt;Web Sockets&lt;/a&gt; support has landed in HornetQ trunk and will be available in 2.1.0 release to allow Web browsers to directly exchange messages with HornetQ servers.&lt;/p&gt;

&lt;p&gt;See &lt;a href="http://jmesnil.net/weblog/2010/04/29/web-sockets-support-for-hornetq/"&gt;this article&lt;/a&gt; for a thorough description of the feature.&lt;/p&gt;

&lt;p&gt;
With HornetQ 2.0.0, you could send and receive messages from Java applications.&lt;br /&gt;
With upcoming 2.1.0 release, we expand it to any environment with a &lt;a href="http://stomp.codehaus.org/Clients"&gt;Stomp client&lt;/a&gt; and from Web browsers with Web Sockets support.
&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-1609364408168516416?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/1609364408168516416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/04/web-sockets-support-for-hornetq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/1609364408168516416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/1609364408168516416'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/04/web-sockets-support-for-hornetq.html' title='Web Sockets Support For HornetQ'/><author><name>Jeff Mesnil</name><uri>http://www.blogger.com/profile/16529476669001423527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-4686808725116329732</id><published>2010-04-24T03:36:00.001-07:00</published><updated>2010-04-24T03:38:36.307-07:00</updated><title type='text'>Want to see HornetQ at JUDCon 2010?</title><content type='html'>If you want to hear a very cool presentation on HornetQ by Diego Naya at &lt;a href="http://www.jboss.org/events/JUDCon.html"&gt;JBoss JUDCon 2010&lt;/a&gt;, then you can vote for it &lt;a href="https://community.jboss.org/poll.jspa?poll=1042"&gt;here&lt;/a&gt;!

The top voted for presentations will form the third track at the conference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-4686808725116329732?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/4686808725116329732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/04/want-to-see-hornetq-at-judcon-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/4686808725116329732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/4686808725116329732'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/04/want-to-see-hornetq-at-judcon-2010.html' title='Want to see HornetQ at JUDCon 2010?'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-4970790203609232736</id><published>2010-04-20T04:11:00.000-07:00</published><updated>2010-04-20T04:12:26.155-07:00</updated><title type='text'>Free webinar on HornetQ</title><content type='html'>The guys at roklee are hosting a free webinar on migration from ActiveMQ to HornetQ.

Sign up &lt;a href="http://www.roklee.com/?p=323"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-4970790203609232736?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/4970790203609232736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/04/free-webinar-on-hornetq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/4970790203609232736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/4970790203609232736'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/04/free-webinar-on-hornetq.html' title='Free webinar on HornetQ'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-2049085704652200157</id><published>2010-04-14T06:53:00.000-07:00</published><updated>2010-04-14T06:56:14.060-07:00</updated><title type='text'>Want to work full-time on HornetQ?</title><content type='html'>&lt;a href="http://roklee.com"&gt;Rocklee labs&lt;/a&gt;, are currently looking to hire a Java senior developer to work full time on the HornetQ project as a community contribution.

So.... work full time on a cutting edge open source project AND get paid for it. Doesn't get much better than that&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-2049085704652200157?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/2049085704652200157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/04/want-to-work-full-time-on-hornetq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2049085704652200157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2049085704652200157'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/04/want-to-work-full-time-on-hornetq.html' title='Want to work full-time on HornetQ?'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-101251079405325227</id><published>2010-03-28T09:41:00.000-07:00</published><updated>2010-03-28T09:43:16.361-07:00</updated><title type='text'>Nice post on ActiveMQ--&gt;HornetQ migration</title><content type='html'>Roklee, has posted a nice article on a &lt;a href="http://www.roklee.com/"&gt;migration&lt;/a&gt; from ActiveMQ to HornetQ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-101251079405325227?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/101251079405325227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/03/nice-post-on-activemq-hornetq-migration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/101251079405325227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/101251079405325227'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/03/nice-post-on-activemq-hornetq-migration.html' title='Nice post on ActiveMQ--&gt;HornetQ migration'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-8277063759683106756</id><published>2010-03-06T04:48:00.000-08:00</published><updated>2010-03-06T04:50:20.803-08:00</updated><title type='text'>Introduction to HornetQ article on DZone</title><content type='html'>If implementing STOMP and websockets support is not enough, Jeff has also found time to write a nice &lt;a href="http://java.dzone.com/articles/hornetq-getting-started?mz=3006-jboss"&gt;introductory article&lt;/a&gt; on HornetQ which is published on Dzone :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-8277063759683106756?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/8277063759683106756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/03/introduction-to-hornetq-article-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8277063759683106756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8277063759683106756'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/03/introduction-to-hornetq-article-on.html' title='Introduction to HornetQ article on DZone'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-8615079998396222863</id><published>2010-03-06T04:31:00.000-08:00</published><updated>2010-03-08T00:44:48.862-08:00</updated><title type='text'>STOMP support and very cool stuff with Web sockets</title><content type='html'>&lt;p&gt;Thanks to the work of Jeff Mesnil, HornetQ TRUNK now supports the &lt;a href="http://stomp.codehaus.org/Protocol protocol"&gt;STOMP protocol&lt;/a&gt; natively (that means without having to use StompConnect).
&lt;/p&gt;

&lt;p&gt;
If you're not aware of it, STOMP is a simple, interoperable text based messaging protocol, originally implemented by the ActiveMQ guys.
&lt;/p&gt;

&lt;p&gt;
Sure, it doesn't have some of the features that you'll find in more complex protocols but in many applications it's really good enough.
&lt;/p&gt;

&lt;p&gt;
The great thing about STOMP too is that there are already many STOMP &lt;a href="http://stomp.codehaus.org/Clients"&gt;clients available in many different languages&lt;/a&gt;, this immediately opens up HornetQ to be accessed by clients in .NET, Python, Ruby etc.
&lt;/p&gt;

&lt;p&gt;
The HornetQ server simultaneous supports all its protocols, so you can, e.g. send a JMS message and consume it as a STOMP message and vice versa, going ahead the same will be true with AMQP.
&lt;/p&gt;

&lt;p&gt;
If STOMP support is not cool enough already, Jeff has done some very cool stuff with &lt;a href="http://www.websockets.org/"&gt;web sockets&lt;/a&gt; and STOMP.
&lt;/p&gt;

&lt;p&gt;
Jeff has written a simple &lt;a href="http://jmesnil.net/stomp-websocket/doc/"&gt;Javascript library which can speak the STOMP protocol&lt;/a&gt;, combine this with web sockets and you can now have your in-browser JavaScript apps talking directly to the HornetQ server.
&lt;/p&gt;

&lt;p&gt;
Jeff demonstrated a very simple &lt;a href="http://github.com/jmesnil/hornetq"&gt;prototype&lt;/a&gt; with a simple JavaScript chat application that consumed messages from and sent messages to a topic on HornetQ.
&lt;/p&gt;

&lt;p&gt;
Web sockets are new technology so aren't currently available in all browsers, but going ahead this is something that should be much more widely available.
&lt;/p&gt;

&lt;p&gt;
Very cool stuff, and all of this will be available in the up coming 2.1 release :)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-8615079998396222863?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/8615079998396222863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/03/stomp-support-and-very-cool-stuff-with.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8615079998396222863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/8615079998396222863'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/03/stomp-support-and-very-cool-stuff-with.html' title='STOMP support and very cool stuff with Web sockets'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-6776297506187029568</id><published>2010-02-16T10:27:00.000-08:00</published><updated>2010-02-16T10:29:31.242-08:00</updated><title type='text'>HornetQ reaches 800K messages / sec on a commodity server</title><content type='html'>I've been hacking away here, and managed to get a throughput of 800K small non persistent messages per second on a single 4 x 2.5GHz core server.

The server was only running at 80% utilisation at this point. That means not even one core used :)

Now... I just need to think of a way to incorporate this in a non hacky way.....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-6776297506187029568?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/6776297506187029568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/02/hornetq-reaches-800k-messages-sec-on.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/6776297506187029568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/6776297506187029568'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/02/hornetq-reaches-800k-messages-sec-on.html' title='HornetQ reaches 800K messages / sec on a commodity server'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-2495693062255289836</id><published>2010-02-12T00:28:00.000-08:00</published><updated>2010-02-12T00:36:08.330-08:00</updated><title type='text'>JBoss HornetQ sets record SPECjms2007 benchmark results</title><content type='html'>&lt;br&gt;HornetQ- the new ultra high performance enterprise grade messaging system from JBoss, sets a record breaking score in the SPECjms2007 industry standard benchmark for JMS messaging system performance.
&lt;br&gt;
&lt;br&gt;
HornetQ 2.0.GA obtained scores up to &lt;span style="font-weight: bold;"&gt;307% higher&lt;/span&gt; than previously published SPECjms2007 benchmark results, on the same server hardware and operating system set-up.
&lt;br&gt;
&lt;br&gt;
The peer-reviewed results are available on the spec.org web-site: &lt;a href="http://www.spec.org/jms2007/results/jms2007.html"&gt;http://www.spec.org/jms2007/results/jms2007.html&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
The results were obtained by Kai Sachs and Stefan Appel from an independent research group at the TU Darmstadt, Germany.
&lt;br&gt;
&lt;br&gt;
Their release announcement can be found here:
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.dvs.tu-darmstadt.de/news/specjms2007Results_HornetQ.html"&gt;http://www.dvs.tu-darmstadt.de/news/specjms2007Results_HornetQ.html&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Work is currently occurring on HornetQ 2.1 which includes another round of enhancements to take performance to yet another level.
&lt;br&gt;
&lt;br&gt;
For more information on HornetQ, please see the web site &lt;a href="http://hornetq.org/"&gt;http://hornetq.org&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="font-style: italic;"&gt;SPEC® and the benchmark name SPECjms2007® are registered trademarks of the Standard Performance Evaluation Corporation. The results used in the above comparison refer to submissions made on the 17 Sep 2009 and 20 Jan 2010 by TU University Darmstadt&lt;/span&gt;
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-2495693062255289836?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/2495693062255289836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/02/jboss-hornetq-sets-record-specjms2007.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2495693062255289836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2495693062255289836'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/02/jboss-hornetq-sets-record-specjms2007.html' title='JBoss HornetQ sets record SPECjms2007 benchmark results'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-7102644013334824498</id><published>2010-02-05T01:29:00.001-08:00</published><updated>2010-02-06T10:47:37.728-08:00</updated><title type='text'>DZone interviews Tim Fox on HornetQ</title><content type='html'>DZone presents a short &lt;a href="http://architects.dzone.com/articles/hornetq-tim-fox?mz=3006-jboss"&gt;interview&lt;/a&gt; on the past, present and future of HornetQ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-7102644013334824498?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/7102644013334824498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/02/dzone-interviews-tim-fox-on-hornetq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/7102644013334824498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/7102644013334824498'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/02/dzone-interviews-tim-fox-on-hornetq.html' title='DZone interviews Tim Fox on HornetQ'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-4327102359278415129</id><published>2010-01-15T01:08:00.000-08:00</published><updated>2010-01-15T01:17:04.928-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='l'/><title type='text'>Using Stomp With HornetQ 2.0.0</title><content type='html'>&lt;p&gt;The next release of HornetQ will have &lt;a href="https://jira.jboss.org/jira/browse/HORNETQ-129"&gt;native support for Stomp&lt;/a&gt; but it already possible to use &lt;a href="http://stomp.codehaus.org/"&gt;Stomp&lt;/a&gt; with HornetQ 2.0.0 thanks to StompConnect.&lt;/p&gt;

&lt;p&gt;I wrote a &lt;a href="http://jmesnil.net/weblog/2010/01/14/using-stomp-with-hornetq/"&gt;simple example to show how to configure HornetQ and StompConnect&lt;/a&gt; to provide a fully functional Stomp messaging server.&lt;/p&gt;

&lt;p&gt;The example code is hosted on GitHub:&lt;/p&gt;

&lt;p&gt;git clone git://github.com/jmesnil/hornetq-stomp.git&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-4327102359278415129?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/4327102359278415129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/01/using-stomp-with-hornetq-200.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/4327102359278415129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/4327102359278415129'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/01/using-stomp-with-hornetq-200.html' title='Using Stomp With HornetQ 2.0.0'/><author><name>Jeff Mesnil</name><uri>http://www.blogger.com/profile/16529476669001423527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-5964958961027953378</id><published>2010-01-13T07:54:00.000-08:00</published><updated>2010-01-13T08:02:45.612-08:00</updated><title type='text'>HornetQ 2.0.0.GA is released!</title><content type='html'>&lt;br&gt;&lt;span style="font-weight: bold;"&gt;Red Hat Middleware (JBoss) is pleased to announce the release of HornetQ 2.0 GA.&lt;/span&gt;

&lt;p&gt;

HornetQ is an open source community project to build a multi-protocol, embeddable, ultra high performance, clustered, asynchronous messaging system.

&lt;p&gt;

HornetQ can be used to provide messaging functionality from the smallest of applications to empowering the largest of enterprise messaging topologies.

&lt;p&gt;

Writing a full-blown, enterprise messaging system is a huge undertaking and it's been a long and windy road to get where we are today. It's taken over 2 years of development and many late nights and weekends to get to this point, but we hope you like what you see.

&lt;p&gt;

HornetQ is currently an unsupported community project, but, in the not-too-distant future will be available fully supported by Red Hat as part of a JBoss Enterprise Application Platform subscription. Even sooner than that HornetQ will be available in JBoss Enterprise Application Platform as a technical preview with limited support.

&lt;p&gt;

Here's just a taste of why you should consider choosing, or migrating to HornetQ:

&lt;p&gt;

* 100% open source software. HornetQ is licenced using the Apache Software License v2.0 to minimise barriers to adoption.&lt;br&gt;

* Jaw-dropping performance. Our unique high performance journal provides astonishing persistent messaging performance. When running on Linux it takes advantage of native code to provide performance unavailable from pure Java. When Linux is not available it still flies at supersonic speed.&lt;br&gt;

* Full feature set. All the features you'd expect in any serious messaging system, and others you won't find anywhere else.
&lt;br&gt;

* Usability is key. We ship with over 75 ready-to-run examples demonstrating most aspects of HornetQ functionality.
&lt;br&gt;

* Comprehensive documentation. We ship with a in depth 200 page user manual, and a quickstart guide to get you up and running in minutes.

&lt;br&gt;

* Written in Java. Runs on any platform with a Java 5+ runtime, that's everything from Windows desktops to IBM mainframes.

&lt;br&gt;

* Elegant, clean-cut design with minimal third party dependencies. Run HornetQ stand-alone, run it in integrated in your favourite JEE application server, or run it embedded inside your own product. The choice is yours.

&lt;br&gt;

* Solid high availability. We provide a HA solution with automatic client failover so you can guarantee zero message loss or duplication in event of server failure.

&lt;br&gt;

* Hugely flexible clustering. Create clusters of servers that know how to load balance messages. Link geographically distributed clusters over unreliable connections to form a global network that powers your core business. Configure routing of messages in a highly flexible way.

&lt;p&gt;

Please see the &lt;a href="http://community.jboss.org/wiki/HornetQ"&gt;wiki&lt;/a&gt; for a complete list of HornetQ features.

&lt;p&gt;

What's next for HornetQ? We have lots of exciting things in store including REST support, AMQP support, STOMP support and direct Ajax/Comet/Web sockets support.

&lt;p&gt;

I've put together a &lt;a href="http://community.jboss.org/wiki/HornetQFrequentlyAskedQuestions"&gt;FAQ&lt;/a&gt; that should answer most of the common questions about HornetQ.

&lt;p&gt;

Here are some more links:

&lt;p&gt;

&lt;a href="http://hornetq.org/"&gt;
Project web site&lt;/a&gt;&lt;br&gt;
&lt;a href="http://hornetq.blogspot.com/"&gt;Project blog&lt;/a&gt;&lt;br&gt;
&lt;a href="http://community.jboss.org/wiki/HornetQ"&gt;Wiki &lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.jboss.org/hornetq/downloads.html"&gt;Download &lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.jboss.org/hornetq/docs.html"&gt;Documentation&lt;/a&gt;&lt;br&gt;
&lt;a href="http://twitter.com/hornetq"&gt;Follow us on twitter&lt;/a&gt;&lt;br&gt;
Get your cool HornetQ swag &lt;a href="http://www.cafepress.co.uk/jbossorg/7028169"&gt;here&lt;/a&gt; (T-shirts, mugs etc)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-5964958961027953378?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/5964958961027953378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/01/hornetq-200ga-is-released.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/5964958961027953378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/5964958961027953378'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/01/hornetq-200ga-is-released.html' title='HornetQ 2.0.0.GA is released!'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-334947157756776855</id><published>2010-01-06T14:14:00.000-08:00</published><updated>2010-01-06T14:19:10.170-08:00</updated><title type='text'>HornetQ 2.0.0.CR3 is released!</title><content type='html'>We are very close to GA. This release has a just few minor fixes and improvements as it you could be verified at our &lt;a href="https://jira.jboss.org/jira/secure/ReleaseNote.jspa?version=12314323&amp;amp;styleName=Html&amp;amp;projectId=12310830&amp;amp;Create=Create"&gt;release notes&lt;/a&gt;.


You can download it from the &lt;a href="http://jboss.org/hornetq/downloads.html"&gt;HornetQ Web Site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-334947157756776855?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/334947157756776855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2010/01/hornetq-200cr3-is-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/334947157756776855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/334947157756776855'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2010/01/hornetq-200cr3-is-released.html' title='HornetQ 2.0.0.CR3 is released!'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-6392921850246434024</id><published>2009-12-15T01:02:00.000-08:00</published><updated>2009-12-15T01:03:48.067-08:00</updated><title type='text'>HornetQ 2.0.0.CR2 is released!</title><content type='html'>This is a candidate release for the forthcoming 2.0.0.GA release (which is due very soon). You can download it from the &lt;a href="http://jboss.org/hornetq/downloads.html"&gt;web site&lt;/a&gt;. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-6392921850246434024?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/6392921850246434024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/12/hornetq-200cr2-is-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/6392921850246434024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/6392921850246434024'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/12/hornetq-200cr2-is-released.html' title='HornetQ 2.0.0.CR2 is released!'/><author><name>Jeff Mesnil</name><uri>http://www.blogger.com/profile/16529476669001423527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-7867554761961347707</id><published>2009-12-07T08:03:00.001-08:00</published><updated>2009-12-07T08:04:27.416-08:00</updated><title type='text'>HornetQ 2.0.0.CR1 is released!</title><content type='html'>This is a candidate release for the forthcoming 2.0.0.GA release (which is due very soon).

You can download this from the web site. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-7867554761961347707?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/7867554761961347707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/12/hornetq-200cr1-is-released.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/7867554761961347707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/7867554761961347707'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/12/hornetq-200cr1-is-released.html' title='HornetQ 2.0.0.CR1 is released!'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-3578775522504266807</id><published>2009-10-16T07:36:00.000-07:00</published><updated>2009-10-19T03:11:50.694-07:00</updated><title type='text'>Understanding Connectors &amp; Acceptors</title><content type='html'>Connectors and accepors are concepts which often confuses new HornetQ users.
  Both connectors and acceptors are defined in HornetQ server configuration (&lt;code&gt;hornetq-configuration.xml&lt;/code&gt;) but users are often confused about when and why they need to configure them.
  They are described in the &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/configuring-transports.html"&gt;user manual&lt;/a&gt; but I have a few drawings which could help the users understand them better.&lt;p&gt;&lt;/p&gt;&lt;p&gt;An &lt;em&gt;acceptor&lt;/em&gt; defines which type of connection are &lt;em&gt;accepted&lt;/em&gt; by the HornetQ server.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_m-9u-6dcVjI/StiORM_IvcI/AAAAAAAAAJg/93FT8eizniM/s1600-h/acceptor.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 157px; height: 33px;" src="http://3.bp.blogspot.com/_m-9u-6dcVjI/StiORM_IvcI/AAAAAAAAAJg/93FT8eizniM/s400/acceptor.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393216979971128770" /&gt;&lt;/a&gt;&lt;p&gt;A &lt;em&gt;connector&lt;/em&gt; defines how to &lt;em&gt;connect&lt;/em&gt; to a HornetQ server. The connector is used by a HornetQ client.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_m-9u-6dcVjI/StiORTAeX6I/AAAAAAAAAJo/dAWrH-JvdXU/s1600-h/connector.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 178px; height: 35px;" src="http://2.bp.blogspot.com/_m-9u-6dcVjI/StiORTAeX6I/AAAAAAAAAJo/dAWrH-JvdXU/s400/connector.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393216981587353506" /&gt;&lt;/a&gt;&lt;p&gt;HornetQ defines 2 types of acceptor/connector&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;invm&lt;/em&gt; – this type can be used when both HornetQ client and server run in the same Virtual Machine (invm for &lt;em&gt;Intra Virtual Machine&lt;/em&gt;)&lt;/li&gt;       &lt;li&gt;&lt;em&gt;netty&lt;/em&gt; – this type must be used when HornetQ client and server runs in different Virtual Machines (this connector type uses the &lt;a href="http://jboss.org/netty"&gt;netty&lt;/a&gt; project to handle the IO)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To communicate, a HornetQ client must use a connector &lt;em&gt;compatible&lt;/em&gt; with the server's acceptor.&lt;/p&gt;&lt;p&gt;You can connect from a &lt;em&gt;netty&lt;/em&gt; connector to a &lt;em&gt;netty&lt;/em&gt; acceptor (if they are configured with the same host and port):&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_m-9u-6dcVjI/StiORyC6psI/AAAAAAAAAJw/FH5t6uDfin4/s1600-h/img1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 69px;" src="http://4.bp.blogspot.com/_m-9u-6dcVjI/StiORyC6psI/AAAAAAAAAJw/FH5t6uDfin4/s400/img1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393216989919094466" /&gt;&lt;/a&gt;&lt;p&gt;You can &lt;strong&gt;not&lt;/strong&gt; connect from a &lt;em&gt;invm&lt;/em&gt; connector to a &lt;em&gt;netty&lt;/em&gt; acceptor:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_m-9u-6dcVjI/StiOSKurahI/AAAAAAAAAJ4/K4mNsP8wjcY/s1600-h/no1.png"&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 69px;" src="http://2.bp.blogspot.com/_m-9u-6dcVjI/StiOSKurahI/AAAAAAAAAJ4/K4mNsP8wjcY/s400/no1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393216996545096210" /&gt;&lt;/a&gt;&lt;p&gt;You can &lt;strong&gt;not&lt;/strong&gt; connect from a &lt;em&gt;netty&lt;/em&gt; connector to a &lt;em&gt;invm&lt;/em&gt; acceptor:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_m-9u-6dcVjI/StiOSsiUy_I/AAAAAAAAAKA/UrIaa-EWnT4/s1600-h/no2.png"&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 69px;" src="http://1.bp.blogspot.com/_m-9u-6dcVjI/StiOSsiUy_I/AAAAAAAAAKA/UrIaa-EWnT4/s400/no2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393217005620087794" /&gt;&lt;/a&gt;&lt;p&gt;You can &lt;strong&gt;not&lt;/strong&gt; connect from a &lt;em&gt;netty&lt;/em&gt; connector on port &lt;strong&gt;5445&lt;/strong&gt; to a &lt;em&gt;netty&lt;/em&gt; acceptor on port &lt;strong&gt;5446&lt;/strong&gt;:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_m-9u-6dcVjI/StiO5XmrV8I/AAAAAAAAAKI/ZYI3JsR3wFs/s1600-h/no3.png"&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 69px;" src="http://3.bp.blogspot.com/_m-9u-6dcVjI/StiO5XmrV8I/AAAAAAAAAKI/ZYI3JsR3wFs/s400/no3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393217670016096194" /&gt;&lt;/a&gt;&lt;p&gt;By default &lt;i&gt;netty&lt;/i&gt; acceptors and connectors uses &lt;b&gt;localhost &lt;/b&gt;as the server address. If the HornetQ client is not on the same machine than the server, it will not be able to connect to it.&lt;/p&gt;&lt;p&gt;One source of confusion is that HornetQ connectors are configured on the &lt;em&gt;server. &lt;/em&gt;But I wrote that connectors are used by HornetQ clients, not servers! Why should I configure connectors on the server?&lt;/p&gt;&lt;p&gt;There are two reasons to configure connectors in the server:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;you want to use &lt;strong&gt;JMS &amp;amp; JNDI&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;you want to &lt;strong&gt;communicate between HornetQ servers&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Using JMS and JNDI&lt;/h2&gt;&lt;p&gt;The standard way to use JMS is to lookup JMS resources (&lt;code&gt;ConnectionFactory&lt;/code&gt; and &lt;code&gt;Destination&lt;/code&gt;) from JNDI.
&lt;/p&gt;&lt;pre name="code" class="java"&gt;Context ctx = new InitialContext();
ConnectionFactory cf = ctx.lookup("/ConnectionFactory")
Connection = cf.createConnection();
// the client is now connected to the JMS server
&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;ConnectionFactory&lt;/code&gt; defines how the JMS client can connect to the JMS server.
With HornetQ, this means that the &lt;code&gt;ConnectionFactory &lt;/code&gt;implementation will use a connector to connect to the HornetQ Server.&lt;/p&gt;&lt;p&gt;First of all, we must define a "netty" &lt;em&gt;acceptor&lt;/em&gt; (in &lt;code&gt;hornetq-configuration.xmlk&lt;/code&gt;) so that clients can connect remotely to the server:
&lt;/p&gt;&lt;pre name="code" class="xml"&gt;
&amp;lt;acceptor name="netty"&gt;
   &amp;lt;factory-class&gt;org.hornetq.integration.transports.netty.NettyAcceptorFactory&amp;lt;/factory-class&gt;
  &amp;lt;!-- by default will accept connection on localhost on port 5445 --&gt;
&amp;lt;/acceptor&gt;
&lt;/pre&gt;
   &lt;p&gt;Then, we define a "netty" &lt;em&gt;connector&lt;/em&gt; (in &lt;code&gt;hornetq-configuration.xmlk&lt;/code&gt;)so that JMS clients will know how to connect to the server:&lt;/p&gt;&lt;pre name="code" class="xml"&gt;
&amp;lt;connector name="netty"&gt;
   &amp;lt;factory-class&gt;org.hornetq.integration.transports.netty.NettyConnectorFactory&amp;lt;
   &amp;lt;!-- by default will connect to localhost on port 5445 --&gt;
&amp;lt;/connector&gt;
&lt;/pre&gt;
&lt;p&gt;Final step is to configure the JMS ConnectionFactory (in &lt;code&gt;hornetq-jms.xml&lt;/code&gt;) so that when it is looked up from JNDI, it uses the "netty" &lt;em&gt;connector&lt;/em&gt; to connect to the server:&lt;/p&gt;
&lt;pre name="code" class="xml"&gt;
&amp;lt;connection-factory name="ConnectionFactory"&gt;
   &amp;lt;connector-ref connector-name="netty"/&gt;
   &amp;lt;entries&gt;
      &amp;lt;entry name="/ConnectionFactory"/&gt;
   &amp;lt;/entries&gt;
&amp;lt;/connection-factory&gt;
&lt;/pre&gt;&lt;p&gt;When the HornetQ server is started, it looks like this:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_m-9u-6dcVjI/StiO5ijiwRI/AAAAAAAAAKQ/yzDH1TDGGig/s1600-h/jms-server.png"&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 374px; height: 222px;" src="http://3.bp.blogspot.com/_m-9u-6dcVjI/StiO5ijiwRI/AAAAAAAAAKQ/yzDH1TDGGig/s400/jms-server.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393217672955740434" /&gt;&lt;/a&gt;&lt;p&gt;In JNDI, the HornetQ server has stored the configuration associated to the netty connector with the &lt;code&gt;"/ConnectionFactory"&lt;/code&gt; binding.&lt;/p&gt;&lt;p&gt;When the JMS client will look up &lt;code&gt;"/ConnectionFactory"&lt;/code&gt;, it will also retrieve the netty connector configuration and use it to create a netty connector to connect to the server:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_m-9u-6dcVjI/StiO6E5-gwI/AAAAAAAAAKY/z1dTUCr3l4U/s1600-h/jms-client.png"&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 134px;" src="http://1.bp.blogspot.com/_m-9u-6dcVjI/StiO6E5-gwI/AAAAAAAAAKY/z1dTUCr3l4U/s400/jms-client.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393217682176639746" /&gt;&lt;/a&gt;&lt;p&gt;To sum up: &lt;em&gt;if you use JMS with JNDI, you MUST configure a connector to connect to the server &lt;strong&gt;itself&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;&lt;h2&gt;Communication between HornetQ server&lt;/h2&gt;&lt;p&gt;The other case when you need to define connectors is when HornetQ servers must communicate. For example, they use &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/core-bridges.html"&gt;core bridges&lt;/a&gt;, &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/appserver-integration.html#jms-bridge"&gt;JMS bridges&lt;/a&gt;, &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/diverts.html"&gt;diverts&lt;/a&gt;, they are in the same &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/clusters.html"&gt;cluster&lt;/a&gt;...&lt;/p&gt;&lt;p&gt;The important thing to remember is that when two HornetQ servers communicate, one server acts as the &lt;em&gt;client&lt;/em&gt; of the other server.
In that case, the server acting as the client of the other server MUST define a connector to connect to the &lt;em&gt;other&lt;/em&gt; server.&lt;/p&gt;&lt;p&gt;Let's take the example of a JMS bridge: Server #1 will host a core bridge which takes messages from the "source" queue on Server #0 and forwards them to the "target" queue:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_m-9u-6dcVjI/StiO6dcaFDI/AAAAAAAAAKg/yPFQHIz8h2Y/s1600-h/bridge.png"&gt;
&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 128px;" src="http://2.bp.blogspot.com/_m-9u-6dcVjI/StiO6dcaFDI/AAAAAAAAAKg/yPFQHIz8h2Y/s400/bridge.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5393217688763503666" /&gt;&lt;/a&gt;&lt;h3&gt;Server #0 configuration&lt;/h3&gt;&lt;p&gt;Server #0 is a regular HornetQ server, its setup will looks like the "JMS &amp;amp; JNDI" case:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;a "netty" &lt;em&gt;acceptor&lt;/em&gt; to accept connections from remote clients (one of its clients will be the bridge on Server #1)&lt;/li&gt;&lt;li&gt;a "netty" &lt;em&gt;connector&lt;/em&gt; so that clients can connect to it remotely and send messages to the source queue.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Server #1 configuration&lt;/h3&gt;&lt;p&gt;Server #1 is a bit more complex. It acts as a HornetQ server with regards to clients consuming from the target queue but it its bridge is acts as a &lt;em&gt;client of Server #0&lt;/em&gt;. Its setup requires:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;a "netty" &lt;em&gt;acceptor&lt;/em&gt; to accept connections from remote clients.&lt;/li&gt;&lt;li&gt;a "netty" &lt;em&gt;connector&lt;/em&gt; so that clients can connect to it remotely and receives message from the target queue (as explained in the JMS &amp;amp; JNDI case)
&lt;/li&gt;&lt;li&gt;a "source" &lt;em&gt;connector&lt;/em&gt; so that the bridge can connect to the Server #0.&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;p&gt;Server #1 defines two connectors, "netty" and "source", which serve different purposes: "netty" is used to connect to the server &lt;em&gt;itself&lt;/em&gt; (and will be used by its JMS clients) while "source" connector is used to connect to the &lt;em&gt;other&lt;/em&gt; server #0 so that the bridge can receive messages from the source queue.
&lt;h2&gt;A note on addresses&lt;/h2&gt;
&lt;p&gt;Both  "netty" connectors and acceptors can be configured with a host parameter. However the meaning of this "host" value is not the same for both:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;
a connector will connect to a single server. Its host parameter must correspond to one of the server address (e.g. localhost or macbook.local or 192.168.0.10)&lt;/li&gt;&lt;li&gt;an acceptor can accept connections from one or many addresses. You can specify a single address (localhost or 192.168.0.10), a list of comma-separated addresses (e.g. 192.168.0.10, 10.211.55.2, 127.0.0.01), or 0.0.0.0 to bind to all the host network interfaces. &lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Connector configuration can be confusing at first glance but it becomes much more clearer when you follow these simple rules:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;If you use JMS with JNDI, you MUST configure a connector to connect to the server &lt;strong&gt;itself&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;If a HornetQ server must communicate with another server, you MUST define a connector to connect to the &lt;strong&gt;other&lt;/strong&gt; server&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-3578775522504266807?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/3578775522504266807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/10/understanding-connectors-acceptors.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/3578775522504266807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/3578775522504266807'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/10/understanding-connectors-acceptors.html' title='Understanding Connectors &amp; Acceptors'/><author><name>Jeff Mesnil</name><uri>http://www.blogger.com/profile/16529476669001423527</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_m-9u-6dcVjI/StiORM_IvcI/AAAAAAAAAJg/93FT8eizniM/s72-c/acceptor.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-7269238317437757409</id><published>2009-10-13T13:12:00.001-07:00</published><updated>2009-10-13T13:13:48.155-07:00</updated><title type='text'>Welcome to two more committers</title><content type='html'>Welcome to two new committers who have earned their commit rights:

Kenny MacLeod (skaffman) and Sergej Zizemski (netwater)

Welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-7269238317437757409?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/7269238317437757409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/10/welcome-to-two-more-committers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/7269238317437757409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/7269238317437757409'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/10/welcome-to-two-more-committers.html' title='Welcome to two more committers'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-5254009589560689266</id><published>2009-10-13T13:05:00.000-07:00</published><updated>2009-10-13T13:07:38.614-07:00</updated><title type='text'>HornetQ at the London cloud meetup tomorrow</title><content type='html'>I'm going to be popping down to the London Cloud Meetup tomorrow (Wednesday 14th Oct) and meeting up with Manik Surtani (Infinspan/JBoss Cache) and Mark Proctor (Drools).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-5254009589560689266?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/5254009589560689266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/10/hornetq-at-london-cloud-meetup-tomorrow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/5254009589560689266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/5254009589560689266'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/10/hornetq-at-london-cloud-meetup-tomorrow.html' title='HornetQ at the London cloud meetup tomorrow'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-4667705416490779027</id><published>2009-09-29T03:15:00.001-07:00</published><updated>2009-09-29T03:17:49.264-07:00</updated><title type='text'>Welcome to a new committer</title><content type='html'>We have a new committer on board! :)

Diego Naya joins us from &lt;a href="http://plugtree.com"&gt;Plug Tree Labs&lt;/a&gt; where he is the CEO.

Diego is based in Argentina. Welcome to Diego!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-4667705416490779027?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/4667705416490779027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/09/welcome-to-new-committer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/4667705416490779027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/4667705416490779027'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/09/welcome-to-new-committer.html' title='Welcome to a new committer'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-6547687244236576111</id><published>2009-09-25T03:13:00.001-07:00</published><updated>2009-09-25T03:13:45.732-07:00</updated><title type='text'>Want to become a HornetQ committer?</title><content type='html'>It's easy - just follow &lt;a href="http://www.jboss.org/community/wiki/Becomingacommitter"&gt;these steps&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-6547687244236576111?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/6547687244236576111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/09/want-to-become-hornetq-committer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/6547687244236576111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/6547687244236576111'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/09/want-to-become-hornetq-committer.html' title='Want to become a HornetQ committer?'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-2295098443562461798</id><published>2009-09-11T06:31:00.000-07:00</published><updated>2009-09-11T06:36:20.089-07:00</updated><title type='text'>Back from JBossWorld and on with HornetQ</title><content type='html'>Finally I seem to be recovering from an extended period of jet lag after returning from JBossWorld/Red Hat summit in Chicago.

The conference was a great success - it was the first time JBossWorld joined forces with the Red Hat guys to create a joint conference.

The HornetQ presentation was received very well. We had a good attendance and lots of questions at the end. It's just a shame the presentations weren't video'd - otherwise we could have put it in youtube. Next year I think I will bring along my own video camera and tripod and do it myself!

So, what's next? Next stop is HornetQ 2.0 GA. I'm guessing we have around 6 to 8 weeks work to get this out. But of course this depends on how many distractions we are getting. And right now there are a lot ;)

Onwards to GA...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-2295098443562461798?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/2295098443562461798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/09/back-from-jbossworld-and-on-with.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2295098443562461798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2295098443562461798'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/09/back-from-jbossworld-and-on-with.html' title='Back from JBossWorld and on with HornetQ'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-2887168971079679610</id><published>2009-09-01T07:43:00.000-07:00</published><updated>2010-01-15T02:11:17.826-08:00</updated><title type='text'>A HornetQ Simple Example using Maven</title><content type='html'>Since HornetQ can be run embedded and can be run with no little or no thirdparty dependencies, its easy to create a simple project that runs an embedded server or simple client. The example code can be downloaded from &lt;a href="http://community.jboss.org/servlet/JiveServlet/downloadBody/14103-102-2-110145/HornetQMavenExample.zip"&gt;here&lt;/a&gt; and can be built and run as follows:

To build both the embedded server and client run &lt;span style="font-style: italic;"&gt;mvn package&lt;/span&gt; from the root directory.

To run the server run &lt;span style="font-style: italic;"&gt;mvn exec:java&lt;/span&gt; from the embedded-server directory.

To run the client run &lt;span style="font-style: italic;"&gt;mvn exec:java&lt;/span&gt; from the client directory.

Now lets look more closely at both examples in more detail.



&lt;span style="font-weight: bold;"&gt;embedded server&lt;/span&gt;



Lets start by looking at the dependencies in the pom.xml found under the embedded-server directory.

The dependencies needed are configured as follows:
&lt;pre name="code" class="xml"&gt;
&amp;lt;dependencies&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.hornetq&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;hornetq-core&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;2.0.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.hornetq&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;hornetq-jms&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;2.0.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.hornetq&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;hornetq-logging&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;2.0.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.hornetq&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;hornetq-transports&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;2.0.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.jboss.netty&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;netty&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;3.1.0.GA&amp;lt;/version&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.jboss.javaee&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;jboss-jms-api&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;1.1.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
These dependencies are what you would need to run a HornetQ JMS server
now lets look at the code needed to run an embedded server:
&lt;pre name="code" class="java"&gt;
public class EmbeddedServer
{
public static void main(String[] args) throws Exception
{
  try
  {
     FileConfiguration configuration = new FileConfiguration();
     configuration.setConfigurationUrl("hornetq-configuration.xml");
     configuration.start();

     HornetQServer server = HornetQServers.newHornetQServer(configuration);
     JMSServerManager jmsServerManager = new JMSServerManagerImpl(server, "hornetq-jms.xml");
     //if you want to use JNDI, simple inject a context here or don't call this method and make sure the JNDI parameters are set.
     jmsServerManager.setContext(null);
     jmsServerManager.start();
     System.out.println("STARTED::");
  }
  catch (Throwable e)
  {
     System.out.println("FAILED::");
     e.printStackTrace();
  }
}
}
&lt;/pre&gt; You can configure the server via the hornetq-configuration.xml file and configure any JMS objects via the hornetq-jms.xml file. Of course you can do much more than this with your server but this is a good starting point. Consult the HornetQ documentation for more information of what other features are available.



&lt;span style="font-weight: bold;"&gt;client&lt;/span&gt;



The client example shows how you can easily create a HornetQ JMS client using minimal jars. The dependencies this time are much smaller than the server and contain client jars that HornetQ provides for lightweight client apps.
&lt;pre name="code" class="xml"&gt;
   &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.hornetq&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;hornetq-core-client&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;2.0.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.hornetq&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;hornetq-jms-client&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;2.0.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.hornetq&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;hornetq-transports&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;2.0.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.jboss.netty&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;netty&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;3.1.0.GA&amp;lt;/version&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;org.jboss.javaee&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;jboss-jms-api&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;1.1.0.GA&amp;lt;/version&amp;gt;
     &amp;lt;scope&amp;gt;compile&amp;lt;/scope&amp;gt;
  &amp;lt;/dependency&amp;gt;
&lt;/pre&gt;The client code in this case is copied from one of the HornetQ examples, running this client will send a message to the server that was started earlier.
&lt;pre name="code" class="java"&gt;
public static void main(String[] args) throws Exception
{
   Connection connection = null;
   try
   {
       // Step 1. Directly instantiate the JMS Queue object.
       Queue queue = HornetQJMSClient.createQueue("exampleQueue");

       // Step 2. Instantiate the TransportConfiguration object which contains the knowledge of what transport to use,
       // The server port etc.

       Map&lt;string,&gt; connectionParams = new HashMap&lt;string,&gt;();
       connectionParams.put(PORT_PROP_NAME, 5445);

       TransportConfiguration transportConfiguration = new TransportConfiguration(NettyConnectorFactory.class.getName(),
                                                                                  connectionParams);

       // Step 3 Directly instantiate the JMS ConnectionFactory object using that TransportConfiguration
       ConnectionFactory cf = HornetQJMSClient.createConnectionFactory(transportConfiguration);

       // Step 4.Create a JMS Connection
       connection = cf.createConnection();

       // Step 5. Create a JMS Session
       Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

       // Step 6. Create a JMS Message Producer
       MessageProducer producer = session.createProducer(queue);

       // Step 7. Create a Text Message
       TextMessage message = session.createTextMessage("This is a text message");

       System.out.println("Sent message: " + message.getText());

       // Step 8. Send the Message
       producer.send(message);

       // Step 9. Create a JMS Message Consumer
       MessageConsumer messageConsumer = session.createConsumer(queue);

       // Step 10. Start the Connection
       connection.start();

       // Step 11. Receive the message
       TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000);

       System.out.println("Received message: " + messageReceived.getText());&lt;string, object=""&gt;&lt;string, object=""&gt;
   }
   finally
   {
      if (connection != null)
      {
         connection.close();
      }
   }
}
&lt;/string,&gt;&lt;/string,&gt;&lt;/string,&gt;&lt;/string,&gt;&lt;/pre&gt;

You can use this template as a starting point for any projects you may want to create that would use HornetQ as a client or as an embedded server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-2887168971079679610?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/2887168971079679610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/09/hornetq-simple-example-using-maven.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2887168971079679610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2887168971079679610'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/09/hornetq-simple-example-using-maven.html' title='A HornetQ Simple Example using Maven'/><author><name>Andy Taylor</name><uri>http://www.blogger.com/profile/04912964439431734087</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-2877992044520251730</id><published>2009-08-25T15:35:00.000-07:00</published><updated>2009-09-02T09:29:04.860-07:00</updated><title type='text'>Persistence on HornetQ</title><content type='html'>Persistence on HornetQ is really fast. It is so fast that you would think you are sending non-persistent messages by accident.
&lt;br/&gt;&lt;br/&gt;
Instead of using heavy weighted databases that would provide a bunch of stuff we don't need on HornetQ, we used something faster and still as reliable.
&lt;br/&gt;&lt;br/&gt;
We have written our own circular file Journal that uses either Linux libaio or Java NIO.
&lt;br/&gt;&lt;br/&gt;
Linux libaio is a library that works at the kernel level. We submit writes by sending a DMA Buffer (Direct Memory Access) and a callback interface. The kernel will deal directly with the buffer saving copy time between Java and the disk controller. When the disk is done with the write the callback is returned, and we are sure the data is persisted on the disk.
&lt;br/&gt;&lt;br/&gt;

You may ask, what? At the kernel level?! At the controller level?
&lt;br/&gt;&lt;br/&gt;

Yeah.. that' s the beauty of libaio. It provides system calls to the kernel.
&lt;br/&gt;&lt;br/&gt;
BTW: If you are not a geek who loves programming like I do, you could stop reading this post now :-) Since I will dig a little bit on how it works:
&lt;br/&gt;&lt;br/&gt;

&lt;span style="font-style: italic;"&gt;The Journal:&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
The Journal has a set of pre-allocated files. We keep each file size as close as possible to what would fit on a disk cylinder. We have found a value of 10MiB but that could be different in other systems.
&lt;br/&gt;&lt;br/&gt;
The journal is an append only journal. We always append to the current used file of the pre-allocated set. This way we avoid mechanical movements getting most of the performance possible out of the disk controller.
&lt;br/&gt;&lt;br/&gt;
Deletes are taken as appended records. We add a delete record to the bottom of the file.
&lt;br/&gt;&lt;br/&gt;
We also have a reference counting of records, so when the original file is totally clean (all the records deleted), that file is ready for reuse.
&lt;br/&gt;&lt;br/&gt;
And the journal is transactional also. We have a very nice transactional control, where a commit record is only taken into consideration *if* the entire transaction is on the disk. That gives us &lt;a href="http://en.wikipedia.org/wiki/ACID"&gt;ACID&lt;/a&gt; control.
&lt;br/&gt;&lt;br/&gt;

&lt;span style="font-style: italic;"&gt;SequentialFile interface&lt;/span&gt;:
&lt;br/&gt;&lt;br/&gt;
We abstract the disk access through that interface. There are two implementations NIO and AIO. You can select what implementation you want through our configuration. (see &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/persistence.html#configuring.message.journal.journal-type"&gt;User's Manual&lt;/a&gt;)
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-style: italic;"&gt;NIO:&lt;/span&gt;&lt;br/&gt;
This is a very fast approach already. We work at file level, avoiding disk movements. If you don't have Linux or libaio installed in your system, we default to this 100% Java implementation.
&lt;br/&gt;&lt;br/&gt;

&lt;span style="font-style: italic;"&gt;AIO (linux libaio):&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
We have written a small &lt;a href="http://en.wikipedia.org/wiki/JNI"&gt;JNI&lt;/a&gt; layer that "talks" to libaio on Linux. The basic write method in java, has this signature:
&lt;br/&gt;&lt;br/&gt;
write(int position, int size, ByteBuffer directBuffer, AIOCallback callback).&lt;span style="font-style: italic;"&gt; (More detatils on the &lt;/span&gt;&lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/api/org/hornetq/core/asyncio/impl/AsynchronousFileImpl.html#write%28long,%20long,%20java.nio.ByteBuffer,%20org.hornetq.core.asyncio.AIOCallback%29"&gt;javadoc&lt;/a&gt;&lt;span style="font-style: italic;"&gt;)&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
The buffer here is sent directly to a libaio method called aio_write. (look at aio_write man page).
&lt;br/&gt;&lt;br/&gt;
Another thread will be polling events out of libaio. As soon as the data is on the disk the JNI layer will execute the callback method.
&lt;br/&gt;&lt;br/&gt;
Instead of performing syncs on the disk (which is a slow operation), we use a concurrent latch. You could have many more transactions being executed in parallel. Instead of blocking the whole system while one sync is being performed, we just write as usual and wait for the callback. Each thread will use the most of the performance available at the disk controller.
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OmWxLcQF4sU/Spa4YzIOpEI/AAAAAAAAAHc/aDribcn3_8A/s1600-h/Journal.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 248px;" src="http://2.bp.blogspot.com/_OmWxLcQF4sU/Spa4YzIOpEI/AAAAAAAAAHc/aDribcn3_8A/s320/Journal.gif" alt="" id="BLOGGER_PHOTO_ID_5374685941494359106" border="0" /&gt;&lt;/a&gt;Instead of waiting an expensive sync operation, each thread will be waiting the callback when the data is safely stored.


&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-style: italic;"&gt;Conclusion:&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
Persistence on HornetQ is not only fast but it also scales up when several threads are performing transactions.
&lt;br/&gt;&lt;br/&gt;
This is just one of many of other innovations from HornetQ. We are working hard to make a great software. Feel free to contact us on IRC or our user's forum. We would love to get your feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-2877992044520251730?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/2877992044520251730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/08/persistence-on-hornetq.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2877992044520251730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/2877992044520251730'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/08/persistence-on-hornetq.html' title='Persistence on HornetQ'/><author><name>Clebert Suconic</name><uri>http://www.blogger.com/profile/05972640198013851304</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OmWxLcQF4sU/Spa4YzIOpEI/AAAAAAAAAHc/aDribcn3_8A/s72-c/Journal.gif' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-169571142208866968.post-6968151958263408993</id><published>2009-08-24T03:12:00.000-07:00</published><updated>2009-09-02T09:30:34.506-07:00</updated><title type='text'>The Hornet Hatches!</title><content type='html'>This is an exciting day for messaging at JBoss and Red Hat.
&lt;br/&gt;&lt;br/&gt;
After months of preparation, the middleware messaging team are excited to announce the birth of a new project "HornetQ".
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;What is HornetQ?&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;a href="http://hornetq.org/"&gt;HornetQ&lt;/a&gt; is an open source project to build a multi-protocol, embeddable, high performance, clustered, asynchronous messaging system. HornetQ is an example of &lt;a href="http://en.wikipedia.org/wiki/Message-oriented_middleware"&gt;Message Oriented Middleware&lt;/a&gt; (MoM)
&lt;br/&gt;&lt;br/&gt;
HornetQ is designed with usability in mind: We've provided an extensive, easy-to-understand &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/index.html"&gt;user-manual&lt;/a&gt; and &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/quickstart-guide/en/html/index.html"&gt;quick-start guide&lt;/a&gt; and we ship with over 65 ready-to-run &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/examples.html"&gt;examples&lt;/a&gt; out of the box, demonstrating everything from simple JMS usage to complex clusters of servers and more exotic functionality.
&lt;br/&gt;&lt;br/&gt;
HornetQ is designed with flexibility in mind: It's elegant &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/architecture.html"&gt;POJO based design&lt;/a&gt; has minimal third party dependencies: Run HornetQ as a stand-alone messaging broker, run it in integrated in your favourite JEE application server, or run it embedded inside your own application. It's up to you.
&lt;br/&gt;&lt;br/&gt;
HornetQ is designed with performance in mind: Our unique &lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/persistence.html"&gt;ultra-high performance journal&lt;/a&gt; provides never seen before persistent messaging performance. Automatically switching into native mode when running on Linux, it uses asynchronous IO to provide persistent messaging rates that can saturate the write throughput of a disk. Our pluggable transport system uses &lt;a href="http://jboss.org/netty"&gt;JBoss Netty&lt;/a&gt; out of the box to provide superb performance and scalability on the wire.
&lt;br/&gt;&lt;br/&gt;
HornetQ is licensed using the &lt;a href="http://www.apache.org/licenses/LICENSE-2.0.html"&gt;Apache Software License V 2.0&lt;/a&gt;. The ASL 2.0 has fewer restrictions on use than the LGPL, thus providing fewer barriers to adoption. We want HornetQ to be used as widely as possible.
&lt;br/&gt;&lt;br/&gt;
HornetQ has a great &lt;a href="http://www.jboss.org/community/wiki/HornetQFeatures"&gt;feature set&lt;/a&gt; that you'd expect of any serious messaging broker.
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;But... What about JBoss Messaging?&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
During its development over the last couple of years the HornetQ code-base was worked on under the name JBoss Messaging 2.0
&lt;br/&gt;&lt;br/&gt;
We decided to rename it and separate it as an independent project since it differs in a many ways from JBoss Messaging 1.x and we did not want to confuse the two, quite different, systems. The vast majority of the code base of HornetQ is different to the code base of JBoss Messaging 1.x
&lt;br/&gt;&lt;br/&gt;
So, what happens with JBoss Messaging now? JBoss Messaging 1.x continues to be known under the name of JBoss Messaging and the project is now in maintenance mode only, with all new messaging development happening on the HornetQ project.
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;Let's go!... to the future&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
The future has a lot to hold.
&lt;br/&gt;&lt;br/&gt;
What about cloud computing?
&lt;br/&gt;&lt;br/&gt;
Messaging is going to be a key service in the cloud, and our goal is for HornetQ to be the messaging provider of choice in the cloud. It's our view that &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;RESTful&lt;/a&gt; APIs will eventually be the preferred API style in clouds. With that in mind we'll be working on implementing a RESTful style API for interoperable messaging.
&lt;br/&gt;&lt;br/&gt;
Since interoperability is high on our list we won't just stop with REST. HornetQ will also be implementing AMQP and native STOMP support to make it a truly multi-lingual messaging system.
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;Get involved. HornetQ needs you!&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
The future certainly has lots in store, and there is plenty for us to do. So why not get involved?
&lt;br/&gt;&lt;br/&gt;
HornetQ is a community, open source project and we'd love to hear from you if you'd like to get involved in development, documentation or help in some other way. We have a small team so any help would be fantastic. Join us!
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;Come, hear the scoop!&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
To get all the details on this exciting news and more and to see how it fits in the with JBoss' and Red Hat's overall middleware strategy, come and see me and others speak at the &lt;a href="http://www.jbossworld.com/"&gt;Red Hat summit / JBoss World 2009&lt;/a&gt; in Chicago on September 1-4.
&lt;br/&gt;&lt;br/&gt;
See you there!
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;Any questions?&lt;/span&gt;
&lt;br/&gt;&lt;br/&gt;
I've put together a &lt;a href="http://www.jboss.org/community/wiki/HornetQFrequentlyAskedQuestions"&gt;FAQ&lt;/a&gt; that should answer most of the common questions about HornetQ.
&lt;br/&gt;&lt;br/&gt;
Here are some more links:
&lt;br/&gt;&lt;br/&gt;
&lt;a href="http://hornetq.org/"&gt;Project web site&lt;/a&gt;
&lt;a href="http://www.jboss.org/community/wiki/HornetQ"&gt;Project wiki&lt;/a&gt;
&lt;a href="http://jboss.org/hornetq/downloads.html"&gt;Download&lt;/a&gt;
&lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/index.html"&gt;User manual &lt;/a&gt;
&lt;a href="http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/quickstart-guide/en/html/index.html"&gt;Quick start guide&lt;/a&gt;
&lt;a href="http://twitter.com/hornetq"&gt;Follow us on twitter&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/169571142208866968-6968151958263408993?l=hornetq.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hornetq.blogspot.com/feeds/6968151958263408993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hornetq.blogspot.com/2009/08/hornet-hatches.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/6968151958263408993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/169571142208866968/posts/default/6968151958263408993'/><link rel='alternate' type='text/html' href='http://hornetq.blogspot.com/2009/08/hornet-hatches.html' title='The Hornet Hatches!'/><author><name>Tim Fox</name><uri>http://www.blogger.com/profile/10464976674772047469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_HhU2w-VCUpU/S8l80L5-T-I/AAAAAAAAAB4/Aq1UMRuTL9Q/S220/200px-Gobo-fraggle.jpg'/></author><thr:total>2</thr:total></entry></feed>
