Features vs. Product Files: A Case Study

Diamond Light Source’s synchrotron features many beamlines. A beamline is an experimental station where beams of light are used for a wide variety of scientific applications. Each beamline is controlled via client software from the beamline control room. The software is produced by the Generic Data Acquisition (GDA) team, and is called GDA Client. The GDA Client historically was written as a Swing GUI Java Application. In 2008, the GDA group began transitioning GDA to the Eclipse platform to take advantage of the many benefits Eclipse has to offer, such as:

  • moving from a monolithic implementation to well partitioned bundles,
  • better software reuse,
  • easier integration of third-party components and tools and
  • use of the many features already written into Eclipse, such as editors, views, and a consistent extensible menu structure.

One of the goals for improving GDA by migrating it to Eclipse was to streamline and improve the deployment procedure for the Client. The requirements for this were:

  • Build both interactively within the Eclipse IDE and from the command line
  • Incorporate the non-Java files like python scripts and configuration files
  • Support the individual configurations of each beamline

A number of alternative solutions were considered for solving this problem. Following general Eclipse recommendations, they all centred on using a combination of features and product files.

Eclipse features are a type of project providing a description to deploy and distribute an entire set of plug-ins that work together. A feature allows you to define what plug-ins make up the set, describe the dependencies and the versions of those dependencies. Features are used by Eclipse when creating update sites for use by the update manager. They are generally the top level item deployed if your deployment is expected to be added to an already installed instance of Eclipse.

Eclipse product xml files are the main definition of an install for a customized eclipse deployment. The product definition contains a list of plug-ins or features that make up the deployment. The product also defines the splash screen and other branding items, platform specific launch options, and which eclipse defined application to start with. An Eclipse product is used if the deployment is the entire application, eg a standalone RCP application.

Prior to complete product definition using the .product xml file, features would be used to build one or more sets of plug-ins, and something outside of eclipse, such as an ant build script, would assemble all the features, their corresponding plug-ins, an eclipse.exe – possibly renamed – and other necessary parts of an eclipse installation.

With the product xml file, it is possible to create a full deployment in one step using either the Export wizard in eclipse, or at the command line with the available ant tasks. It is possible to create an entire branded deployment in one step.

Defining a deployment using a product is a big step forward making it much easier to configure and deploy. However, there are still some drawbacks that make it more difficult to use that it could be.

One of them is that a product file can only list a set of features or a set of plug-ins, not a combination of the two. If most of your project is defined as features, any plug-ins not in a feature already will need to be trivially wrapped by a feature to be included in a product. The alternative is to list all the plug-ins in the product and not take advantage of the already defined features, leading to duplicated effort and maintaining multiple copies of the same information. Another problem is the only way to tell a plug-in to unpack on installation is to define that attribute in a feature.

For Diamond’s GDA Client, the main requirements mean that using product files are the correct option; however, features are still used due to the drawbacks mentioned above. In the GDA environment, each beamline requires its own customized deployment. Therefore, each beamline requires its own .product file. Since a feature is always needed due to the drawbacks listed, each beamline has its own feature project with its feature.xml. The feature.xml contains the list of plug-ins needed for this beamline, either as a list or plug-ins, included features or a combination of the two. For simplicity the product file is stored in the feature project so that all the beamline specific build and configuration files are located in the same location.

In conclusion products are a big step forward as a method for deploying eclipse products. However for this particular instance, they would need a couple of bugs fixed to be the ideal solution.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s