PolyORB Middleware Technology


PolyORB is a general middleware technology for CORBA and other distributed systems technologies.

More specifically, PolyORB provides a uniform solution to build distributed applications relying either on middleware standards such as CORBA, the Ada 95 Distributed System Annex, SOAP, Web Services, or to implement application-specific middleware.

Middlewares are frameworks that hide the complex issues of distribution and provide the programmer with high-level abstractions that enable easy and transparent construction of distributed applications.

A number of different standards exist for creating object-oriented distributed applications. These standards offer two subsystems that enable interaction between application partitions:

  • the API seen by the developer’s applicative objects;
  • the protocol used by the middleware environment to interact with other nodes in the distributed application.

Middlewares provide implementation guidelines as well as development tools to ease the construction of large heterogeneous distributed systems. Yet, many issues typical to distributed programming may arise: application architectural choice, configuration or deployment. Since there is no “one size fits all” architecture, choosing the adequate distribution middleware in its most appropriate configuration is a key design point that dramatically impact the design and performance of an application.

Consequently, applications need to rapidly tailor middleware to the specific distribution model they require. A distribution model is defined by the combination of distribution mechanisms made available to the application. Common examples of such mechanisms are Remote Procedure Call (RPC), Distributed Objects or Message Passing. A distribution infrastructure or middleware refers to software that supports one (or several) distribution model, e.g.: OMG CORBA, Java Remote Method Invocation (RMI), the Distributed System Annex of Ada 95, Java Message Service (MOM).

PolyORB: a general middleware with an instance per distribution model

Typical middleware implementations for one platform supports only one set of such interfaces, pre-defined configuration capabilities and cannot interoperate with other platforms. In addition to traditional middleware implementations, PolyORB proposes an original architecture to enable support for multiple interoperating distribution models in a uniform canvas.

PolyORB is a polymorphic, reusable infrastructure for building or prototyping new middleware adapted to specific application needs. It provides a set of components on top of which various instances can be elaborated. These instances (or personalities) are views on PolyORB facilities that are compliant to existing standards, either at the API level (application personality) or at the protocol level (protocol personality). These personalities are mutually exclusive views of the same architecture.

The decoupling of application and protocol personalities, and the support for multiple simultaneous personalities within the same running middleware are key features required for the construction of interoperable distributed applications. This allows PolyORB to communicate with middleware that implement different distribution standards: PolyORB provides middleware-to-middleware interoperability (M2M).

Besides, PolyORB’s modularity allows for the easy extension or modification of its core components and personalities to meet specific requirements. Thus standard compliant or specific personalities can be created in a unique process, from early stage prototyping to full featured implementation. The PolyORB architecture also permits the automatic, just-in-time creation of proxies between incompatible environments.

PolyORB currently supports the following personalities (in the main development branch, available through Subversion access):

  • application personalities: CORBA, Distributed System Annex of Ada 95 (DSA), MOMA – MOM for Ada. Interaction between CORBA and DSA partitions has been successfully tested;
  • protocol personalities: SOAP, GIOP (CORBA protocol layer) and the folowing instanciations: IIOP (over TCP/IP), DIOP (over UDP/IP for oneway requests), and MIOP/UIPMC (group communication over multicast/IP);
  • under development: Web Services personality, an adaptation of the AWS API to PolyORB.

Subversion tree

The main development branch of PolyORB is accessible read-only by anonymous Subversion. You should use the PolyORB Subversion tree if you know what you are doing and if using a development version (with possible instabilities) does not frighten you. To check it out:

    svn checkout http://svn.eu.adacore.com/anonsvn/Dev/trunk/polyorb

You can also browse the repository on line.

Research work around PolyORB

PolyORB is part of our team’s research work, a joint project between ENST Paris and LIP6. You can get an overview of the project on PolyORB research page at http://polyorb.objectweb.org/.


Some units to develop PolyORB are GNAT-specific:

  • GNAT.Regpat used in the Simple Request Protocol.
  • GNAT.Debug_Pools used for debugging purposes (dependency can be removed by using the standard system storage pool instead).
  • GNAT.Sockets used as the interface to the system socket API.
  • GNAT.HTable used in several contexts where hash tables were desired.

If you want to build the SOAP protocol personality, you need to install the XmlAda library.

If you want to regenerate all generated files in PolyORB, you may also need the following tools:

  • autoconf
  • automake
  • Python

NOTE: the files generated by these tools are included in the distribution, so you do not need them in order to compile and install PolyORB, but only if you make some changes to some internal PolyORB structures.) If you do not have these tools installed, you can use the pre-generated files included in the distribution.

Related Web Sites

The following are some useful related web sites:

  • Libre software for Ada
    This page provides several packages and libraries that can be used with the Ada language, including the GNAT compiler, GtkAda, a graphical toolkit, and GVD, a graphical debugger.

Mailing lists

Please send bug reports and patches to polyorb-bugs@lists.adacore.com.

The list PolyORB-Users serves as a informal forum for technical discussions about PolyORB among users.

Authors and contributors

PolyORB is primarily developed by Jérôme Hugues, Thomas Vergnaud, Khaled Barbaria, Laurent Pautet (ENST Paris), and Thomas Quinot (AdaCore). Fabrice Kordon (LIP6) also participates in the project. Vadim Godunko regularly contributes by submitting patches.

The following people have also contributed to the project: Nicolas Archambault, Fabien Azavant, Benjamin Bagland, Emmanuel Chavane, Karim Chine, Jean-Marie Cottin, Olivier Delalleau, Cyril Domercq, Robert Duff, Michael Friess, Nicolas Fritsch, Jeremy Gibbons, Vadim Godunko, Jerome Guitton, Mejdi Kaddour, Narinder Kumar, Laurent Kubler, Lionel Litty, Vincent Niebel, Pascal Obry, Pablo Oliveira, Pierre Palatin, Bertrand Paquet, Sebastien Ponce, Nicolas Roche, Jerome Roussel, Selvaratnam Senthuran, Nicolas Setton, Frank Singhoff, Samuel Tardieu, Santiago Urueña-Pascual, Thomas Vergnaud, Florian Villoing, Guillaume Wisniewski, Thomas Wolf, Bechir Zalila.

Contributions and feedback on this project are most welcome. You can contact PolyORB developers through the polyorb-bugs mailing list as indicated above.

We’d like to add your name there, do not hesitate to contribute!