Tutoriel Java OSGi pour les débutants

View more Tutorials:

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"

2.1- 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");
   }

}
 

2.2- Configurer les bundles dépendants pour MathConsumer

MathConsumer est un  OSGi 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

2.3- 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

2.4- 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"

3.1- 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éé :

3.2- 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!");
   }

}

3.3- 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.."

View more Tutorials: