Tuesday, August 18, 2015

Connecting to local Coherence instance with WKA instead of Multicast

I have been trying to setup a test environment for a local Coherence cache implementation for sometime, and the information found via Google was not that helpful in understanding why the client application (in this case the UltraESB) was not connecting to the already created Coherence cluster using WKA, and was trying to create its own cluster with Multicast.

The System properties I passed to the JVM included the following, but the issue was not necessarily on these as I found out with my limited knowledge of Coherence.

The key lesson was - the System properties being correct was not enough for WKA to function properly!

The solution was to create a new file "tangosol-coherence-override.xml" and place it in the classpath (make sure its at the start to get picked up before any others - if any)

<?xml version='1.0'?>
<coherence  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd">    

                <socket-address id="1">

    <severity-level system-property="tangosol.coherence.log.level">9</severity-level>
    <character-limit system-property="tangosol.coherence.log.limit">0</character-limit>

If your client "connects" to the WKA cluster you will see the following, and you can notice that it connected to an already existing cluster with a different process

  WKA{Address=, Port=15000}
  ThisMember=Member(Id=3, Timestamp=2015-08-18 12:24:32.153, Address=, MachineId=60314, Location=site:,machine:localhost,process:5634)
  OldestMember=Member(Id=1, Timestamp=2015-08-18 12:24:07.652, Address=, MachineId=60314, Location=site:,machine:localhost,process:5366, Role=CoherenceServer)

And if it didn't connect with WKA, and created its own Multicast group you would see the following, where you can also notice that the client you just started is the only member of that new cluster

Group{Address=, Port=12100, TTL=0}
  ThisMember=Member(Id=1, Timestamp=2015-08-18 10:25:08.389, Address=, MachineId=60314, Location=site:,machine:localhost,process:4278)
  OldestMember=Member(Id=1, Timestamp=2015-08-18 10:25:08.389, Address=, MachineId=60314, Location=site:,machine:localhost,process:4278)

Sunday, January 18, 2015

How the UltraESB and AdroitLogic was born..

The UltraESB and AdroitLogic was born 5 years ago today! In my personal blog, I have captured some of the history behind starting this up!

The "personal" blog of Asankha Perera: How the UltraESB and AdroitLogic was born..

Tuesday, November 11, 2014

AdroitLogic Recognized in DZone’s 2014 Guide to Enterprise Integration

We are very excited to be recognized as a featured vendor in DZone’s 2014 Guide to Enterprise Integration, a premium resource focused on enterprise integration and API management trends, strategies, and tools. The guide includes topic introductions, expert opinions, best practices, and solution comparisons. 

Readers of the guide will get an overview of enterprise integration and learn about obstacles that developers are facing to create seamless integration. Topics covered by the guide include:
  • The role of message queues, middleware, and ESBs in the enterprise.
  • Decomposition patterns for breaking down monolithic architecture.
  • A model for understanding the maturity level of REST APIs.
  • A forecast of how building a large project with multiple integrations might look in the future.
DZone’s Enterprise Integration guide also offers key insights into integration and API management practices through a survey of 500+ developers and experts, allowing readers to learn trends from practitioners in the technology professional community. Additionally, the guide’s solutions directory compares different API management platforms, integration suites, ESBs, message queues, and integration frameworks to help readers wisely choose the solutions they need.

About DZone
DZone provides expert research and learning communities for developers, tech professionals, and smart people everywhere. DZone has been a trusted, global source of content for over 15 years.

Thursday, April 10, 2014

Build better software, and the world will still beat a path to your door!

Yesterday I was pleasantly surprised to read an article on the WSJ, that Atlassian was recently valued at $3.3B, and has sold $150M worth of its equity in a secondary sale mostly for the benefit of some of its long time employees.

I first got to know about Atlassian after using the JIRA issue tracker - which they had kindly made available to the Apache Software Foundation projects. It was a great product to use, and every developer I knew who had used it, simply loved it and would promote it without any hesitation wherever they went.

After leaving full time employment in late 2008, I bought my first couple of licenses for JIRA to help support some of the customers I was helping as a freelance consultant. Another great thing about Atlassian is that they help smaller companies at just $10 a piece for most of these really cool products under their Starter Program. Even the $10 goes to the Room to Read charity, and the startup licenses have already contributed more than $3M for charity!

After starting my own entrepreneurial career a few years back, I started to admire Atlassian even more. They actually bootsrapped that great company. I've read so many articles about them, and listened to the talk 'Art of the BootStrap' by the co-founders, where they share many great insights about the bootstrapping process and the rise of Atlassian. Like GitHub, they didn't go looking for funding, but instead focussed on building great products that would sell themselves - due to great experiences the users had, and the resulting feedback and word of mouth referrals. When GitHub bootstrapped, they Optimized for Happiness, since they were happy to build things of value, than about writing business plans with make believe numbers. This also allowed them to throw away things like financial projections, hard deadlines, ineffective executives that make investors feel safe, and everything that hindered employees from building amazing products.

Something even more interesting to know about Atlassian is that they do not  employ any sales folks - and with the money they save, the company invests heavily on research and development. Farquhar states that "Fifteen years ago, as long as you had the best distribution you would win". "It didn’t matter whether Oracle was worse than SAP. These days, people are making decisions based on how good the products are" - which is really true. This is the same sentiment I read on the ReadWrite.com article "The Reasons Businesses Use Open Source Are Changing Faster Than You Realize"

Large enterprises now realize that good Open Source products have great quality behind them, although they may cost significantly less than competition. And the ability to have the source code, and modify it really means that the user can extend a product even if the vendor developing or supporting it does not want to do that for you. I'd leave you to read through the slides from "2014 - The future of Open Source", and possibly the web cast of the panel discussion with Michael Skok  et al. Today 8 out of 10 choose Open Source for Quality.

Atlassian too allows any of its licensed users to download the source code - if they are interested in it. Although I've never had to do that, I feel privileged to have this option available to me - if I ever needed it. I'm sure many of you would have used quite expensive commercial software from very large companies that we all know of. Although these companies spent possibly millions of dollars, that does not make their software bug free. Many years back, I was at a client to install a leading RDBMS from an unopened box that contained the software the client purchased. However, to my surprise I found that to install that database version in that unopened box, I first had to get a service pack applied :) I seriously think that having access to the source code - even for closed proprietary software, is a great thing, since many end-users can innovate faster than some of the large companies can enhance their own products. Open source projects attract features and great ideas from many enterprise architects who use them, and these ideas turn up to be great features to sell to future customers - who are seriously happy to see such features - as they too values them very much.

Last year, a recent Fortune #1 company with ~$450 Billion in revenue selected the UltraESB, when many commercial ESBs, as well as open source alternatives existed on the market, which they could easily afford. This was after extensive analysis of our technical strengths, product stability and code quality all turned up with great results. Like Atlassian, we do not have a sales team either, but only a really strong engineering and support team and a great product that simply finds itself around, including to the top of the Fortune list of companies. We never approached any of our current customers; instead, they all found us. It was like what Emerson said, "Build a better mousetrap, and the world will beat a path to your door"

Earlier this year, we had a similar POC where we were shortlisted against a competitor with well over a hundred million dollars in funding. Again, we were selected on the technical merits, and also since we had handled the customer relationship better than how the sales team of our competitor could. When a potential customer talks to us, he talks directly to those who had written the code, installed it at many enterprises around the world, and who helped many clients before with similar and real problems. Quite obviously, no sales team can beat that - especially when the customer understands technology.

We have exciting times ahead of us now, and a great list of customers already utilizing our software in production, in addition to the recent Fortune #1.

