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

View more Tutorials:

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"

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

}
 

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

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

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

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

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

}

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

View more Tutorials: