<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUQDQnkyfCp7ImA9WhBRGU8.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475</id><updated>2013-03-10T06:49:33.794-07:00</updated><category term="INVOIC" /><category term="clustering" /><category term="accept" /><category term="Proxy Service" /><category term="zookeeper" /><category term="Performance" /><category term="s3" /><category term="EDIFACT" /><category term="Spring Framework" /><category term="esb performance" /><category term="B2B" /><category term="AquaLogic" /><category term="uconsole" /><category term="poll" /><category term="X12" /><category term="open source" /><category term="delay" /><category term="HTTP" /><category term="pop3" /><category term="BEA" /><category term="API management" /><category term="zabbix" /><category term="spring" /><category term="AS2" /><category term="Fuse ESB" /><category term="Stability" /><category term="Apache Bench" /><category term="apache synapse" /><category term="QCon" /><category term="jta" /><category term="email" /><category term="sticky sessions" /><category term="Electronic Invoicing" /><category term="Apache" /><category term="Documentation" /><category term="aws" /><category term="transform" /><category term="connection refused" /><category term="talent" /><category term="Open source ESB" /><category term="POST" /><category term="Mule" /><category term="OP_ACCEPT" /><category term="fail-over" /><category term="Enterprise Service Bus" /><category term="authentication" /><category term="ohloh" /><category term="XML" /><category term="Guides" /><category term="hiring" /><category term="tricked" /><category term="resume" /><category term="editor" /><category term="RESTful" /><category term="RESTeasy" /><category term="activemq" /><category term="integration" /><category term="load balancing" /><category term="JMX" /><category term="unit testing" /><category term="marketing" /><category term="JBossESB" /><category term="soapui" /><category term="Load Test" /><category term="quality" /><category term="Talend ESB" /><category term="HEAD" /><category term="version control" /><category term="suspend" /><category term="GET" /><category term="jms" /><category term="studio" /><category term="TCPDump" /><category term="Installation" /><category term="attachments" /><category term="Trading" /><category term="Rod Johnson" /><category term="xa" /><category term="zero copy" /><category term="nio" /><category term="Mule ESB" /><category term="free and open source esb" /><category term="jdbc" /><category term="client" /><category term="asynchronous" /><category term="digest" /><category term="connection" /><category term="File poll" /><category term="ESB" /><category term="ServiceMix" /><category term="ultraesb" /><category term="Deployment" /><category term="OpenESB" /><category term="Mock" /><category term="benchmark" /><category term="tomcat" /><category term="F5" /><category term="Security" /><category term="Oracle" /><category term="adroitlogic" /><category term="IDE" /><category term="HTTP put" /><category term="WSO2" /><category term="redelivery" /><category term="2012" /><category term="SaaS" /><category term="amazon" /><category term="jesta digital" /><category term="bait" /><category term="code" /><category term="JSON" /><category term="mod_jk" /><category term="file" /><category term="Petals" /><category term="iRules" /><category term="comments" /><category term="under load" /><category term="code review" /><category term="Mock Services" /><category term="xacml" /><category term="coverage" /><category term="transaction" /><category term="OSGi" /><category term="basic" /><category term="soap" /><category term="REST" /><category term="HL7" /><category term="PUT" /><category term="WSO2 ESB" /><category term="Security Gateway" /><category term="reset" /><category term="streaming" /><category term="migration" /><category term="RST" /><category term="ERP" /><category term="handling load" /><category term="API" /><category term="WebSphere" /><category term="Performance Testing" /><category term="ruwan" /><category term="EDI" /><category term="tcp" /><category term="clone" /><category term="light weight" /><category term="jobs" /><category term="imap" /><category term="administration" /><category term="DELETE" /><category term="message selector" /><category term="Hessian" /><category term="aggregation" /><category term="JSON ESB" /><category term="data services" /><category term="caching" /><category term="810" /><category term="Monitoring" /><category term="RAM disk" /><category term="gmail" /><category term="management" /><category term="Petals ESB" /><title>Enterprise Service Bus (ESB) Magic</title><subtitle type="html">Magic with the UltraESB!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://esbmagic.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/esbmagic" /><feedburner:info uri="esbmagic" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;A0cGQXo6fSp7ImA9WhBSFko.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-7179178271439348064</id><published>2013-02-23T10:52:00.000-08:00</published><updated>2013-02-23T20:10:20.415-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-23T20:10:20.415-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="talent" /><title>What drives talent out?</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
A few days back I saw the famous presentation from &lt;a href="http://www.slideshare.net/reed2001/culture-1798664" target="_blank"&gt;Netflix&lt;/a&gt; about its culture, and three interesting slides from it was about what drives talent out of a company. &lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img border="0" height="236" src="https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn1/13155_10151268909268837_1376810304_n.jpg" width="320" /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/382268_10151268910098837_1999280393_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/382268_10151268910098837_1999280393_n.jpg" width="320" /&gt;&lt;/a&gt;&lt;a href="https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash3/529165_10151268912488837_1744718328_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash3/529165_10151268912488837_1744718328_n.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Today I came across a poster created by &lt;a data-hovercard="/ajax/hovercard/page.php?id=159649794155306" href="https://www.facebook.com/hichchi.koluwa" id="js_11"&gt;හිච්චි කොලුවා&lt;/a&gt; which shows another aspect from a more Sri Lankan point of view, and it says its the 'තිත්ත ඇත්ත' .. interesting points to think about!&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash3/c0.0.600.286.83274021352/p843x403/602084_334640059989611_522221394_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash3/602084_334640059989611_522221394_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash3/602084_334640059989611_522221394_n.jpg" width="274" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
PS: If you aim the moon, believe that you WILL get there. If a planes' limit is the clouds.. get onto a rocket.. do not deviate from achieving your goal!&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/XGerz3hGKgc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/7179178271439348064/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=7179178271439348064" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/7179178271439348064?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/7179178271439348064?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/XGerz3hGKgc/what-drives-talent-out.html" title="What drives talent out?" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2013/02/what-drives-talent-out.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4DR3Y5eSp7ImA9WhNREUU.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-7145207266395754244</id><published>2012-11-05T23:46:00.001-08:00</published><updated>2012-11-05T23:46:16.821-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-05T23:46:16.821-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RST" /><category scheme="http://www.blogger.com/atom/ns#" term="connection refused" /><category scheme="http://www.blogger.com/atom/ns#" term="OP_ACCEPT" /><category scheme="http://www.blogger.com/atom/ns#" term="handling load" /><category scheme="http://www.blogger.com/atom/ns#" term="accept" /><category scheme="http://www.blogger.com/atom/ns#" term="tomcat" /><category scheme="http://www.blogger.com/atom/ns#" term="nio" /><title>How to stop biting, when you cant chew more..</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
This is a follow up to my earlier post '&lt;a href="http://esbmagic.blogspot.com/2012/10/does-tomcat-bite-more-than-it-can-chew.html" target="_blank"&gt;Does Tomcat bite more than it can chew?&lt;/a&gt;' and illustrates a pure Java program that utilizes Java NIO to stop accepting new messages when one is not able to handle the load, without any dependence on the TCP backlog etc.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;
Program Implementation&lt;/h3&gt;
We open a selector, and invoke the startListening() method, that opens a ServerSocketChannel and then binds it to port 8280. The channel is configured as non-blocking, and finally we register our interest in &lt;a href="http://docs.oracle.com/javase/6/docs/api/java/nio/channels/SelectionKey.html#OP_ACCEPT" target="_blank"&gt;OP_ACCEPT&lt;/a&gt; to handle incoming connections.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void startListening() throws IOException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server = ServerSocketChannel.open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.socket().bind(new InetSocketAddress(8280), 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.configureBlocking(false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.register(selector, SelectionKey.OP_ACCEPT);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("\nI am ready to listen for new messages now..");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If you telnet to the port via a command line after the server starts up, you would see a message "Hi there! type a word". The server accepts the incoming connection as a non-blocking connection, and registers OP_READ to read the content typed in.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-C9a1_wKQHtE/UJi83EtBuDI/AAAAAAAAAOE/RYW7S7J_wTc/s1600/asankha@asankha-dm4:+~_001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="121" src="http://1.bp.blogspot.com/-C9a1_wKQHtE/UJi83EtBuDI/AAAAAAAAAOE/RYW7S7J_wTc/s200/asankha@asankha-dm4:+~_001.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
To illustrate how the server can prevent another client from connecting to it while it serves the currently connected client, it prints "I accepted this one.. but not any more now" on its console, cancels the SelectionKey and closes the channel.&lt;br /&gt;
&lt;br /&gt;
A new telnet session will see the "Connection refused" error as expected.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Wv5Oyxw_vz8/UJi9bK02CvI/AAAAAAAAAOM/k3W5yXKA1Io/s1600/asankha@asankha-dm4:+~_002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://2.bp.blogspot.com/-Wv5Oyxw_vz8/UJi9bK02CvI/AAAAAAAAAOM/k3W5yXKA1Io/s200/asankha@asankha-dm4:+~_002.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Next, I would type a small word into the first telnet session, and the server would print it in its console, and close the connection.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-7cU2JMToSEM/UJi9uxSatII/AAAAAAAAAOU/3Bt0e2LTDSA/s1600/asankha@asankha-dm4:+~_003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://4.bp.blogspot.com/-7cU2JMToSEM/UJi9uxSatII/AAAAAAAAAOU/3Bt0e2LTDSA/s200/asankha@asankha-dm4:+~_003.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
At the same time, it prints the message "I am ready to listen for new messages now.." on its console, and invokes the above startListening() method again - making it ready to listen and accept a new client.&lt;br /&gt;
&lt;br /&gt;
We re-try the connection from the same command prompt that received the 'Connection refused' earlier, and as expected are greeted with the welcome message again.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-pEq82nTBdNI/UJi-U4gssrI/AAAAAAAAAOc/HhXWxipKVCQ/s1600/asankha@asankha-dm4:+~_004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://1.bp.blogspot.com/-pEq82nTBdNI/UJi-U4gssrI/AAAAAAAAAOc/HhXWxipKVCQ/s200/asankha@asankha-dm4:+~_004.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3 style="text-align: left;"&gt;
What did we learn?&lt;/h3&gt;
A low level NIO server can stop accepting new connections, if it can determine that its not able to serve new clients. Once it stops accepting connections this way, any client connection attempt will see a 'Connection Refused' error. This may not be the case if our server was implemented differently (See my last article and its example and how Tomcat behaves under load).&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;
Complete source code&lt;/h3&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;import java.io.IOException;&lt;br /&gt;import java.net.InetSocketAddress;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.channels.SelectionKey;&lt;br /&gt;import java.nio.channels.Selector;&lt;br /&gt;import java.nio.channels.ServerSocketChannel;&lt;br /&gt;import java.nio.channels.SocketChannel;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;&lt;br /&gt;public class TestAccept2 {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private ServerSocketChannel server = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private Selector selector = null;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String[] args) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new TestAccept2().run();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void run() throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selector = Selector.open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; startListening();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (true) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selector.select();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Iterator&lt;selectionkey&gt; i = selector.selectedKeys().iterator(); i.hasNext(); ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectionKey key = i.next();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i.remove();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (key.isAcceptable()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SocketChannel client = server.accept();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.configureBlocking(false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.socket().setTcpNoDelay(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; client.register(selector, SelectionKey.OP_READ);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("I accepted this one.. but not any more now");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key.cancel();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key.channel().close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sayHello(client);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (key.isReadable()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; readDataFromSocket(key);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void startListening() throws IOException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server = ServerSocketChannel.open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.socket().bind(new InetSocketAddress(8280), 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.configureBlocking(false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; server.register(selector, SelectionKey.OP_ACCEPT);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("\nI am ready to listen for new messages now..");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void sayHello(SocketChannel channel) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; channel.write(ByteBuffer.wrap("Hi there! type a word\r\n".getBytes()));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void readDataFromSocket(SelectionKey key) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SocketChannel socketChannel = (SocketChannel) key.channel();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByteBuffer buffer = ByteBuffer.allocate(32);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (socketChannel.read(buffer) &amp;gt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer.flip();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] bytearr = new byte[buffer.remaining()];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer.get(bytearr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.print(new String(bytearr));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; socketChannel.close();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; startListening();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;/selectionkey&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/E51fUJYwgqU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/7145207266395754244/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=7145207266395754244" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/7145207266395754244?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/7145207266395754244?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/E51fUJYwgqU/how-to-stop-biting-when-you-cant-chew.html" title="How to stop biting, when you cant chew more.." /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-C9a1_wKQHtE/UJi83EtBuDI/AAAAAAAAAOE/RYW7S7J_wTc/s72-c/asankha@asankha-dm4:+~_001.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/11/how-to-stop-biting-when-you-cant-chew.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AGSHo7eip7ImA9WhNSF0k.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-5771748124852381225</id><published>2012-10-31T21:55:00.002-07:00</published><updated>2012-10-31T21:55:29.402-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-31T21:55:29.402-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RST" /><category scheme="http://www.blogger.com/atom/ns#" term="tcp" /><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="under load" /><category scheme="http://www.blogger.com/atom/ns#" term="HTTP" /><category scheme="http://www.blogger.com/atom/ns#" term="reset" /><category scheme="http://www.blogger.com/atom/ns#" term="connection" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="tomcat" /><category scheme="http://www.blogger.com/atom/ns#" term="nio" /><title>Does Tomcat bite more than it can chew?</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
This is an interesting blog post for me, since its about the root cause for an issue we saw with Tomcat back in &lt;a href="http://markmail.org/message/v7cpj6oqumtn5gtp" target="_blank"&gt;May 2011&lt;/a&gt;, which remained unresolved. Under high concurrency and load, Tomcat would reset (i.e. TCP level RST) client connections, without refusing to accept them - as one would expect. I posted this again to the Tomcat user list a &lt;a href="http://markmail.org/message/wajap37zjnakzmc2" target="_blank"&gt;few days back&lt;/a&gt;, but then wanted to find out the root cause for myself, since it would surely come up again in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;
Background&lt;/h3&gt;
This issue initially became evident when we ran high concurrency load tests at a customer location in Europe, where the customer had back-end services deployed on multiple Tomcat instances, and wanted to use the UltraESB for routing messages with load balancing and fail-over. For the &lt;a href="http://www.esbperformance.org/" target="_blank"&gt;ESB Performance Benchmark&lt;/a&gt;, we had been using an EchoService written over the Apache HttpComponents/Core NIO library that scaled extremely well and behaved well at the TCP level, even under load. However, at the client site, they wanted the test run against real services deployed on Tomcat - to analyse a more realistic scenario. We used a Java based clone of ApacheBench called the 'Java Bench' which is also a part of the Apache HttpComponents project, to generate load. The client would go up-to concurrency levels of 2560, pushing as many messages as possible through the ESB, to back end services deployed over Tomcat.&lt;br /&gt;
&lt;br /&gt;
Under high load, the ESB would start to see errors while talking to Tomcat, and the cause would be IO errors such as "Connection reset by peer". Now the problem to the ESB is that it had already started to send out an HTTP request / payload over an accepted TCP connection, and thus it does not know if it can fail-over safely by default to another node, since the backend service might have&amp;nbsp; performed some processing over the request it may have already received. Of-course, the ESB could be configured to retry on such errors as well, but our default behaviour was to fail-over only on the safer connection refused or connect timeout errors (i.e. a connection could not be established within the allocated time) - which ensures correct operation, even for non-idempotent services.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;
Recent Observations&lt;/h3&gt;
We recently experienced the same issue with Tomcat when a customer wanted to perform a load test scenario where a back-end service would block for 1-5 seconds randomly, to simulate realistic behaviour. Here, again we saw that Tomcat was resetting accepted TCP connections, and we were able to capture this with Wireshark as follows, using JavaBench directly against a Tomcat based &lt;a href="https://bitbucket.org/adroitlogic/esbperformance/src/3648d6bc41a00a40865297b4ec1be2424f8d8efd/echo/src/main/java/samples/services/http/EchoService.java?at=default" target="_blank"&gt;servlet&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-yzOC7fzpY0U/UJD288DLrBI/AAAAAAAAAM0/7zOYqaeEMLk/s1600/wireshark-capture-tomcat-tcp-reset.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="337" src="http://4.bp.blogspot.com/-yzOC7fzpY0U/UJD288DLrBI/AAAAAAAAAM0/7zOYqaeEMLk/s640/wireshark-capture-tomcat-tcp-reset.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As can be seen in the trace, the client initiated a TCP connection with the source port 9386, and Tomcat running on port 9000 accepted the connection - note “1”. The client kept sending packets of a 100K request, and Tomcat kept acknowledging them. The last such case is annotated with note “2”. Note that the request payload was not complete at this time from the client – note “3”. Suddenly, Tomcat resets the connection – note “4”&lt;br /&gt;
&lt;/div&gt;
&lt;h3 style="text-align: left;"&gt;
Understanding the root cause&lt;/h3&gt;
After failing to locate any code in the Tomcat source code that resets established connections, I wanted to simulate the behaviour with a very simple Java program. Luckily the problem was easy to reproduce with a simple program as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;import java.net.ServerSocket;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;&lt;br /&gt;public class TestAccept1 {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void main(String[] args) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ServerSocket serverSocket = new ServerSocket(8280, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Socket socket = serverSocket.accept();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.sleep(3000000); // do nothing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
We just open a server socket on port 8280, with a backlog of 0 and start listening for connections. Since the backlog is 0, one could assume that only one client connection would be allowed - BUT, I could open more than that via telnet as follows, and even send some data afterwards by typing it in and pressing the enter key.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;telnet localhost 8280&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;hello world&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A netstat command now confirms that more than one connection is opene:&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;netstat -na | grep 8280 &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tcp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 127.0.0.1:34629&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 127.0.0.1:8280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ESTABLISHED&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tcp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 127.0.0.1:34630&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 127.0.0.1:8280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ESTABLISHED&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tcp6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 :::8280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :::*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LISTEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tcp6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 127.0.0.1:8280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 127.0.0.1:34630&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ESTABLISHED&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;tcp6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 127.0.0.1:8280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 127.0.0.1:34629&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ESTABLISHED&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
However, the Java program has only accepted ONE socket, although at the OS level, two would appear. It seems like the OS also allows more than two connections to be opened, even when the backlog is specified as 0. On Ubuntu 12.04 x64, the netstat command would not show me the actual listen queue length - but I believe it was not 0. However, before and after this test, I did not see a difference in the reported statistics for "listen queue" overflow, which I could see with the "netstat -sp tcp | fgrep listen" command&lt;br /&gt;
&lt;br /&gt;
Next I used the JavaBench from the &lt;a href="http://docs.adroitlogic.org/display/esb/SOA+Toolbox" target="_blank"&gt;SOA ToolBox&lt;/a&gt; and issued a small payload at concurrency 1024, with a single iteration against the same port 8280&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-jOclALX0PvM/UJETk_pks7I/AAAAAAAAANE/kOJbwrU7U_Y/s1600/AdroitLogic+ToolBox+for+UltraESB_001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="169" src="http://3.bp.blogspot.com/-jOclALX0PvM/UJETk_pks7I/AAAAAAAAANE/kOJbwrU7U_Y/s320/AdroitLogic+ToolBox+for+UltraESB_001.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As expected, all requests failed, but my Wireshark trace on port 8280 did not detect any connection resets. Pushing the concurrency to 2560 and the iterations to 10 started to show tcp level RSTs - which were similar to those seen on Tomcat, though not exactly the same.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/--P0tz4fNMKg/UJEc3teJJFI/AAAAAAAAANU/46n1LHuNEXc/s1600/AdroitLogic+ToolBox+for+UltraESB_002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="169" src="http://4.bp.blogspot.com/--P0tz4fNMKg/UJEc3teJJFI/AAAAAAAAANU/46n1LHuNEXc/s320/AdroitLogic+ToolBox+for+UltraESB_002.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;
&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;
Can Tomcat do better?&lt;/h3&gt;
Yes, Possibly .. What an end user would expect from Tomcat is that it refuses to accept new connections when under load, and not to accept connections and then reset them halfway through. But one would ask if that is achievable? Especially considering the behaviour seen with the simple Java example we discussed.&lt;br /&gt;
&lt;br /&gt;
Well, the solution could be to perform better handling of the low level HTTP connections and the sockets, and this is already done by the free and open source high performance Enterprise Service Bus &lt;a href="http://www.adroitlogic.org/" target="_blank"&gt;UltraESB&lt;/a&gt;, which utilizes the excellent &lt;a href="http://hc.apache.org/" target="_blank"&gt;Apache HttpComponents&lt;/a&gt; project underneath.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;
How does the UltraESB behave&lt;/h3&gt;
One could easily test this by using the 'stopNewConnectionsAt' property of our NIO listener. If you set it to 2, you wont be able to even open a Telnet session to the socket beyond 2.&lt;br /&gt;
&lt;bean class="org.adroitlogic.ultraesb.transport.http.HttpNIOListener" id="http-8280"&gt;&lt;constructor-arg ref="fileCache"&gt; &lt;/constructor-arg&gt;&lt;/bean&gt;&lt;/div&gt;
&lt;br /&gt;
The first would work, the second too&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-dkE4y797JbI/UJEejFBDXLI/AAAAAAAAANc/MzqnfoxMJs0/s1600/asankha@asankha-dm4:+~_003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://4.bp.blogspot.com/-dkE4y797JbI/UJEejFBDXLI/AAAAAAAAANc/MzqnfoxMJs0/s320/asankha@asankha-dm4:+~_003.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
But the third would see a "Connection refused"&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/--NcWSX44kW0/UJEeuNFOabI/AAAAAAAAANk/R5cZAYj16ZE/s1600/asankha@asankha-dm4:+~_004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://1.bp.blogspot.com/--NcWSX44kW0/UJEeuNFOabI/AAAAAAAAANk/R5cZAYj16ZE/s320/asankha@asankha-dm4:+~_004.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
And the UltraESB would report the following on its logs:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; INFO HttpNIOListener HTTP Listener http-8280 paused&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; WARN HttpNIOListener$EventLogger Enter maintenance mode as open connections reached : 2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Although it refuses to accept new connections, already accepted connections executes without any hindrance to completion. Thus a hardware level load balancer in front of an UltraESB cluster can safely load balance if an UltraESB node is loaded beyond its configured limits, without having to deal with any connection resets. Once a connection slot becomes free, the UltraESB will start accepting new connections as applicable.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;
Analysing a corresponding TCP dump&lt;/h3&gt;
To analyse the corresponding behaviour, we wrote a simple Echo proxy service on the UltraESB, that also slept for 1 to 5 seconds before it replied, and tested this with the same JavaBench under 2560 concurrent users, each trying to push 10 messages in iteration.&lt;br /&gt;
&lt;br /&gt;
Out of the 25600 requests, 7 completed successfully, while 25593 failed, as expected. We also saw many tcp level RSTs on the Wireshark dump - which must have been issued by the underlying operating system.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-t3WDF4Kfqyg/UJH8HajlkOI/AAAAAAAAAN0/xJK490dRJF8/s1600/Capturing+from+lo+(port+8280)+_003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="408" src="http://3.bp.blogspot.com/-t3WDF4Kfqyg/UJH8HajlkOI/AAAAAAAAAN0/xJK490dRJF8/s640/Capturing+from+lo+(port+8280)+_003.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
However, what's interesting to note is the difference - the RSTs occur immediately on receiving the SYN packet from the client - and are not established HTTP or TCP connections, but elegant "Connection Refused" errors - which would be what the client can expect. Thus the client can safely fail-over to another node without any doubt, overhead or delay.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;
Appendix : Supporting high concurrency in general&lt;/h3&gt;
During testing we also saw that the Linux OS could detect the opening of many concurrent connections at the same time as a &lt;a href="http://en.wikipedia.org/wiki/SYN_flood" target="_blank"&gt;SYN flood&lt;/a&gt; attack, and then start using SYN cookies. You would see messages such as&amp;nbsp;


 
 
 
 
 &lt;br /&gt;
--&amp;gt;


&lt;br /&gt;
&lt;div align="JUSTIFY" class="western" style="margin-bottom: 0in; margin-left: 0.49in;"&gt;
Possible SYN flooding on port 9000. Sending cookies&lt;/div&gt;
&lt;br /&gt;
displayed
 on the output of a "sudo dmesg", if this happens. Hence, for a real 
load, it would be better to disable SYN cookies by turning it off as 
follows as the root user&lt;br /&gt;
--&amp;gt;


&lt;br /&gt;
&lt;div align="JUSTIFY" class="western" style="margin-bottom: 0in; margin-left: 0.49in;"&gt;
# echo 0 &amp;gt; /proc/sys/net/ipv4/tcp_syncookies&lt;/div&gt;
&lt;br /&gt;
To make the change persist over reboots, add the following line to your /etc/sysctl.conf&lt;br /&gt;
--&amp;gt;


&lt;br /&gt;
&lt;div align="JUSTIFY" class="western" style="margin-bottom: 0in; margin-left: 0.49in;"&gt;
net.ipv4.tcp_syncookies = 0&lt;/div&gt;
&lt;br /&gt;
To
 allow the Linux OS to accept more connections, its also recommended 
that the 'net.core.somaxconn' be increased - as it usually defaults to 
128 or so. This could be performed by the root user as follows,&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;div align="JUSTIFY" class="western" style="margin-bottom: 0in; margin-left: 0.49in;"&gt;
# echo 1024 &amp;gt; /proc/sys/net/core/somaxconn&lt;/div&gt;
&lt;br /&gt;
To persist the change, append the following to the /etc/sysctl.conf&lt;br /&gt;
--&amp;gt;


&lt;br /&gt;
&lt;div align="JUSTIFY" class="western" style="margin-bottom: 0in; margin-left: 0.49in;"&gt;
net.core.somaxconn = 1024&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="text-align: left;"&gt;
Kudos!&lt;/h3&gt;
The UltraESB could not have behaved gracefully without the support of the underlying &lt;a href="http://hc.apache.org/" target="_blank"&gt;Apache HttpComponents&lt;/a&gt; library, and the help and support received from that project community, especially by &lt;a href="http://www.linkedin.com/pub/oleg-kalnichevski/0/66a/b92" target="_blank"&gt;Oleg Kalnichevski&lt;/a&gt; - whose code and help has always fascinated me!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/gg1SjsFwo5c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/5771748124852381225/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=5771748124852381225" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/5771748124852381225?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/5771748124852381225?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/gg1SjsFwo5c/does-tomcat-bite-more-than-it-can-chew.html" title="Does Tomcat bite more than it can chew?" /><author><name>Asankha Perera</name><uri>http://www.blogger.com/profile/17313699161300739449</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://4.bp.blogspot.com/-yzOC7fzpY0U/UJD288DLrBI/AAAAAAAAAM0/7zOYqaeEMLk/s72-c/wireshark-capture-tomcat-tcp-reset.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/10/does-tomcat-bite-more-than-it-can-chew.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYAR3w9fCp7ImA9WhJUEEk.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-5946102636021195645</id><published>2012-09-07T11:55:00.000-07:00</published><updated>2012-09-07T11:55:46.264-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-07T11:55:46.264-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hiring" /><category scheme="http://www.blogger.com/atom/ns#" term="adroitlogic" /><category scheme="http://www.blogger.com/atom/ns#" term="jobs" /><title /><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-4snJiNfRYxI/UEpC6sVKIGI/AAAAAAAAAMc/pWMmI7ijmpE/s1600/adroitlogic-is-hiring.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/-4snJiNfRYxI/UEpC6sVKIGI/AAAAAAAAAMc/pWMmI7ijmpE/s640/adroitlogic-is-hiring.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/m3obGVcGxyw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/5946102636021195645/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=5946102636021195645" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/5946102636021195645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/5946102636021195645?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/m3obGVcGxyw/blog-post.html" title="" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-4snJiNfRYxI/UEpC6sVKIGI/AAAAAAAAAMc/pWMmI7ijmpE/s72-c/adroitlogic-is-hiring.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/09/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEGRX44fSp7ImA9WhJWF0Q.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-3732127694392987687</id><published>2012-08-23T23:32:00.002-07:00</published><updated>2012-08-24T01:40:24.035-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-24T01:40:24.035-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="esb performance" /><title>First they ignore you, then they try to ridicule you, then they fight you, then you win</title><content type="html">"First they ignore you, then they try to ridicule you, then they fight you, then you win" - is thought to have been said by Gandhi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/epdjieGJ8Ms" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/3732127694392987687/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=3732127694392987687" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/3732127694392987687?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/3732127694392987687?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/epdjieGJ8Ms/first-they-ignore-you-then-they-laugh.html" title="First they ignore you, then they try to ridicule you, then they fight you, then you win" /><author><name>Asankha Perera</name><uri>http://www.blogger.com/profile/17313699161300739449</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><feedburner:origLink>http://esbmagic.blogspot.com/2012/08/first-they-ignore-you-then-they-laugh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYGR3Y9cSp7ImA9WhJWFUk.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-8264349478731343087</id><published>2012-08-21T04:05:00.002-07:00</published><updated>2012-08-21T04:05:26.869-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-21T04:05:26.869-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Stability" /><category scheme="http://www.blogger.com/atom/ns#" term="API management" /><category scheme="http://www.blogger.com/atom/ns#" term="Security" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="AS2" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>AdroitLogic Announces API Management Solution Based On Its High Performance ESB</title><content type="html">We've just &lt;a href="http://www.prweb.com/releases/prweb9820781.htm" target="_blank"&gt;announced&lt;/a&gt; the APIDirector! an API and Services management solution based on our high performance Enterprise Service Bus UltraESB.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Yiy7CPF-_Jc/UDNnePb894I/AAAAAAAAAMI/Fkz2HShTOcU/s1600/api-director.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Yiy7CPF-_Jc/UDNnePb894I/AAAAAAAAAMI/Fkz2HShTOcU/s1600/api-director.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
One of the key differences of the APIDirector is that it will offer both API and Services management features for enterprises, including support for AS2 and other legacy/traditional B2B and service protocols.&lt;br /&gt;
&lt;br /&gt;
We've announced &lt;a href="http://www.prweb.com/releases/esbperformance/round-6/prweb9778514.htm" target="_blank"&gt;results of the 6th Round of ESB Performance Benchmarking&lt;/a&gt; earlier in August, although I've missed blogging about it previously, as my father was ill during those few days. The benchmark results showed the extreme performance as well as the stability of the UltraESB, which are both key elements of any API management solution.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-ODYFR7SZku4/UDNnWdg3ZtI/AAAAAAAAAMA/wD88N1P9ixE/s1600/ESB+Performance+Testing+-+Final.png.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="417" src="http://4.bp.blogspot.com/-ODYFR7SZku4/UDNnWdg3ZtI/AAAAAAAAAMA/wD88N1P9ixE/s640/ESB+Performance+Testing+-+Final.png.jpeg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
Since an API management solution will be the entry point for your trading partners, customers and users accessing your exposed APIs - it MUST be capable of withstanding extreme load, as well as deliberate security attacks, without crashing by itself. The Round 6 results and the related information shows how some of the ESBs fail to withstand even legitimate and relatively small amounts of loads, when compared to an external attack.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
The APIDirector performs functions such as  credential management, service logging, auditing and performance 
management support, with an easy to use graphical administration interface that also provides analytical features. We also ship the AS2Gateway as an optional module of the APIDirector, and this allows users to deploy a custom AS2 trading gateway - similar to the &lt;a href="http://as2gateway.org/" target="_blank"&gt;AS2Gateway&lt;/a&gt; we have hosted publicly. &lt;br /&gt;
&lt;br /&gt;
Next week we will be deploying the AS2Director at one of our beta customer sites in the US, and it will initially deal with defining S/FTP file exchanges and SOAP based services, as well as AS2 based B2B exchanges. The APIDirector will be generally available to the public during the first quarter of 2013, although we will be happy to work with customers with beta releases prior to the general availability. Please &lt;a href="http://www.adroitlogic.org/contact.html" target="_blank"&gt;contact us&lt;/a&gt; to learn more about the APIDirector, and how you could participate in the beta!&lt;br /&gt;
&lt;br /&gt;
Original News Release: &lt;a href="http://www.prweb.com/releases/prweb9820781.htm"&gt;http://www.prweb.com/releases/prweb9820781.htm&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/LaY6Smi9uUQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/8264349478731343087/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=8264349478731343087" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/8264349478731343087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/8264349478731343087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/LaY6Smi9uUQ/adroitlogic-announces-api-management.html" title="AdroitLogic Announces API Management Solution Based On Its High Performance ESB" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Yiy7CPF-_Jc/UDNnePb894I/AAAAAAAAAMI/Fkz2HShTOcU/s72-c/api-director.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/08/adroitlogic-announces-api-management.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYAQ3c4fSp7ImA9WhJQF04.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-3883229191618525232</id><published>2012-07-31T04:29:00.000-07:00</published><updated>2012-07-31T04:29:02.935-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-31T04:29:02.935-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="adroitlogic" /><category scheme="http://www.blogger.com/atom/ns#" term="810" /><category scheme="http://www.blogger.com/atom/ns#" term="Electronic Invoicing" /><category scheme="http://www.blogger.com/atom/ns#" term="X12" /><category scheme="http://www.blogger.com/atom/ns#" term="EDI" /><category scheme="http://www.blogger.com/atom/ns#" term="AS2" /><category scheme="http://www.blogger.com/atom/ns#" term="INVOIC" /><category scheme="http://www.blogger.com/atom/ns#" term="EDIFACT" /><title>Electronic Invoicing Announced on the AS2Gateway</title><content type="html">&lt;div style="text-align: justify;"&gt;
We've just announced support for electronic invoicing on the cloud based Free B2B Trading Gateway &lt;a href="http://as2gateway.org/" target="_blank"&gt;AS2Gateway&lt;/a&gt;! This allows users to invoice trading partners via EDIFACT INVOIC messages over AS2, using a simple and intuitive web interface&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;a href="http://4.bp.blogspot.com/-4_Txa8GBac4/UBfAAmEM0BI/AAAAAAAAALs/b-aEBE4ddQE/s1600/AS2Gateway-Invoice-EDI-AS2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/-4_Txa8GBac4/UBfAAmEM0BI/AAAAAAAAALs/b-aEBE4ddQE/s640/AS2Gateway-Invoice-EDI-AS2.png" width="563" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Recurrent invoicing is simplified as any invoice can be saved as a template and re-used multiple times. The AS2Gateway converts all the invoice details into an EDIFACT D93A INVOIC message right now, and soon will support the other versions, as well as X12 based messages such as the 810.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
In the near future, the platform will add support for parsing and generation of more message types, which will allow users to easily generate an invoice based on a purchase order received; or an advanced shipping notification (ASN) etc.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
The AS2Gateway offers a free tier to support most SMEs that are required to electronically invoice trading partners for payment. For larger users, a premium tier is available with advanced options (to be announced shortly!), and for retailers or large&amp;nbsp;corporations, the AS2Gateway is available for on-premise private deployment.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/w1wOMTL6dYM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/3883229191618525232/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=3883229191618525232" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/3883229191618525232?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/3883229191618525232?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/w1wOMTL6dYM/electronic-invoicing-announced-on.html" title="Electronic Invoicing Announced on the AS2Gateway" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-4_Txa8GBac4/UBfAAmEM0BI/AAAAAAAAALs/b-aEBE4ddQE/s72-c/AS2Gateway-Invoice-EDI-AS2.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/07/electronic-invoicing-announced-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cASHo5fyp7ImA9WhJRFU8.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-6886954987419032927</id><published>2012-07-17T03:30:00.002-07:00</published><updated>2012-07-17T03:30:49.427-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-17T03:30:49.427-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="B2B" /><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="ERP" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="EDI" /><category scheme="http://www.blogger.com/atom/ns#" term="AS2" /><category scheme="http://www.blogger.com/atom/ns#" term="EDIFACT" /><title>UltraESB Automates AS2/EDI Based B2B Trading for SKB Europe</title><content type="html">We've just published a new case study on how SKB Europe, a leader in high-quality 
aluminium and plastic cases and boxes, has deployed the UltraESB as an 
AS2/EDI integration platform for Business-to-Business (B2B) integration.&lt;br /&gt;
&lt;br /&gt;
The system initially integrates the ERP system of SKB Europe with one 
of its key trading partners Amazon, via EDIFACT based EDI documents 
exchanged over the AS2 protocol.&lt;br /&gt;
&lt;br /&gt;
Read the news release and Case study from here&lt;br /&gt;
&lt;a href="http://www.prweb.com/releases/2012/7/prweb9706746.htm"&gt;http://www.prweb.com/releases/2012/7/prweb9706746.htm&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/6TmR0wKYEIs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/6886954987419032927/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=6886954987419032927" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6886954987419032927?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6886954987419032927?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/6TmR0wKYEIs/ultraesb-automates-as2edi-based-b2b.html" title="UltraESB Automates AS2/EDI Based B2B Trading for SKB Europe" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/07/ultraesb-automates-as2edi-based-b2b.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QERHY7cSp7ImA9WhJTGU0.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-6486437958535148546</id><published>2012-06-28T09:35:00.000-07:00</published><updated>2012-06-28T09:35:05.809-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-28T09:35:05.809-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="adroitlogic" /><category scheme="http://www.blogger.com/atom/ns#" term="2012" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><category scheme="http://www.blogger.com/atom/ns#" term="benchmark" /><title>ESB Performance Benchmarking Round 6 is coming..</title><content type="html">AdroitLogic has &lt;a href="http://www.prweb.com/releases/2012/6/prweb9651239.htm"&gt;just announced&lt;/a&gt; the Sixth round of ESB Performance Benchmarking today!&lt;br /&gt;
&lt;br /&gt;
Round
 5 introduced a public Amazon EC2 AMI image of all the ESB's that were 
included into the benchmark, and the next round has moved further by 
requesting vendors and/or contributors for submission of better 
optimized configurations for the different ESBs to be tested.&lt;br /&gt;
&lt;br /&gt;
Stability
 and Performance are both important to any ESB, and the last round saw 
half of the selected ESBs not being able to complete the benchmark 
successfully. Each ESB has since releases new versions, and we look 
forward to testing each one successfully!&lt;br /&gt;
&lt;br /&gt;
For more information, visit &lt;a href="http://esbperformance.org/"&gt;http://esbperformance.org&lt;/a&gt; and email info@adroitlogic.com if you are interested to participate closely with us during this round!&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/ALrbRLWjpYU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/6486437958535148546/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=6486437958535148546" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6486437958535148546?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6486437958535148546?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/ALrbRLWjpYU/esb-performance-benchmarking-round-6-is.html" title="ESB Performance Benchmarking Round 6 is coming.." /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/06/esb-performance-benchmarking-round-6-is.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcNRX44eSp7ImA9WhJTFk8.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-5804043236613742900</id><published>2012-06-25T05:41:00.002-07:00</published><updated>2012-06-25T05:41:34.031-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-25T05:41:34.031-07:00</app:edited><title>UltraESB Connects Coupon Publishers and Major Retailers in Europe in B2B Solution for HighCo Data Spain</title><content type="html">Today we are happy to announce that Storelabs, a European startup specialized
 in FMCG/Retail marketing and operations, has deployed an AS2/EDI - 
FTP/XML Gateway for HighCo Data Spain. The Cloud hosted gateway 
'PromoHub' initially integrates the retailer Carrefour Spain, with 
multiple coupon publishers utilizing the HighCo Data coupon clearing 
services.&lt;br /&gt;
&lt;br /&gt;
Read the full &lt;a href="http://www.prweb.com/releases/ultraesb-highco/b2b-as2-edi-gateway/prweb9636497.htm"&gt;Press Release&lt;/a&gt; and the &lt;a href="http://downloads.adroitlogic.com/casestudies/UltraESB-StoreLabs-CaseStudy.pdf"&gt;Case Study &lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/V8oOuEwoAYU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/5804043236613742900/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=5804043236613742900" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/5804043236613742900?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/5804043236613742900?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/V8oOuEwoAYU/ultraesb-connects-coupon-publishers-and.html" title="UltraESB Connects Coupon Publishers and Major Retailers in Europe in B2B Solution for HighCo Data Spain" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/06/ultraesb-connects-coupon-publishers-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEAQHozfSp7ImA9WhJTEUQ.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-8578398816303277280</id><published>2012-06-20T05:50:00.000-07:00</published><updated>2012-06-20T05:50:41.485-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-20T05:50:41.485-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="B2B" /><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="adroitlogic" /><category scheme="http://www.blogger.com/atom/ns#" term="SaaS" /><category scheme="http://www.blogger.com/atom/ns#" term="Electronic Invoicing" /><category scheme="http://www.blogger.com/atom/ns#" term="X12" /><category scheme="http://www.blogger.com/atom/ns#" term="Trading" /><category scheme="http://www.blogger.com/atom/ns#" term="EDI" /><category scheme="http://www.blogger.com/atom/ns#" term="AS2" /><category scheme="http://www.blogger.com/atom/ns#" term="EDIFACT" /><title>We've just launched our Free EDI/AS2 B2B Gateway - AS2Gateway.ORG</title><content type="html">Since its launch in January 2010, the UltraESB has the only free and open source ESB that natively supported the widely used B2B trading protocol AS2 (Applicability Statement 2). AS2 is used extensively in the US, Europe and Asia for B2B integration especially in the Retail and Manufacturing industries, and the UltraESB has been used by many organizations to integrate EDI/AS2 systems with S/FTP, Web Services and XML style systems.&lt;br /&gt;
&lt;br /&gt;
The UltraESB is now used to integrate with some of the largest retailers in Europe, and the US by multiple organizations and it was natural for us to see the potential in offering a Cloud hosted EDI/AS2 solution as a Service (SaaS).&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="http://as2gateway.org/"&gt;AS2Gateway&lt;/a&gt; is powered by our flagship product UltraESB, and offers free EDI/AS2 connectivity for SME's and certainly disrupts the traditional market place in both the features offered and the cost savings. For example, the free tier allows SMEs to trade electronically with upto 5 trading partners and offers 60 messages per month.&lt;br /&gt;
&lt;br /&gt;
We've also just launched &lt;a href="http://as2integration.org/"&gt;AS2Integration.ORG&lt;/a&gt; which is a resource site on AS2/EDI integration, as well as the documentation and user guide for the use of the AS2Gateway.&lt;br /&gt;
&lt;br /&gt;
Utilizing the UltraESB underneath means that the flexibility is virtually limitless, and we will soon expand this service to include Electronic Invoicing, EDI document creation and processing as well!&lt;br /&gt;
&lt;br /&gt;
The AS2Gateway begins its 'beta' testing phase today, and you can utilize all of its features for free until we move into production in a few more months! No credit cards are necessary for sign up - so get your AS2/EDI trading account from the Free &lt;a href="http://as2gateway.org/"&gt;AS2Gateway&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
Read our &lt;a href="http://www.prweb.com/releases/adroitlogic/edi-as2-b2b-gateway/prweb9613671.htm"&gt;Press Release&lt;/a&gt; about the launch for more details!&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/nPSCqdekBQc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/8578398816303277280/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=8578398816303277280" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/8578398816303277280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/8578398816303277280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/nPSCqdekBQc/weve-just-launched-our-free-edias2-b2b.html" title="We've just launched our Free EDI/AS2 B2B Gateway - AS2Gateway.ORG" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/06/weve-just-launched-our-free-edias2-b2b.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ENQn0_fip7ImA9WhVUFUo.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-4638459674773086798</id><published>2012-05-20T22:54:00.004-07:00</published><updated>2012-05-20T22:54:53.346-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-20T22:54:53.346-07:00</app:edited><title>Webinar: UltraESB - The Future of Enterprise Integration</title><content type="html">Register for our free Webinar on using the UltraESB, on Tuesday the 29th of May 2012.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.adroitlogic.org/webinars/ultraesb-future-of-enterprise-integration-29-05-2012.html"&gt;Click Here for more details and to Register&lt;/a&gt;!&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/qcu6sFz_bIs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/4638459674773086798/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=4638459674773086798" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/4638459674773086798?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/4638459674773086798?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/qcu6sFz_bIs/webinar-ultraesb-future-of-enterprise.html" title="Webinar: UltraESB - The Future of Enterprise Integration" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/05/webinar-ultraesb-future-of-enterprise.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcBQ389fSp7ImA9WhRWFk8.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-6425290921618945017</id><published>2012-01-03T12:54:00.000-08:00</published><updated>2012-01-03T12:54:12.165-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T12:54:12.165-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Rod Johnson" /><category scheme="http://www.blogger.com/atom/ns#" term="Mule ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="OSGi" /><category scheme="http://www.blogger.com/atom/ns#" term="Spring Framework" /><category scheme="http://www.blogger.com/atom/ns#" term="QCon" /><title>OSGi - "Seduced by technology in search of a problem" :) ?</title><content type="html">I was listening to a very interesting &lt;a href="http://www.infoq.com/presentations/Things-I-Wish-I-d-Known"&gt;talk&lt;/a&gt; at QCon by Rod Johnson of SpringSource. The talk was titled "Things I Wish I'd known" and was about lessons he learned as an entrepreneur, which was very interesting!&lt;br /&gt;
&lt;br /&gt;
Around 37:00 into the talk, he had a slide "Some things we got wrong at SpringSource" and it contained bullets about the over investment in OSGi for 2 years, which I quote below:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;br /&gt;
&amp;nbsp;&lt;b&gt;- Seduced by technology in search of a problem&lt;br /&gt;&amp;nbsp;- Clever technology but didn't solve most pressing customer problems&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
"Classic example of falling in love with a technology without considering the business implications. &lt;br /&gt;&lt;br /&gt;
We significantly over invested in OSGi and our dm-server technology for a couple of years. It wasn't a bad technology. &lt;b&gt;Unfortunately, it simply solved a set of problems that a very small number of customers had., and yeah, we should have spent more time listening to the pressing problems our potential customers actually had&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
That ultimately was something that we worked around, but we spent millions of dollars that we could have spent elsewhere."&lt;/blockquote&gt;
Its interesting to note that about an year back, Ross Mason of MuleSource blogged about using OSGi in the Mule ESB in the post &lt;a href="http://blogs.mulesoft.org/osgi-no-thanks/"&gt;OSGi? No Thanks&lt;/a&gt; and said:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
OSGi is a great specification for middleware vendors, but a terrible 
specification for the end user. This is because OSGi was never build for
 application developer consumption&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/fUV044uugts" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/6425290921618945017/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=6425290921618945017" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6425290921618945017?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6425290921618945017?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/fUV044uugts/osgi-seduced-by-technology-in-search-of.html" title="OSGi - &quot;Seduced by technology in search of a problem&quot; :) ?" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2012/01/osgi-seduced-by-technology-in-search-of.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQMSXk5fSp7ImA9WhRRFUU.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-6732263257905539503</id><published>2011-11-28T00:09:00.000-08:00</published><updated>2011-11-29T08:33:08.725-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T08:33:08.725-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WSO2" /><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="migration" /><category scheme="http://www.blogger.com/atom/ns#" term="free and open source esb" /><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise Service Bus" /><category scheme="http://www.blogger.com/atom/ns#" term="jesta digital" /><title>Digital Content and Service Provider Jesta Digital Migrates to the UltraESB</title><content type="html">&lt;h2 class="subtitle" style="font-weight: normal;"&gt;


&lt;span style="font-size: large;"&gt;Zero-Copy proxying and Non-Blocking IO allows three  node cluster to process ~80 million messages a day at just 5% CPU  utilization and 300MB heap memory usage&lt;/span&gt;&lt;/h2&gt;
AdroitLogic, developer of the high performance Open Source Enterprise Service Bus (ESB) &lt;a href="http://adroitlogic.org/" title="Open Source Enterprise Service Bus (ESB)"&gt;UltraESB&lt;/a&gt;,  today announced that Jesta Digital, a leading global provider of next  generation entertainment content and services for the digital consumer,  successfully migrated their ESB clusters to the  UltraESB. Jesta Digital is behind Bitbop wireless subscription service  to deliver on-demand commercial-free television and films to personal  computers, tablets and smartphones, and home to a number of well-known  and established brands including Jamba and Jamster, which deliver  branded content, music, games and apps to millions of mobile consumers. &lt;br /&gt;
&lt;br /&gt;
"In a very demanding and rapidly changing market it is of utmost  importance to be able to quickly adjust the technical platform to  support product innovation and change. The UltraESB was able to  demonstrate to the Jesta Digital Technology team in Berlin that its  simplicity, testability, extensibility and performance is made for  a  matching foundation" said Eric Hubert, the Executive Director of  Strategy and Architecture at Jesta Digital.&lt;br /&gt;
&lt;br /&gt;
On the main ESB cluster, Jesta Digital processes around 80 million  messages a day with a peak 3,000 TPS across three nodes. The average CPU  utilization has been just 5% with the heap memory usage at 300MB with  very low GC overheads due to the efficient use of a RAM disk coupled  with Zero-Copy and Non-Blocking IO. Prior to the migration, Jesta  Digital customized the &lt;a href="http://esbperformance.org/" title="ESB Performance Benchmark"&gt;ESB Performance Benchmark (http://esbperformance.org)&lt;/a&gt;  to compare the performance of the UltraESB for both SOAP and Hessian  messages over HTTP/S for a sample scenario. Benchmark results similar to  those published recently on the ESB Performance site were independently  verified by Jesta Digital during this exercise. Furthermore the  UltraESB showed extreme stability during stress tests executed over  multiple days.&lt;br /&gt;
&lt;br /&gt;
"We have a top notch technical team at Jesta Digital in Berlin and it  was a great pleasure to work with subject-matter experts who combined  first-hand knowledge, passionate work on their product and dedication to  tackle the customer's challenges" said Eric.&lt;br /&gt;
&lt;br /&gt;
During the migration process, AdroitLogic also worked with the Jesta  Digital team to include some key features for even better enterprise  deployment support. Among these is the ability to switch a live  configuration with zero down time while messages are being processed.  Previously servers had to be gracefully shutdown for updates, resulting  in an unequal distribution of traffic across the nodes after a  configuration switch, leading to connection related issues. In addition,  AdroitLogic developed a feature to easily manage and monitor services  and endpoints via automatic registration against a Zabbix monitoring  server, using predefined or customized templates via JMX.&lt;br /&gt;
&lt;br /&gt;
The UltraESB is clustered using the Apache ZooKeeper framework, and  thus a single node, or the whole cluster can be managed from any of the  nodes via a remote web based console, command line interface or via  JMX/jconsole.&lt;br /&gt;
&lt;br /&gt;
AdroitLogic was founded in January 2010 by Asankha Perera, the former  lead contributor of the Apache Synapse ESB and the original architect  of the WSO2 ESB. In September 2011, Ruwan Linton who initially succeeded  Asankha at WSO2 as its next ESB architect, also joined AdroitLogic as  its Director of Engineering. AdroitLogic published a new round of ESB  benchmark results in October across 8 open source ESBs, which showed a  very clear lead in performance against its competitors. In addition to  performance, the UltraESB is also one of the simplest ESB's to use  effectively, with support for IDE based step-through debugging, Unit  testing and a light weight deployment with over 70 samples. AdroitLogic  is also one of the very few - if not the only - ESB vendors that  publishes code coverage statistics along with continuous builds and code  quality reports publicly.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
"&lt;i&gt;It was a great pleasure to work with subject-matter experts who combined
 first-hand knowledge, passionate work on their product and dedication 
to tackle the customer's challenges&lt;/i&gt;"&lt;/blockquote&gt;
Read the full &lt;a href="http://www.prweb.com/releases/ultraesb/migration/prweb8992103.htm"&gt;Press Release&lt;/a&gt; and Download the &lt;a href="http://adroitlogic.org/downloads/UltraESB-JestaDigital-CaseStudy.pdf"&gt;Case Study on Migration to the Free and Open Source UltraESB&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/V7cy4-aAVD4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/6732263257905539503/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=6732263257905539503" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6732263257905539503?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6732263257905539503?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/V7cy4-aAVD4/digital-content-and-service-provider.html" title="Digital Content and Service Provider Jesta Digital Migrates to the UltraESB" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/11/digital-content-and-service-provider.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8MQXo9eSp7ImA9WhdbGEk.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-8227540514570637846</id><published>2011-10-17T03:20:00.000-07:00</published><updated>2011-10-17T03:21:20.461-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T03:21:20.461-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Guides" /><category scheme="http://www.blogger.com/atom/ns#" term="Deployment" /><category scheme="http://www.blogger.com/atom/ns#" term="Installation" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="Documentation" /><title>Past, Present and Future of ...: UltraESB Documenation</title><content type="html">AdroitLogic  has released the first phase of the&lt;a href="http://blog.ruwan.org/2011/10/ultraesb-documenation.html"&gt; official documentation  for the UltraESB&lt;/a&gt;. This documentation is a complete reference of the...&lt;br /&gt;
Does  your ESB vendor charge you for access to Premium Content? Well, all   UltraESB documentation, including our premium Production Support guides   are free!&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/UGtgl6gnPfg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/8227540514570637846/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=8227540514570637846" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/8227540514570637846?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/8227540514570637846?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/UGtgl6gnPfg/past-present-and-future-of-ultraesb.html" title="Past, Present and Future of ...: UltraESB Documenation" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/10/past-present-and-future-of-ultraesb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMFRn4_fyp7ImA9WhdUGEo.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-6602950765093997231</id><published>2011-10-05T06:10:00.000-07:00</published><updated>2011-10-05T20:06:57.047-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-05T20:06:57.047-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IDE" /><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="unit testing" /><category scheme="http://www.blogger.com/atom/ns#" term="editor" /><category scheme="http://www.blogger.com/atom/ns#" term="version control" /><category scheme="http://www.blogger.com/atom/ns#" term="studio" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="code review" /><title>Drag-and-Drop Integration with Graphical Models and Studios - how effective are they?</title><content type="html">Recently I was asked by a prospective user about the graphical tooling support of the UltraESB, and the answer I prepared is summarized below in this blog post.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt; Updates to a graphical configuration is sometimes difficult&lt;/li&gt;
&lt;li&gt;Graphical models are not easily unit testable&lt;/li&gt;
&lt;li&gt;How do you debug graphical models? &lt;/li&gt;
&lt;li&gt;Graphical models cannot be version controlled easily, or backed-up and restored for production system changes quickly &lt;/li&gt;
&lt;li&gt;Graphical models does not allow easily inserted and usable comments&lt;/li&gt;
&lt;li&gt;Graphical models are vendor specific “language”s you need to learn from the start &lt;/li&gt;
&lt;li&gt;Text based configurations support – visual code review and auditing of changes&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Real world management of graphical configurations are more difficult &lt;/li&gt;
&lt;li&gt;Graphical tools are sometimes limited on extensibility&lt;/li&gt;
&lt;li&gt;Vendors ship some IDE based “Studio” which may not be user friendly to some &lt;/li&gt;
&lt;/ul&gt;
We will consider the effectiveness of the graphical "Studios" and 
vendor customized "IDEs" and compare how effective they are for real 
world production system development, change management and auditing, 
code review and unit testing etc among other topics.&lt;br /&gt;
&lt;br /&gt;
Now
 if you'd want to know what I am talking about, do a Google search for 
"ESB (Studio OR IDE)" and look at the results of the Image search.. You 
will find plenty from some ESB vendors.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;In-contrast, an UltraESB configuration is held in files&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In contrast, The UltraESB configurations are held in one or more configuration files. These files are human readable and understandable, and are Spring framework configuration files already familiar to many developers. Typically a configuration is split into two files namely ultra-root.xml to define the more&lt;br /&gt;
static aspects such as transports, JMX configuration etc, while the ultra-dynamic.xml defines the more dynamic aspects such as services, mediation sequences and endpoints of the business scenario. Where required the dynamic components can be split into any number of sub configurations.&lt;br /&gt;
&lt;br /&gt;
Changes to the dynamic aspects does not require a server re-start, and can be applied to live production servers without disrupting existing or in-flight messages, and the UltraESB guarantees that a message flow will only use the configuration version available at the start of its processing. This makes the&lt;br /&gt;
configuration updates both safe and efficient, and is much more than whats typically offered as 'hot-deployment' by some products.&lt;br /&gt;
&lt;br /&gt;
Holding the configuration in a concise XML document makes it easy to quickly:&lt;br /&gt;
– Understand the flow&lt;br /&gt;
– Take a backups&lt;br /&gt;
– Track changes across versions&lt;br /&gt;
– Add new services, change/remove/disable or co&lt;br /&gt;
&lt;br /&gt;
Yet, still the UltraESB allows auto-completion and step-through debugging with your preferred IDE - See this &lt;a href="http://adroitlogic.org/resources/getting-started/video-screencasts.html"&gt;5 minute screen cast&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Comparison with Graphical Drag-and-Drop tools&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The graphical tools will present themselves as “easy to use for any beginner” - which I do not contradict. However is its usefulness also limited when you are not a beginner anymore?&lt;br /&gt;
&lt;br /&gt;
When you move into real world usage you will quickly understand that:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Updates to a configuration &lt;/b&gt;(e.g. disabling an address from a load balance endpoint in a production system) will require a developer to open up a heavy weight IDE Studio, open up the latest version of the project, make the necessary change, build a new deployable binary artifact and then deploy this to a production server. &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;When this needs to be done quickly for emergency changes etc, it would be difficult for a system administrator, or just "any" developer to do – the availability of a configured developer environment would be needed to effectively use the graphical Studios.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Furthermore, a binary deployable artifact generated by a developer would be difficult to verify for correctness. It will also depend on the developers local user settings and local properties files etc. used at the build time, and may not be the ideal artifact with the correct settings for quick production deployments.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Graphical models are not easily unit testable&lt;/b&gt;. Any UltraESB configuration can be easily unit tested with popular frameworks such as JUnit. Most of the samples we ship are automatically unit tested for each continuous build.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Check our &lt;a href="https://bitbucket.org/adroitlogic/ultraesb/src/cfba5c7255bc/modules/sample/src/test/java/org/adroitlogic/ultraesb"&gt;unit tests here&lt;/a&gt;, or take a look at &lt;a href="https://bitbucket.org/adroitlogic/ultraesb/src/cfba5c7255bc/modules/sample/src/test/java/org/adroitlogic/ultraesb/rest/AuthenticationTest.java"&gt;one single sample test here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;As an exercise:&lt;/b&gt; Ask any other ESB vendor how they suggest that you perform unit testing, and automated end-to-end configuration testing. Try out their suggestions by yourself, and verify how effectively they will work in your real world use&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Graphical models cannot be version controlled easily / Cannot backup and revert production system changes quickly&lt;/b&gt;. They will either use binary artifacts, or generate loads of meta XML which cannot be humanly understood, backed up or safely managed via a source control system for historical difference checking. &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;As all UltraESB configurations are simple and human readable and understandable XML files, changes can be checked into any version control system such as CVS, SVN, Mercurial, GIT etc, and tagged after development for QA testing, staging and production deployments. This allows one to quickly undo changes to revert back to a previous configuration level within a matter of seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/adroitlogic/ultraesb/diff/resources/conf/ultra-dynamic.xml?diff2=cdcdf9a66296&amp;amp;diff1=92dccc25417d"&gt;Here is a sample diff&lt;/a&gt; for you to verify which shows some changes over time on a UltraESB configuration. Our large enterprise users integrate the ESB configuration into version control systems for better management, visibility/openness and control of changes and auditing.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;The UltraESB conf/ directory is typically checked into a version control system. When developers make changes they can commit locally (i.e. with Mercurial etc) and when ready push changes for QA / integration testing. Once changes are accepted for deployment, they would then be tagged by QA. The operations teams would map the source repository to the conf/ directory of the live servers, and to deploy changes, they would pull changes from the source repository. Depending on the change, a simple UTerm “cau – Configuration Add or Update” command or a graceful restart (e.g. if third party JARs etc are required for a new change) can then be initiated. Before updates, the configuration can be easily backed up, and if something goes wrong, the configuration can just as be easily reverted to the previous tag or restored configuration file which was backed up before.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Graphical models does not allow easily inserted and usable comments&lt;/b&gt;. Some comments on graphical models maybe hidden as meta information in the huge models. They are not seen at all, or are rarely seen on a production configuration etc. Some models may not allow you to save user specified comments, or loose them during editing even when inserted manually. See how you can comment the UltraESB configurations here&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Graphical models are a vendor specific “language”&lt;/b&gt;. Yes, your team still needs to learn a new language, refer to its documentation from how to write an “if” condition, and understand which component can be added under or connected to which other. The UltraESB is configured with Java code fragments, classes, or compiled class libraries. In addition, you may use any JSR 223 scripting language such as Javascript, Groovy, Ruby etc which you already know. &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;As the UltraESB configuration is in Java, you can use concepts you already know such as:&lt;/li&gt;
&lt;li&gt;Exception handling with a try-catch-finally&lt;/li&gt;
&lt;li&gt;Easily refer to all possibilities of the API using Javadocs&lt;/li&gt;
&lt;li&gt;Easily calling external libraries from within the in-line code you are writing etc. (Compare to calling an external Java library from one of the graphical models)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Real world management of graphical configurations are more difficult&lt;/b&gt;. Imagine having to make a change to an endpoint URL across hundreds of services. With a graphical model, one would need to load each service and make the necessary changes, save and rebuild deployable artifacts for re-deployment. With a text based configuration you can easily use find-and-replace, sed, grep, find etc to quickly find certain values, or make changes across multiple services easily. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Text based configurations support – visual code review and auditing of changes&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Graphical tools are sometimes limited on extensibility&lt;/b&gt;. You cannot easily extend the components available, or develop custom components. Even if you could, as an end user you would be writing an ESB vendors specific UI logic on your developers' time to build such extensions, which may break with new vendor releases etc. If you just concentrate on your business logic, you could write any extension as a Java library etc, and reuse the method from within the UltraESB from multiple locations.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Furthermore, some tools may not allow you flexibility. As an example, consider you are getting a message header “XXX-NNN-YYY” and you want conditionally perform a routing just looking at the “NNN” part. If your graphical editor provides a “if-then-else” construct, most definitely if will allow you to check if this complete header is equal to something or not. (See example screenshot). However, your mind will tell you that you just need to perform a substring(4,7) on the header and do the comparison. This is easily possible with the UltraESB configuration, where-as fixed UI “components” of most vendors would not allow you to go deeper than the beginner level use.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Vendors ship some IDE based “Studio” which may not be user friendly to some&lt;/b&gt;. Most vendor studios are based on Eclipse or other such frameworks, and may not be easy for use for IDEA, NetBeans and other IDE users. The UltraESB allows its users to use any of their preferred IDEs.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;How do you debug graphical models?&lt;/b&gt; Usually, studios hide the actual execution code with very high level constructs, and hence users ultimately ends up using the log files for debugging which is sad. You cannot easily set a breakpoint at one of the nice graphical boxes, and evaluate message properties at the time a message reaches it. You cannot then step-through debug the configuration from there on.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;With the UltraESB, you are at the actual execution code level. You can set real breakpoints, evaluate variables, and step-through debug as you've always known with your favorite IDE. Ofcourse, you can start the ~35 MB UltraESB within the IDE in its full glory, so you do not end-up having to remotely debug a monster server running with elsewhere.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ol&gt;
&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/lXiFgxKISos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/6602950765093997231/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=6602950765093997231" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6602950765093997231?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/6602950765093997231?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/lXiFgxKISos/drag-and-drop-integration-with.html" title="Drag-and-Drop Integration with Graphical Models and Studios - how effective are they?" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/10/drag-and-drop-integration-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4NQnw7cSp7ImA9WhdUF0k.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-4661736157190800388</id><published>2011-10-04T09:16:00.000-07:00</published><updated>2011-10-04T09:16:33.209-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T09:16:33.209-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Petals ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="JBossESB" /><category scheme="http://www.blogger.com/atom/ns#" term="WSO2 ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="Mule" /><category scheme="http://www.blogger.com/atom/ns#" term="Open source ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="Fuse ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="Talend ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="ServiceMix" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>ESB performance testing - Round 5 Results for 8 Open Source ESBs</title><content type="html">AdroitLogic Private Ltd. announced today the results of the fifth 
round of ESB Performance testing. This round compares the WSO2 ESB, Mule
 ESB CE, Fuse ESB, Apache ServiceMix, Talend ESB, Petals ESB, JBoss ESB 
and the UltraESB. The ESB performance benchmark has been in use since 
June 2007 by vendors such as WSO2, AdoritLogic, Mulesoft and BEA to 
compare ESBs across different loads and message sizes for six common use
 cases. This round also publishes an EC2 AMI to easily reproduce the 
results by average users, and also publishes all source configuration 
for the 8 different ESBs in a public BitBucket repository&lt;br /&gt;&lt;br /&gt;What's 
significant about this test suite is that it has now been accepted as a 
de-facto ESB performance test suite by vendors such as WSO2, BEA and 
Mulesoft in the past, who have reported results against their 
implementations publicly. This has also been used extensively by end 
users for ESB comparison, and load testing of configurations before 
production deployments.&lt;br /&gt;&lt;br /&gt;Although 8 open source ESBs were 
considered, 4 of these failed without being able to complete the load 
test. One ESB had a 3-4% error rate, while three completed successfully.
 The test includes two variants of the free and open source UltraESB. 
The enhanced version is supercharged with the power of VTD XML which 
allows the UltraESB to perform XPath evaluation on XML payloads without 
XML parsing. This works nicely with the RAM Disk based file cache used 
by the UltraESB to provide both Zero-Copy and Java Non-Blocking IO for 
the extreme levels of performance.&lt;br /&gt;
&lt;br /&gt;

&lt;br /&gt;
Full information available at &lt;a href="http://esbperformance.org/" title="ESB Performance Test Resources"&gt;http://esbperformance.org&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/-ceCVRsYWBI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/4661736157190800388/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=4661736157190800388" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/4661736157190800388?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/4661736157190800388?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/-ceCVRsYWBI/esb-performance-testing-round-5-results.html" title="ESB performance testing - Round 5 Results for 8 Open Source ESBs" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/10/esb-performance-testing-round-5-results.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UMQnk_fCp7ImA9WhdWGUw.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-962896193012036347</id><published>2011-09-13T03:54:00.000-07:00</published><updated>2011-09-13T03:54:43.744-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-13T03:54:43.744-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruwan" /><category scheme="http://www.blogger.com/atom/ns#" term="apache synapse" /><category scheme="http://www.blogger.com/atom/ns#" term="WSO2" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><title>Former WSO2 ESB and Apache Synapse ESB Architect Ruwan Linton Joins AdroitLogic</title><content type="html">It gives me great pleasure to announce that Ruwan Linton has joined AdroitLogic!&lt;br /&gt;&lt;br /&gt;Ruwan was the former architect and product manager of the WSO2 ESB, taking over the position when I left WSO2 in October 2008. We've worked in the past together for over 2 years and contributed over 80% of the Apache Synapse ESB which is also the core of the WSO2 ESB.&lt;br /&gt;&lt;br /&gt;Ruwan is a brilliant architect, and a good friend. We both understand each other perfectly well, and thus he will be a great addition to AdroitLogic as its new Director of Engineering!&lt;br /&gt;&lt;br /&gt;Here is the full press release: &lt;a href="http://www.prweb.com/releases/2011/9/prweb8782995.htm"&gt;Former WSO2 ESB and Apache Synapse ESB Architect Ruwan Linton Joins AdroitLogic&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/geyUpUMSTxI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/962896193012036347/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=962896193012036347" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/962896193012036347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/962896193012036347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/geyUpUMSTxI/former-wso2-esb-and-apache-synapse-esb.html" title="Former WSO2 ESB and Apache Synapse ESB Architect Ruwan Linton Joins AdroitLogic" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/09/former-wso2-esb-and-apache-synapse-esb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMMRns6eyp7ImA9WhdRF0Q.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-9192014841978577997</id><published>2011-08-08T02:41:00.000-07:00</published><updated>2011-08-08T02:41:27.513-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-08T02:41:27.513-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="WSO2" /><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="Mule" /><category scheme="http://www.blogger.com/atom/ns#" term="esb performance" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="ServiceMix" /><title>ESB Performance Testing.. Getting ready for the next round</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OlgB91VrQtc/Tj-rDd42UWI/AAAAAAAAAJY/kx74FlPA0XY/s1600/pit-stop.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-OlgB91VrQtc/Tj-rDd42UWI/AAAAAAAAAJY/kx74FlPA0XY/s1600/pit-stop.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Its been sometime since we've compared the performance of free and open source ESBs.. and now its time for the next round..&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="color: blue;"&gt;Amazon EC2 AMI to be published!&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
At the end of this round, we will publish an Amazon EC2 machine image (AMI) with the selected ESBs so that any end-user can simply fire up an instance of this image, and re-run the performance suite to compare the ESBs of his choice!&lt;br /&gt;
&lt;br /&gt;
This will also make it easier to extend the performance test to include any custom test cases of the user etc, before selecting an ESB for use. But most of all, it will allow a true &lt;b&gt;apples-to-apples comparison&lt;/b&gt; of the ESBs of choice, without any vendor bias, as each ESB could be tested on the same EC2 instance, and only allowed to talk to itself on the localhost - preventing a requirement for stringent network isolation.&lt;br /&gt;
&lt;br /&gt;
In the past different vendors used the performance benchmark on different hardware configurations, and also it was not easy for a newbie to re-run the test suite on his own without investing some time to learn things and setup the various ESBs. However, the soon to be published EC2 AMI will contain everything required to fire-up the different ESB's of choice - preventing anyone from having to spend hours to learn and set-up the different ESBs for comparison. A vendor or another end user can also modify the configurations of the ESBs to better tune them, and republish the new image again, making the process simpler and easier for everyone!&lt;br /&gt;
&lt;br /&gt;
The free and open source ESB's evaluated in this round include:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;UltraESB v1.5.1&lt;/li&gt;
&lt;li&gt;WSO2 ESB v4.0.0&lt;/li&gt;
&lt;li&gt;Mule CE v3.1.2&lt;/li&gt;
&lt;li&gt;ServiceMix v4.3.0&lt;/li&gt;
&lt;/ul&gt;It has not been easy to set-up all these different ESB's, and we've found that its pretty difficult to get some of the ESB's to execute all test scenarios.. More on this will be published soon as we try to overcome these difficulties.. so stay tuned!!&lt;br /&gt;
&lt;br /&gt;
If you would like any other ESB to be included into this round, do let us know, and share a compatible configuration.&lt;br /&gt;
&lt;br /&gt;
Visit the &lt;a href="http://esbperformance.org/"&gt;ESB Performance&lt;/a&gt; site for more details..&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/M44bZoxOBOo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/9192014841978577997/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=9192014841978577997" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/9192014841978577997?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/9192014841978577997?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/M44bZoxOBOo/esb-performance-testing-getting-ready.html" title="ESB Performance Testing.. Getting ready for the next round" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-OlgB91VrQtc/Tj-rDd42UWI/AAAAAAAAAJY/kx74FlPA0XY/s72-c/pit-stop.jpg" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/08/esb-performance-testing-getting-ready.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcFSXo6eSp7ImA9WhdSEUo.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-384834894444542988</id><published>2011-07-20T09:06:00.001-07:00</published><updated>2011-07-20T09:06:58.411-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-20T09:06:58.411-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RAM disk" /><category scheme="http://www.blogger.com/atom/ns#" term="esb performance" /><category scheme="http://www.blogger.com/atom/ns#" term="Open source ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="Monitoring" /><category scheme="http://www.blogger.com/atom/ns#" term="JMX" /><title>AdroitLogic announces v1.5.0 of the UltraESB</title><content type="html">"The latest version brings support for Command Line Interface for   management, improved JMX support, and integration with monitoring   solutions and a high performance RAM disk based file cache.."&lt;br /&gt;
&lt;br /&gt;
Read the full story at http://adroitlogic.org/about/news.html&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/NBhvQB-5PUo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/384834894444542988/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=384834894444542988" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/384834894444542988?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/384834894444542988?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/NBhvQB-5PUo/adroitlogic-announces-v150-of-ultraesb.html" title="AdroitLogic announces v1.5.0 of the UltraESB" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/07/adroitlogic-announces-v150-of-ultraesb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UCSH86eCp7ImA9WhZXFko.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-2511754299179600821</id><published>2011-05-06T02:47:00.000-07:00</published><updated>2011-05-06T02:47:49.110-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-06T02:47:49.110-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="light weight" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="zero copy" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>To build the best ESB, you have to select the best open source components too!</title><content type="html">If you've ever wondered how we build the worlds best Free and &lt;a href="http://adroitlogic.org/"&gt;Open Source ESB&lt;/a&gt;, in terms of performance, features and ease of use; then read about it all on&lt;a href="http://blog.adroitlogic.org/2011/05/thanking-great-open-source-projects-and.html"&gt; &lt;b&gt;Thanking great Open Source projects and teams!&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
To build the &lt;a href="http://adroitlogic.org/"&gt;best Open Source ESB&lt;/a&gt;, we &lt;b&gt;*had&lt;/b&gt;* to select; and only depend on; the best Open Source components - and not the old cupboards or the stinking kitchen sinks, that some vendors cannot yet entangle themselves from!&lt;br /&gt;
&lt;br /&gt;
Did I mentioned that our complete distribution is just ~35MB? Compare it to some others who call 135MB upto ~1G ESB's as light. I guess after putting lipstick on the Pig, they now like to call it "light-weight" like a damsel too ;) But sadly, some are still stuck in the days of hub-and-spoke messaging, and some made the whole world around them too SOAPy and slippery too soon as they didn't take enough REST at the right time.&lt;br /&gt;
&lt;br /&gt;
Being the youngest ESB in town, and to Win! - we had no choice but to select the &lt;a href="http://blog.adroitlogic.org/2011/05/thanking-great-open-source-projects-and.html"&gt;best technologies and open source projects&lt;/a&gt; that we would depend on and use.&lt;br /&gt;
&lt;br /&gt;
Introducing true Zero-Copy proxying, with memory mapped files and Non-Blocking IO was killer in performance. Some even tried to copy the keywords without implementing the code, and even without understanding what Zero-Copy was :)&lt;br /&gt;
&lt;br /&gt;
We also introduced the concept of using &lt;a href="http://adroitlogic.org/samples-articles-and-tutorials/15-tutorials/22-getting-started-with-sequences-and-mediation.html"&gt;Java (classes or just fragments) or any JSR 223 scripting language (such as Javascript, Groovy, Ruby) for mediation&lt;/a&gt;. Although many vendors falsely claim that their ESB is "configuration" only - the configuration language they use is no different from a programming language. However, someone new must learn that "XML"ish language to "program business logic" - and no one is going to tell him the equivalent of a try {} catch {} finally block that can be reliably used in that context :)&lt;br /&gt;
&lt;br /&gt;
Our approach was to let the user decide the way he is going to mediate, using a language and/or technologies he is already aware of. But unlike some ESBs where you write Java code, then use some script to compile, bundle and deploy - the UltraESB just requires you to write the lines - and the compilation is hidden! You can even debug your mediation from within your favourite IDE - either IDEA, Eclipse or Netbeans.&lt;br /&gt;
&lt;br /&gt;
When we wanted to introduce clustering almost an year back, &lt;a href="http://markmail.org/message/7gpdgwmtcupkwsp5"&gt;we looked at &lt;/a&gt;Apache ZooKeeper and knew at first sight that it was the right one for us - call it link at first sight ;) !&lt;br /&gt;
&lt;br /&gt;
Selecting a UI framework was the most time consuming.. and we looked at GWT based, and other frameworks, based on the servlet model but did not find the right balance. We wanted to use the best of HTML5/CSS3 and be in control always.&lt;br /&gt;
&lt;br /&gt;
The combination of HTML5/CSS3/JQuery/datatables - connected via JSON using Pure - to a Wink REST application secured by Shiro and implemented via JMX with direct calls to the remote ESB was one of the main introductions in this last release! But it was all worth it! Except for a few issues on the IE browser (which statistically a lot fewer people use now) everything has been smooth. But we will follow up a 1.4.1 release with these fixes for IE too.&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/hgGePeaGqW0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/2511754299179600821/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=2511754299179600821" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/2511754299179600821?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/2511754299179600821?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/hgGePeaGqW0/to-build-best-esb-you-have-to-select.html" title="To build the best ESB, you have to select the best open source components too!" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/05/to-build-best-esb-you-have-to-select.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4DQ3o_eyp7ImA9WhZXFkw.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-1462721030609881321</id><published>2011-05-05T10:52:00.000-07:00</published><updated>2011-05-05T10:52:52.443-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-05T10:52:52.443-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="quality" /><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="comments" /><category scheme="http://www.blogger.com/atom/ns#" term="coverage" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>UltraESB Code Quality Metrics - updated for v1.4.0</title><content type="html">We've &lt;a href="http://adroitlogic.org/samples-articles-and-tutorials/16-articles/17-ultraesb-code-quality-metrics.html"&gt;updated the code quality metrics &lt;/a&gt;for the free and open source UltraESB v1.4.0 release recently, and our glad to still have a 43.3% code coverage (46.1% of the lines and 36.2% of branches) and 15.5% of code comments (46% documented API)&lt;br /&gt;
&lt;br /&gt;
The total lines of code increased to 33,563 spread over 69 packages and 426 classes, with v1.4.0 which introduced the web based administration console - &lt;a href="http://blog.adroitlogic.org/2011/05/introducing-uconsole.html"&gt;UConsole&lt;/a&gt;, support for &lt;a href="http://blog.adroitlogic.org/2011/05/ultraesb-implements-clustering.html"&gt;clustering&lt;/a&gt;, automated round-robin restarts, XACML and even faster XML performance with FastXML&lt;br /&gt;
&lt;br /&gt;
By building each sample as both an end-user executable, and documented sample, as well as a JUnit test case has paid a lot. AFAIK we ship the most number of samples for any ESB with 48 sample configurations with over 100 sample proxy services!&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/tyqN04nRV-Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/1462721030609881321/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=1462721030609881321" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/1462721030609881321?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/1462721030609881321?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/tyqN04nRV-Q/ultraesb-code-quality-metrics-updated.html" title="UltraESB Code Quality Metrics - updated for v1.4.0" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/05/ultraesb-code-quality-metrics-updated.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcFQX0ycCp7ImA9WhZXFEo.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-3590908199933768269</id><published>2011-05-03T19:20:00.000-07:00</published><updated>2011-05-03T19:26:50.398-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-03T19:26:50.398-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="uconsole" /><category scheme="http://www.blogger.com/atom/ns#" term="clustering" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="zookeeper" /><category scheme="http://www.blogger.com/atom/ns#" term="JMX" /><title>UConsole - the node/cluster management console of the UltraESB</title><content type="html">Sampath has published a detailed &lt;a href="http://blog.adroitlogic.org/2011/05/introducing-uconsole.html"&gt;article on the architecture of the UConsole&lt;/a&gt; with a brief introduction to some of its functions. The UConsole is an ultra light-weight Jetty based web application that uses HTML5/CSS3 to render the pages. All front end pages and scripts thus can be safely cached by a browser, and all pages fetch data over a JSON API exposed by a REST application deployed using Apache Wink.&lt;br /&gt;
&lt;br /&gt;
The UConsole is the graphical management console, to the re-vamped JMX based UltraESB management API using MXBeans. Thus any function that can be monitored or performed via the UConsole, can be performed via JMX too.&lt;br /&gt;
&lt;br /&gt;
One neat aspect of the UConsole is the ability to connect to any node via its JMX URL. So when you connect to a cluster, you can connect to any single node of the cluster. Apache ZooKeeper ensures that you can perform any cluster wide function from any connected node. There is no "administration server", master or slaves, or any single point of failure!&lt;br /&gt;
&lt;br /&gt;
We intend to develop a command line administration interface over the JSON/REST API in future, when it will add value to the product.&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/-x4A7PSnsmY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/3590908199933768269/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=3590908199933768269" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/3590908199933768269?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/3590908199933768269?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/-x4A7PSnsmY/uconsole-nodecluster-management-console.html" title="UConsole - the node/cluster management console of the UltraESB" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/05/uconsole-nodecluster-management-console.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MNRn0_cCp7ImA9WhZXE0g.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-4060304329980462653</id><published>2011-05-02T09:58:00.000-07:00</published><updated>2011-05-02T09:58:17.348-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-02T09:58:17.348-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="zabbix" /><category scheme="http://www.blogger.com/atom/ns#" term="clustering" /><category scheme="http://www.blogger.com/atom/ns#" term="JMX" /><category scheme="http://www.blogger.com/atom/ns#" term="administration" /><category scheme="http://www.blogger.com/atom/ns#" term="xacml" /><category scheme="http://www.blogger.com/atom/ns#" term="ESB" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>AdroitLogic announces v1.4.0 of the UltraESB</title><content type="html">&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;The latest version brings support for clustering using ZooKeeper, and introduces a web based administration console, and support for Caching, XACML and JSON among many other features.&lt;/i&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Singapore - May 2, 2011 - AdroitLogic Private Ltd. announced today the release v1.4.0 of its free and open source Enterprise Service Bus, the UltraESB. The UltraESB is released under the OSI approved GNU Affero General Public License; as well as a zero-dollar non-GPL commercial license which allows unlimited and perpetual use free of charge. First released in January 2010, the UltraESB was the first ESB to utilize memory mapped files and zero-copy, coupled with non-blocking IO to provide extreme levels of performance.&lt;/span&gt;&lt;br style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;" /&gt;&lt;br style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;" /&gt;&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Version v1.4.0 released today offers support for clustering and management of cluster nodes through the new Web based administration console based on JMX. Clustering support is built over Apache ZooKeeper, which is used to manage extremely large clusters of Hadoop nodes. Advanced features such as automatic restart of a complete cluster of nodes - with round-robin processing, or management of a service, or endpoint across a cluster have been made trivial operations. The new version also supports caching, and the current release ships support for ehCache. The new release also ships support for high performance XML processing, utilizing FastXML. This allows end users to integrate third party libraries such as VTD XML with the UltraESB for extremely fast XPath processing, without parsing XML payloads. XACML is supported for fine grained authorization using the PicketBox&amp;nbsp; XACML library, and automatic conversion to/from JSON to XML makes processing JSON payloads even simpler.&lt;/span&gt;&lt;br style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;" /&gt;&lt;br style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;" /&gt;&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;In addition to supporting many transports and message formats, the UltraESB also offers support to easily develop JSON based data services with just a single line of configuration, and provides full support for the HTTP transport, including true REST support, basic, digest, NTLM and Amazon S3 authentication using pre-emptive authentication or challenge response mechanisms as applicable. The UltraESB also ships a very high performance WS-Security library that allows it to perform WS-Security operations over 3X faster than solutions based on the WSS4J/Rampart libraries used by other ESBs.&lt;/span&gt;&lt;br style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;" /&gt;&lt;br style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;" /&gt;&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;JMX support has been thoroughly improved to utilize MXBeans, and allows detailed monitoring and management of a runtime using JMX consoles such as Zabbix. The UltraESB now ships with a native Zabbix agent for even easier monitoring. As the UltraESB integrates with the Spring framework and supports Java as well as JSR 223 scripting languages, integration with third party libraries and extension is simple and powerful.&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/htK_KaxxCc8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/4060304329980462653/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=4060304329980462653" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/4060304329980462653?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/4060304329980462653?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/htK_KaxxCc8/adroitlogic-announces-v140-of-ultraesb.html" title="AdroitLogic announces v1.4.0 of the UltraESB" /><author><name>Asankha Perera</name><uri>https://plus.google.com/101413171948163492649</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-Fz-KMQa3usc/AAAAAAAAAAI/AAAAAAAAALg/tRpo68RrLs0/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://esbmagic.blogspot.com/2011/05/adroitlogic-announces-v140-of-ultraesb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AEQX49eip7ImA9WhZREUw.&quot;"><id>tag:blogger.com,1999:blog-4314823943675891475.post-3887045391198240758</id><published>2011-04-06T12:52:00.000-07:00</published><updated>2011-04-06T12:55:00.062-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-06T12:55:00.062-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="caching" /><category scheme="http://www.blogger.com/atom/ns#" term="ultraesb" /><category scheme="http://www.blogger.com/atom/ns#" term="clustering" /><category scheme="http://www.blogger.com/atom/ns#" term="xacml" /><title>UltraESB v1.4.0 development builds are available for feedback!</title><content type="html">Checkout the new blog [&lt;a href="http://blog.adroitlogic.org/2011/04/ultraesb-v140-development-builds-are.html"&gt;http://blog.adroitlogic.org&lt;/a&gt;] which describes some of the new features of the upcoming v1.4.0 - including clustering, caching, configuration changes at runtime, XACML and many more!&lt;img src="http://feeds.feedburner.com/~r/esbmagic/~4/VjTprqmBvWA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://esbmagic.blogspot.com/feeds/3887045391198240758/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4314823943675891475&amp;postID=3887045391198240758" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/3887045391198240758?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4314823943675891475/posts/default/3887045391198240758?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/esbmagic/~3/VjTprqmBvWA/ultraesb-v140-development-builds-are.html" title="UltraESB v1.4.0 development builds are available for feedback!" /><author><name>Asankha Perera</name><uri>http://www.blogger.com/profile/02534808519611147498</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><feedburner:origLink>http://esbmagic.blogspot.com/2011/04/ultraesb-v140-development-builds-are.html</feedburner:origLink></entry></feed>
