Plugins/de

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(Overview)
m (Fix Quicklinks)
 
(5 intermediate revisions by one user not shown)
Line 1: Line 1:
 +
{{Quicklinks|Plugins}}
 +
 +
{{ReleaseInfo}}
 +
 
==Überblick==
 
==Überblick==
  
 
OpenSimulator verwendet verschiedene Mechanismen, um die dynamische Konfiguration von Funktionen zu ermöglichen. Diese Seite beschreibt diese Mechanismen.
 
OpenSimulator verwendet verschiedene Mechanismen, um die dynamische Konfiguration von Funktionen zu ermöglichen. Diese Seite beschreibt diese Mechanismen.
  
== Dynamic Plugins with Mono.Addins ==
+
== Dynamische Plugins mit Mono.Addins ==
  
Some types of plugins are discovered at runtime using '''Extension Points''', and loaded using '''Mono.Addins'''. This mechanism is described in detail [[How to create a dynamic plugin|here]] and [[Dynamic Plugin Quickstart|here]].
+
Einige Plugins werden zur Laufzeit mit '''Extension Points''' erkannt und mit '''Mono.Addins''' geladen. Dieser Mechanismus wird [[How to create a dynamic plugin|hier]] und [[Dynamic Plugin Quickstart|hier]] detailliert beschrieben.
  
