Once upon a time I have an idea. Why not to study well known and relatively small Java enterprise application? We live in the world of high-level Java applications: different kind frameworks, application servers, enterprise service buses, business process management systems, etc. From one side, it’s interesting how this industry organize. From another side, yes, we have some limitations in licenses for commercial products and usually ban on de-compilation, but I will not go out of research work. I don’t want to steal anything (real thief will not write articles), and at least at this article I will work with open information – primary with library names. I will try to understand thin organization of work of one enterprise product – enterprise service bus Sonic MQ 7.6. I am interested to study code, which seems to me etalon (I think, I will be disappointed!). And I am interested in such specifics as organization of physical containers in Sonic MQ, which is main mystery in this product. I have interest also in the common technological questions – especially, using of open source libraries. For this research work I need tools – JDCore Java Decompiler (http://java.decompiler.free.fr) – it’s good that Sonic did not apply any kind obfuscation. And, certainly, I will use google for Internet search. First I will try to investigate libraries and reproduce on their functionality common mechanism – it is, in any case, good interesting task of the introspection analysis.
List of native libraries in the Sonic MQ 7.6
Grouped list of native libraries (the first approximation)
- Work with standard java tools
antconfig.jar – customization of ant
- Work of broker
loggerAPI.jar – obviously, common logging library
pluginLogger70.jar – logging for Sonic 7.0
pluginLogger75.jar – logging for Sonic 7.5
pluginLogger76.jar – logging for Sonic 7.6
4. Work with physical containers (mf)
mfcontext.jar – work with container context
MFlaunch.jar – container’s launch
pluginMF21.jar – anything very old
pluginMF75.jar – stuff from version 7.5
pluginMF76.jar – stuff from version 7.6
MFdirectory.jar – support of the Sonic file system
5. Work with client (.NET-client and similar)
sonic_Client_ext.jar – work with Stream API, etc.
sonic_mgmt_client.jar – Management API
6. Work with configurations
mgmt_config.jar – don’t understand yet…
7. Work of mq-transport
pluginMQ61.jar – stuff for version 6.1
pluginMQ70.jar – stuff for version 7.0
pluginMQ75.jar – stuff for version 7.5
pluginMQ76.jar – stuff for version 7.6
pluginMQbroker.jar – work with broker from mq-side
smq-install.jar – installation mq?
smq_tools.jar – mq tools (Test Client, etc.)
smq_upgrade.jar – upgrade mq
sonic_ASPI.jar – JMS-implementation?
sonic_Channel.jar – work with channels
sonic_Selector.jar – work with selector API
rsa_ssl.jar – link to third-party library rsa
sonic_Crypto.jar – encryption
sonic_SSL.jar – work with SSL
9. Work with Sonic file system
pse.jar – is working also with databases (PSE Pro provides an application programming interface (API) that allows you to store Java objects persistently)
sdf.jar – as I understood, for testing
- Sonic Management Console
- Work with xml messages
Note existence of old versions libraries. It’s carelessness of distributive or Sonic really uses functionality of old libraries. Separate functionalities are physically placed into separate libraries as different kind APIs. Big corpus of libraries is about mq and containers, it’s not unusual, and it’s the most delicious part. Great attention have various plugins, and it’s really strange for un-plugined Sonic. Libraries have almost no reference to third-party jars, and, I think, it’s because of conscious license policy. Though few jars (pse.jar) consist of main body and sonic cover – probably, it’s simply result of several commands work. And we can find CERN-functionality in the library MFDirectory.jar, so any Sonic using organization far from atom physics can apply this functionality!
List of third-party libraries grouped on the license type
I. Free licenses (open source)
- xmlsec.jarII. Commercial licenses
Thematic list of third-party libraries
II. Data vizualisation
III. Web services
IV. Java beans
- V. Mail
List of third-party libraries with comments
- addressing-1.0.jar – Apache implementation of WS-Addressing
Apache Addressing is an implementation of the Web Services Addressing (WS-Addressing), published by the IBM, Microsoft and BEA as a joint specification, on top of Apache Axis (The Next Generation SOAP) – http://svn.apache.org/repos/asf/webservices/archive/addressing/site/index.html
- activation.jar – JavaBeans Activation Framework (Sun/Oracle) – http://www.oracle.com/technetwork/java/jaf11-139815.html
With the JavaBeans Activation Framework standard extension, developers who use Java technology can take advantage of standard services to determine the type of an arbitrary piece of data, encapsulate access to it, discover the operations available on it, and to instantiate the appropriate bean to perform said operation(s). For example, if a browser obtained a JPEG image, this framework would enable the browser to identify that stream of data as an JPEG image, and from that type, the browser could locate and instantiate an object that could manipulate, or view that image.
- mail.jar – JavaMail (Sun/Oracle, optional in J2SE, included in JEE) – http://www.oracle.com/technetwork/java/javamail/index.html
- jaxrpc.jar – JSR-000101 Java(TM) API for XML-Based RPC Specification Interface Classes 1.1 Final Release (Sun/Oracle)
The Java API for XML based RPC (JAX-RPC) enables Java technology developers to build Web applications and Web services incorporating XML based RPC functionality according to the SOAP (Simple Object Access Protocol) 1.1 specification.
By using JAX-RPC, developers can rapidly achieve Web services interoperability based on widely adopted standards and protocols.
5. jndi.jar – Java Naming and Directory Interface (JNDI) (Sun/Oracle)
- saaj.jar – Java Technology & XML Downloads – SOAP with Attachments API for Java (SAAJ) (Sun/Oracle)
- ant.jar, ant-launcher.jar – Apache Ant
- asn1.jar – RSA BSAFE® Crypto-J 3.4.3
certj.jar – Certificate Management Components for Java
jsafe.jar, jsafeJCE.jar – RSA BSAFE® Crypto-J 2.2
sslj.jar – SSL-J is a software development toolkit for building SSL security into enterprise-to-enterprise and commercial Internet applications.
RSA is department of EMC (hardware, memory cards, data warehousing), and its business is informational security. Founders – Rivest, Shamir, Adleman – authors of RSA algorithm.
- axis.jar – Apache Web Services – Axis
- bcprov-jdk14-127.jar, bcprov-jdk15-135.jar – Legion of the Bouncy Castle Java cryptography APIs
BouncyCastlewas created inAustraliaand has no American limitations for export of crypto-algorithms. Open source
- commons-discovery.jar – Apache Commons
The Discovery component is about discovering, or finding, implementations for pluggable interfaces. It provides facilities for instantiating classes in general, and for lifecycle management of singleton (factory) classes.
- commons-logging.jar – Apache Commons
The Logging package is an ultra-thin bridge between different logging implementations. A library that uses the commons-logging API can be used with any logging implementation at runtime. Commons-logging comes with support for a number of popular logging implementations, and writing adapters for others is a reasonably simple task.
13. jmxri.jar – Java Management Extension (JMX) 1.2.1 (Sun/Oracle)
14. js.jar – scripting Java by means Rhino Shell (Mozilla)
15. mcharts.jar – Charting platform for Java (singleton-labs)
For desktop and web
2D and 3D
Singleton Labs is company whose business is data visualization (graphs, charts, diagrams). Located inKaunas(Lithuania)
Shibboleth is part of MACE-project
In order to help create a national interoperable middleware infrastructure for research and education, Internet2 has brought together a group of leading campus IT architects to provide technical advice and direction. This group, called MACE (Middleware Architecture Committee for Education), draws its members from universities that are doing advanced work in this area. MACE aims to foster interoperability in areas such as security and directories.
17. sjsxp.jar – here are two JAR files in the Sun Java System XML Streaming Parser (SJSXP) implementation of JSR 173, Streaming API for XML (StAX). (Sun/Oracle)
18. soap.jar – Apache SOAP
19. wsdl4j.jar – the Web Services Description Language for Java Toolkit (WSDL4J) allows the creation, representation, and manipulation of WSDL documents (sourceforge)
20. wspbeans.jar – GridSAM provides a job submission open standards based web service for submitting computational jobs to many commonly used distributed resource management systems. (sourceforge)
21. wss4j.jar – Apache WSS4J is an implementation of the Web Services Security (WS-Security) being developed at OASIS Web Services Security TC. WSS4J is a primarily a Java library that can be used to sign and verify SOAP Messages with WS-Security information. WSS4J will use Apache Axis and Apache XML-Security projects and will be interoperable with JAX-RPC based server/clients and .NET server/clients.
22. xbean.jar – XMLBeans is a technology for accessing XML by binding it to Java types. (Apache)
23. xercesImpl.jar – As our charter will tell you, the Apache Xalan Project is a collaborative software development project dedicated to providing robust, full-featured, commercial-quality, and freely available XSLT support on a wide variety of platforms. (Apache)
24. xmlParserAPIs.jar is part of Apache xml-commons
25. xmlsec.jar is part of Apache Santuario
The Apache SantuarioTM project is aimed at providing implementation of the primary security standards for XML
Summary on third party libraries
For me it was discourage to find plenty of open source libraries in the commercial product. In fact, Progress paid for licenses only in the most important and complicated cases – for enterprise level security and data visualization. Why they have need in the package for drawing graphics and diagrams in the transport product – it’s question, on which I hope to find answer later. We have note once more that other libraries, and these are imposing packages on xml and web services, have free licenses (though here may be nuances), but mechanism is of special interest for me, and it’s important, that it’s building on the common accessible libraries.
It’s interesting, that we found activation.jar, which usually used for activation of bins in the enterprise level application servers. Plenty of web services libraries calls perplexity in my feelings – what do they do on the MQ-level? Probably, they make parsing messages after calling web services in a bus? Reference to the mail.jar is enigmatic too – because Sonic is not working with e-mail directly, there is special component for this work. Existence of the xslt-library calls similar questions – probably, library works for purposes of inner routing.
We have yet more questions then answers. Sonic built in many respects on the open-source libraries. Commercial licenses are using for strictly definite purposes (data visualization, enterprise level security). Basic mechanism (brokers, containers, clients, mq, security questions) is written by Progress Sonic. And we will dig into that side – to the mechanism of containers launching, first, and this will be theme of the next article.