Wednesday, June 19, 2013
Is Subversion Going to Make a Come Back?
Tuesday, February 5, 2013
How the World's Fastest ESB was Made
- Ultra-fast, low latency mediation of HTTP requests.
- Supporting a very large number of inbound (client-ESB) and outbound (ESB-server) connections concurrently (we were looking at several thousand concurrent connections).
- Automatic throttling and graceful performance degradation in the presence of slow or faulty clients and servers.
- Configuration overhead (Users had to explicitly enable the transport depending on their target use cases)
- Cannot support any integration scenario that requires HTTP content manipulation (because Axiom was bypassed, any mediator attempting to access the message payload would not get anything useful to work with)
- Content-unaware mediators – Mediators that never access the message content in anyway (eg: drop mediator)
- Content-aware mediators – Mediators that always access the message content (eg: xslt mediator)
Tuesday, September 25, 2012
Busting Synapse and WSO2 ESB Myths
- An architectural construct that provides fundamental services to complex architectures
- An entity that acts as a hub connecting many diverse systems
- A central driver that facilitates Enterprise Application Integration (EAI)
- Message passing, routing and filtering
- Message transformation
- Protocol conversion
- QoS enforcement (security, reliable delivery etc)
- Logging, auditing and monitoring
- FIX transport
- SAP transport (IDoc and BAPI support)
- MLLP transport and HL7 message formats
- CSV and various other office document formats
- Thrift connector
- Numerous other custom binary protocols based on TCP/IP
Saturday, January 15, 2011
Apache Synapse 2.0 Released

- New, fine-grained configuration model
- Hot deployment and hot update support for configuration artifacts
- Priority based mediation support
- Comprehensive eventing capabilities with WS-Eventing support
- Secure vault for encrypting passwords in configuration files
- File locking support in the VFS transport for concurrent polling
- URLRewrite mediator for fast and simple URL rewriting
- Synapse configuration observer API
- Multiple identity support in the HTTPS transport
- Enhanced JMX monitoring support for the NHTTP transport
- Dead letter channel implementation (experimental)
- Synapse XAR Maven plug-in for generating configuration artifacts
Tuesday, December 7, 2010
Apache Xerces2/J 2.11.0 Released
- Implemented XML Schema 1.1's simplified complex type restriction rules (also known as subsumption)
- Added support for XML Schema 1.1's overriding component definitions (<xs:override>)
- Added experimental support for a parser and evaluator for XML Schema Component Designators (SCD)
- Implemented support for the vc:typeAvailable, vc:typeUnavailable, vc:facetAvailable and vc:facetUnavailable attributes for conditional inclusion processing in XML Schema 1.1 documents
- Implemented support for allowing xs:group as a child of xs:all in XML Schema 1.1 documents
- Made several enhancements to the support for assertions in the XML Schema 1.1 implementation
- Improved the ways in which the XML Schema API exposes values and identity constraint information
- Fixed a bug where XMLSchemaValidator.findSchemaGrammar() was not getting called for substitution groups
- Fixed a bug in the regular expression support which was introduced in the previous release. See JIRA Issue XERCESJ-1456 for details
- Fixed multiple issues with decimal precision in the processing of xs:precisionDecimal value
- Fixed various bugs and made various improvements
Thursday, November 11, 2010
ASF Says "It's On"
Oracle was forced to eat crow and congratulate ASF for its near unanimous election back onto the JCP's SE and EE executive committee. It was an election that saw its own nominee - the little-known-outside-Oracle-circles Hologic - soundly rejected by JCP members.Congratulating ASF, Oracle's spokesperson on Java SE, Henrik Ståhl, claimed Oracle still respected ASF and wanted to work with the group. "Our disagreement around TCK licensing does in no way lower our respect for and desire to continue to work with Apache," Ståhl said here.On Tuesday, the ASF told Ståhl and Oracle just exactly where they could shove their "respect" with a statement saying it is walking out of the JCP unless Harmony gets a license.
Sunday, June 27, 2010
Axis2 TCP Transport Revamped
- transport.tcp.port - Port number (mandatory parameter)
- transport.tcp.hostname - The host name to which the server socket should be bound
- transport.tcp.backlog - The length of the message back log for the server socket (defaults to 50)
- transport.tcp.contentType - Content type of requests (defaults to text/xml)
Saturday, June 12, 2010
New Configuration Model of Synapse
- Configuration management becomes a nightmare as the size of the synapse.xml grows. A typical heavy duty configuration would consist of dozens of proxy services, sequences and endpoints. When all these are packed into a single XML file, it becomes difficult to locate a single configuration item quickly.
- With all configuration artifacts stored in a single flat file, it is almost impossible to develop satisfactory tooling support for configuration development and maintenance.
- A team of developers cannot work on configuring a single Synapse instance at the same time.
- Hot deployment is a feature that Synapse has been lacking for years. Being able to hot deploy a proxy service or a sequence into Synapse without having to restart the service bus is a great convenience at development time. But a configuration model based on a single XML file is not at all capable of handling such requirements.
synapse-config
|
+-- registry.xml
+-- endpoints
+-- event-sources
+-- local-entries
+-- proxy-services
+-- sequences
`-- tasks
private static FileFilter filter = new FileFilter() {
public boolean accept(File pathname) {
return (pathname.isFile() && pathname.getName().endsWith(".xml"));
}
};
private static void createProxyServices(SynapseConfiguration synapseConfig, String rootDirPath)
throws XMLStreamException {
File proxyServicesDir = new File(rootDirPath, PROXY_SERVICES_DIR);
if (proxyServicesDir.exists()) {
if (log.isDebugEnabled()) {
log.debug("Loading proxy services from : " + proxyServicesDir.getPath());
}
File[] proxyDefinitions = proxyServicesDir.listFiles(filter);
for (File file : proxyDefinitions) {
try {
OMElement document = parseFile(file);
ProxyService proxy = SynapseXMLConfigurationFactory.defineProxy(
synapseConfig, document);
proxy.setFileName(file.getName());
SynapseArtifactDeploymentStore.getInstance().addArtifact(
file.getAbsolutePath(), proxy.getName());
} catch (FileNotFoundException ignored) {}
}
}
}
- With Synapse configuration broken down into smaller, manageable pieces the whole configuration becomes easier to manage and keep track of. As long as the XML files are named appropriately, it is extremely easy to quickly locate a particular configuration item. We recommend using the artifact names to name the corresponding XML files. For an example the file containing the definition of the FooProxy can be named FooProxy.xml.
- With the multi XML configuration builder, developing powerful and elegant tools for creating pieces of the service bus configuration becomes a trivial task. Also one can use conventional configuration management tools and version controlling systems such as Subversion to store and manage the configuration artifacts.
- A team of developers can now work on configuring Synapse. Each developer in the team can work on his own configuration file or set of files.
- Supporting hot deployment is now feasible. As a matter of fact, Ruwan implemented hot deployment and hot update support for Synapse based on the multi XML configuration builder a few weeks back. This feature is now available in the Synapse trunk and will be available for the next Synapse release.
private void cleanUpDirectory() throws Exception {
// If the target directory already exists and contains any files simply rename it to
// create a backup - This method does not delete the target directory
if (rootDirectory.exists() && rootDirectory.isDirectory() &&
rootDirectory.listFiles().length > 0) {
if (log.isDebugEnabled()) {
log.debug("The directory :" + rootDirectory.getPath() + " already exists. " +
"Creating a backup.");
}
backupDirectory = new File(rootDirectory.getParentFile(), "__tmp" +
new GregorianCalendar().getTimeInMillis());
FileUtils.moveDirectory(rootDirectory, backupDirectory);
}
// Create a new target directory
FileUtils.forceMkdir(rootDirectory);
}
private void writeToFile(OMElement content, File file) throws Exception {
File tempFile = File.createTempFile("syn_mx_", ".xml");
OutputStream out = new FileOutputStream(tempFile);
XMLPrettyPrinter.prettify(content, out);
out.flush();
out.close();
FileUtils.copyFile(tempFile, file);
FileUtils.deleteQuietly(tempFile);
}
Wednesday, April 14, 2010
Apache Attacks: A Real Eye Opener
Friday, December 4, 2009
Introduction to Apache Synapse @ Apache Asia 2009
Sunday, November 15, 2009
Introducing "WSO2 ESB Tips and Tricks"
- Non-blocking HTTP transport : The HTTP server worker threads of the ESB do not get blocked over network I/O. The Apache HTTP Core-NIO based transport makes it possible to accept many concurrent connections and process more messages than any other Java HTTP transport implementation.
- Pull Parsing and Streaming Model: WSO2 ESB uses Apache AXIOM, the StAX based XML infoset model. Therefore it does not build the object model for incoming messages, unless it has to. Incoming bytes are streamed through the ESB without touching the payload. This reduces memory usage significantly and also saves many valuable CPU cycles.
Saturday, September 12, 2009
Enterprise Messaging with Synapse, WSO2 ESB and WebSphere MQ
- com.ibm.mqjms.jar
- fscontext.jar
- providerutil.jar
- com.ibm.mq.jmqi.jar
- dhbcore.jar
<parameter name="default">
<parameter name="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</parameter>
<parameter name="java.naming.provider.url">file:/var/mqm/jndi</parameter>
<parameter name="transport.jms.ConnectionFactoryJNDIName">ivtQCF</parameter>
<parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
<parameter name="transport.jms.Destination">ivtQ</parameter>
</parameter>
<proxy name="JMSProxy" transports="jms">
<target>
<inSequence>
<log level="full"/>
<drop/>
</inSequence>
</target>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>application/xml</default>
</rules>
</parameter>
</proxy>
- Set the jms_dest property default value to "ivtQ" (line 45)
- Set the java.naming.provider.url to "file:/var/mqm/jndi" (line 82)
- Set the java.naming.factory.initial to "com.sun.jndi.fscontext.RefFSContextFactory" (line 85)
- Set the lookup key to "ivtQCF" (line 89)
<parameter name="default">
<parameter name="java.naming.factory.initial" >com.sun.jndi.fscontext.RefFSContextFactory</parameter>
<parameter name="java.naming.provider.url" >file:/var/mqm/jndi</parameter>
<parameter name="transport.jms.ConnectionFactoryJNDIName" >ivtQCF</parameter>
<parameter name="transport.jms.ConnectionFactoryType" >queue</parameter>
<parameter name="transport.jms.Destination">BOGUSQ</parameter>
</parameter>
Saturday, April 25, 2009
Summer of Code is Back
Thursday, April 9, 2009
Committed to Apache Xerces

- Apache Xerces C++
- Apache Xerces2 Java
- Apache Xerces Perl
- Apache XML Commons
- XML 1.0 (4th Edition)
- Namespaces in XML 1.0 (2nd Edition)
- XML 1.1 (2nd Edition)
- Namespaces in XML 1.1 (2nd Edition)
- W3C XML Schema 1.0 (2nd Edition)
- XInclude 1.0 (2nd Edition)
- OASIS XML Catalogs 1.1
- SAX 2.0.2
- DOM Level 3 Core, Load and Save
- DOM Level 2 Core, Events, Traversal and Range
- JAXP 1.3
Saturday, April 4, 2009
WSO2 ESB 2.0.2 Released...Come and Get it
The WSO2 ESB team is pleased to announce the release of version 2.0.2 of the Open Source Enterprise Service Bus (ESB). This is a bug fix release of the 2.0 release of WSO2 ESB
WSO2 ESB is a lightweight and easy-to-use Open Source Enterprise Service Bus (ESB) available under the Apache Software License v2.0. WSO2 ESB allows administrators to simply and easily configure message routing, intermediation, transformation, logging, task scheduling, etc.. The runtime has been designed to be completely asynchronous, non-blocking and streaming based on the Apache Synapse core.
WSO2 ESB 2.0.2 is developed on top of the revolutionary Carbon platform (Middleware a' la carte), and is based on the OSGi framework to achieve the better modularity for your SOA architecture. This also contains a lots of new features and many other optional components to customize the behavior of the server. Further, if you do not want any of the built in features, you can uninstall those features without any trouble. In other words, this ESB can be customized to your SOA needs.
You can download this distribution from http://wso2.org/downloads/esb and give it a try.
How to Run
- Extract the downloaded zip
- Go to the bin directory in the extracted folder
- Run the wso2server.sh or wso2server.bat as appropriate
- Point your browser to the URL https://localhost:9443/carbon
- Use "admin", "admin" as the username and password to login as an admin and create a user account
- Assign the required permissions to the user through a role
- If you need to start the OSGi console with the server use the property -DosgiConsole when starting the server
- Samples configurations can be specified by passing the property -Desb.sample=${SAMPLE_NUMBER}
Key Features
- Proxy services - facilitating transport, interface (WSDL/Schema/Policy), message format (SOAP 1.1/1.2, POX/REST, Text, Binary), QoS (WS-Addressing/WS-Security/WS-RM) and optimization switching (MTOM/SwA).
- Non-blocking HTTP/S transports based on Apache HttpCore for ultrafast execution and support for thousands of connections at high concurreny with constant memory usage.
- Built in Registry/Repository, facilitating dynamic updating and reloading of the configuration and associated resources (e.g. XSLTs, XSD, JS, ..)
- Easily extended via custom Java class (mediator and command)/Spring mediators, or BSF Scripting languages (Javascript, Ruby, Groovy, etc.)
- Built in support for scheduling tasks using the Quartz scheduler.
- Load-balancing (with or without sticky sessions) /Fail-over, and clustered Throttling and Caching support
- WS-Security, WS-Reliable Messaging, Caching and Throttling configurable via (message/operation/service level) WS-Policies
- Lightweight, XML and Web services centric messaging model
- Support for industrial standards (Hessian binary web service protocol/Financial information exchange protocol)
- Enhanced support for the VFS/JMS/Mail transports
- Support for message splitting and aggregation using the EIP
- Database lookup and store support with DBMediators with reusable database connection pools
- JMX monitoring support
New Features of the WSO2 ESB 2.0 (2.0.2)
- This ESB release is based on Carbon "Middleware a' la carte" which is an OSGi based SOA platform by WSO2 Inc.
- Transactional JMS transport and the Transaction mediators
- Integrated graphical user management
- Integrated graphical key store management
- Configurable logging through the management console
- Graphical data source declaration
- WS-Eventing support and Event Sources making it an event broker
- Enhanced sequence and proxy service editor
- Module management capability
- Transport configuration management through the graphical console
- Graceful/Forced shutdown/restart
- Enhanced integrated registry and search functionalities
- User permissions support
- Enhanced monitoring tools for statistics and tracing
- Try-It tool to try an existing service
- Graphical policy editor
- Administration console fully internationalized
- Better modularity and extendability through OSGi component architecture
How You Can Contribute....
Mailing Lists
Join our mailing list and correspond with the developers directly.
- Developer List : esb-java-dev@wso2.org
- User List : esb-java-user@wso2.org
Reporting Issues
WSO2 encourages you to report issues and your enhancement requests for the WSO2 ESB using the public JIRA.
You can also watch how they are resolved, and comment on the progress..
Discussion Forums
Alternatively, questions could be raised using the forums available.
WSO2 ESB Forum : Discussion forum for WSO2 ESB developers/users
Training
WSO2 Inc. offers a variety of professional Training Programs, including training on general Web services as well as WSO2 ESB, Apache Synapse, Apache Axis2 and number of other products.
For additional support information please refer to http://wso2.com/training/course-catalog/
Support
WSO2 Inc. offers a variety of development and production support programs, ranging from Web-based support up through normal business hours, to premium 24x7 phone support.
For additional support information please refer to http://wso2.com/support/
For more information on WSO2 ESB, visit the WSO2 Oxygen Tank (http://wso2.org)
We welcome your feedback on this implementation. Thank you for your interest in WSO2 ESB.
-- The WSO2 ESB Team --
Friday, March 27, 2009
ApacheCon EU 2009....Finishing Touches
- Embrace OSGi (by Carsten Ziegeler, member of ASF)
- Tales from OSGi trenches (by Bertrand Delacretaz, member of ASF)
- OSGi as a framework for building a product line (by Ruwan Linton and Afkham Azeez, WSO2)
- HBasics: Hadoop's big database (by Michael Stack, Microsoft)
- Apache license as a business model (by Paul Fremantle, WSO2)
- Clustered Web services for high availability and scalability (by Ruwan Linton, WSO2)
- EDA with Apache Synapse (by Paul Fremantle, WSO2)
- Performance tuning Apache Tomcat (by Filip Hanik, SpringSource)
- How to become a project at ASF (by Martijn Dashorst)
- Introduction to NIO 2.0 (by Jeanfrancois Arcand)
- Using MINA 2.0 (by Emmanuel Lecharmy, IKTEK)
- Becoming a Tomcat super user (by mark Thomas, SpringSource)
- High availability != High cost (by Norman Maurer, HEAG MediaNet)
- Apache POI (by Nick Burch, Torchbox)
- Enterprise build & test in the cloud (Carlos Sanchez, G2iX)
- Shindig for blogs and wikis (Dave Johnson, VP Apache Roller)
Out of the two keynotes, I really enjoyed the keynote on 'open sourcing the analyst business' by James Governor. It was a real blast!
In addition to all the technical knowledge I gathered during the conference I also made quite a lot of new friends. I met some very interesting people working at various levels and projects of the ASF. All in all it was a very successful ApacheCon, not just to me but to everybody that participated. (I have a lot more to mention but unfortunately I have to cut it short. I have lot of packing left to do before I start the return journey tomorrow morning.)
Wednesday, March 25, 2009
Happy Birthday ASF
All in all it was a great birth day party with loads of fun and excitement. Happy 10th anniversary ASF!!!
Monday, March 23, 2009
ApacheCon EU 2009 Begins
All in all it was a really awesome BarCamp with lots of great talks, t-shirts, sweets and coffee. Let's see how the things turn out tomorrow.
Monday, September 1, 2008
GSoC 2008 ....... Done
The objective of my GSoC project was to implement XML schema type alternatives support for Apache Xerces2/J, the legendary open source XML parser for Java applications. Type alternatives is the answer from W3C XML schema working group, for conditional type assignment problem. This feature was first introduced in the XML schema 1.1 structures specification. Type alternatives allow a type to be assigned to an element dynamically at validation time based on one or more conditions. Conditions are expressed as XPath 2.0 expressions. Here is an example element declaration which uses XML schema type alternatives.

When the schema validator encounters an element declaration with one or more type alternatives it will evaluate the test expressions one by one until an expression which evaluates to true is found. When such a matching type alternative is found the corresponding type will be assigned to the element. If none of the type alternatives match then a default type will be assigned.
My project mainly consisted of two main sections. First section of the project was to implement the type alternatives traversal support so that Xerces2/J can properly traverse an XML schema document which contains type alternatives and add the corresponding information to the schema grammar. Implementing this was fairly easy and I managed to complete it prior to th GSoC mid term evaluations. The second part of the project was to implement type alternatives validation. This was fairly difficult since I had to develop a bare minimal XPath 2.0 implementation for Xerces2/J. Developing the XPath processor actually covered a significant portion of the entire project.
My workings will be fully available in the Xerces2/J code base (even now the code related to traversal part is in one of the SVN branches) very soon. All in all it was a great learning experience as it was a great opportunity for me to learn a whole bunch of cool technologies like XML, XML schema, and XPath 2.0. I also got the opportunity to put some of my knowledge on theory of computing into action and sharpen my programming skills. I would like to give my heartiest gratitude to the Google, the Apache community and very specially to my mentor Khaled Noaman for being a very supportive guide right from the start of my project.
Saturday, August 9, 2008
Fixing the FIX Transport
The 1.2 version of Apache Synapse, the open source lightweight ESB was released on June 2008. One of the most striking features of this release was the FIX transport implementation, mainly due to the fact that most ESBs in the world still do not support the FIX protocol. The Synapse FIX transport implementation which is only two months old at the moment has already made a lot of hype in the world of Software Engineering and SOA. It seems we already got a few interested people (potential clients?) who are at the moment testing and playing with the transport.
Synapse 1.2 ships with two samples that demonstrate the FIX transport module. One of them demonstrates how two FIX endpoints can be bridged using Apache Synapse. The other samples shows how to bridge an HTTP client with a FIX endpoint. Over the last couple of months the Synapse community has worked really hard to further improve the FIX transport implementation and also to identify more exciting usecases for the transport module. As a result we managed to add four new samples demonstrating the FIX transport to the Synapse documentation. These samples are currently available in the Apache Synapse Snapshot and will be most likely included in the next release.
The first of the four newly added samples (sample 259) shows how to bridge a FIX client with an HTTP endpoint. The sample effectively demonstrates how Banzai, the sample FIX blotter that ships with Quickfix/J can be used to send order requests via Synapse to a service listening on HTTP. The sample uses the XSLT mediator to convert the FIX messages into a SOAP messages.
The second of the new samples (sample 260) shows how Synapse can be used to bridge a FIX endpoint with an AMQP endpoint. Here once the FIX message is converted into XML it will be bound to a JMS payload and sent to an AMQP consumer. Since AMQP is used widely in business applications, I believe that this sample will open up the door way to a ton of really cool usecases.
The third sample (sample 261) demonstrates how Synapse can be used to switch between FIX sessions with different versions (BeginString values). The sample successfully bridges a FIX 4.0 session with a FIX 4.1 session but the underlying concepts can be used to bridge virtually any two FIX sessions. One thing worth mentioning here is that the FIX transport implementation of Synapse initially did not support bridging FIX sessions of different versions. But considering the potential usecases, we implemented that feature very recently.
The fourth newly added sample (sample 262) demonstrates how CBR (Content Based Routing) can be done with FIX messages using Apache Synapse. The sample configuration causes Synapse to accept FIX messages over a session, read a certain symbol in the messages and based on the symbol value route the messages to different endpoints.
We also added namespace support to the FIX transport module so that it can properly parse and validate XML based FIX messages with namespaces. Another recent feature addition was improving the way FIX sessions are initialized in Synapse. The initial implementation lazy initializes all the FIX sessions for outgoing FIX messages. That means an outgoing session will not be created until a message arrives for that particular session. However since this leads to fairly large delays we improved the transport module so that the outgoing sessions are also initialized at the startup along with the incoming sessions. (the old way of initializing sessions is also supported)
Currently we are working on adding support for FIX repeated groups. (we already have a feature request for this on the JIRA from one of our users) All in all it seems that the FIX transport module for Synapse is increasingly becoming a very powerful and matured piece of software in a blistering rate.

