Blog

Sie befinden sich hier: Blog

OSGi Console für Confluence

Mittwoch, 03. März 2010 @ 16:16 geschrieben von Arno Schumacher

Seit der Version 2.10 von Confluence steht ein neues Plugin-Framework für die Confluence Plugin-Entwicklung bereit. Das Plugin-Framework beruht auf OSGi und Spring Dynamic Modules. Daher besteht die Möglichkeit auch native OSGi Bundles in Confluence zu deployen, etwa die OSGi Console.

Finden sich im Manifest eines Confluence Plugins OSGi-Attribute, so werden auch diese ausgewertet.

Manifest-Version: 1.0
Bundle-Version: 1.0.0
Bundle-Name: avono Confluence OSGi Console
Bundle-ManifestVersion: 2
Bundle-Description: avono Confluence OSGi Console
Bundle-SymbolicName: com.avono.confluence.osgi.console
Import-Package: org.apache.log4j, org.osgi.framework
Bundle-Activator: com.avono.confluence.osgi.console.internal.Activator

Beim Deployment eines nativen OSGi-Bundels muss in Confluence immer ein - zumindest leerer - atlassian-plugin.xml Deskriptor mit im Archiv enthalten sein. Will man ein bestehendes OSGi-Bundle in Confluence deployen, muss man das Jar-Archiv des Bundles mit einen atlassian-plugin.xml Deskriptor anreichern. Alternativ lassen sich OSGi-Bundles aber auch über ein Launcher Atlassian Plugin oder über ein Launcher OSGi Plugin programmatisch installieren, letzteres soll hier gezeigt werden.

Ich habe ein Atlassian Plugin Archiv mit einem leeren Plugin-Deskriptor erstellt. Im Manifest des Archivs findet sich ein OSGi Bundle-Activator Element. Die entsprechende Java-Klasse wird beim Deployen des Plugins instantiiert und die start-Methode ausgeführt. Umgekehrt wird auch die stop-Methode des Bundles aufgerufen, wenn das Plugin wieder heruntergefahren wird.

Innerhalb der Start-Methoden lassen sich relativ einfach gewünschte Bundles programmatisch installieren.

public class Activator implements BundleActivator {
private List<Long> ids = new ArrayList<Long>();
 
private Bundle install(BundleContext context, String string, String string2)throws Exception {
  final ClassLoader classLoader = this.getClass().getClassLoader();
    return context.installBundle(string,classLoader.getResourceAsStream(string2));
  }

@Override
  public void start(BundleContext context) throws Exception {
  try {                    
    List<Bundle> bs = Arrays.asList(
       install(context,"shell","/bundles/org.apache.felix.shell-1.4.1.jar"),
         install(context, "remoteshell", "/bundles/org.apache.felix.shell.remote-1.0.4.jar")

);
     for (Bundle b : bs) {
        b.start();
        ids.add(b.getBundleId());
     }
    } catch (Exception e) {
    LOGGER.error(e);
      throw e;
    }
  }
 ...
}

Für die OSGi Console in Confluence werden die Bundles

  • org.apache.felix.shell-1.4.1.jar
  • org.apache.felix.shell.remote-1.0.4.jar

programmatisch installiert bzw. deinstalliert. Die Bundle-Archive habe ich im Launcher Plugin unterhalb des Verzeichnis bundles abgelegt.

Nach dem Deployment des Launcher OSGi-Plugins lauscht dann unter Port 6666 auf der Confluence Maschine eine OSGi-Telnet Console. 

Links:

 

zur Übersicht

Willkommen auf dem avono Blog

Hier auf dem avono Blog finden Sie in regelmäßigen Abständen sowohl technische Neuigkeiten aus unserer Partnerproduktwelt als auch nützliche Entwicklertipps.
Und jetzt kommt der obligatorische Disclaimer: Die Ausführungen der Blogeinträge spiegeln nicht die Meinung der avono AG sondern nur die Sicht der einzelnen Autoren wider.

Kategorien


Suche