ProActive: Programming, Composing, Deploying on the Grid
An Open Source Middleware For Parallel, Distributed, Multicore Computing

ProActive IC2D

Interactive Control and Debugging of Distribution


Version 2012-01-17


The OASIS Research Team and ActiveEon Company



INRIAUNSACNRS-I3S
OW2ActiveEon



Generated on 2012-01-17

ProActive IC2D v2012-01-17 Documentation

Legal Notice

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; version 3 of the License.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

If needed, contact us to obtain a release under GPL Version 2 or 3, or a different license than the GPL.

Contact: or

Copyright 1997-2011 INRIA/University of Nice-Sophia Antipolis/ActiveEon.

Mailing List

Mailing List Archive

http://www.objectweb.org/wws/arc/proactive

Bug-Traking System

http://bugs.activeeon.com/browse/PROACTIVE


Contributors and Contact Information

Team Leader

Denis Caromel
INRIA 2004, Route des Lucioles, BP 93
06902 Sophia Antipolis Cedex
France
phone: +33 492 387 631
fax: +33 492 387 971
e-mail:

Contributors from OASIS Team Contributors from ActiveEon Company
  • Brian Amedro

  • Francoise Baude

  • Francesco Bongiovanni

  • Florin-Alexandru Bratu

  • Viet Dung Doan

  • Yu Feng

  • Imen Filali

  • Fabrice Fontenoy

  • Ludovic Henrio

  • Fabrice Huet

  • Elaine Isnard

  • Vasile Jureschi

  • Muhammad Khan

  • Virginie Legrand Contes

  • Eric Madelaine

  • Elton Mathias

  • Paul Naoumenko

  • Laurent Pellegrino

  • Guilherme Peretti-Pezzi

  • Franca Perrina

  • Marcela Rivera

  • Christian Ruz

  • Bastien Sauvan

  • Oleg Smirnov

  • Marc Valdener

  • Fabien Viale

  • Vladimir Bodnartchouk

  • Arnaud Contes

  • Cédric Dalmasso

  • Christian Delbé

  • Arnaud Gastinel

  • Jean-Michel Guillaume

  • Olivier Helin

  • Clément Mathieu

  • Maxime Menant

  • Emil Salageanu

  • Jean-Luc Scheefer

  • Mathieu Schnoor

Former Important Contributors
  • Laurent Baduel (Group Communications)

  • Vincent Cave (Legacy Wrapping)

  • Alexandre di Costanzo (P2P, B&B)

  • Abhijeet Gaikwad (Option Pricing)

  • Mario Leyton (Skeleton)

  • Matthieu Morel (Initial Component Work)

  • Romain Quilici

  • Germain Sigety (Scheduling)

  • Julien Vayssiere (MOP, Active Objects)

Table of Contents

Part I. Introduction

Chapter 1. Overview
1.1. IC2D Overview
1.2. IC2D Installation
1.2.1. User Installation
1.2.2. Developer Installation

Part II. IC2D Graphical Tools

Chapter 2. IC2D: Interactive Control and Debugging of Distribution
2.1. Monitoring and Control
2.1.1. The Monitoring plugin
2.1.2. The TimIt plugin
2.1.3. The ChartIt plugin
Chapter 3. Using IC2D debugging features
3.1. Debugging a ProActive Application using IC2D
3.1.1. The connection
3.1.2. How to use the IC2D debugger connection tools
3.2. Step by step mode
3.2.1. Breakpoints Overview
3.2.2. Step by step controls
Chapter 4. Distributed Services Flow (DSF) Analysis
4.1. Distributed Services Flow Analysis Overview
4.2. How to analyse your application
4.3. Graph of communications services
4.4. Sequence Diagram of a DSF

Part III. Extending IC2D

Chapter 5. Adding Grahical User Interfaces and Eclipse Plugins
5.1. Architecture and documentation
5.1.1. org.objectweb.proactive.ic2d.monitoring
5.1.2. org.objectweb.proactive.ic2d.console
5.1.3. org.objectweb.proactive.ic2d.lib
5.2. Extending IC2D
5.2.1. How to checkout IC2D
5.2.2. How to implement a plug-in for IC2D
5.3. How to create the IC2D stand-alone application from the sources
5.3.1. Required
5.3.2. First step: Import required libraries in the 'org.objectweb.proactive.ic2d.lib' plug-in
5.3.3. Second step: Import the different plug-ins in Eclipse
5.3.4. Third step: Launch IC2D in Eclipse
5.3.5. Last step: Export IC2D
5.3.6. FAQ
5.3.7. Useful links

List of Figures

2.1. The Monitoring Perspective
2.2. Monitor New Host Dialog
2.3. Monitor a new host
2.4. Set depth control
2.5. Set time to refresh
2.6. Refresh
2.7. Enable/Disable Monitoring
2.8. Zoom In
2.9. Zoom out
2.10. New Monitoring View
2.11. Virtual nodes List
2.12. Gathering stats
2.13. Time snapshots for 2 active objects
2.14. Hierarchical decomposition of the total time of an active object
2.15. The timeline for 7 active objects
2.16. Show PA_JVM<ID> in ChartIt (right-click in Monitoring View).
2.17. ChartIt Charts tab view.
2.18. ChartIt Overview tab view.
2.19. ChartIt Overview tab: create a new chart.
2.20. ChartIt Charts tab with custom chart.
3.1. connection
3.2. Menu
3.3. Debugger Choice
3.4. Popup
3.5. Eclipse connection
3.6. Eclipse debugger
3.7. Communication
3.8. Step by step preview
3.9. Pause
3.10. filters
3.11. Popup filters
3.12. slow motion
3.13. Information
4.1. Screenshot
4.2. Graph View Exemple
4.3. Sequence Diagram Exemple
5.1. Graphical representation of the data
5.2. Class diagram
5.3. The world exploring itself for the first time
5.4. The Models
5.5. The Controllers and the factory
5.6. The Views
5.7. The data strucure of the monitoring plugin
5.8. Observable objects
5.9. Observer objects
5.10. Spy classes
5.11. Active Objects' events management
5.12. SVN Repository
5.13. ic2d.product
5.14. Create a new project
5.15. Specify name and plug-in structure
5.16. Specify plug-in content
5.17. The plug-in structure
5.18. Interface for editing the manifest and related files.
5.19. Configuration
5.20. Plug-in selection
5.21. About product Plug-ins
5.22. Workbench structure
5.23. Extensions tab (no extensions)
5.24. Extensions tab (org.eclipse.ui.perspectives)
5.25. Extensions tab (Example)

