codestory

Die Anleitung zum Java OSGi für den Anfänger

  1. Die Vorstellung
  2. Die Erstellung von OSGi "MathConsumer"
  3. OSGi "MathService" erstellen
  4. Die Konfiguration vom MathConsumer durch MathService

1. Die Vorstellung

Das Dokument wird nach ... geschrieben
  • Eclipse 4.4 (LUNA)
Das sind die Schritte der Durchführung im Dokument

2. Die Erstellung von OSGi "MathConsumer"

Die Erstellung vom Project MathConsumer
  • org.o7planning.tutorial.helloosgi.mathconsumer.Activator
Das Project MathConsumer wird erstellt
Öffnen Sie die Class Activator um die Code zu ändern
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");
   }

}
Die abhängigen Bundle für MathConsumer konfigurieren
MathConsumer ist ein OSGi, das ein Bundle auch genannt wird. Jetzt melden wir an, dass MathConsumer verwendet einige Bundle mit anderem Zweck um MathConsumer später zu starten
  • org.eclipse.osgi
  • org.eclipse.equinox.console
  • org.apache.felix.gogo.command
  • org.apache.felix.gogo.runtime
  • org.apache.felix.gogo.shell
Eclipse konfigurieren um MathConsumer zu laufen
Danach konfigurieren wir um MathConsumer auf die Eclipse direkt zu starten
Drücken Sie die Rechtmaustaste auf dem Projekt MathService und wählen Sie "Run As/Run Configuration.."
Geben Sie den Name ein:
  • Run OSGi MathConsumer
MathConsumer laufen
Das ist das Ergebnis des Starten vom OSGi MathConsumer
Benutzen Sie den Befehl ss um zu sehen, welche OSGi gerade laufen und ihre Zustände
Wie das Beispiel sehen wir, dass ID vom OSGi MathConsumer ist 2, und benutzen wir den Befehl "stop" um die Bundle zu stoppen
Und benutzen Sie "start" um diese OSGi wieder zu starten.

3. OSGi "MathService" erstellen

Das Project "MathService" erstellen
Auf die Eclipse wählen Sie:
  • File/New/Other
Wählen Sie, dass der Typ vom OSGi ist Standard
  • MathService
  • org.o7planning.tutorial.helloosgi.Activator
Das ist die Image von dem neu erstellten Projekt
Code Project MathService & die Registrierung von MathService
Wir fügen einige Class ein um ein fertiges Projekt wie folgend zu schaffen
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;
   }
}
Das ist das Überblick über die Beziehung der erstellten Klassen
Die Registration von MathService damit die anderen OSGi benutzen können, die in der Activator vom MathService durchgeführt werden.
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!");
   }

}
Die Konfiguration von OSGi MathService und die Bedeutungserklärung
Die Konfiguration zum Export von 2 Packages org.o7planning.tutorial.helloosgi.utils und org.o7planning.tutorial.helloosgi.mathservice.

OSGi wie eine geschlossene Kaste . Die anderen OSGi verwenden die class/interface von diesem OSGi nur wenn sie in einer exportierten Package liegen
Die folgende Image bezeichnet, OSGi MathService exportiert 2 package:
  • org.o7planning.tutorial.helloosgi.mathservice
  • org.o7planning.tutorial.helloosgi.utils
OSGi MathConsumer benutzt nur die class/interface, die in einer von MathService exportierten Package

4. Die Konfiguration vom MathConsumer durch MathService

Zum Weiteren melden Sie an, damit MathConsumer die MathService. benutzen können
Änderen Sie die Class vom 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");
    }

}
Konfigurieren Sie wieder um OSGi MathConsumer zu starten
Drücken Sie die Rechtmaustaste auf dem Projekt MathConsumer und wählen Sie "Run As/Run Configuration.."