These types of plugins are used when it's desirable to load '''all''' the plugins of a particular type.
+
Diese Arten von Plugins werden verwendet, wenn es wünschenswert ist, alle Plugins eines bestimmten Typs zu laden.
  
  
This mechanism is currently used in the following cases:
+
Dieser Mechanismus wird derzeit in den folgenden Fällen verwendet:
  
'''/OpenSim/Startup''' - application plugins (IApplicationPlugin). Loaded by OpenSimBase when OpenSimulator starts. The plugins are loaded using PluginLoader.
+
'''/OpenSim/Startup''' - Anwendung Plugins (IApplicationPlugin). Wird von OpenSimBase geladen, wenn OpenSimulator gestartet wird. Die Plugins werden mit PluginLoader geladen.
  
'''/OpenSim/RegionModules''' - region modules. Loaded by RegionModulesControllerPlugin, which is itself an application plugin. The plugins are loaded by calling AddinManager directly (not through PluginLoader).
+
'''/OpenSim/RegionModules''' - Region-Module. Geladen von RegionModulesControllerPlugin, welches selbst ein Anwendungs-Plugin ist. Die Plugins werden durch direkten Aufruf von AddinManager geladen (nicht über PluginLoader).
  
'''/OpenSim/WindModule''' - wind models. Loaded by WindModule, which is itself a region module. The plugins are loaded by calling AddinManager directly.
+
'''/OpenSim/WindModule''' - Windmodelle . Geladen von WindModule, welches selbst ein Regionalmodul ist. Die Plugins werden durch direkten Aufruf von AddinManager geladen.  
  
 +
==== Unbenutzte Erweiterungspunkte ====
  
==== Unused Extension Points ====
+
Es sind einige Erweiterungspunkte definiert, die niemals tatsächlich geladen werden. Zum Beispiel definiert OpenSim.data.MySQL.addin.xml Plugins, die Implementierungen für Erweiterungspunkte wie "/OpenSim/GridData" und "/OpenSim/AssetData" bereitstellen. Allerdings lädt tatsächlich niemand diese Erweiterungspunkte (soweit ich sehen kann). Stattdessen werden diese Plugins mit der unten beschriebenen Config-Files-Methode geladen.
  
There are some extension points defined that are never actually loaded. For example, OpenSim.data.MySQL.addin.xml defines plugins that '''provide''' implementations for extension points such as "/OpenSim/GridData" and "/OpenSim/AssetData". However, no-one actually loads these extension points (as far as I can see). Instead, these plugins are loaded using the config-files technique described below.
+
Diese Punkte wurden nach 0.7.1.1 im OpenSimulator-Code entfernt.
  
These points have been removed in OpenSimulator code after 0.7.1.1.
+
== Angeben der Plugin-Implementierung in der Konfiguration ==
  
== Specifying Plugin Implementation in the Configuration ==
+
Bei den meisten Plugins wird die Klasse, die zur Implementierung der Plugin-Schnittstelle verwendet werden soll, explizit in einer der INI-Dateien angegeben. Die Anwendung lädt dann einfach die Assembly (DLL); findet die angegebene Klasse; und instanziiert es.
  
For most plugins, the class that should be used to implement the plugin's interface is specified explicitly in one of the .INI files. The application then simply loads the assembly (DLL); finds the specified class; and instantiates it.
+
Diese Plugins werden verwendet, wenn es nur sinnvoll ist, eine einzige Implementierung des Plugins zu laden; nicht alle verfügbaren Implementierungen. Zum Beispiel kann nur ein Datenbankzugriffsmodul verwendet werden. Daher enthalten die INI-Dateien Anweisungen wie diese:
 
+
These types of plugins are used when it only makes sense to load a single implementation of the plugin; not all the available implementations. For example, only one database access module can be used. Therefore, the .INI files contain directives such as these:
+
  
 
  [DatabaseService]
 
  [DatabaseService]
 
     StorageProvider = "OpenSim.Data.MySQL.dll"
 
     StorageProvider = "OpenSim.Data.MySQL.dll"
  
Sometimes the definition also specifies which class to use. For example:
+
Manchmal gibt die Definition auch an, welche Klasse verwendet werden soll. Beispielsweise:
  
 
  [InventoryService]
 
  [InventoryService]
Line 40: Line 43:
  
  
Let's take the example of the data-access plugin further. Most classes that need to access the database have a Data interface defined. For example, PresenseService defines IPresenceData. This interface has implementations for all of the databases OpenSimulator supports. When the service starts, it loads the database assembly that was specified in the configuration, and then finds in that assembly the class that implements the desired interface (IPresenceData). The code looks something like this (although this is simplified):
+
Nehmen wir das Beispiel des Datenzugriffs-Plugins weiter. Für die meisten Klassen, die auf die Datenbank zugreifen müssen, ist eine Datenschnittstelle definiert. Zum Beispiel definiert PresenseService IPresenceData. Diese Schnittstelle verfügt über Implementierungen für alle Datenbanken, die OpenSimulator unterstützt. Wenn der Dienst gestartet wird, lädt er die Datenbankassembly, die in der Konfiguration angegeben wurde, und sucht dann in dieser Assembly die Klasse, die die gewünschte Schnittstelle implementiert (IPresenceData). Der Code sieht ungefähr so ​​aus (obwohl dies vereinfacht ist):
  
 
  IConfig dbConfig = config.Configs["DatabaseService"];
 
  IConfig dbConfig = config.Configs["DatabaseService"];
Line 46: Line 49:
 
  IPresenceData m_Database = LoadPlugin<IPresenceData>(dllName);
 
  IPresenceData m_Database = LoadPlugin<IPresenceData>(dllName);
  
== Connectors ==
+
== Anschlüsse ==
 +
 
 +
Robust sucht und lädt seine [[Connectors]], indem sie in der Datei Robust.ini (im Eintrag "ServiceConnectors") explizit angegeben werden. Da die Plugins explizit angegeben werden, funktioniert dies, indem die DLLs manuell geladen werden. Es ähnelt jedoch der Mono.Addins-Methode insofern, als Robust loads '''all''' angegebenen Anschlüsse lädt. nicht nur einer. Vielleicht kann es irgendwann überarbeitet werden, um wirklich Mono.Addins zu verwenden.
  
Robust finds and loads its [[Connectors]] by having them specified explicitly in Robust.ini (in the "ServiceConnectors" entry). Since the plugins are specified explicitly, this works by loading the DLL's manually. However, it's somewhat similar to the Mono.Addins technique in that Robust loads '''all''' the connectors specified; not just one. Perhaps it can be refactored someday to truly use Mono.Addins.
+
Die Connectors werden durch den Aufruf von ServerUtils.LoadPlugin<IServiceConnector>() geladen.
  
The connectors are loaded by calling ServerUtils.LoadPlugin<IServiceConnector>().
+
[[Category:Users]]
 +
[[Category:Developers]]
 +
[[Category:German Translations]]

Latest revision as of 09:07, 19 October 2020


Contents

[edit] Überblick

OpenSimulator verwendet verschiedene Mechanismen, um die dynamische Konfiguration von Funktionen zu ermöglichen. Diese Seite beschreibt diese Mechanismen.

[edit] Dynamische Plugins mit Mono.Addins

Einige Plugins werden zur Laufzeit mit Extension Points erkannt und mit Mono.Addins geladen. Dieser Mechanismus wird hier und hier detailliert beschrieben.

Diese Arten von Plugins werden verwendet, wenn es wünschenswert ist, alle Plugins eines bestimmten Typs zu laden.


Dieser Mechanismus wird derzeit in den folgenden Fällen verwendet:

/OpenSim/Startup - Anwendung Plugins (IApplicationPlugin). Wird von OpenSimBase geladen, wenn OpenSimulator gestartet wird. Die Plugins werden mit PluginLoader geladen.

/OpenSim/RegionModules - Region-Module. Geladen von RegionModulesControllerPlugin, welches selbst ein Anwendungs-Plugin ist. Die Plugins werden durch direkten Aufruf von AddinManager geladen (nicht über PluginLoader).

/OpenSim/WindModule - Windmodelle . Geladen von WindModule, welches selbst ein Regionalmodul ist. Die Plugins werden durch direkten Aufruf von AddinManager geladen.

[edit] Unbenutzte Erweiterungspunkte

Es sind einige Erweiterungspunkte definiert, die niemals tatsächlich geladen werden. Zum Beispiel definiert OpenSim.data.MySQL.addin.xml Plugins, die Implementierungen für Erweiterungspunkte wie "/OpenSim/GridData" und "/OpenSim/AssetData" bereitstellen. Allerdings lädt tatsächlich niemand diese Erweiterungspunkte (soweit ich sehen kann). Stattdessen werden diese Plugins mit der unten beschriebenen Config-Files-Methode geladen.

Diese Punkte wurden nach 0.7.1.1 im OpenSimulator-Code entfernt.

[edit] Angeben der Plugin-Implementierung in der Konfiguration

Bei den meisten Plugins wird die Klasse, die zur Implementierung der Plugin-Schnittstelle verwendet werden soll, explizit in einer der INI-Dateien angegeben. Die Anwendung lädt dann einfach die Assembly (DLL); findet die angegebene Klasse; und instanziiert es.

Diese Plugins werden verwendet, wenn es nur sinnvoll ist, eine einzige Implementierung des Plugins zu laden; nicht alle verfügbaren Implementierungen. Zum Beispiel kann nur ein Datenbankzugriffsmodul verwendet werden. Daher enthalten die INI-Dateien Anweisungen wie diese:

[DatabaseService]
   StorageProvider = "OpenSim.Data.MySQL.dll"

Manchmal gibt die Definition auch an, welche Klasse verwendet werden soll. Beispielsweise:

[InventoryService]
   LocalServiceModule = "OpenSim.Services.InventoryService.dll:XInventoryService"


Nehmen wir das Beispiel des Datenzugriffs-Plugins weiter. Für die meisten Klassen, die auf die Datenbank zugreifen müssen, ist eine Datenschnittstelle definiert. Zum Beispiel definiert PresenseService IPresenceData. Diese Schnittstelle verfügt über Implementierungen für alle Datenbanken, die OpenSimulator unterstützt. Wenn der Dienst gestartet wird, lädt er die Datenbankassembly, die in der Konfiguration angegeben wurde, und sucht dann in dieser Assembly die Klasse, die die gewünschte Schnittstelle implementiert (IPresenceData). Der Code sieht ungefähr so ​​aus (obwohl dies vereinfacht ist):

IConfig dbConfig = config.Configs["DatabaseService"];
string dllName = dbConfig.GetString("StorageProvider");
IPresenceData m_Database = LoadPlugin<IPresenceData>(dllName);

[edit] Anschlüsse

Robust sucht und lädt seine Connectors, indem sie in der Datei Robust.ini (im Eintrag "ServiceConnectors") explizit angegeben werden. Da die Plugins explizit angegeben werden, funktioniert dies, indem die DLLs manuell geladen werden. Es ähnelt jedoch der Mono.Addins-Methode insofern, als Robust loads all angegebenen Anschlüsse lädt. nicht nur einer. Vielleicht kann es irgendwann überarbeitet werden, um wirklich Mono.Addins zu verwenden.

Die Connectors werden durch den Aufruf von ServerUtils.LoadPlugin<IServiceConnector>() geladen.

Personal tools
General
About This Wiki