List of Tables

5.1. Observable and Observer objects

List of Examples

5.1. MANIFEST.MF
5.2. ExamplePlugin.java
5.3. build.properties
5.4. plugin.xml
5.5. ExamplePlugin.java

Part I. Introduction

Chapter 1.  Overview

1.1.  IC2D Overview

IC2D is a set of tools based on the SWT (Eclipse) technology which allows to monitor and benchmark Java ProActive applications.

It includes the following views:

  • Graphical Monitoring View - A graphical environment for remote monitoring and steering of distributed and grid applications. It provides a graphical visualisation for hosts, Java Virtual Machines, and active objects, including the topology and the volume of communications.

  • Timers Chart View - TimIt plug-in provides a complete solution to benchmark applications' performance. It is able to produce a large variety of statistics, advanced timers with hierarchical capabilities. This powerful feature also provides a graphical representation of multiple events along a timeline.

  • Reports View - CharIt plug-in provides a visual comparative timer view based on pie charts.

1.2.  IC2D Installation

1.2.1.  User Installation

You can download the archive file (a standard zip file) containing IC2D from the Activeeon download page. You will be asked to accept the license agreement and provide a few details including your email address. Within a few minutes you will receive an email containing a password and an URL where you will be able to download the latest release of IC2D.

Uncompress the archive using your favorite ZIP program such as Winzip under Windows or using the tar command under most Linux/Unix systems. Uncompressing the archive creates an IC2D directory and all the files contained in the archive go into this directory and its subdirectories.

Run IC2D from the installation folder to start monitoring. For information on using IC2D read Chapter 2, IC2D: Interactive Control and Debugging of Distribution.

1.2.2.  Developer Installation

IC2D requieres a JVM 1.6 or higher to be compiled.

If you want to develop IC2D or plugins for IC2D the installation steps are the following:

  1. Download and unpack the RCP/Plug-in Developers version of Eclipse.

  2. Install Subversion or your favorite SVN client.

  3. Download ProActive for development through the anonymous or authenticated SVN. The SVN and Eclipse configuration information can be found on the INRIA gForge website.

  4. Go to the compile directory of your ProActive installation directory and compile ProActive by running:

    ./build deploy
  5. Go to the compile directory of your IC2D installation directory and copy the necessary ProActive libraries by running:

    ./build ic2d.libCopy
    [Note]Note

    This command might fail if your ProActive directory does not correspond to the one defined in compile/common.xml.

    <property name="programming.dir" value="${basedir}/../ProActive/" />

    If you are facing this issue, edit this file writing the right location of your ProActive directory (${basedir} corresponds to the root of the IC2D directory).

  6. From the IC2D project, import the IC2D plugin by going to File --> Import.

    Browse for the IC2D src directory.

    The directory is src in the IC2D installation directory.

    Once the plugins loaded, click on the Finish button and Eclipse should look like this:

  7. Install the Business Intelligence and Reporting Tools used by TimIt for profiling. To install go to Help -> Install New Software....

    In the Work with text box, select your eclipse version. Then, you should see the list of available software. Select Birt Intelligence, Reporting and Charting and click on Finish0.

  8. Once the Birt installation finished, go to ic2d.product and click on Synchronize and then click on Launch Application. Don't worry if the launch fails, we will fix that in the next step.

  9. Open the Run Dialog, click on ic2d.product, click on Plugins tab, select all the workspace plugins and click on the Add Required Plug-ins button. then, click on Apply, and then click on Run.

You should have a running IC2D application. Feel free to test it and improve the code.

Part II. IC2D Graphical Tools

Chapter 2.  IC2D: Interactive Control and Debugging of Distribution

IC2D is a graphical environment for remote monitoring and steering of distributed and grid applications . IC2D is built on top of ProActive that provides asynchronous calls and migration.

IC2D is available in the form of a Java standalone application based on Eclipse Rich Client Platform (RCP) , available for several platforms (Windows, Linux, Mac OSX)

2.1. Monitoring and Control

IC2D is based on a plugin architecture and provides 2 plugins in relation to the monitoring and the control of ProActive applications:

  • The Monitoring plugin which provides a graphical visualisation for hosts, Java Virtual Machines (JVMs), and active objects, including the topology and the volume of communications.

  • The Job Monitoring plugin which provides a tree representation of all these objects.

2.1.1. The Monitoring plugin

2.1.1.1. The Monitoring perspective

The Monitoring plugin provides the Monitoring perspective displayed in the Figure 2.1, “The Monitoring Perspective”.

This perspective defines the following set of views :

  • The Monitoring view: contains the graphical visualisation for ProActive objects

  • The Legend view: contains the legend corresponding to the Monitoring view's content

  • The Console view: contains log corresponding to the Monitoring view's events

The Monitoring Perspective

Figure 2.1. The Monitoring Perspective


2.1.1.2. Monitor a new host

In order to monitor a new host:

  1. open the Monitoring Perspective: Window->Open Perspective->Other...->Monitoring (in the standalone IC2D, it should be already opened because it is the default perspective)

  2. Click-right on the Monitoring view and select Monitor a new host... . It opens the "Monitor a new Host" dialog displayed in the Figure 2.2, “Monitor New Host Dialog”

  3. enter informations required about the host to monitor, and click OK

Monitor New Host Dialog

Figure 2.2. Monitor New Host Dialog


2.1.1.3. The Monitoring buttons

The Monitoring view provides some functionalities which are accessible through a set of buttons. This section describes all these buttons:

Monitor a new host

Figure 2.3. Monitor a new host


Display the "Monitor a new host" dialog in order to monitor a new host.

Set depth control

Figure 2.4. Set depth control


Display the "Set Depth Control" dialog in order to change the depth variable. Let us assume we have 3 hosts (A, B and C). On A, there is an active object oaA which communicates with another active object oaB which is on B. This one communicates with an active object oaC on C, and aoA does not communicate with aoC. Then if we monitor A, and if the depth is 1, we will not see aoC.

Set time to refresh

Figure 2.5. Set time to refresh


Display the "Set Time to Refresh" dialog in order to change the time to refresh the model. And find the new added objects.

Refresh

Figure 2.6. Refresh


Refreh the model.

Enable/Disable Monitoring

Figure 2.7. Enable/Disable Monitoring


When the eye is opened the monitoring is activated.

Zoom In

Figure 2.8. Zoom In


Zoom out

Figure 2.9. Zoom out


