NetbinoxTutorial
From APIDesign
(→Empower Mylyn) |
(→Develop with Mylyn) |
||
Line 46: | Line 46: | ||
==== Develop with [[Mylyn]] ==== | ==== 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 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 the 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: | 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: |
Revision as of 13:34, 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.
To build from the sources you need JDK6:
$ hg clone http://source.apidesign.org/hg/netbinox $ cd netbinox $ ant
This script will download all the necessary binaries, build Netbinox bits and create new 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 (but the download speed might not be that fast, so prefer the build script).
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.
Empower 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. This can be done manually using
Code from platform.xml:
See the whole file.<target name="convert"> <ant antfile="${harness.dir}/suite.xml" target="clusterize"> <property name="cluster" location="../eclipse"/> <property name="includes" value="modules/*.jar"/> </ant> </target>
which produces bunch of XML configuration files in the config/Modules directory. These help Netbinox recognize bundles present in each cluster. This is common output of that Ant target:
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]
However due to intricate build script setup this shall not be necessary. Just open the suite in your new unzipped the Netbinox IDE and run it.
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 the 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 helping 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. For example when one needs to deal with BundleContext, it is necessary to create an OSGi bundle.
Nothing is simpler. One just need to change the manifest to contain Bundle-SymbolicName and the the Netbinox IDE generates an OSGi bundle automatically:
Bundle-Activator: org.apidesign.listbundles.Installer Bundle-SymbolicName: org.apidesign.listbundles Bundle-Version: 1.0 Import-Package: org.osgi.framework OpenIDE-Module-Layer: org/apidesign/listbundles/layer.xml OpenIDE-Module-Localizing-Bundle: org/apidesign/listbundles/Bundle.properties
Then one can create an OSGi activator, remember the context:
Code from Installer.java:
See the whole file.public class Installer implements BundleActivator { static BundleContext bc; public void start(BundleContext c) throws Exception { bc = c; } public void stop(BundleContext c) throws Exception { } }
And create another Swing action to list all the activated OSGi bundles:
Code from ListBndsl.java:
See the whole file.public final class ListBndsl implements ActionListener { public void actionPerformed(ActionEvent e) { StringBuilder sb = new StringBuilder(); for (Bundle b : Installer.bc.getBundles()) { if (b.getState() != Bundle.ACTIVE) { continue; } sb.append(b.getSymbolicName()); sb.append("\n"); } DialogDisplayer.getDefault().notify( new NotifyDescriptor.Message(sb) ); } }
The following picture shows the output of such action demonstrating that NetBeans and Equinox really run together:
Join
But nothing is better than real experience. Try the sample yourself. In case you are interested in Netbinox, Netigso and other related technologies, join our mailing list or share your comments.
<comments/>