Introduction to OSGi +ActorFrame Surya Bahadur Kathayat
Presentation includes What is the OSGi service platform? Why the OSGi service platform? ActorFrame and OSGi Some hands on exercise
What is the OSGi service platform? Java based service platform that can be remotely managed Applications and components (coming in the form of bundles for deployment) can be remotely installed, started, stopped, updated and uninstalled without requiring a reboot
OSGi Framework Bundles - Bundles are the OSGi components made by the developers. Services - The services layer connects bundles in a dynamic way by offering a publish-find-bind model for plain old Java objects. Life-Cycle - The API to install, start, stop, update, and uninstall bundles. Modules - The layer that defines how a bundle can import and export code. Security - The layer that handles the security aspects. Execution Environment - Defines what methods and classes are available in a specific platform. Ref:
Why the OSGi service platform? Components are smaller Easier to make Components are not coupled to other components Gives reusability Excellent model for the myriad of customizations and variation that are required of today’s devices Collaborative model Allows reuse of other components for most problems More on -
ActorFrame and OSGi Core component is the ActorRouter bundle contains forward table – info about in which bundle (visible) actor is running carries messages between the actors running on different java containers actors send actor messages to each other
Hands on.. OSGi Bundle How to create simple service OSGi bundle? How to create OSGi bundle with Ramses? You will need Java, ActorFrame, Ramses, Eclipse, Knopflerfish OSGi
Creating and testing simple OSGi bundle Install Ramses plugin for eclipse 3.4 (classical version) Update site: Import org.isisproject.actorframeosgi project in eclipse: New|Other|Examples|Import ActorFrrame OSGi Libraries from Tellu Create java project – lets name it ExampleBundle Add org.isisproject.actorframeosgi project in the Build path of ExampleBundle project (or alternatively add framework.jar in the build path) Create src/META-INF/MANIFEST.MF file in the ExampleBundle project Create Activator.java, and test java class say HelloWorld.java in the src/ folder Export the src as a java jar in eclipse chosing created manifest file Thats all.....test it dragging it to the knopflerfish OSGi console More on
Java Files package no.ntnu.item.examplebundle; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class Activator implements BundleActivator { public static BundleContext bc = null; private HelloWorld thread = null; public void start(BundleContext bc) throws Exception { System.out.println("SimpleBundle starting..."); Activator.bc = bc; this.thread = new HelloWorld(); this.thread.start(); } public void stop(BundleContext bc) throws Exception { System.out.println("SimpleBundle stopping..."); this.thread.stopThread(); this.thread.join(); Activator.bc = null; } } package no.ntnu.item.examplebundle; public class HelloWorld extends Thread { private boolean running = true; public HelloWorld() { } public void run() { while (running) { System.out.println("Hello World!"); try { Thread.sleep(5000); } catch (InterruptedException e) { System.out.println("HelloWorld ERROR: " + e); } public void stopThread() { this.running = false; } No services/application implemented yet Threading just for some debugging
Manifest File Manifest-Version: 1.0 Bundle-Description: Bundle-Name: Example Bundle-Classpath:. Bundle-Activator: no.ntnu.item.examplebundle.A ctivator Import-Package: org.osgi.framework Bundle-ManifestVersion: 2 Bundle-Vendor: NTNU Bundle-SymbolicName: MyExampleBundle Bundle-Version: 1.0.1
Lets see..
Creating a simple Service Create service interface and service implementation Register the service from the start method in Activator class Add service package to Export-Package property in the MANIFEST file, in order to make your service accessible to other services Export as a java jar bundle and deploy
Lets see..
Creating a simple Service client Get the service reference from the start method in Activator class Add service package to Import-Package property in the MANIFEST file, in order to declare that your service need to have access ot this package Export as a java jar bundle and deploy
Lets see..
OSGi Bundles with ActorFrame/Ramses Create Java Project and extend it to Ramses Project type Design your services/actors – UML model Generate code and create OSGi bundle – just with one click