'. '

NetbinoxTutorial

From APIDesign

(Difference between revisions)
Jump to: navigation, search
(Develop with Mylyn)
(Develop!)
Line 59: Line 59:
This demonstrates how the system launches both the traditional [[NetBeans Runtime Container]] as well as [[Equinox]]. Both cooperate, start their own modules/bundles and provide them with their usual environment. Moreover there is a [[bridge]] (more about that is explained in [[Netigso]] article) around that helps them mutually communicate with each other.
This demonstrates how the system launches both the traditional [[NetBeans Runtime Container]] as well as [[Equinox]]. Both cooperate, start their own modules/bundles and provide them with their usual environment. Moreover there is a [[bridge]] (more about that is explained in [[Netigso]] article) around that helps them mutually communicate with each other.
-
==== Develop! ====
+
==== Develop [[OSGi]]! ====
 +
The previous example shown how to develop a [[NetBeans]] module. However sometimes it is preferable to create an [[OSGi]]
Time to create your first bundle or module! Choose from menu ''File/New Project'' and select [[OSGi]] bundle. New project is created and added into the already existing suite. Choose its ''Properties'' and select ''Libraries'' category. There is a button ''Add Dependency''. Invoke it and choose your favorite [[Eclipse]] bundle.
Time to create your first bundle or module! Choose from menu ''File/New Project'' and select [[OSGi]] bundle. New project is created and added into the already existing suite. Choose its ''Properties'' and select ''Libraries'' category. There is a button ''Add Dependency''. Invoke it and choose your favorite [[Eclipse]] bundle.

Revision as of 04:20, 20 October 2009

Contents

It is easy to start!

Here is a quick tutorial to get you up to the speed using Netbinox. You can either build the GPL sources of the bridge between NetBeans and Equinox yourself or download the binaries.

Get the bits!

To build from the sources:

  1. hg clone http://source.apidesign.org/hg/netbinox
  2. cd netbinox
  3. ant

This will create a ZIP file in dist directory with Netbinox IDE - e.g. NetBeans platform and IDE ready to empower Equinox. Alternatively you can download the binaries directly from the daily builder.

Warning and TBD: right now download the ZIP from the builder!

Execute!

Now it is time to start the system. You can do it via ant by running

ant run

or, you can extract the ZIP file and start bin/netbeans. NetBeans IDE optimized for development against Equinox is started.

Clusterize Mylyn

Download our sample application that uses Mylyn (written as set of OSGi bundles) to connect to Bugzilla.

$ hg clone http://source.apidesign.org/hg/netbinox-mylyn-sample

The root of the sources contains folder eclipse which contains some OSGi JAR libraries in raw form - e.g. just copied from Eclipse installation. The first thing to help Netbinox to use them is is to clusterize them. Invoke:

$ ant convert -Dharness.dir=$NETBINOX/harness
 
clusterize:
    [mkdir] Created dir: /netbinox-mylyn-sample/eclipse/config/Modules
[createmodulexml] Autoload modules: [org.apache.commons.codec, org.apache.commons.httpclient, org.apache.commons.lang, org.apache.commons.logging, org.eclipse.core.contenttype, org.eclipse.core.jobs, org.eclipse.core.net, org.eclipse.core.runtime, org.eclipse.equinox.app, org.eclipse.equinox.common, org.eclipse.equinox.preferences, org.eclipse.equinox.registry, org.eclipse.equinox.security, org.eclipse.mylyn.bugzilla.core, org.eclipse.mylyn.commons.core, org.eclipse.mylyn.commons.net, org.eclipse.mylyn.tasks.core]

The $NETBINOX variable shall point to the location where you unzipped the Netbinox ZIP.

Notice that a bunch of XML configuration files has been created in config/Modules directory. These help Netbinox recognize bundles present in each cluster.

Develop with Mylyn

The next step is to use the Netbinox IDE and open mylyn-suite project (which is the next directory in the sample along the eclipse one). If you open project customizer you can verify that there is a cluster called eclipse which enlists all the modules prepared in the previous step.

