Running RAP on Virgo

You used to have just two options for deploying a RAP application:

  1. Packing your application into a WAR archive and deploying it on a standard servlet container such as Tomcat, or
  2. Embedding the Application and a servlet container in a standalone Equinox instance.

Now you have a third option because RAP runs on Virgo! Virgo is a full-featured OSGi based application server and is one of the shining new stars of the Eclipse ecosystem. Previously, we weren’t able to deploy RAP applications on this server because we were blocked by bugs relating to split packages. However, over the last few weeks we worked together with the Virgo team to fix these issues and we are happy to report success.

Here are the steps we used to deploy RAP on Virgo. We know the process can be improved, but just to give you an idea of how it works, try the following:

  1. Download Virgo Kernel[1] (2.1.0.RELEASE) and unpack the downloaded archive to a directory (We’ll use ${KERNEL_HOME} in this post).
  2. Download the RAP Runtime[2] (1.3.x) and extract the contents of the plugin folder into the Virgo repository:
    unzip rap-runtime-1.3.1-R-20100915-2301.zip "eclipse/plugins/*.jar" -x "eclipse/plugins/*.source_*" -d /tmp
    cp /tmp/eclipse/plugins/*.jar ${KERNEL_HOME}/repository/usr
  3. (via OSGi console) Enable the OSGi console by configuring the User Region, Virgo’s subsystem for managing user applications.
    Open $SERVER_HOME/config/org.eclipse.virgo.kernel.userregion.properties and uncomment the osgi.console property: 

    ...
    # osgi console support
    osgi.console=2401

  4. (optional) Change the default port of the OSGi HttpServiceexport JAVA_OPTS=-Dorg.osgi.service.http.port=10081
  5. Start the Virgo Kernel
    ./startup.sh
     

    ...
    [2010-10-28 11:43:23.767] Thread-2 User region ready.

  6. Virgo Plans[3] encapsulate the artifacts of an application as a single unit. We’ve created a rap-demo.plan for you. You can inspect and download from here:
    rap-demo.plan
  7. Now add the downloaded rap-demo.plan to the pickup folder ${KERNEL_HOME}/pickup. You will see the following deployment:
    [2010-10-28 11:04:02.113] fs-watcher Hot deployer processing 'MODIFIED' event for file 'virgo-rap-demo.plan'.
    [2010-10-28 11:04:02.161] fs-watcher Installing plan 'virgo-rap-demo' version '1.3.1'.
    [2010-10-28 11:04:02.187] fs-watcher Installing plan 'vigo-equinox-extensions' version '3.6.1'.
    [2010-10-28 11:04:02.209] fs-watcher Installing plan 'virgo-rap-extensions' version '1.3.1'.
    [2010-10-28 11:04:06.397] fs-watcher Installing bundle 'org.eclipse.rap.demo' version '1.3.1.20100915-2301'.
    [2010-10-28 11:04:06.966] fs-watcher Installing bundle 'org.eclipse.osgi.services' version '3.2.100.v20100503'.
    [2010-10-28 11:04:07.473] fs-watcher Installing bundle 'org.eclipse.equinox.preferences' version '3.3.0.v20100503'.
    [2010-10-28 11:04:07.775] fs-watcher Installing bundle 'org.eclipse.equinox.app' version '1.3.1.R36x_v20100803'.
    [2010-10-28 11:04:08.440] fs-watcher Installing bundle 'org.eclipse.core.commands' version '3.6.0.I20100512-1500'.
    ...
    [2010-10-28 11:05:45.458] fs-watcher Starting bundle 'org.eclipse.rap.demo' version '1.3.1.20100915-2301'.
    [2010-10-28 11:05:45.464] start-signalling-1 Started bundle 'org.eclipse.rap.demo' version '1.3.1.20100915-2301'.
  8. (via OSGi console) You can now start the OSGi HttpService using the Equinox Console and start the HttpService manually user@hostname:~/> telnet localhost 2401
    Trying ::1…
    Connected to localhost.
    Escape character is ‘^]’. 

    osgi> ss

    33 <> org.eclipse.equinox.http.jetty_2.0.0.v20100503

    osgi> start 33

  9. And, finally point your browser to http://localhost:10081/rap?startup=controls

That’s it – RAP is now running on Virgo. We want to improve this process over time and, hope that you will share some ideas with us on how to do this. You can respond to this blog or ping us on the RAP newsgroup.

PS -One alternative solution to starting the HttpService via the OSGi console is adding an autostart bundle to the plan:

  1. (via autostart) Download the org.equinoxosgi.core.autostart bundle as used at equinoxosgi.org – starts all lazy bundles in the OSGi container.
  2. (via autostart) Add the autostart bundle to the downloaded plan before dropping into the pickup folder.

[1] Virgo Downloads – http://www.eclipse.org/virgo/download/

[2] RAP Runtime – http://eclipse.org/rap/downloads/1.3/

[3] Virgo Documentation – Programmer Guide 4.3 Creating Plans – http://www.eclipse.org/virgo/documentation/

[4] Virgo Documentation – User Guide 11.1. Configuring the Virgo Kernel and User Region – http://www.eclipse.org/virgo/documentation/

4 Comments
  • zuegg
    Reply
    Posted at 5:21 pm, November 5, 2010

    Great job! I successfully deployed my rap application on Virgo but I’ve a question: is there a way to automatically start org.eclipse.equinox.http.jetty bundle instead of manually starting it from osgi console?

  • zuegg
    Reply
    Posted at 10:00 am, November 8, 2010

    Please ignore my previous question, i missed the “PS” section 🙂

  • Alexander
    Reply
    Posted at 2:04 am, June 15, 2011

    Unfortunately, it builds but it is not well deployed under JBOSS 4.2.3.
    It says:

    !ENTRY org.eclipse.osgi 2 0 2011-06-15 01:49:29.876
    !MESSAGE While loading class “org.eclipse.ui.PlatformUI”, thread “Thread[Framework Event Dispatcher,5,jboss]” timed out waiting (5000ms) for thread “Thread[Start Level Event Dispatcher,5,jboss]” to finish starting bundle “org.eclipse.rap.ui.workbench_1.3.2.20110216-1023 [24]”. To avoid deadlock, thread “Thread[Framework Event Dispatcher,5,jboss]” is proceeding but “org.eclipse.ui.PlatformUI” may not be fully initialized.
    !STACK 0
    org.osgi.framework.BundleException: State change in progress for bundle “initial@reference:file:plugins/org.eclipse.rap.ui.workbench_1.3.2.20110216-1023.jar/” by thread “Start Level Event Dispatcher”.
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.beginStateChange(AbstractBundle.java:1077)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:282)
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:417)
    at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:265)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClas

    I have 64-bit JVM

Post a Comment

Comment
Name
Email
Website