Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
{include:apache-felix-ipojo-header}
{html}
<div class="content">
{html}
h1. iPOJO Eclipse Plug-in

{info:title=Update}
The iPOJO Eclipse plugin is now hosted and supported in the [iPOJO Toolbox project|http://ipojo-toolbox.wiki.sourceforge.net/iPOJO-Eclipse-plugin]. 
{info}

----

_iPOJO is based on a byte code manipulation. So, it requires a different packaging process as "normal" bundle. This plug-in allow to build an "iPOJO bundle" directly from Eclipse. Moreover, by collaborating with BND (see [http://www.aqute.biz/Code/Bnd]), it simplifies the creation of bundles._

{div:class=toc}
{toc:maxLevel=4|minLevel=2}
{div}

h2. Installation

The plug-in requires Eclipse 3.3 (Europa) or higher. The plug-in can be installed from the following update site : [http://clement.plop-plop.net/update/]

h2. Usage

Once installed, create a Java project to use the plug-in.

!1-java-project.png!

The new java project wizard appears. Enter the project name without spaces. Configure the Java project as you want.

!2-new-java-project.png!

Then, right click on the new project, go inside the iPOJO sub-menu and click on "create both files". This action will create two file in your java project. The $project_name.bnd file configure BND and contains the declaration of imported, private and exported packages. The second file (metadata.xml) contains the iPOJO bundle configuration.

!3-create-files.png!

As you create the two file, you should obtain something like :

!4-project-view.png!

Imagine that you implement a simple component displaying each message pushed inside the OSGi™ Log Service. The following code snippet shows one possible implementation of this component :
{code}
package org.apache.felix.ipojo.example.logcons;

import java.text.DateFormat;
import java.util.Date;

import org.osgi.service.log.LogEntry;
import org.osgi.service.log.LogListener;
import org.osgi.service.log.LogReaderService;
import org.osgi.service.log.LogService;

public class LogCons implements LogListener{

    private LogReaderService reader;

    public void start() {
        reader.addLogListener(this);
    }

    public void stop() {
        reader.removeLogListener(this);
    }

    public void logged(LogEntry entry) {
        Date date = new Date(entry.getTime());
        String message = "";
        switch(entry.getLevel()) {
        case LogService.LOG_DEBUG: message = "[DEBUG] " + 
           DateFormat.getInstance().format(date) + " - " +
           entry.getMessage(); break;
        case LogService.LOG_ERROR: message = "[ERROR] " + 
           DateFormat.getInstance().format(date) + " - " +
           entry.getMessage(); break;
        case LogService.LOG_INFO: message = "[INFO] " + 
           DateFormat.getInstance().format(date) + " - " + 
           entry.getMessage(); break;
        case LogService.LOG_WARNING: message = "[WARNING] " + 
           DateFormat.getInstance().format(date) + " - " +
           entry.getMessage(); break;
        default: message = "[UNKNOWN] " + 
           DateFormat.getInstance().format(date) + " - " + entry.getMessage(); 
           break;
        }
        System.out.println(message);
    }
}
{code}
Once implemented, you need to fill out the BND file with following information:
{code}
Import-Package: *
Private-Package: org.apache.felix.ipojo.example.logcons
{code}
Then, the metadata.xml file needs to be filled out. We declare the LogCons component type with a simple service requirement on the LogReaderService and two lifecycle callbacks. To finish, we declare an instance of this component type.
{code}
<ipojo>
<!-- Declare the component type for LogCons -->
<component classname="org.apache.felix.ipojo.example.logcons.LogCons" 
           name="LogCons">
	<requires field="reader"/>
	<callback transition="validate" method="start"/>
	<callback transition="invalidate" method="stop"/>
</component>

<!-- Create a LogCons instance -->
<instance component="LogCons"/>
</ipojo>
{code}
Once all is complete, we can build the bundle by doing a right-click on the metadata.xml file. Then go to the iPOJO sub-menu and click on Create Bundle.

!5-create-the-bundle.png!

If all is correctly configured, the following message appears, else warnings or errors are displayed in a message box too.

!6-manipulation-done.png!

Your project contains now the build bundle. The bundle has the same name as your project.

!7-final-project.png!

h2. Plug-in options


h3. On Java project

!8-project-options.png!
* Create both files : create both the BND file and the metadata.xml file (replace existing one)

* Create metadata.xml file : create only the metadata.xml file

* Create BND file : create only the BND file

h3. On metadata.xml file

!9-metadata-options.png!
* Manipulate bundle: take an already created bundle and manipulate it. This option is use when you don't use BND to create a bundle

* Create bundle: create a bundle "from scratch", first create a bundle with BND and then manipulate it.

h2. Conclusion

This page has presented the iPOJO Eclipe plug-in. 
Subscribe to the Felix users mailing list by sending a message to [mailto:users-subscribe@felix.apache.org]; after subscribing, email questions or feedback to [mailto:users@felix.apache.org]
\\
\\
{include:apache-felix-ipojo-footer}