|  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | 
|  | <html xmlns="http://www.w3.org/1999/xhtml"> | 
|  | <head> | 
|  | <title>Quick Start for NetBeans Platform with OSGi</title> | 
|  | <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/> | 
|  | <meta name="AUDIENCE" content="NBUSER"/> | 
|  | <meta name="TYPE" content="ARTICLE"/> | 
|  | <meta name="EXPIRES" content="N"/> | 
|  | <meta name="indexed" content="y"/> | 
|  | <meta name="description" | 
|  | content="A short guide to getting started with the NetBeans Platform."/> | 
|  | <!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. --> | 
|  | <!--     Use is subject to license terms.--> | 
|  | </head> | 
|  | <body> | 
|  |  | 
|  | <h1>NetBeans Platform Quick Start Using OSGi</h1> | 
|  |  | 
|  | <p>This document is a quick demonstration of how to integrate OSGi | 
|  | bundles in a NetBeans Platform application. | 
|  | </p> | 
|  |  | 
|  | <p> | 
|  | The focus of the tutorial is a "hello world" scenario based on the <a href="http://www.aqute.biz/Code/Download#sudoku">Sudoku Game | 
|  | by Peter Kriens</a>. You import the OSGi bundles constituting the Sudoku Game, | 
|  | together with the related required Equinox bundles. When the application is | 
|  | deployed, the following application is available in the web browser: | 
|  | </p> | 
|  |  | 
|  | <p><img alt="" width="400" height="300" src="http://netbeans.dzone.com/sites/all/files/sudokugame-4.png"/></p> | 
|  |  | 
|  | <p>Once you have gone through this simple scenario, more useful scenarios | 
|  | are listed in the Further Reading section at the end of this tutorial.</p> | 
|  |  | 
|  | <p><b>Contents</b></p> | 
|  | <p><img src="../images/articles/69/netbeans-stamp69.png" class="stamp" width="114" height="114" alt="Content on this page applies to NetBeans IDE 6.5, 6.7, 6.8" title="Content on this page applies to NetBeans IDE 6.5, 6.7, 6.8"/></p> | 
|  | <ul class="toc"> | 
|  | <li><a href="#setup">Setting Up the Environment</a></li> | 
|  | <li><a href="#create">Creating the Application</a></li> | 
|  | <li><a href="#import">Importing the OSGi Bundles</a></li> | 
|  | <li><a href="#run">Running the Application</a></li> | 
|  | <li><a href="#further">Further Reading</a></li> | 
|  | </ul> | 
|  |  | 
|  | <p><b>To follow this tutorial, you need the software and resources listed in the following table.</b></p> | 
|  |  | 
|  | <table> | 
|  | <tbody> | 
|  | <tr> | 
|  | <th class="tblheader" scope="col">Software or Resource</th> | 
|  | <th class="tblheader" scope="col">Version Required</th> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td> | 
|  | <td class="tbltd1">version 6.9</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td> | 
|  | <td class="tbltd1">Version 6 or</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="http://download.eclipse.org/equinox">Equinox</a></td> | 
|  | <td class="tbltd1"></td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="http://www.aqute.biz/Code/Download#sudoku">Sudoku Game</a></td> | 
|  | <td class="tbltd1"></td> | 
|  | </tr> | 
|  | </tbody> | 
|  | </table> | 
|  |  | 
|  | <p><strong class="notes">Note:</strong> You do not need to download a separate version | 
|  | of the NetBeans Platform to develop applications for the NetBeans Platform. | 
|  | Typically, you develop the applications and modules in the NetBeans IDE and | 
|  | then only include the modules that are necessary to run the NetBeans Platform and your application. | 
|  | </p> | 
|  |  | 
|  |  | 
|  |  | 
|  | <!-- ===================================================================================== --> | 
|  |  | 
|  | <h2><a name="setup"></a>Setting Up the Environment</h2> | 
|  | <p>Aside from downloading the software listed above, you need to take some steps to | 
|  | prepare your environment, as described below.</p> | 
|  |  | 
|  | <ol> | 
|  |  | 
|  | <li>Create a new folder in your filesystem on disk.</li> | 
|  | <li>From the Equinox distribution, put the following into the folder: | 
|  | <ul><li>javax.servlet_xxx.jar</li> | 
|  | <li>org.eclipse.equinox.ds_xxx.jar</li> | 
|  | <li>org.eclipse.equinox.http_xxx.jar</li> | 
|  | <li>org.eclipse.equinox.util_xxx.jar</li> | 
|  | <li>org.eclipse.osgi.services_xxx.jar</li> | 
|  | <li>org.eclipse.osgi_xxx.jar</li></ul> | 
|  |  | 
|  | </li> | 
|  | <li>Put the two Sudoku JARs into the folder, where the JARs above are found: | 
|  | <ul><li>aQute.sudoku.jar</li> | 
|  | <li>aQute.webrpc.jar</li></ul> | 
|  | </li> | 
|  | </ol> | 
|  |  | 
|  | <p>Now you have the OSGi bundles you will import available in a centralized location, | 
|  | from where you will integrate them into your application.</p> | 
|  |  | 
|  | <h2><a name="create"></a>Creating the Application</h2> | 
|  | <p>Once you have all the required OSGi bundles available, | 
|  | create your new NetBeans Platform application, as described below.</p> | 
|  |  | 
|  | <ol> | 
|  | <li><p>Choose File | New Project and choose to | 
|  | create a NetBeans Platform application atop Equinox, via the Equinox template:</p> | 
|  |  | 
|  | <p><img alt="" src="http://netbeans.dzone.com/sites/all/files/sudokugame-5.png"/></p> | 
|  | <p>Click Next.</p> | 
|  | </li> | 
|  |  | 
|  | <li><p>Specify a name for the application, as shown below.</p> | 
|  |  | 
|  | <p><img alt="" src="http://netbeans.dzone.com/sites/all/files/sudokugame-3.png"/></p> | 
|  |  | 
|  | <p>Click Finish.</p></li> | 
|  |  | 
|  | <li>You can run the application that results from the | 
|  | above template, you'll see an application containing a window, | 
|  | displaying all the NetBeans modules and OSGi bundles that make up your application.</li> | 
|  |  | 
|  | </ol> | 
|  |  | 
|  | <h2><a name="import"></a>Importing the OSGi Bundles</h2> | 
|  | <p>Aside from downloading the software listed above, you need to take some steps to | 
|  | prepare your environment, as described below.</p> | 
|  |  | 
|  |  | 
|  | <ol> | 
|  | <li><p>Right-click the application in the Projects window, choose Properties, go | 
|  | to the Libraries tab, click "Add Cluster" and then browse to the folder | 
|  | where the above JARs are found. Then a wizard opens that lets you convert | 
|  | the JARs to a 'cluster', i.e., a set of related modules/bundles that will | 
|  | be incorporated into your application:</p> | 
|  |  | 
|  | <p><img alt="" src="http://netbeans.dzone.com/sites/all/files/sudokugame-1.png"/></p></li> | 
|  |  | 
|  | <li>As shown above, set all imported OSGi bundles to "Enabled", so that they will | 
|  | be loaded and available at the time the application starts.</li> | 
|  |  | 
|  | <li>When you click Finish, the "platform.properties" | 
|  | configuration file will have been updated. | 
|  | It should look something like this: | 
|  |  | 
|  | <pre class="examplecode">cluster.path.extra=netbinox:\../../path/to/my/nbsudokugame/folder | 
|  | disabled.modules.extra=org.netbeans.libs.felix | 
|  | cluster.path=\ | 
|  | ${nbplatform.active.dir}/harness:\ | 
|  | ${nbplatform.active.dir}/platform:\ | 
|  | ${cluster.path.extra} | 
|  | disabled.modules=\ | 
|  | org.jdesktop.layout,\ | 
|  | org.netbeans.api.visual,\ | 
|  | org.netbeans.core.execution,\ | 
|  | org.netbeans.core.multiview,\ | 
|  | org.netbeans.insane,\ | 
|  | org.netbeans.libs.felix,\ | 
|  | org.netbeans.libs.jsr223,\ | 
|  | org.netbeans.modules.apisupport.harness,\ | 
|  | org.netbeans.modules.apisupport.tc.cobertura,\ | 
|  | org.netbeans.modules.autoupdate.services,\ | 
|  | org.netbeans.modules.autoupdate.ui,\ | 
|  | org.netbeans.modules.core.kit,\ | 
|  | org.netbeans.modules.favorites,\ | 
|  | org.netbeans.modules.jellytools.platform,\ | 
|  | org.netbeans.modules.jemmy,\ | 
|  | org.openide.compat,\ | 
|  | org.openide.execution,\ | 
|  | org.openide.options,\ | 
|  | org.openide.util.enumerations | 
|  | nbplatform.active=default</pre> | 
|  |  | 
|  |  | 
|  | <p><b>Note:</b> The first line above points to the folder you created earlier.</p></li> | 
|  |  | 
|  | <li>Then add this line to the "project.properties" configuration file of the application, | 
|  | which specifies that no splash screen will be shown | 
|  | and the port for deployment of the application: | 
|  |  | 
|  | <pre class="examplecode">run.args.extra=--nosplash -J-Dorg.osgi.service.http.port=8080</pre></li> | 
|  | </ol> | 
|  |  | 
|  | <h2><a name="run"></a>Running the Application</h2> | 
|  |  | 
|  | <p>The application is now ready to be deployed, as described below.</p> | 
|  |  | 
|  | <ol> | 
|  |  | 
|  | <li><p>Run the application! All the OSGi bundles and NetBeans modules in your application | 
|  | will be deployed. The application for viewing the deployed OSGi bundles and NetBeans | 
|  | modules is deployed too, giving you a desktop application to monitor what is | 
|  | currently deployed, which is quite handy:</p> | 
|  |  | 
|  | <p><img alt="" src="http://netbeans.dzone.com/sites/all/files/sudokugame-6_0.png"/></p> | 
|  |  | 
|  | <p>Alternatively, delete the whole module that provides the window above. Then remove all | 
|  | the modules that are required by the above window, i.e., remove the window system, | 
|  | actions system, and everything else... except for the few JARs required by the OSGi | 
|  | integration: bootstrap, startup, filesystems, module system, utilities, and lookup. | 
|  | </p> | 
|  |  | 
|  | <pre class="examplecode">cluster.path.extra=netbinox:\../../path/to/my/nbsudokugame/folder | 
|  | disabled.modules.extra=org.netbeans.libs.felix | 
|  | cluster.path=\ | 
|  | ${nbplatform.active.dir}/harness:\ | 
|  | ${nbplatform.active.dir}/platform:\ | 
|  | ${cluster.path.extra} | 
|  | disabled.modules=\ | 
|  | org.jdesktop.layout,\ | 
|  | org.netbeans.api.annotations.common,\ | 
|  | org.netbeans.api.progress,\ | 
|  | org.netbeans.api.visual,\ | 
|  | org.netbeans.core,\ | 
|  | org.netbeans.core.execution,\ | 
|  | org.netbeans.core.io.ui,\ | 
|  | org.netbeans.core.multiview,\ | 
|  | org.netbeans.core.nativeaccess,\ | 
|  | org.netbeans.core.output2,\ | 
|  | org.netbeans.core.ui,\ | 
|  | org.netbeans.core.windows,\ | 
|  | org.netbeans.insane,\ | 
|  | org.netbeans.libs.felix,\ | 
|  | org.netbeans.libs.jna,\ | 
|  | org.netbeans.libs.jsr223,\ | 
|  | org.netbeans.libs.junit4,\ | 
|  | org.netbeans.modules.apisupport.harness,\ | 
|  | org.netbeans.modules.apisupport.tc.cobertura,\ | 
|  | org.netbeans.modules.applemenu,\ | 
|  | org.netbeans.modules.autoupdate.services,\ | 
|  | org.netbeans.modules.autoupdate.ui,\ | 
|  | org.netbeans.modules.core.kit,\ | 
|  | org.netbeans.modules.editor.mimelookup,\ | 
|  | org.netbeans.modules.editor.mimelookup.impl,\ | 
|  | org.netbeans.modules.favorites,\ | 
|  | org.netbeans.modules.javahelp,\ | 
|  | org.netbeans.modules.jellytools.platform,\ | 
|  | org.netbeans.modules.jemmy,\ | 
|  | org.netbeans.modules.keyring,\ | 
|  | org.netbeans.modules.masterfs,\ | 
|  | org.netbeans.modules.nbjunit,\ | 
|  | org.netbeans.modules.options.api,\ | 
|  | org.netbeans.modules.options.keymap,\ | 
|  | org.netbeans.modules.print,\ | 
|  | org.netbeans.modules.progress.ui,\ | 
|  | org.netbeans.modules.queries,\ | 
|  | org.netbeans.modules.sendopts,\ | 
|  | org.netbeans.modules.settings,\ | 
|  | org.netbeans.modules.spi.actions,\ | 
|  | org.netbeans.spi.quicksearch,\ | 
|  | org.netbeans.swing.outline,\ | 
|  | org.netbeans.swing.plaf,\ | 
|  | org.netbeans.swing.tabcontrol,\ | 
|  | org.openide.actions,\ | 
|  | org.openide.awt,\ | 
|  | org.openide.compat,\ | 
|  | org.openide.dialogs,\ | 
|  | org.openide.execution,\ | 
|  | org.openide.explorer,\ | 
|  | org.openide.io,\ | 
|  | org.openide.loaders,\ | 
|  | org.openide.nodes,\ | 
|  | org.openide.options,\ | 
|  | org.openide.text,\ | 
|  | org.openide.util.enumerations,\ | 
|  | org.openide.windows | 
|  | nbplatform.active=default</pre> | 
|  |  | 
|  | <p>Then you will have a non-GUI application, i.e., a server application, well suited for modular | 
|  | web development.</p></li> | 
|  |  | 
|  | <li>Now put this URL in the browser (optionally, use URLDisplayer.getDefault() from | 
|  | the NetBeans UI Utilities API to open the browser at the required location | 
|  | programmatically) and the "index.html" defined within the Sudoku Game is deployed, | 
|  | displayed in the browser, and you can start playing the Suduko Game: | 
|  |  | 
|  | <pre class="examplecode">http://localhost:8080/rpc/sudoku/index.html</pre></li> | 
|  |  | 
|  | </ol> | 
|  |  | 
|  | <p>Congratulations, you have integrated your first OSGi bundles into a NetBeans Platform application.</p> | 
|  |  | 
|  | <h2><a name="further"></a>Further Reading</h2> | 
|  |  | 
|  | <p>Now that you have completed the tutorial and understand the steps to take when you want | 
|  | to reuse an OSGi bundle in your NetBeans Platform application, take a look at these | 
|  | related documents and more | 
|  | advanced scenarios:</p> | 
|  |  | 
|  | <ul> | 
|  | <li><a href="http://www.osgi.org/blog/2006_09_01_archive.html">Peter Kriens and the Sudoku Game</a></li> | 
|  | <li><a href="http://wiki.apidesign.org/wiki/NetbinoxTutorial">Jaroslav Tulach and Netbinox</a></li> | 
|  | <li>Toni Epple's OSGi/NetBeans <a href="http://eppleton.sharedhost.de/blog/?p=662">blog entry</a> and <a href="http://eppleton.sharedhost.de/blog/?s=Frankenstein%27s+IDE">presentation</a></li> | 
|  | <li>Gunnar Reinseth's NetBeans-EMF integration (<a href="http://eclipse.dzone.com/emf-on-netbeans-rcp">part 1</a>, <a href="http://eclipse.dzone.com/emf-on-netbeans-rcp-2">part 2</a>)</li> | 
|  | <li>Also read <a href="http://java.dzone.com/news/new-cool-tools-osgi-developers">New Cool Tools for OSGi Developers</a></li> | 
|  | </ul> | 
|  |  | 
|  | </body> | 
|  |  | 
|  | </html> |