This Proposal was submitted as a Google Summer of Code 2011 Project Proposal at the Eclipse Foundation.
Eclipse developers use JDT to build awesome Java applications. They use Mylyn to focus their work. They use PDE to domesticate the power of EclipseRT. And they use command line tools to deploy their bundles and features. To improve this, I propose to implement tooling that allows for one-click deployment of any existing Eclipse Feature, for example Eclipse Orion, to Amazon’s EC2.
With the help of the EclipseRTP Cloud Images it is now very easy to deploy an Eclipse runtime with Equinox and p2 to an EC2 instance. Anyway, as soon as it comes to the provisioning of own bundles, you have to complete several steps to get them running. P2 allows to pull bundles from remote repositories, but it's not possible to push bundles to a remote installation of p2 out of the box. Most people therefore deploy their features to a local repository, upload this repository to a web server and use p2 to pull the repository from the web server and install the feature. This project aims to improve this workflow by providing an one-click solution.
The first thing I want to implement is a "run-as" configuration using the Eclipse Launch Framework that allows a one-click installation of an Eclipse feature to a running EC2 instance. To manage the remote EC2 servers I propose to implement an OSGi HttpService to run on the server. This service will provide an interface to upload a p2 repository to the server which will be put to a temporary directory. Having the repository on the remote host allows to use the p2 API to pull and install the repository locally, all controlled over the HTTP Service. Given the fact that this approach requires only one http connection to the remote server, it should be easy to use behind almost every cooperate firewall.
The next step is the implementation of an export dialog that allows the deployment to a new EC2 instance. The export wizard starts a new EclipseRTP EC2 instance, installs the HTTP Service and use the same code as the run-as configuration to deploy the chosen feature. To manage the EC2 instances I'll use the AWS Java SDK (Apache License) and push it to Orbit.
The new HTTP Service provides a generic service interface that might be used for different use cases, too. For example it might get deployed on a large amount of EC2 instances to run mass updates on all instances. It'd be awesome to ship the service with EclipseRTP some day, but other projects are possible, too.
The IDE plugin is also a standalone feature and might be shipped with PDE or Libra on the long run. It might also become an independent plugin for EC2 users alternatively.
Being a game-developing Nerd it’s now time to copy gaming terms to the daily communication. A Win condition is a term used in game development to describe the condition(s) which causes a player or a group of players to win a game. This project will be considered won (e.g. completed) as soon as a one-click deployment for Eclipse Orion (which is used as an example Eclipse feature) to the Amazon Cloud works without applying black magic or cheating (e.g. without temporary hacks used to fake / mock parts of the project).
Eclipse RTP: http://www.eclipse.org/rtp/
Eclipse RTP introduction: http://eclipsesource.com/blogs/2010/12/08/introducing-the-eclipse-rtp-project/
Runtime out-of-the-box, EclipseCon 2011, slides: http://eclipsesource.com/blogs/2011/03/25/eclipse-runtime-out-of-the-box-eclipsecon-2011-slides/
Amazon EC2: http://aws.amazon.com/ec2/
Eclipse Orion Server feature: http://git.eclipse.org/c/e4/org.eclipse.orion.server.git/tree/features/org.eclipse.orion.server-feature/feature.xml
OSGi Web Container: http://blog.springsource.com/2009/05/27/introduction-to-the-osgi-web-container/
AWS Java SDK: http://aws.amazon.com/sdkforjava/