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. InstallationThe 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/ UsageOnce installed, create a Java project to use the plug-in. ![](/confluence/download/attachments/62730/1-java-project.png?version=1&modificationDate=1185778065000&api=v2)
The new java project wizard appears. Enter the project name without spaces. Configure the Java project as you want. ![](/confluence/download/attachments/62730/2-new-java-project.png?version=1&modificationDate=1185778108000&api=v2)
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. ![](/confluence/download/attachments/62730/3-create-files.png?version=1&modificationDate=1185778108000&api=v2)
As you create the two file, you should obtain something like : ![](/confluence/download/attachments/62730/4-project-view.png?version=1&modificationDate=1185778108000&api=v2)
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 Block |
---|
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);
}
}
|
Once implemented, you need to fill out the BND file with following information: Code Block |
---|
Import-Package: *
Private-Package: org.apache.felix.ipojo.example.logcons
|
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 Block |
---|
<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>
|
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. ![](/confluence/download/attachments/62730/5-create-the-bundle.png?version=1&modificationDate=1185778108000&api=v2)
If all is correctly configured, the following message appears, else warnings or errors are displayed in a message box too. ![](/confluence/download/attachments/62730/6-manipulation-done.png?version=1&modificationDate=1185778108000&api=v2)
Your project contains now the build bundle. The bundle has the same name as your project. ![](/confluence/download/attachments/62730/7-final-project.png?version=1&modificationDate=1185778126000&api=v2)
Plug-in optionsOn Java project![](/confluence/download/attachments/62730/8-project-options.png?version=1&modificationDate=1185778126000&api=v2)
- 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
![](/confluence/download/attachments/62730/9-metadata-options.png?version=1&modificationDate=1185778126000&api=v2)
- 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.
ConclusionThis page has presented the iPOJO Eclipe plug-in. Do not hesite to send me comments or questions.Subscribe to the Felix users mailing list by sending a message to users-subscribe@felix.apache.org; after subscribing, email questions or feedback to users@felix.apache.org |