New Monitoring View

Figure 2.10. New Monitoring View


Open a new Monitoring view. This button can be used in any perspective. The new created view will be named 'Monitoring#number_of_this_view'


All the other buttons concern the IC2D debugging features and will be describe latter on in Chapter 3, Using IC2D debugging features.

2.1.1.4. The Virtual Nodes list

On the top of the Monitoring View, one can find the Virtual Nodes list. When some nodes are monirored, their virtual nodes are added to this list. And when a virtual node is checked, all its nodes are highlighted.

Virtual nodes List

Figure 2.11. Virtual nodes List


2.1.1.5. Management of the communications display

At the bottom of the Monitoring view, one can find a set of buttons used to manage the communications display:

  1. Auto Reset: automatic reset of communications, you can specify the auto reset time.

  2. Drawing style : defines how arrows are displayed. The 3 following options are available:

    • Proportional : arrows thickness is proportional to the number of requests

    • Ratio: arrows thickness uses a ratio of the number of requests

    • Fixed: arrows always have the same thickness whatever the number of communications

  3. Topology: shows/hides communications, and erases all communications

  4. Monitored Objects : Sum up of monitorized objects. It shows how many active objects, JVMs and hosts are monitored.

2.1.2. The TimIt plugin

The TimIt plugin for IC2D provides the ability to profile a distributed application in real time.

The activation of profiling is done through a TimItTechnicalService attached to the virtual node that contains active objects the user want to profile.

In your deployement descriptor you have to declare the technical service :

<technicalServices> 
    <class name="org.objectweb.proactive.benchmarks.timit.util.service.TimItTechnicalService">
        <property name="timitActivation" value="all"/>          
        <property name="reduceResults" value="false"/>
        <property name="printOutput" value="false"/>     
    </class>
</technicalServices>

This technical service can be either defined into the proactive application definition or into the virtual node one.

As shown in Figure 2.12, “ Gathering stats ”, clicking-right in the monitoring panel, the user can collect some usefull information from active objects during the execution time to analyse the application performance.

Gathering stats

Figure 2.12.  Gathering stats


For that, 3 views are available.

2.1.2.1. TimIt Main View

The main view, shown in Figure 2.13, “ Time snapshots for 2 active objects ”, is composed of bar charts (one chart per active object). Each chart represents cumulated times of different states that the active object has been in.

Time snapshots for 2 active objects

Figure 2.13.  Time snapshots for 2 active objects


2.1.2.2. TimIt Tree View

The tree view, shown in Figure 2.14, “ Hierarchical decomposition of the total time of an active object ”, allows a more detailed hierarchical decomposition view of the total time for a particular active object.

Suppose that your active object class is:

package org.objectweb.user.example;

public class ActiveObjectClass{
    public ActiveObjectClass(){}

    public void methodA(Integer i, Double d){}

    private void methodB(){}

    protected void methodC(){}
}

The hierarchical time decomposition includes times of user active object class methods (that must be public and non-final) served as requests (i.e. called by other active objects).

  • Total - The total time since the creation of the active object.

    • WaitForRequest - The time spent on waiting for requests.

    • Serve - The time spent on serving incoming requests.

      • org.objectweb.user.example.ActiveObjectClass.methodA(Integer, Double) - The time spent on serving the methodA as a request (local calls to this method are not included).

        • UserComputation - The time spent on computation (i.e. everything except communications).

        • SendRequest - The time spent on sending requests to other active objects.

          • BeforeSerialization - The time spent before the serialization of requests to other active objects.

          • Serialization - The time spent on serializing requests to other active objects.

          • AfterSerialization - The time spent after the serialization of requests to other active objects.

          • LocalCopy - The time spent on copying arguments in case of communications with local active objects.

        • SendReply - The time spent on sending replies to other active objects.

        • GroupOneWayCall - The time spent on performing asynchronous one way calls to groups of active objects (void methods).

        • GroupAsyncCall - The time spent on performing asynchronous calls to groups of active objects (non-void methods).

        • WaitByNecessity - The time spent on waiting by necessity.

Hierarchical decomposition of the total time of an active object

Figure 2.14.  Hierarchical decomposition of the total time of an active object


2.1.2.3. TimIt Timeline View

The timeline view shown in Figure 2.15, “ The timeline for 7 active objects ” represents all events that were recorded during a certain time-lapse. The color of each event corresponds to the same color defined in the Legend view. This view shows the intensity of particular states (serving, waiting for request, etc.).

The timeline for 7 active objects

Figure 2.15.  The timeline for 7 active objects


2.1.3. The ChartIt plugin

The ChartIt plugin allows users to chart in real time any numerical values provided by ProActive resources such as runtimes (JVMs), nodes and active objects involved in a distributed application.

To understand the following explanation the reader should be familiar with JMX technology. More precisely, the default behavior uses numerical values that are based on attributes of JMX MBeans associated with each ProActive resource. Meanwhile it is possible to provide custom resources to the ChartIt plugin with user-defined providers of numerical values.

Many chart types are available including bars, lines, pies and time based series. ChartIt uses 2 external APIs for chart rendering :

  • BIRT - For bars, lines, pies and area charts.

  • RRD4J - For time based series (including values sampling).

For a quick start, as shown in Figure 2.16, “ Show PA_JVM<ID> in ChartIt (right-click in Monitoring View). ”, simply right-click on a ProActive runtime (a JVM) representation in the Monitoring View and click on Show PA_JVM<ID> in ChartIt.

Show PA_JVM<ID> in ChartIt (right-click in Monitoring View).

Figure 2.16.  Show PA_JVM<ID> in ChartIt (right-click in Monitoring View).


An editor-based view will appear with a predefined set of different charts representing various numerical values such as heap-size of the selected ProActive runtime (JVM), threads and others.

ChartIt Charts tab view.

Figure 2.17. ChartIt Charts tab view.


The current set of charts is predefined for a ProActive runtime (a JVM). ChartIt offers a way to change the current configuration with other chart types in the Overview tab of the ChartIt editor.

To do so, click on the Clear button (cross button) at the top-right corner of the ChartIt editor and click on Overview tab as shown in Figure 2.18, “ChartIt Overview tab view.”.

ChartIt Overview tab view.

Figure 2.18. ChartIt Overview tab view.


The Overview tab is composed of following sections :

  • Resource Description - contains various information about the monitored resource.

  • Available Data Providers - contains a table of all available data providers (based by default on MBean's attributes). Only numerical type based data providers can be used as input for a chart, such data providers are represented with a blue circle icon in the table.

  • Data Provider Details - contains the description and the value of the selected data provider.

  • Chart Description - contains the description of the current chart. More precisely, the chart name, the chart type, the refresh period (in seconds) and a list of used data providers. These data providers MUST be numerical.

  • Charts - contains a list of available charts, buttons to create/remove a chart and save/load the current configuration. The selected chart in the list will be described in the Chart Description section.

Let us add another chart to the current configuration as shown in Figure 2.19, “ChartIt Overview tab: create a new chart.”. To do so, simply click on Create button in the Charts section. A new chart will appear in the charts list, with a default name (automatically selected in the description section where you can change its name). Then add some data providers from the Available Data Providers section by selecting one or more in the table (you can select multiple providers by pressing CTRL key on your keyboard).

ChartIt Overview tab: create a new chart.

Figure 2.19. ChartIt Overview tab: create a new chart.


Once your chart has been created simply click back on the Charts tab in the ChartIt view to see your chart as shown in the Figure 2.20, “ChartIt Charts tab with custom chart.”. For instance, the custom pie chart represents the percentage of user/internal bodies on the monitored ProActive runtime (ie the monitored JVM).

ChartIt Charts tab with custom chart.

Figure 2.20. ChartIt Charts tab with custom chart.


Chapter 3. Using IC2D debugging features

IC2D comes with several plug-ins to help developers with the process of debugging their applications built above ProActive.

3.1. Debugging a ProActive Application using IC2D

The communication between a debugger (like JDB or Eclipse) and a Java Virtual Machine (JVM) uses a socket connection. The debugger has therefore to know the URL of the JVM and the port number available for this socket connection. However, no port number is available by default on the JVM. Thus, in order to be able to launch the JVM with the correct arguments, the IC2D debugger connection tool is intended to give the information needed to the debugger connection.

First of all, JVMs (ProActive Runtimes) have to be started with the debug command line argument, otherwise it is not possible to establish a remote connection to these JVMs. The additional argument is of the following form:

-DdebugID=padebug_someDeploymentId -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0,launch='java -cp <path/to/ProActive.jar> org.objectweb.proactive.core.debug.dconnection.DebuggeePortSetter padebug_someDeploymentId'

In the previous line, the path to the ProActive archive is the only thing to be changed. The debug id and the port number (address) will be set randomly so as to avoid conflicts between JVMs.

In order to ease the use of the debugging features, the GCMA descriptor has been extended to easily start runtimes in debug mode. One has to add the tag <debug/> as a child of the application/proactive tag. An example is shown hereafter:

<?xml version="1.0" encoding="UTF-8"?>
<GCMApplication xmlns="urn:gcm:application:1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:gcm:application:1.0 http://proactive.inria.fr/schemas/gcm/1.0/ApplicationDescriptorSchema.xsd">

    <environment>
        <javaPropertyVariable name="proactive.home" />
        <javaPropertyVariable name="user.dir" />

        <descriptorVariable name="hostCapacity" value="2"/>
        <descriptorVariable name="vmCapacity" value="2"/>
    </environment>


    <application>
        <proactive base="root" relpath="${proactive.home}">
            <configuration>
                <applicationClasspath>
                    <pathElement base="proactive" relpath="dist/lib/ProActive_examples.jar"/>
                    <pathElement base="proactive" relpath="dist/lib/ibis-1.4.jar"/>
                    <pathElement base="proactive" relpath="dist/lib/ibis-connect-1.0.jar"/>
                    <pathElement base="proactive" relpath="dist/lib/ibis-util-1.0.jar"/>
                </applicationClasspath>
                    <debug/>
            </configuration>
            <virtualNode id="Workers" capacity="4"/>
        </proactive>

    </application>

    <resources>
        <nodeProvider id="workers">
            <file path="../GCMD_Local.xml" />
        </nodeProvider>
    </resources>
</GCMApplication>

One does not have to complete his descriptor with jvmarg tags to give arguments evoked above: it is precisely the role of the debug tag. It gives these arguments to all the created JVMs.

3.1.1. The connection

The IC2D debugger connection differs slightly from a simple debugger connection. When a user wants to connect a debugger to a remote JVM, he actually has to connect it to the local IC2D JVM. Then, it is an active object (created when the user sends the connection request) that is in charge of transmitting, through a proactive connection, the debugger information and requests to the JVM.

connection

Figure 3.1. connection


3.1.2. How to use the IC2D debugger connection tools

When a user right clicks on a monitored JVM, he can select an option (connect a debugger) that shows him the port number of his local debugger.

Menu

Figure 3.2. Menu


The following dialog box should appear:

Debugger Choice

Figure 3.3. Debugger Choice


Then, you can select either to use the Eclipse Extended Debugger or an external one. In case of an external one, the following window should appear asking you to give the connection information:

Popup

Figure 3.4. Popup


Next, the user has just to connect his debugger. For example: The Eclipse debugger

Eclipse connection

Figure 3.5. Eclipse connection


Eclipse debugger

Figure 3.6. Eclipse debugger


Communication

Figure 3.7. Communication


3.2. Step by step mode

Step by step preview

Figure 3.8. Step by step preview


3.2.1. Breakpoints Overview

The step by step mode allows to control the execution of an active object at the service level. There are several types of breakpoints located at different steps of the service execution. These breakpoints are used to stop (when it is enabled) and restart (when it is disabled) an active object execution.

3.2.1.1. Standard breakpoints

The standard breakpoints are located inside the service thread of an active object. These breakpoints do not block the other threads (like immediate services, JMX, ...). There are 3 points:

  • New service: This breakpoint is located before the beginning of the service. If the breakpoint is enabled, then the service will not start.

    Enabled by default.

  • End service: This breakpoint is located after the end of the service. Once the service finished, no other service will start if the breakpoint is enabled.

    Enabled by default.

  • Send request: This breakpoint is located before sending a request to an active object. The request is not added to the request queue of the active object.

    Disabled by default.

3.2.1.2. Immediate service breakpoints

The immediate service breakpoints are located inside each immediate service thread. The functionalities of these breakpoints are the same than those of standard breakpoints. For one object, there may be several immediate services blocked at the same time. There are 2 points for this specific service:

  • New immediate service: This breakpoint is located before the beginning of the immediate service.

    Enabled by default.

  • End immediate service: This breakpoint is located after the end of the immediate service.

    Enabled by default.

3.2.2. Step by step controls

3.2.2.1. Enable / Disable / NextStep

The main functionality of the step by step mode is to stop and restart an active object (enable/disable button). This functionality is available for one object or for each object in a node, a JVM, a host or a world (all object visible on IC2D monitoring). If an active object has been stopped, it is possible to restart it up to the next enabled breakpoint (next step button).

Pause

Figure 3.9. Pause


3.2.2.2. Filters

The filter tool allows to enable or disable some specific breakpoints. For example, it is possible to enable a new service and send request breakpoints, and disable the others.

filters

Figure 3.10. filters


Popup filters

Figure 3.11. Popup filters


3.2.2.3. Slow motion

This tool enables to introduce a delay after the breakpoints. Using this tool, the active object will stop at each breakpoint and will automatically restart after the delay.

slow motion

Figure 3.12. slow motion


3.2.2.4. Informations

This view displays some informations of an active object when it is selected. From this view, one can restart a previously blocked active object.

This tool also enables to choose the blocked service to restart (immediate or not).

Information

Figure 3.13. Information


Chapter 4. Distributed Services Flow (DSF) Analysis

The Distributed Services Flow Analysis provides analysis tools to validate and/or debug your application execution.

4.1. Distributed Services Flow Analysis Overview

This plugin for IC2D provides distributed services flows analysis for ProActive applications with graphical display such as a communication graph of the services or a sequence diagram of a flow. That allows users or developers to understand and validate how a ProActive application has been executed.

Screenshot

Screenshot of the main view of this plugin on the right, and the monitoring view on the left.

Figure 4.1. Screenshot


4.2. How to analyse your application

In order to analyse your application with this DSF Plugin in IC2D, you have to execute your application with the PAProperty proactive.tag.dsf set to true. Next the only thing left is to monitor your application like you do usually in IC2D Monitoring.

4.3. Graph of communications services

Once you have started to monitor your application in IC2D, you can display the Distributed Service Flow view from the windows menu.

You have now acces to the following actions:

  • Refresh the graph: Refreshes the graph part of the view to display the informations got from the monitoring. This action provides three ways of displaying the graph:

    • Merged: All the DSF are displayed as one merged graph.

    • Separately: All DSG are displayed separately. This can take a while and not be efficient.

    • Filtered: You can set filter to choose which DSF you want to display. You can set filters for actives objects, methods called and DSF value.

  • Take a snapshot: Exports the current graph part toward a PNG file.

  • Import / Export: Imports or Exports the data gotten from the monitoring.

  • Replay a DSF: You can choose to replay step by step a DSF.

  • Automatic Replay: Automatically displays all next steps in the replay with a little delay between each step.

  • Next communication in the replay: Displays the next step of the replay.

  • Generate a Sequence Diagram: Genereates a Sequence Diagram in SVG Format for the DSF you will choose.

  • Clear all: Clears all data and resets the view.

Graph View Exemple

Example of the Communication graph, and the information displayed when you click on a connection between two nodes.

Figure 4.2. Graph View Exemple


4.4. Sequence Diagram of a DSF

If you choose to display a sequence diagram for a DSF, you will generate a SVG File representing it. There is a possibilty that there are some missing message from the monitoring, so the communication impacted by these losses are rendered in a different color. Black if no loss, orange if there are less than 25% of loss, and in Red if there are more of 50% of loss.

Sequence Diagram Exemple

Example of a Sequence Diagram.

Figure 4.3. Sequence Diagram Exemple


Part III. Extending IC2D

Chapter 5.  Adding Grahical User Interfaces and Eclipse Plugins

5.1. Architecture and documentation

IC2D is composed of several plugins:

  • org.objectweb.proactive.ic2d : This plugin is the "frame" which contains the other plugins. It is only needed in the standalone version.

  • org.objectweb.proactive.ic2d.monitoring : provides graphical representation of hosts, runtimes, virtual nodes and active objects topology, also displaying communications between active objects.

  • org.objectweb.proactive.ic2d.jobmonitoring : provides tree-based representation of hosts, runtimes , virtual nodes and active objects.

  • org.objectweb.proactive.ic2d.launcher : initiates application deployment using deployment descriptors

  • org.objectweb.proactive.ic2d.lib : provides Java archives (jar) required by the other plugins which are not provided by the Eclipse like ProActive.jar, log4j.jar, etc.

  • org.objectweb.proactive.ic2d.console : provides logging capability through the Eclipse console.

5.1.1. org.objectweb.proactive.ic2d.monitoring

The aim of this plugin is to provide the essential features for monitoring of ProActive applications. Monitorable entities are

Figure 5.1, “Graphical representation of the data” shows the graphical representation of hosts, virtual nodes, runtimes (ProActive JVM), nodes, and active objects.

Graphical representation of the data

Figure 5.1. Graphical representation of the data


5.1.1.1. Class Diagrams

The diagram Figure 5.2, “Class diagram” describes relationships between Java classes:

  • The AOObject class represents an Active Object.

  • The NodeObject class represents a node. Nodes contain Active Objects.

  • The VMObject represents a runtime. Runtimes contain nodes

  • The VNObject class represents a virtual node. The virtual node is a logical entity which has no real existence at runtime. When using Deployment Descriptors, it is the mapping of a virtual node on a runtime that leads to the creation of one or more nodes on this runtime. Virtual nodes can be mapped on more than one runtime, thus as shown in the figure, a node is bound to both a runtime and a virtual node.

  • The HostObject class represents the hardware that hosts the runtime, it is possible to coallocate several runtimes on the same host

  • The WorldObject class is a "special" object that allows to gather hosts and virtual nodes under a common root.

Class diagram

Figure 5.2. Class diagram


5.1.1.2. Monitoring in detail

When IC2D is used to monitor a host, it looks for any available runtimes on the host, then enumerates any nodes, virtual nodes and active objects contained within each runtime.

In order to do this, it grabs the URL entered by the user, then creates a new HostObject and add it to the WorldObject. Next, a thread starts and regularly queries the WorldObject to explore itself. The following sequence diagram explains how a WorldObject explores itself for the first time (Figure 5.3, “The world exploring itself for the first time”).

  • The WorldObject queries its HostObjects to explore themselves

  • Each HostObject looks for ProActive Runtimes on the current host then creates VMObject s corresponding to the newly discovered runtimes

  • Each VMObject explores itself, looking for Nodes contained within its ProActiveRuntime. Each Node is mapped into a NodeObject

  • Each NodeObject looks for contained active objects asking it to the ProActiveRuntime of its parent (VMObject) and creates the corresponding AOObject s.

The world exploring itself for the first time

Figure 5.3. The world exploring itself for the first time


Now all objects are found. And these operation will be regularly repeated until the user stops monitoring.

5.1.1.3. Model View Controller (MVC) -- The Graphical Editing Framework (GEF)

The Graphical Editing Framework (GEF) allows developers to take an existing application model and quickly create a rich graphical interface.

GEF employs an MVC (Model View Controller) architecture which enables simple changes to be applied to the model from the view.

This section introduces the needed to the comprehension of GEF. For more details about GEF go to the Section 5.1.1.4, “Links” .

We describe here the implementation of the MVC pattern used within IC2D:

The Models

Figure 5.4. The Models


The Controllers and the factory

Figure 5.5. The Controllers and the factory


The Views

Figure 5.6. The Views


Three things to not forget

In blue, the data which we use with GEF. As you can see it, they are organized in a tree structure.

The data strucure of the monitoring plugin

Figure 5.7.  The data strucure of the monitoring plugin


Description of the creation of the controllers and the figures step by step :

  1. We indicate to GEF the root element of the tree, and the factory.

  2. GEF queries the factory to create the controller corresponding to the root.

  3. GEF queries the obtained controller to create the figure corresponding to the model.

  4. GEF queries the root to provide it its sons.

  5. On each one of these children, GEF do the same process.

  6. GEF queries the factory to create the controller corresponding to the first child.

  7. GEF queries the obtained controller to create the figure corresponding to the model.

  8. GEF queries the model to provide it its sons.

  9. etc...

5.1.1.4. Links

The official site of GEF: http://www.eclipse.org/gef/

A web page referring a lot of very interesting links about GEF: http://eclipsewiki.editme.com/GEF

A detailed description of GEF : http://eclipse-wiki.info/GEFDescription

Somes GEF examples : http://eclipse-wiki.info/GEFExamples

5.1.1.5. Observer/Observable

The pattern Observer/Observable is used to update the figures when the model changes.

In the Figure 5.8, “Observable objects” you can see all the observable objects with methods which can call notifyObservers .

Observable objects

Figure 5.8. Observable objects


In the Figure 5.9, “Observer objects” , you can see all the observer objects and where the method update is overriden.

Observer objects

Figure 5.9. Observer objects


In the Table 5.1, “Observable and Observer objects” , you can see each observable with their observers.

Observable

Observer

WorldObject

WorldEditPart

MonitorThread

VirtualNodesGroup

HostObject

HostEditPart

VMObject

VMEditPart

NodeObject

NodeEditPart

AOObject

AOEditPart

Table 5.1. Observable and Observer objects


5.1.1.6. The espionage of the active objects

In the following diagram, you can see all classes necessary to the espionage of the active objects.

Spy classes

Figure 5.10. Spy classes


When a node is found for the first time, IC2D put a spy in the node.

5.1.1.7. How an event of a proactive object arrive to the monitoring plugin?

Once the spy is in the node, it regularly asks to the SpyEventManager to provide all the events. The next step is explained in the Figure 5.11, “Active Objects' events management”.

Active Objects' events management

Figure 5.11. Active Objects' events management


  1. Then the Spy transmits all these events to the SpyListener .

  2. For the each event, the SpyListener calls the corresponding method on SpyEventListener

  3. The SpyEventListener searches the AOObject concerned with this event (thanks to the Node attribut of his class). And it modifies the state of this object.

  4. The AOObject notify its observers.

  5. The AOEditPart , which is an AOObject observer, update the view of this Active Object.

5.1.1.8. When a new Spy is created?

A new spy is created each time that a new Node is found.

5.1.1.9. How a new Spy is created?

The NodeObject calls its "addSpy()" method :

  1. This method creates a SpyEventListener with the NodeObject in parameter.

  2. It creates also a SpyListener with the SpyEventListener in parameter.

  3. Next,it turns active the previous SpyListener.

  4. And creates a new Active Object (with the PAActiveObject.newActive method) which is the spy with 2 parameters : the turned active object (SpyListener) , and the node . (This node is given in parameter at the constructor of the NodeObject)

5.1.1.10.  How an active object is added to the objects to monitor?

  1. When an active object is found for the first time, we ask to the NodeObject to provide us the spy.

  2. We call the ' addMessageEventListener ' method on the Spy .

  3. The Spy calls on its SpyEventManager the ' addMessageEventListener ' method.

  4. The SpyEventManager adds a MessageEvent listener to the body of the active object.

5.1.1.11. How to create and use filters

In some cases, you may want to hide some objects to the users, i.e. don't monitor some internal objects. For example, spy objects used by IC2D for monitoring JVMs. That's why we introduce the concept of filtering in the monitoring plugin.

The package org.objectweb.proactive.monitoring.filters contains:

  • Filter : an abstract class, which has to be extended by all filter classes. This class provides the method filter (AbstractDataObject) that returns true if it matches the filter, otherwise false.

  • FilterProcess : provides the method filter (AbstractDataObject object).This is the first method called when a new object is discovered. It applies all filters on the object and if at least one filter returns true the object is not monitored.

5.1.2. org.objectweb.proactive.ic2d.console

This plugin provides several methods to log in the console :

  • log (String message)

  • warn (String message)

  • err (String message)

  • logException (Throwable e)

  • debug (String message)

  • debug (Throwable e)

You can have several different consoles. For example, the plugin monitoring logs in a console named "Monitoring", all the log4j messages are logged in the console "Log4j", ...

If you want to add your own console, you must choose a unique name. and call the method Console. getInstance (String yourUniqueName) to obtain the console (if it didn't exist it is created). Then you can call the methods above on your console.

5.1.3. org.objectweb.proactive.ic2d.lib

This plugin contains all jar (which are not provided by Eclipse) necessary to the other plugins (like ProActive.jar, log4j.jar, ...). So if you modify the code and need a new jar, you have to add it to the plugin lib. And if you create a new plugin which needs a jar which is in the plugin lib, it must be dependent of this plugin.

5.2. Extending IC2D

5.2.1. How to checkout IC2D

Here is the IC2D SVN repository : svn://scm.gforge.inria.fr/svn/proactive/branches/proactive_newIC2D

You have to checkout :

  • org.objectweb.proactive.ic2d

  • org.objectweb.proactive.ic2d.monitoring

  • org.objectweb.proactive.ic2d.lib

  • org.objectweb.proactive.ic2d.console

  • org.objectweb.proactive.ic2d.launcher

If you are using Eclipse and its plugin Subclipse , open the SVN Repository perspective and checkout all those folders as new Java projects .

SVN Repository

Figure 5.12. SVN Repository


You'll maybe have to replace the proactive.jar file in the plugin org.objectweb.proactive.ic2d.lib, it depends on your ProActive version.

Now, you can run IC2D clicking on the link Launch the product in ic2d.product in the org.objectweb.proactive.ic2d project.

ic2d.product

Figure 5.13. ic2d.product


5.2.2. How to implement a plug-in for IC2D

IC2D is a Rich Client Platform (RCP) based on the familiar Eclipse plug-in architecture .

5.2.2.1.  Create a project with the plug-in project wizard

If you want to create a plug-in for IC2D, you have to use the Eclipse's Plug-in Development Environment (PDE) . This is a complete environment that Eclipse provides for plug-in development. The PDE adds a new perspective and several views and wizards that help you create, maintain, and publish plug-ins. The PDE creates boilerplate starter code that you can use to build your plug-in. This section explains how to use the plug-in project wizard to create your plug-in.

  1. Select File > New > Project from the menu bar to open the new project wizard

  2. Select Plug-in Project in Plug-in Development

Create a new project

Figure 5.14. Create a new project


  1. Click Next

  2. In the Project name field, enter a name for the plug-in. For example, we chose org.objectweb.proactive.ic2d.example. You must use the fully-qualified name to ensure its uniqueness.

  3. In the Project contents pane, accept the default directory value

  4. Make sure the Create a Java project option is selected since we want our project to contain Java files. Accept the default values of the other options

  5. Beginning in Eclipse 3.1 you will get best results by using the OSGi bundle manifest. In contrast to previous versions, this is now the default.

Specify name and plug-in structure

Figure 5.15. Specify name and plug-in structure


  1. Click Next

  2. Enter the fully qualified ID of the plug-in which by default it is the same as the project name

  3. Accept the default values of the other options

Specify plug-in content

Figure 5.16. Specify plug-in content


  1. Click Finish

5.2.2.2. The plug-in structure

The plug-in project has the file structure illustrated in the followed figure.

The plug-in structure

Figure 5.17. The plug-in structure


5.2.2.3. Plug-in manifest

The plug-in manifest ties all the code and resources together. When you first create a plug-in, Eclipse will create and open the manifest for you automatically. The manifest is split into two files: MANIFEST.MF and plugin.xml . PDE provides a fancy editor to modify the options stored in these files (see Figure 5.18, “ Interface for editing the manifest and related files. ” ) but also allows you to edit the source directly.

Interface for editing the manifest and related files.

Figure 5.18.  Interface for editing the manifest and related files.


MANIFEST.MF

The OSGi bundle manifest is stored in MANIFEST.MF. OSGi is the name of a standard that Eclipse uses for dynamically loading plug-ins. Example 5.1, “MANIFEST.MF” shows the OSGi bundle manifest generated by the plug-in wizard. Everything in this file can be edited by the Manifest editor, so there should be no need to edit it by hand . However if you need to, just double-click it in the Package Explorer to bring up the Manifest editor, then click on the MANIFEST.MF tab in the editor to see and modify the source.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-Name:
Example Plug-in Bundle-SymbolicName:
org.objectweb.proactive.ic2d.example
Bundle-Version: 1.0.0 Bundle-Activator:
org.objectweb.proactive.ic2d.example.ExamplePlugin
Bundle-Localization: plugin Require-Bundle:
org.eclipse.ui, org.eclipse.core.runtime
Eclipse-AutoStart: true
						

Example 5.1. MANIFEST.MF


plugin.xml

The Eclipse extension manifest is called plugin.xml. It's used for defining and using Eclipse extension points , so if you're not using extension points then this file may be omitted. Extension points are the fundamental way that Eclipse plug-ins are tied together. This new plug-in is not yet using extension points so the plug-in wizard didn't generate the plugin.xml file.

5.2.2.4. Plug-in class

The plug-in class is an optional singleton class that can be used to store global information for the plug-in. It's also a convenient place to put a few static utility functions used by other classes in the plug-in. See the listing Example 5.2, “ExamplePlugin.java” for the plug-in class that was created for us by the plug-in wizard.

package org.objectweb.proactive.ic2d.example;

import org.eclipse.ui.plugin.*;
import org.eclipse.jface.resource.ImageDescriptor;
import org.osgi.framework.BundleContext;

/**
 * The main plugin class to be used in the desktop.
 */
public class ExamplePlugin extends AbstractUIPlugin {

    //The shared instance.
    private static ExamplePlugin plugin;

    /**
     * The constructor.
     */
    public ExamplePlugin() {
        plugin = this;
    }

    /**
     * This method is called upon plug-in activation
     */
    public void start(BundleContext context) throws Exception {
        super.start(context);
    }

    /**
     * This method is called when the plug-in is stopped
     */
    public void stop(BundleContext context) throws Exception {
        super.stop(context);
        plugin = null;
    }

    /**
     * Returns the shared instance.
     */
    public static ExamplePlugin getDefault() {
        return plugin;
    }

    /**
     * Returns an image descriptor for the image file at the given
     * plug-in relative path.
     *
     * @param path the path
     * @return the image descriptor
     */
    public static ImageDescriptor getImageDescriptor(String path) {
        return AbstractUIPlugin.imageDescriptorFromPlugin("org.objectweb.proactive.ic2d.example", path);
    }
}
                    

Example 5.2. ExamplePlugin.java


5.2.2.5. Build properties

The build.properties file (see Example 5.3, “build.properties” ) will be needed when exporting the application for others to use . In particular if your application needs any resources like icons they should be listed here in the bin.includes section. The Plug-in Manifest editor provides a convenient interface to modify this file that is less error-prone than modifying it by hand.

source.. = src/
output.. = bin/
bin.includes = META-INF/,\ .
					

Example 5.3. build.properties


5.2.2.6. How to add your plugin to IC2D

In the project org.objectweb.proactive.ic2d , open ic2d.product . In the Configuration tab, click Add .

Configuration

Figure 5.19. Configuration


Then select your plug-in.

Plug-in selection

Figure 5.20. Plug-in selection


  1. Now, click Add Required Plug-ins .

  2. Return to the Overview tab and click Synchronize . Now launch ic2d by clicking Launch the product .

  3. You can verify that your plug-in is integrated : in the IC2D frame, go to Help > About product > Plug-in Details .

About product Plug-ins

Figure 5.21. About product Plug-ins


5.2.2.7. Perspectives, views and editors

Workbench structure

Figure 5.22. Workbench structure


5.2.2.8. Perspectives

Perspectives provide an additional layer of organization inside the workbench page. A perspective defines an appropriate collection of views , their layout, and applicable actions for a given user task. Users can switch between perspectives as they move across tasks. From an implementation point of view, the user's active perspective controls which views are shown on the workbench page and their positions and sizes. Editors are not affected by a change in perspective.

A new perspective is added to the workbench using a simple two step process :

  1. Add a perspective extension to the plugin.xml file.

  2. Define a perspective class for the extension within the plug-in.

Step 1 : Add a Perspective Extension to the plugin.xml file

  1. Open MANIFEST.MF with the Plug-in Manifest Editor

  2. Open the Extensions tab

Extensions tab (no extensions)

Figure 5.23. Extensions tab (no extensions)


  1. Click Add

  2. In the Extensions Points tab, select org.eclipse.ui.perspectives

Ajouter un screenshot

  1. Click Finish

Extensions tab (org.eclipse.ui.perspectives)

Figure 5.24.  Extensions tab (org.eclipse.ui.perspectives)


  1. Right click the new extension : New > perspective

  2. Now, enter the ID , the name and the class corresponding to the perspective.

Extensions tab (Example)

Figure 5.25. Extensions tab (Example)


If the plugin.xml file didn't exist, it is now created. Example 5.4, “plugin.xml” shows the plugin.xml file that was created.

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin>
   <extension
         point="org.eclipse.ui.perspectives">
      <perspective
            class="org.objectweb.proactive.ic2d.example.ExamplePerspective"
            id="org.objectweb.proactive.ic2d.example.ExamplePerspective"
            name="Example"/>
   </extension>
</plugin>
                    

Example 5.4. plugin.xml


Step 2 : Define a Perspective Class for the Extension within the Plug-in

Now we need to define the perspective class which must implements the IPerspectiveFactory interface :

package org.objectweb.proactive.ic2d.example;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class ExamplePerspective implements IPerspectiveFactory {

    public static final String ID="org.objectweb.proactive.ic2d.example.ExamplePerspective";

    public void createInitialLayout(IPageLayout layout) {
        // TODO Auto-generated method stub

    }

}
                    

Example 5.5. ExamplePlugin.java


You have created your first perspective !

5.2.2.9. Views

A view is typically used to navigate a hierarchy of information, open an editor, or display properties for the active editor.

Create a view looks like create a perspective. You have to add a perspective extension to the plugin.xml file and to define a view class for the extension within the plug-in .

Step 1 : Add a View Extension to the plugin.xml file

Add an extension : org.eclipse.ui.views, then add a view and configure it.

5.2.2.10. Editors

An editor is a visual component within a workbench page. It is used to interact with the primary focus of attention, which may be a document, data object, or person. The primary focus of attention is a reflection of the primary task.

5.3. How to create the IC2D stand-alone application from the sources

5.3.1. Required

[Note]Required

You need to have :

5.3.2. First step: Import required libraries in the 'org.objectweb.proactive.ic2d.lib' plug-in

cd ProActive/compile
./build ic2dLib (linux)
./build.bat ic2dLib (windows)

A new 'ProActive.jar' is created and pasted in the 'org.objectweb.proactive.ic2d.lib'.

[Note]Note

The 'org.objectweb.proactive.ic2d.lib' plug-in has a lot of libraries including ProActive. If a plug-in want to use ProActive, it need to depends on this plug-in.

5.3.3. Second step: Import the different plug-ins in Eclipse

In Eclipse

  1. Select: 'File'>'Import'>'General'>'Existing Projects into Workspace'

  2. Next, select as root directory 'ProActive/ic2d-plugins-src'

  3. And select all

Now, you have several new projects in your workspace.

5.3.4. Third step: Launch IC2D in Eclipse

Copy the file 'ic2d.java.policy ' from 'ProActive/ic2d-plugins-src/org.objectweb.proactive.ic2d/ic2d.java.policy' and paste this one in your home directory.

[Note]On Windows
  • Select the 'org.objectweb.proactive.ic2d' plug-in, and open the file 'ic2d.product'

  • Select the 'Launcher' panel, and in the VM Arguments replace : -Djava.security.policy=${env_var:HOME} by -Djava.security.policy="C:\pathToYourHome\ic2d.java.policy" (example: C:\Document And Settings\YourLogin\ic2d.java.policy)

  • Next, Save.

In the Testing part, press 'Synchronize', and 'Launch the product'

5.3.5. Last step: Export IC2D

  1. Select the 'org.objectweb.proactive.ic2d' plug-in, and open the file 'ic2d.product'

  2. In the Exporting part, press 'Eclipse Product export wizard'

  3. Select the name of the root directory of the IC2D stand-alone application (ex: MyIC2D).

  4. Select, also the destination, where to create the IC2D stand-alone application.

  5. Press 'Finish'

  6. Now, you have a new directory containing your product. Modify the file IC2D.ini and replace: ${env_var:HOME} by: ${user.home}

5.3.6. FAQ

5.3.6.1. How to know if my Eclipse contains the GEF plug-in?

In Eclipse, go to: 'Help'>'About Eclipse SDK'>'Feature Details' And search 'Graphical Editing Framework' as Feature Name.

5.3.6.2. How to install GEF in Eclipse?

In Eclipse, go to:

  1. 'Help'>'Software Updates'>'Find and Install'

  2. Select 'Search fo new features to install'

  3. And check 'Callist Discovery Site'

  4. Select the 'Callisto Discovery Site' in the Update Site Mirrors frame.

  5. Then, Check 'Graphical Editing Framework'

  6. And install this new feature.

5.3.6.3. How use SVN with Eclipse?

See http://subclipse.tigris.org/install.html

5.3.6.4. How to get the current SVN repository of ProActive?

See http://proactive.inria.fr/svn_access.htm

5.3.6.5. The project 'org.objectweb.proactive.ic2d.lib' desn't compile

Maybe, the plug-in try to export some classes which it doesn't contains. So, on the 'org.objectweb.proactive.ic2d.lib' project, do a right click, and select 'Properties' Go to Java Build Path, and select the 'Libraries' frame. Now remove jar files which displays an error message.

5.3.6.6. How to create a IC2D stand-alone application for multiple platforms?

Install the RCP delta pack. See Export Product