So later this year, we will be looking forward to talk to those who believe in us, our journey so far, and our potential to take on the world. Fortunately, we will have the freedom to make a wise and informed selection, as until now, we've certainly optimized for happiness and for passion!

Monday, April 7, 2014

UltraESB 2.2.0 GA Released!

We've just released the v2.2.0 of the UltraESB, and you can find the news release here.

This release stabilizes some of the deployment aspects introduced in the 2.0 and 2.1 releases, and allows the externalization of some of the aspects for easier management and control. The release also fixes some defects related to classloading from deployment units, and also introduces a few changes to the public API to make the ESB API more user friendly and intuitive.

The release also adds support for the FIX (Financial Information Exchange) transport utilizing the QuickFixJ open source FIX library, and supports JSONPath - similar to XPath for XML payloads. We have also begun to move common utility functions to UTerm, and as a first step, the UTerm now includes the ability to run the JavaBench (clone of Apache Bench) load testing client easily from the command line, with repeated testing capabilities.

You can download the latest release as usual from http://www.adroitlogic.org/download.html

Thursday, November 7, 2013

Nausea with Tomcat after biting too much?

About an year back I wrote a post "Does Tomcat bite more than it can chew" about how Tomcat accepts more TCP connections that it can handle, and resets them later on. I also wrote a follow-up post "How to stop biting, when you cant chew more.." and explained how the UltraESB does it using Apache HttpComponents NIO underneath. I raised the issue on the Tomcat mailing list too, but found that most of the folks over there did not like what I had to say, and refused to change Tomcat.

This week one of our clients was running a load test using the UltraESB in front of a Tomcat instance, and wanted to measure the performance of the UltraESB to use WS-Security signatures over a Tomcat service. However, at 1000 concurrent users, the UltraESB started to report an XML parse exception with a "Premature end of file" for the responses.

After detailed investigations to reproduce the issue in our environment, we found the culprit to be Tomcat. However, proof of the issue was not that simple, and we used a standalone Java client to issue fixed sized asynchronous HTTP post requests to Tomcat, and measured the size of the responses received. The message size used was 5120 bytes, and thus a response of equal size was expected.

However, under load, Tomcat accepted a 5K request, but replied with an HTTP status code of 200, but without any payload. It sent the Content-Length header value as "0". Here is what Wireshark reported:

Here are the response headers that Tomcat sent back:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Length: 0
Date: Thu, 07 Nov 2013 10:15:14 GMT
Connection: close
It's also interesting to note that Tomcat sometimes returns error responses which states that an internal error occurred; but with a HTTP status code of 200, instead of the expected 500 error code. Here is an example of such a payload returned:
<html><head><title>Apache Tomcat/7.0.28 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.28</h3></body></html>
It would have been so much better for many, if Tomcat did not bite fast, when it cannot chew!

Monday, October 14, 2013

ESB Performance Testing - Round 7 Published!

We have just published the results for the long awaited Round 7 - of ESB performance benchmarking. This round compares 4 of the leading free and open source ESBs, Mule CE 3.4.0, Talend ESB SE 5.3.1, WSO2 ESB 4.7.0 and the UltraESB 2.0.0
Although at first glance the above image may indicate that the WSO2 ESB and the UltraESB have very similar performance characteristics, the Devil is indeed in the detail.

During the testing we discovered several issues with the previously published article Round 6.5 from WSO2, including a severe response corruption for messages over 16,384 bytes when the default pass-through transport is being used. However, what's most surprising is that this issue remains in versions 4.6.0 and 4.7.0 of the WSO2 ESB, as well as the latest Milestone 4 of the soon to be released version 4.8.0.

Sadly, the WSO2 engineers conducting the Round 6.5 also failed to notice a complete failure of all of the XSLT test cases, but nevertheless published numbers obtained for the failed test cases as high performance numbers over the other ESBs.

Read about these and other flaws of the Round 6.5 in the article Why the Round 6.5 results published by WSO2 is flawed