devstory

Tutoriel Java OSGi pour débutant

  1. Introduction
  2. Créer OSGi "MathConsumer"
  3. Créer OSGi "MathService"
  4. Configurer MathConsumer  utilise MathService

1. Introduction

Ce document est écrit en se basant sur :
  • Eclipse 4.4 (LUNA)
Voici les étapes dans l'instruction :

2. Créer OSGi "MathConsumer"

Créer Project MathConsumer
  • org.o7planning.tutorial.helloosgi.mathconsumer.Activator
Le projet MathConsumer a été créé.
Ouvrez la class Activator pour corriger le code :
Activator.java
package org.o7planning.tutorial.helloosgi.mathconsumer;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

   private static BundleContext context;

   static BundleContext getContext() {
       return context;
   }

   public void start(BundleContext bundleContext) throws Exception {
       Activator.context = bundleContext;
       System.out.println("MathConsumer Starting...");

       System.out.println("MathConsumer Started");
   }

   public void stop(BundleContext bundleContext) throws Exception {
       Activator.context = null;
       System.out.println("MathConsumer Stopped");
   }

}
Configurer les bundles dépendants pour MathConsumer
MathConsumer est unOSGi reconnu comm un Bundle. Maintenant, nous allons déclarer MathConsumer qui utilise quelques Bundles en but de pouvoir exécuter MathConsumer plus tard.
  • org.eclipse.osgi
  • org.eclipse.equinox.console
  • org.apache.felix.gogo.command
  • org.apache.felix.gogo.runtime
  • org.apache.felix.gogo.shell
Configurer Eclipse pour exécuter MathConsumer
Ici nous allons configurer pourque MathConsumer puisse exécuter sur Eclipse
Cliquez droit sur le projet MathService et sélectionnez "Run As/Run Configuration.."
Saisissez le nom :

  • Run OSGi MathConsumer
Exécutation de MathConsumer
Ceci est le résultat de l'exécution de OSGi MathConsumer
Utilisez la commande ss pour voir ceux qui sont en cours d'exécution , et leur état.
Comme nous voyons dans des illustrations, le ID de OSGI MathConsumer est 2, utilisez la commande "stop" pour arrêter ce Bundle.
Et utilisez le"start"pour redémarrer cet OSGi.

3. Créer OSGi "MathService"

Créer le projet "MathService"
Sur Eclipse sélectionnez :
  • File/New/Other
Sélectionnez le type de OSGi Standard
  • MathService
  • org.o7planning.tutorial.helloosgi.Activator
C'est l'image de projet qui a été créé :
Code Project MathService & enregistrement de MathService
Nous allons ajouter quelques classes pour obtenir l'image finale du projet comme ci-dessous :

MathService.java
package org.o7planning.tutorial.helloosgi.mathservice;

public interface MathService {

   public int sum(int a, int b);

}
MathServiceImpl.java
package org.o7planning.tutorial.helloosgi.mathservice.impl;

import org.o7planning.tutorial.helloosgi.mathservice.MathService;

public class MathServiceImpl implements MathService {

   @Override
   public int sum(int a, int b) {
       return a+ b;
   }

}
MathUtils.java
package org.o7planning.tutorial.helloosgi.utils;

public class MathUtils {

   
   public static int minus(int a, int b)  {
       return a- b;
   }
}
Et voici l'image d'ensemble sur relations de classe qui viennent de créer.
L'inscription du MathService permet aux autres OSGi d'être utilisés. Cela est fait dans Activator de OSGi MathService
Activator.java
package org.o7planning.tutorial.helloosgi;

import org.o7planning.tutorial.helloosgi.mathservice.MathService;
import org.o7planning.tutorial.helloosgi.mathservice.impl.MathServiceImpl;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

   private static BundleContext context;

   static BundleContext getContext() {
       return context;
   }

   public void start(BundleContext bundleContext) throws Exception {
       Activator.context = bundleContext;
       
       System.out.println("Registry Service MathService...");
       
       this.registryMathService();
       
       System.out.println("OSGi MathService Started");
   }

   private void registryMathService() {
       MathService service = new MathServiceImpl();
       context.registerService(MathService.class, service, null);
   }

   public void stop(BundleContext bundleContext) throws Exception {
       Activator.context = null;
       System.out.println("OSGi MathService Stopped!");
   }

}
Configurer OSGi MathService et et expliquer leur signification
Nous configurons pour exporter (export) deux packages org.o7planning.tutorial.helloosgi.utils et org.o7planning.tutorial.helloosgi.mathservice.

OSGi est comme une boîte fermée, autres OSGi ne peut que utiliser la classe/interface de cet OSGi si elles sont dans le package qui est exporté à l'extérieur .
La figure ci-dessous illustre OSGi MathService qui exporte deux packages :
  • org.o7planning.tutorial.helloosgi.mathservice
  • org.o7planning.tutorial.helloosgi.utils
OSGi MathConsumer ne peut qu'utiliser la classe/interface dans le package d'exportation de MathService.

4. Configurer MathConsumer  utilise MathService

Ensuite on va déclarer pourque MathConsumer puisse utiliser MathService.
Modifiez la class Activator :
Activator.java
package org.o7planning.tutorial.helloosgi.mathconsumer;

import org.o7planning.tutorial.helloosgi.mathservice.MathService;
import org.o7planning.tutorial.helloosgi.utils.MathUtils;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;

public class Activator implements BundleActivator {

    private static BundleContext context;

    static BundleContext getContext() {
        return context;
    }

    public void start(BundleContext bundleContext) throws Exception {
        Activator.context = bundleContext;
        System.out.println("MathConsumer Starting...");

        System.out.println("5-3 = " + MathUtils.minus(5, 3));

        //
        ServiceReference<?> serviceReference = context
                .getServiceReference(MathService.class);
        MathService service = (MathService) context
                .getService(serviceReference);

        System.out.println("5+3 = " + service.sum(5, 3));

        System.out.println("MathConsumer Started");
    }

    public void stop(BundleContext bundleContext) throws Exception {
        Activator.context = null;
        System.out.println("MathConsumer Stopped");
    }

}
Re-configurez pour exécuter OSGI MathConsumer
Cliquez-droit sur le projet MathConsumer puis sélectionnez "Run As/Run Configuration.."