Business Bot Komponenten¶
Paket-Struktur¶
Das Java-Projekt hat eine Verzeichnisstruktur zur übersichtlichen Strukturierung der verschiedenen Inhalte. Eine Vorgabe ist, das Verzeichnis mit dem Quellcode und den übersetzten Klassendateien zu trennen. Die üblichen Ordnernamen für Java EE-Projekte sind src
und bin
.
Note
Anmerkungen für Eclipse: Entwicklungsumgebungen wie Eclipse übersetzen Java-Typen aus dem src
- in den bin
-Ordner und kopieren Ressourcen wie Bilder und Übersetzungsdateien bei jedem Build ebenfalls in den src
-Ordner. Eclipse unterstützt diesen Aufbau standardmäßig, wenn beim Dialog für ein neues Java-Projekt unter Project layout
die Option Create separate folders for source and class files
aktiviert ist.
Note
Anmerkungen für NetBeans: Unter NetBeans ist die Standardstruktur etwas anders und eng mit dem Build-Tool Ant verbunden. Der Ordner src
enthält die Standard-Klassen und Ressourcen, ein zweiter Ordner test die Test-Klassen und Ressourcen. Die übersetzten Java-Klassen nimmt der Ordner build/classes
auf. Das Ergebnis des Builds, eine Jar-Datei im Fall eines einfachen Java-Projekts, steht im Ordner dist
.
Die Verzeichnisstruktur hat zusätzlich einen lib
und resource
-Ordner. Im lib
-Ordner werden die von Business Bot verwendeten Bibliothek abgelegt. Der resource
-Ordner unterteilt sich nochmal in localization
für Sprachdateien, media
für multimediale Dateien, sowie templates
für Nachrichten-Vorlagen. Die Projektstruktur schaut wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | BusinessBot<Projectname>
|- src
|- Package <country.company.businessbot.<application name>
|- Package <country.company.businessbot.<common>
|- Package <country.company.businessbot.<database> (optional)
|- Package <country.company.businessbot.plugin (required)
|- PluginClient.java (required) (Schnittstelle)
|- Package <country.company.businessbot.<services>
|- classes
|- extension.idx (Extension Point für den Klassenlader)
|- MANIFEST.MF (META Informationen)
|- lib (Bibliotheken)
|- de.citunius.businessbot.api-1.0.0.jar (Common API für die Business Bot Plattform)
|- de.citunius.businessbot.api.messenger-1.0.0.jar (Generic Messenger API für die Business Bot Plattform)
|- de.citunius.businessbot.api.sfb-1.0.0.jar (Skype for Business API für die Business Bot Plattform)
|- de.citunius.businessbot.api.telegram-1.0.0.jar (Telegram Messenger API für die Business Bot Plattform)
|- resources
|- localization
|- string_de.properties (Sprachlabels für Deutsch)
|- string_en.properties (Sprachlabels für Englisch)
|- string.properties (Default-Sprachlabels)
|- media
|- images
|- icon.png (Business Bot Icon)
|- templates
|- list.ftl (Vorlage für Instant-Nachrichten - Vorlage: Liste)
build.xml (Apache Ant Build-Konfiguration)
MANIFEST.MF (Default Projekt META-Informationen)
plugin.properties (META-Informationen für das Plugin)
|
Warning
Wichtig: Ein Business Bot darf entweder die Bibliothek Skype for Business API
ODER die Telegram Messenger API
verwenden, jedoch dürfen NICHT beide Bibliotheken im lib
–Verzeichnis des Projekts vorhanden sein.
Plugin Manager¶
Der Plugin Manager sucht nach den META-Informationen des Plugins, die in der Manifest-Datei unter classes/MANIFEST.MF
festgelegt werden. Die MANIFEST.MF
-Datei beinhaltet die Einträge wie im folgenden Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Manifest-Version: 1.0
Implementation-Title: calculator Plugin #1
Implementation-Version: 1.2.0-SNAPSHOT
Plugin-Id: de.citunius.telegram.calculator
Built-By: ME
Created-By: Apache Maven 3.3.9
Plugin-Version: 1.0.0
Plugin-Provider: Citunius GmbH
Plugin-Class: de.citunius.businessbot.plugin.PluginClient
Plugin-Dependencies:
Implementation-Vendor-Id: de.citunius.plugins
Build-Jdk: 1.7.0_67
Specification-Title: calculator Plugin #1
Specification-Version: 1.2.0-SNAPSHOT
Archiver-Version: Plexus Archiver
|
In der Beispiel-Manifest wurde ein Plugin mit der Id de.citunius.telegram.calculator
beschrieben, mit der Klasse de.citunius.businessbot.plugin.PluginClient
und Version 0.0.1
. Die Plugin-Id muss eindeutig sein und den Konvensionen <Country>.<Company>.<Instant Messenger>.<Application Name> entsprechen, da sonst die Registrierung des Plugins abgelehnt wird. Zudem muss die Plugin-Version mit Semantic Versioning kompatibel sein (Die Business Bot Plattform benutzt jsemver
als Implementation für SemVer, weil es den Vergleich von Versionen unterstützt).
Eine andere interne Komponente des Plugin-Managers ist der ExtensionFinder der beschreibt, wie der Plugin-Manager die Erweiterung über den Extensionpoint findet. Der DefaultExtensionFinder sucht nach der Erweiterung mit einer Extension Annotation in der Datei META-INF/extensions.idx
. Die Business Bot Plattform benutzt dabei Java Annotation Processing, um alle Klassen der Erweiterung zur Laufzeit zu kompilieren, die mit @Extension
annotiert sind und erstellt dafür die entsprechende Extension Index-Datei.
Plugin Lebenszyklus¶
Jedes Plugin durchläuft die festgelegten Lebenszykluszustände. Der PluginState definiert dabei alle möglichen Zustände. Die primären Plugin-Zustände sind:
- CREATED
- DISABLED
- STARTED
- STOPPED
Der DefaultPluginManager enthält die folgende Logik:
- Alle Plugins werden aufgelöst und geladen
DISABLED
-Plugins werden NICHT automatisch von der Business Bot Plattform gestartet, ABER Sie können einDISABLED
-Plugin manuell starten (und damit aktivieren), indem SiestartPlugin
auf der Business Bot Plattform ausführen, anstelle vonenablePlugin()
+startPlugin()
- Nur
STARTED
Plugins können Erweiterungen beitragen. Jeder andere Zustand sollte nicht als betriebsbereit angesehen werden, da die Erweiterung nicht dem laufenden System hinzugefügt wird.
Die Unterschiede zwischen einem DISABLED
Plugin und einem STARTED
Plugin sind:
- Ein
STARTED
Plugin hat die MethodePlugin.start()
ausgeführt, einDISABLED
Plugin jedoch nicht.- Ein
STARTED
Plugin kann Erweiterungsinstanzen der Business Bot Plattform hinzufügen, einDISABLED
-Plugin kann dies nicht.
DISABLED
-Plugins haben immer gültige Klassenlader und die Klassen können manuell geladen und untersucht werden, allerdings wird der Ressourcenlader - der für die Inspektion wichtig ist - durch die DISABLED
-Prüfung blockiert.
Note
Anmerkungen für Eclipse: Wenn Sie Eclipse verwenden, vergewissern, dass die Annotationsverarbeitung für Plugin-Projekte aktiviert ist, die Objekte mit Annotationen registrieren. In den Eigenschaften des Eclipse-Projekts gehen Sie zu Java Compiler
> Annotation Processing
und überprüfen Sie das die Option Enable Project Specific Settings
und Enable annotation processing
eingeschaltet ist.
Schnittstelle¶
Der Übergabepunkt des Plugin-Managers zwischen der Business Bot Plattform und dem Business Bot erfolgt in der Klasse PluginClient
im Paket de.citunius.businessbot.plugin
. In der Klasse finden sich die Methoden start()
, stop()
sowie die Klasse BusinessBot
die das Interface BusinessBotInterface
implementiert. In dieser Klasse werden vom Benutzer eingehende Nachrichten durch die Methode handleIncomingMessage()
und vom Geschäftssystem ausgehende Nachrichten in der Methode sendMessage()
festgelegt. Die Übergabe von Parameter erfolgt über die HashMap pluginMap
.
Business Bot Bibliothek¶
Folgende Business Bot Bibliotheken werden ausgeliefert:
de.citunius.businessbot.api-1.0.0.jar
(Common API für die Business Bot Plattform)de.citunius.businessbot.api.messenger-1.0.0.jar
(Generic Messenger für die Business Bot Plattform)de.citunius.businessbot.api.sfb-1.0.0.jar
(Skype for Business API für die Business Bot Plattform)de.citunius.businessbot.api.telegram-1.0.0.jar
(Telegram Messenger API für die Business Bot Plattform)
Es darf nur eine der Messenger Bibliothek (Datei de.citunius.businessbot.api.<messenger>-<version>.jar
) pro Business Bot verwendet werden, da es sonst zu Problemen mit den Klassenlader kommen kann. Die Messenger Bibliothek enthält spezifische Funktionen, die nur für den jeweiligen Messenger gültige sind, wie beispielsweise Menü-Struktur.
Datenbankzugriff¶
Business Bots müssen die Datenhaltung entweder Datei-basiert realisieren oder eine Datenbank verwenden. Der Datenbank-basierte Ansatz muss für jeden Business Bot individuell implementiert werden. Dazu muss die entsprechende Bibliothek für den Datenbankzugriff ins lib
-Verzeichnis kopiert werden. Für weitere Information zwecks Implementierung entnehmen Sie bitte der Dokumentation der jeweiligen Hersteller.
National Language Processing (NLP)¶
Business Bots können um die Fähigkeit von National Language Processing (NLP) und KI (Künstliche Intelligenz) durch entsprechende Bibliotheken erweitert werden. Beispielsweise können hierbei Bibliotheken wie Apache OpenNLP und IBM Watson eingesetzt werden. Für mehr Informationen schauen Sie bitte in die Dokumentation der jeweiligen Hersteller.