The application consists of two subprojects. One produces a NetBeans module that depends on OSGi bundles. Here is a dependency excerpt from the project.xml configuration file:

Code from project.xml:
See the whole file.

<module-dependencies>
    <dependency>
        <code-name-base>org.eclipse.core.runtime</code-name-base>
        <build-prerequisite/>
        <compile-dependency/>
        <run-dependency>
            <specification-version>3.5.0</specification-version>
        </run-dependency>
    </dependency>
    <dependency>
        <code-name-base>org.eclipse.equinox.common</code-name-base>
        <build-prerequisite/>
        <compile-dependency/>
        <run-dependency>
            <specification-version>3.5.1</specification-version>
        </run-dependency>
    </dependency>
    <dependency>
        <code-name-base>org.eclipse.mylyn.bugzilla.core</code-name-base>
        <build-prerequisite/>
        <compile-dependency/>
        <run-dependency>
            <specification-version>3.2.2</specification-version>
        </run-dependency>
    </dependency>
    <dependency>
        <code-name-base>org.eclipse.mylyn.commons.net</code-name-base>
        <build-prerequisite/>
        <compile-dependency/>
        <run-dependency>
            <specification-version>3.2.0</specification-version>
        </run-dependency>
    </dependency>
    <dependency>
        <code-name-base>org.eclipse.mylyn.tasks.core</code-name-base>
        <build-prerequisite/>
        <compile-dependency/>
        <run-dependency>
            <specification-version>3.2.2</specification-version>
        </run-dependency>
    </dependency>
    <dependency>
        <code-name-base>org.openide.util</code-name-base>
        <build-prerequisite/>
        <compile-dependency/>
        <run-dependency>
            <specification-version>8.0</specification-version>
        </run-dependency>
    </dependency>
</module-dependencies>
 

And it contains regular Swing action that can use Mylyn APIs to connect to some Bugzilla:

Code from TestBugzilla.java:
See the whole file.

TaskRepository repository = new TaskRepository("bugzilla", repoURL);
 
TaskRepositoryManager trm = new TaskRepositoryManager();
BugzillaRepositoryConnector brc = new BugzillaRepositoryConnector();
 
trm.addRepository(repository);
trm.addRepositoryConnector(brc);
 
String url = "/buglist.cgi?" +
            "query_format=advanced" +
            "&short_desc_type=allwordssubstr" +
            "&limit=5";
IRepositoryQuery query = new RepositoryQuery(
    repository.getConnectorKind(), ""
);
query.setUrl(url);
final List<TaskData> collectedData = new ArrayList<TaskData>();
TaskDataCollector collector = new TaskDataCollector() {
    public void accept(TaskData taskData) {
        collectedData.add(taskData);
    }
};
NullProgressMonitor nullProgressMonitor = new NullProgressMonitor();
brc.performQuery(
    repository, query, collector, null, nullProgressMonitor
);
 

This demonstrates how the system launches both the traditional NetBeans Runtime Container as well as Equinox. Both cooperate, start their own modules/bundles and provide them with their usual environment. Moreover there is a bridge (more about that is explained in Netigso article) around that helps them mutually communicate with each other.

Develop OSGi!

The previous example shown how to develop a NetBeans module. However sometimes it is preferable to create an OSGi Time to create your first bundle or module! Choose from menu File/New Project and select OSGi bundle. New project is created and added into the already existing suite. Choose its Properties and select Libraries category. There is a button Add Dependency. Invoke it and choose your favorite Eclipse bundle.

My favourite one is org.eclipse.mylyn.bugzilla.core. Add it into the list of dependencies of your bundle. Finish the dialog, select package in your project and create a class. Start to code and you can find classes from the bugzilla.core bundle. Refer to them, use them. Small example:

public class Installer implements BundleActivator {
  public void start(BundleContext c) throws Exception {
    System.err.println("before");
    try {
        org.eclipse.mylyn.internal.bugzilla.core.BugzillaClientFactory.createClient(null);
    } catch (NullPointerException ex) {}
    System.err.println("after");
  }
}
Personal tools