<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=OpenSim_Services_and_Service_Connectors%2Fde</id>
		<title>OpenSim Services and Service Connectors/de - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=OpenSim_Services_and_Service_Connectors%2Fde"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;action=history"/>
		<updated>2026-04-06T12:11:19Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;diff=53040&amp;oldid=prev</id>
		<title>Manni at 18:51, 21 February 2023</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;diff=53040&amp;oldid=prev"/>
				<updated>2023-02-21T18:51:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 18:51, 21 February 2023&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 497:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 497:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Getting Started]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Getting Started]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Development]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Development]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:German Translations]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;diff=53039&amp;oldid=prev</id>
		<title>Manni at 18:49, 21 February 2023</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;diff=53039&amp;oldid=prev"/>
				<updated>2023-02-21T18:49:57Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;amp;diff=53039&amp;amp;oldid=53038&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;diff=53038&amp;oldid=prev</id>
		<title>Manni at 18:40, 21 February 2023</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;diff=53038&amp;oldid=prev"/>
				<updated>2023-02-21T18:40:31Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 18:40, 21 February 2023&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Quicklinks|OpenSim Services and Service Connectors}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Quicklinks|OpenSim Services and Service Connectors}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Warning|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;This documentation&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;though still useful, is rather out of date&lt;/del&gt;.&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Warning|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Diese Dokumentation ist zwar immer noch nützlich&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;aber ziemlich veraltet&lt;/ins&gt;.&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Please see &lt;/del&gt;[[Connectors]] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;for more accurate information&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Genauere Informationen finden Sie unter &lt;/ins&gt;[[Connectors]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Or see &lt;/del&gt;[[Services]] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;for more information about services themselves&lt;/del&gt;.}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Oder siehe &lt;/ins&gt;[[Services]] &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; für weitere Informationen über die Dienste selbst&lt;/ins&gt;.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;= Introduction to OpenSimulator Services and Service Connectors =&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The OpenSimulator framework is becoming so many things to so many people that it has reached the point where the original architecture of the software itself, largely inspired by what the SL Client dictates and by the Linden Lab grid, is hampering progress on all those fronts. We need to rethink the architecture of the software &lt;/del&gt;in &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;order to be able to support the variety of things that people want to do with &lt;/del&gt;OpenSimulator &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;without having to go through lengthy design discussions and negotiations for it to do &amp;quot;the right thing&amp;quot;, which obviously doesn't exist. For some, &amp;quot;the right thing&amp;quot; is a server infrastructure that is a 100% reproduction of Second Life; for others, &amp;quot;the right thing&amp;quot; is a 3D server infrastructure that is 100% compatible with the Web; for others, &amp;quot;the right thing&amp;quot; is a desktop 3D simulator; and for many others &amp;quot;the right thing&amp;quot; is many points in between.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;= Einführung &lt;/ins&gt;in OpenSimulator &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Services und Service Connectors =&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;This proposal comes in the sequence of &lt;/del&gt;an &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;email thread on the &lt;/del&gt;-dev &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;mailing list&lt;/del&gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Das OpenSimulator-Framework wird für so viele Menschen zu so vielen Dingen, dass es den Punkt erreicht hat, &lt;/ins&gt;an &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dem die ursprüngliche Architektur der Software selbst, die weitgehend von den Vorgaben des SL-Clients und dem Linden Lab-Grid inspiriert ist, den Fortschritt an all diesen Fronten behindert. Wir müssen die Architektur der Software überdenken, um die Vielfalt der Dinge unterstützen zu können, die Menschen mit OpenSimulator tun möchten, ohne langwierige Designdiskussionen und Verhandlungen führen zu müssen, damit sie &amp;quot;das Richtige&amp;quot; tut, was offensichtlich der Fall ist nicht vorhanden. Für manche ist „das Richtige“ eine Server-Infrastruktur, die eine 100-prozentige Reproduktion von Second Life ist; für andere ist „das Richtige“ eine 3D-Server-Infrastruktur, die zu 100 % mit dem Web kompatibel ist; für andere ist „das Richtige“ ein Desktop-3D-Simulator;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Dieser Vorschlag kommt in der Folge eines E-Mail-Threads auf der &lt;/ins&gt;-dev&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-Mailingliste&lt;/ins&gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;https://lists.berlios.de/pipermail/opensim-dev/2009-April/006325.html&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;https://lists.berlios.de/pipermail/opensim-dev/2009-April/006325.html&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The general ideas here are similar to those already in place for using Database and Physics engines&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;This proposal is about extending those general ideas to all Resource Services&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;which carries the additional difficulty of having to deal with service placement and service composition&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Die allgemeinen Ideen hier ähneln denen bereits darin Ort für die Verwendung von Datenbank- und Physik-Engines&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Bei diesem Vorschlag geht es darum&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;diese allgemeinen Ideen auf alle Ressourcendienste auszudehnen, was die zusätzliche Schwierigkeit mit sich bringt, sich mit Dienstplatzierung und Dienstzusammensetzung befassen zu müssen&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Proposers&lt;/del&gt;: Diva &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;and &lt;/del&gt;Melanie&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Vorschlagende&lt;/ins&gt;: Diva &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;und &lt;/ins&gt;Melanie&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Closing date: 5/28/09&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Closing date: 5/28/09&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Proposal Summary &lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Zusammenfassung &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:Connector_Architecture.jpg|600px]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:Connector_Architecture.jpg|600px]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;We propose a new '''software architecture''' that can easily accommodate all the '''system architectures''' that people want to build&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The basic concepts of this new software architecture are &lt;/del&gt;(1) &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Service Interfaces&lt;/del&gt;; (2) &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Service Connectors&lt;/del&gt;; (3) &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Service Implementations&lt;/del&gt;; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;and &lt;/del&gt;(4) Server Shells. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Service implementations are pieces of code that can be loaded into a server shell&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;along with their &amp;quot;&lt;/del&gt;in&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot; service connectors that receive service requests from clients&lt;/del&gt;. Clients &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;access services through service interfaces, and by loading the corresponding &lt;/del&gt;&amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;out&lt;/del&gt;&amp;quot; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;service connectors that send requests to the service implementations&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The figure above illustrates the general concept&lt;/del&gt;. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Wir schlagen eine neue Softwarearchitektur vor , die problemlos alle Systemarchitekturen aufnehmen kann , die Menschen aufbauen möchten&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Die Grundkonzepte dieser neuen Softwarearchitektur sind &lt;/ins&gt;(1) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Dienstschnittstellen&lt;/ins&gt;; (2) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Serviceanschlüsse&lt;/ins&gt;; (3) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Dienstimplementierungen&lt;/ins&gt;; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;und &lt;/ins&gt;(4) Server&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-&lt;/ins&gt;Shells. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Dienstimplementierungen sind Codeteile&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;die &lt;/ins&gt;in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;eine Server-Shell geladen werden können, zusammen mit ihren „in“-Dienstkonnektoren, die Dienstanforderungen von Clients empfangen&lt;/ins&gt;. Clients &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;greifen über Dienstschnittstellen auf Dienste zu und indem sie die entsprechenden &lt;/ins&gt;&amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Ausgangs&lt;/ins&gt;&amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-Dienstkonnektoren laden, die Anforderungen an die Dienstimplementierungen senden&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Die obige Abbildung veranschaulicht das allgemeine Konzept&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;A Service is the collection of its implementation and its connectors, and obeys a certain service interface&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The people that implement the service also implement its connectors. Therefore&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;the details of the protocol between the client-side and the server-side are invisible to the service clients&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;which only know about the service interface&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;As long as the interface is preserved&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;switching service implementations is a trivial matter of replacing the out connector in the client&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The specification of &lt;/del&gt;all &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;of these elements is done at initialisation time&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;by loading the specified &lt;/del&gt;DLLs &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;and&lt;/del&gt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;or by using a generic plugin infrastructure&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Ein Dienst ist die Sammlung seiner Implementierung und seiner Konnektoren und gehorcht einer bestimmten Dienstschnittstelle&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Die Personen&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;die den Dienst implementieren&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;implementieren auch seine Konnektoren&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Daher sind die Details des Protokolls zwischen der Clientseite und der Serverseite für die Dienstclients unsichtbar&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;die nur von der Dienstschnittstelle wissen&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Solange die Schnittstelle erhalten bleibt, ist das Wechseln von Dienstimplementierungen eine triviale Angelegenheit, da der Out-Connector im Client ersetzt wird. Die Spezifikation &lt;/ins&gt;all &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dieser Elemente erfolgt zum Zeitpunkt der Initialisierung&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;indem die angegebenen &lt;/ins&gt;DLLs &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;geladen und&lt;/ins&gt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;oder eine generische Plugin-Infrastruktur verwendet werden&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Benefits &lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Vorteile &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The figure below shows &lt;/del&gt;4 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;different system architectures that can be trivially configured if the proposed software architecture is in place&lt;/del&gt;. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Die folgende Abbildung zeigt &lt;/ins&gt;4 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;verschiedene Systemarchitekturen, die einfach konfiguriert werden können, wenn die vorgeschlagene Softwarearchitektur vorhanden ist&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:System_Architectures.jpg]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Image:System_Architectures.jpg]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Note that these are only &lt;/del&gt;4 out of &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;a variety of combinations&lt;/del&gt;. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Beachten Sie, dass dies nur &lt;/ins&gt;4 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;aus einer Vielzahl von Kombinationen sind.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Die Vorteile dieser Softwarearchitektur sind die folgenden:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; * Wir entfernen uns von den aktuellen booleschen Architekturoptionen, die durch die Variable &amp;quot;gridmode=true|false&amp;quot; gegeben sind, und hin zu einem Modell, bei dem Simulatoren in einer Vielzahl von Hybridmodi konfiguriert werden können.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; * Das dynamische Laden von Dienstkonnektoren in den Simulator ermöglicht eine Vielzahl von Protokollen „on-the-wire“ zwischen dem Simulator und den Diensten, ohne dass der Simulatorcode geändert werden muss. (Solange diese Dienstimplementierung die etablierte Dienstschnittstelle dafür berücksichtigen kann)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; [Ergänzung des vorherigen] Alle Diskussionen über Simulator-Service-Protokolle (HTTP vs. XMLRPC vs. ...) werden für das OpenSimulator-Framework selbst irrelevant. Opensim wird weiterhin einige Dienstimplementierungen und ihre Konnektoren &lt;/ins&gt;out&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-&lt;/ins&gt;of&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-the-box bereitstellen, aber jeder kann diese durch seine eigenen ersetzen, ohne Änderungen am Quellcode des Simulators vornehmen zu müssen, indem er die entsprechende Konnektor-DLL zur Verfügung stellt die Simulatoren.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; * Alle OpenSimulator-Server werden zu Server-Shells des gleichen Typs. Das heißt, sie werden alle über den .ini-Mechanismus konfiguriert und können alle Dienste und Dienstconnectors ausführen. Daher wird es auch trivialerweise möglich, Systemarchitekturen zu haben, bei denen ein Ressourcendienst einen anderen Ressourcendienst direkt verwendet. Beispielsweise kann der Inventarserver den Asset-Server verwenden, um Betrachtern eine kombinierte IInventoryService+IAssetService-Schnittstelle bereitzustellen&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The benefits of this software architecture are the following: &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* We move away from the current boolean architectural choices given by the variable &amp;quot;gridmode=true|false&amp;quot;, and into a model where simulators can be configured in a variety of hybrid modes.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* The dynamic loading of service connectors into the simulator allows a variety of protocols &amp;quot;on-the-wire&amp;quot; between the simulator and the services without having to change the simulator code. (As long as that service implementation can honor the established service interface for it)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* [Corollary of the previous] All discussions about simulator-service protocols (HTTP vs XMLRPC vs ...) become irrelevant to the OpenSimulator framework itself. Opensim will continue to provide a few service implementations and their connectors out-of-the-box, but anyone can replace those with their own without having to make any changes to the source code of the Simulator, by making the corresponding connector DLL available to the simulators.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;* All OpenSimulator servers become server shells of the same type. That is, they are all configured through the .ini mechanism, and they can run any of the services and service connectors. Therefore, it also becomes trivially possible to have system architectures where some resource service uses another resource service directly. For example, the Inventory server may use the Asset server in order to provide a combined IInventoryService+IAssetService interface to viewers.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Implementation of the Proposed Software Architecture ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Implementation of the Proposed Software Architecture ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;diff=53036&amp;oldid=prev</id>
		<title>Manni: Created page with &quot;{{Quicklinks|OpenSim Services and Service Connectors}}  {{Warning|This documentation, though still useful, is rather out of date.    Please see Connectors for more accurat...&quot;</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=OpenSim_Services_and_Service_Connectors/de&amp;diff=53036&amp;oldid=prev"/>
				<updated>2023-02-21T18:33:39Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Quicklinks|OpenSim Services and Service Connectors}}  {{Warning|This documentation, though still useful, is rather out of date.    Please see &lt;a href=&quot;/wiki/Connectors&quot; title=&quot;Connectors&quot;&gt;Connectors&lt;/a&gt; for more accurat...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Quicklinks|OpenSim Services and Service Connectors}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|This documentation, though still useful, is rather out of date.  &lt;br /&gt;
&lt;br /&gt;
Please see [[Connectors]] for more accurate information.  &lt;br /&gt;
&lt;br /&gt;
Or see [[Services]] for more information about services themselves.}}&lt;br /&gt;
&lt;br /&gt;
= Introduction to OpenSimulator Services and Service Connectors =&lt;br /&gt;
&lt;br /&gt;
The OpenSimulator framework is becoming so many things to so many people that it has reached the point where the original architecture of the software itself, largely inspired by what the SL Client dictates and by the Linden Lab grid, is hampering progress on all those fronts. We need to rethink the architecture of the software in order to be able to support the variety of things that people want to do with OpenSimulator without having to go through lengthy design discussions and negotiations for it to do &amp;quot;the right thing&amp;quot;, which obviously doesn't exist. For some, &amp;quot;the right thing&amp;quot; is a server infrastructure that is a 100% reproduction of Second Life; for others, &amp;quot;the right thing&amp;quot; is a 3D server infrastructure that is 100% compatible with the Web; for others, &amp;quot;the right thing&amp;quot; is a desktop 3D simulator; and for many others &amp;quot;the right thing&amp;quot; is many points in between.&lt;br /&gt;
&lt;br /&gt;
This proposal comes in the sequence of an email thread on the -dev mailing list:&lt;br /&gt;
https://lists.berlios.de/pipermail/opensim-dev/2009-April/006325.html&lt;br /&gt;
The general ideas here are similar to those already in place for using Database and Physics engines. This proposal is about extending those general ideas to all Resource Services, which carries the additional difficulty of having to deal with service placement and service composition.&lt;br /&gt;
&lt;br /&gt;
Proposers: Diva and Melanie&lt;br /&gt;
&lt;br /&gt;
Closing date: 5/28/09&lt;br /&gt;
&lt;br /&gt;
== Proposal Summary ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Connector_Architecture.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
We propose a new '''software architecture''' that can easily accommodate all the '''system architectures''' that people want to build. The basic concepts of this new software architecture are (1) Service Interfaces; (2) Service Connectors; (3) Service Implementations; and (4) Server Shells. Service implementations are pieces of code that can be loaded into a server shell, along with their &amp;quot;in&amp;quot; service connectors that receive service requests from clients. Clients access services through service interfaces, and by loading the corresponding &amp;quot;out&amp;quot; service connectors that send requests to the service implementations. The figure above illustrates the general concept. &lt;br /&gt;
&lt;br /&gt;
A Service is the collection of its implementation and its connectors, and obeys a certain service interface. The people that implement the service also implement its connectors. Therefore, the details of the protocol between the client-side and the server-side are invisible to the service clients, which only know about the service interface. As long as the interface is preserved, switching service implementations is a trivial matter of replacing the out connector in the client. The specification of all of these elements is done at initialisation time, by loading the specified DLLs and/or by using a generic plugin infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
The figure below shows 4 different system architectures that can be trivially configured if the proposed software architecture is in place. &lt;br /&gt;
&lt;br /&gt;
[[Image:System_Architectures.jpg]]&lt;br /&gt;
&lt;br /&gt;
Note that these are only 4 out of a variety of combinations. &lt;br /&gt;
&lt;br /&gt;
The benefits of this software architecture are the following: &lt;br /&gt;
* We move away from the current boolean architectural choices given by the variable &amp;quot;gridmode=true|false&amp;quot;, and into a model where simulators can be configured in a variety of hybrid modes.&lt;br /&gt;
* The dynamic loading of service connectors into the simulator allows a variety of protocols &amp;quot;on-the-wire&amp;quot; between the simulator and the services without having to change the simulator code. (As long as that service implementation can honor the established service interface for it)&lt;br /&gt;
* [Corollary of the previous] All discussions about simulator-service protocols (HTTP vs XMLRPC vs ...) become irrelevant to the OpenSimulator framework itself. Opensim will continue to provide a few service implementations and their connectors out-of-the-box, but anyone can replace those with their own without having to make any changes to the source code of the Simulator, by making the corresponding connector DLL available to the simulators.&lt;br /&gt;
* All OpenSimulator servers become server shells of the same type. That is, they are all configured through the .ini mechanism, and they can run any of the services and service connectors. Therefore, it also becomes trivially possible to have system architectures where some resource service uses another resource service directly. For example, the Inventory server may use the Asset server in order to provide a combined IInventoryService+IAssetService interface to viewers.&lt;br /&gt;
&lt;br /&gt;
== Implementation of the Proposed Software Architecture ==&lt;br /&gt;
&lt;br /&gt;
The implementation is illustrated using the Asset Service as an example. Here is the overview of the new organization. The boxes here denote, roughly, DLLs. Note that this is still under heavy construction, and that some of this organization and vocabulary may change.&lt;br /&gt;
&lt;br /&gt;
 OpenSim/&lt;br /&gt;
&lt;br /&gt;
   Region/&lt;br /&gt;
&lt;br /&gt;
     CoreModules/&lt;br /&gt;
       ServiceConnectors/&lt;br /&gt;
        (place to put all OUT service connectors from the simulator)&lt;br /&gt;
         Asset/&lt;br /&gt;
           HGAssetBroker.cs&lt;br /&gt;
           LocalssetServiceConnector.cs&lt;br /&gt;
           RemoteAssetServiceConnector.cs&lt;br /&gt;
         Grid/&lt;br /&gt;
           ...&lt;br /&gt;
         Interregion/&lt;br /&gt;
           ...&lt;br /&gt;
         Inventory/&lt;br /&gt;
           ...&lt;br /&gt;
         Messaging/&lt;br /&gt;
           ...&lt;br /&gt;
         User/ &lt;br /&gt;
           ...&lt;br /&gt;
&lt;br /&gt;
     Server/&lt;br /&gt;
&lt;br /&gt;
       ServerMain.cs (the server shell, produces OpemSim.Services.exe)&lt;br /&gt;
&lt;br /&gt;
       Base/&lt;br /&gt;
         (Base and basic classes for the HTTP server, one DLL)&lt;br /&gt;
         HttpServerBase.cs&lt;br /&gt;
         ServerUtils.cs&lt;br /&gt;
         ServicesServerBase.cs&lt;br /&gt;
&lt;br /&gt;
       Handlers/&lt;br /&gt;
          (place to put all IN connectors and network service handlers)&lt;br /&gt;
          Asset/&lt;br /&gt;
            AssetServerConnector.cs&lt;br /&gt;
            AssetServerDeleteHandler.cs&lt;br /&gt;
            AssetServerGetHandler.cs&lt;br /&gt;
            AssetServerPostHandler.cs&lt;br /&gt;
          ...&lt;br /&gt;
          Base/&lt;br /&gt;
            (Base and basic classes for IN connectors)&lt;br /&gt;
            ServerConnector.cs&lt;br /&gt;
&lt;br /&gt;
     Services/&lt;br /&gt;
       (service implementations, each on its own dll)&lt;br /&gt;
&lt;br /&gt;
        AssetService/&lt;br /&gt;
&lt;br /&gt;
        Base/&lt;br /&gt;
&lt;br /&gt;
        GridService/&lt;br /&gt;
&lt;br /&gt;
        InventoryService/&lt;br /&gt;
&lt;br /&gt;
        MessagingService/&lt;br /&gt;
&lt;br /&gt;
        UserService/&lt;br /&gt;
&lt;br /&gt;
        (meat of the OUT connectors, one DLL)&lt;br /&gt;
        Connectors/&lt;br /&gt;
          ...&lt;br /&gt;
&lt;br /&gt;
        (service interfaces, one DLL)&lt;br /&gt;
        Interfaces/&lt;br /&gt;
          ...&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
=== Service Interfaces ===&lt;br /&gt;
&lt;br /&gt;
'''OpenSim.Services.Interfaces''': This DLL contains all the service interfaces known to OpenSimulator.&lt;br /&gt;
&lt;br /&gt;
Here is how IAssetService looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
    public interface IAssetService&lt;br /&gt;
    {&lt;br /&gt;
        // Three different ways to retrieve an asset&lt;br /&gt;
        //&lt;br /&gt;
        AssetBase Get(string id);&lt;br /&gt;
        AssetMetadata GetMetadata(string id);&lt;br /&gt;
        byte[] GetData(string id);&lt;br /&gt;
 &lt;br /&gt;
        bool Get(string id, Object sender, AssetRetrieved handler);&lt;br /&gt;
 &lt;br /&gt;
        // Creates a new asset&lt;br /&gt;
        // Returns a random ID if none is passed into it&lt;br /&gt;
        //&lt;br /&gt;
        string Store(AssetBase asset);&lt;br /&gt;
 &lt;br /&gt;
        // Attachments and bare scripts need this!!&lt;br /&gt;
        //&lt;br /&gt;
        bool UpdateContent(string id, byte[] data);&lt;br /&gt;
 &lt;br /&gt;
        // Kill an asset&lt;br /&gt;
        //&lt;br /&gt;
        bool Delete(string id);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connectors ===&lt;br /&gt;
&lt;br /&gt;
The direction of a connector is determined by the direction of the connection being made, not by the direction of the data flow. Therefore, an OUT connector is always a client, while an IN connector is always a server. Conversely, an OUT connector will provide an interface, while an IN connector will consume an interface. Interfaces are consistent across the entire chain of connectors, therefore IN connectors can be directly connected to OUT connectors, which would create a proxy server.&lt;br /&gt;
&lt;br /&gt;
==== Out Connectors ====&lt;br /&gt;
&lt;br /&gt;
'''OpenSim.Region.CoreModules.ServiceConnectors''': this is where all concrete OUT connectors used by the simulator hang out.&lt;br /&gt;
&lt;br /&gt;
'''OpenSim.Services.Connectors''': this is where all the base classes of the OUT connectors hang out. These ones can be reused by servers other than the simulator.&lt;br /&gt;
&lt;br /&gt;
An OUT connector primarily exposes its interfaces, it may have a secondary interface to be able to load as a region module. Here is a snippet of the RemoteAssetServiceConnector, which, as the name says, connects to a remote asset server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
    public class RemoteAssetServicesConnector :&lt;br /&gt;
            AssetServicesConnector, ISharedRegionModule, IAssetService&lt;br /&gt;
    {&lt;br /&gt;
 &lt;br /&gt;
        private bool m_Enabled = false;&lt;br /&gt;
        private IImprovedAssetCache m_Cache;&lt;br /&gt;
 &lt;br /&gt;
        public string Name&lt;br /&gt;
        {&lt;br /&gt;
            get { return &amp;quot;RemoteAssetServicesConnector&amp;quot;; }&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        public override void Initialise(IConfigSource source)&lt;br /&gt;
        {&lt;br /&gt;
            IConfig moduleConfig = source.Configs[&amp;quot;Modules&amp;quot;];&lt;br /&gt;
            if (moduleConfig != null)&lt;br /&gt;
            {&lt;br /&gt;
                string name = moduleConfig.GetString(&amp;quot;AssetServices&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
                if (name == Name)&lt;br /&gt;
                {&lt;br /&gt;
                    IConfig assetConfig = source.Configs[&amp;quot;AssetService&amp;quot;];&lt;br /&gt;
                    if (assetConfig == null)&lt;br /&gt;
                    {&lt;br /&gt;
                        m_log.Error(&amp;quot;[ASSET CONNECTOR]: AssetService missing from OpenSim.ini&amp;quot;);&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    m_Enabled = true;&lt;br /&gt;
                    base.Initialise(source);&lt;br /&gt;
                    m_log.Info(&amp;quot;[ASSET CONNECTOR]: Remote assets enabled&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        public void AddRegion(Scene scene)&lt;br /&gt;
        {&lt;br /&gt;
            if (!m_Enabled)&lt;br /&gt;
                return;&lt;br /&gt;
            scene.RegisterModuleInterface&amp;lt;IAssetService&amp;gt;(this);&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above code is just the region module, which is enabled or not depending on configuration variables (described further down). Two things are noteworthy:&lt;br /&gt;
&lt;br /&gt;
* This module registers with Scene as the simulator's IAssetService. In other words, this modules is the direct provider of that interface within the simulator. All asset operations go through it first.&lt;br /&gt;
* This class extends AssetServicesConnector, which is the class that has the 'meat' of the service. A small part of it is presented below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    public class AssetServicesConnector : IAssetService&lt;br /&gt;
    {&lt;br /&gt;
        private string m_ServerURI = String.Empty;&lt;br /&gt;
        private IImprovedAssetCache m_Cache = null;&lt;br /&gt;
&lt;br /&gt;
        public AssetServicesConnector(string serverURI)&lt;br /&gt;
        {&lt;br /&gt;
            m_ServerURI = serverURI;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public AssetServicesConnector(IConfigSource source)&lt;br /&gt;
        {&lt;br /&gt;
            Initialise(source);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public virtual void Initialise(IConfigSource source)&lt;br /&gt;
        {&lt;br /&gt;
            IConfig assetConfig = source.Configs[&amp;quot;AssetService&amp;quot;];&lt;br /&gt;
            if (assetConfig == null)&lt;br /&gt;
            {&lt;br /&gt;
                m_log.Error(&amp;quot;[ASSET CONNECTOR]: AssetService missing from OpenSim.ini&amp;quot;);&lt;br /&gt;
                throw new Exception(&amp;quot;Asset connector init error&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            string serviceURI = assetConfig.GetString(&amp;quot;AssetServerURI&amp;quot;,&lt;br /&gt;
                    String.Empty);&lt;br /&gt;
&lt;br /&gt;
            if (serviceURI == String.Empty)&lt;br /&gt;
            {&lt;br /&gt;
                m_log.Error(&amp;quot;[ASSET CONNECTOR]: No Server URI named in section AssetService&amp;quot;);&lt;br /&gt;
                throw new Exception(&amp;quot;Asset connector init error&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            m_ServerURI = serviceURI;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public AssetBase Get(string id)&lt;br /&gt;
        {&lt;br /&gt;
            string uri = m_ServerURI + &amp;quot;/assets/&amp;quot; + id;&lt;br /&gt;
&lt;br /&gt;
            AssetBase asset = null;&lt;br /&gt;
            if (m_Cache != null)&lt;br /&gt;
                asset = m_Cache.Get(id);&lt;br /&gt;
&lt;br /&gt;
            if (asset == null)&lt;br /&gt;
            {&lt;br /&gt;
                asset = SynchronousRestObjectRequester.&lt;br /&gt;
                        MakeRequest&amp;lt;int, AssetBase&amp;gt;(&amp;quot;GET&amp;quot;, uri, 0);&lt;br /&gt;
&lt;br /&gt;
                if (m_Cache != null)&lt;br /&gt;
                    m_Cache.Cache(asset);&lt;br /&gt;
            }&lt;br /&gt;
            return asset;&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The class above is the one that actually holds the reference to the remote server, as an URL, and that performs the remote calls to it.&lt;br /&gt;
&lt;br /&gt;
Besides this connector, there are currently 2 other ones that can be used: LocalAssetServiceConnector and HGAssetBroker. The former is meant to be used when the service runs within the simulator's process; the latter is meant to be used for Hypergrided simulators. &lt;br /&gt;
&lt;br /&gt;
==== In Connectors ====&lt;br /&gt;
&lt;br /&gt;
'''OpenSim.Server.Handlers''': this DLL is where all IN connectors hang out.&lt;br /&gt;
&lt;br /&gt;
IN connectors listen for requests and decode them for processing. They are typically bound to a HTTP server, although other transports are possible. An IN connector will acquire an instance of a class exposing the target interface and send all received and decoded data to that class, which may be a consumer (database, etc.), a forwarder/broker (HGBroker) or an OUT connector, which would create a proxy server.&lt;br /&gt;
IN connectors can share the same HTTP server, so all services can be contained in a single server process, or split among several processes or hosts.&lt;br /&gt;
The proxy configuration is of particular interest, since it allows load balancing and write request routing. For instance, in SQL clusters it is possible to route write requests to different hosts than read requests.&lt;br /&gt;
&lt;br /&gt;
Here is how the IN connector for an asset server looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
    public class AssetServiceConnector : ServiceConnector&lt;br /&gt;
    {&lt;br /&gt;
        private IAssetService m_AssetService;&lt;br /&gt;
&lt;br /&gt;
        public AssetServiceConnector(IConfigSource config, IHttpServer server) :&lt;br /&gt;
                base(config, server)&lt;br /&gt;
        {&lt;br /&gt;
            IConfig serverConfig = config.Configs[&amp;quot;AssetService&amp;quot;];&lt;br /&gt;
            if (serverConfig == null)&lt;br /&gt;
                throw new Exception(&amp;quot;No section 'Server' in config file&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            string assetService = serverConfig.GetString(&amp;quot;LocalServiceModule&amp;quot;,&lt;br /&gt;
                    String.Empty);&lt;br /&gt;
&lt;br /&gt;
            if (assetService == String.Empty)&lt;br /&gt;
                throw new Exception(&amp;quot;No AssetService in config file&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            Object[] args = { config };&lt;br /&gt;
            m_AssetService =&lt;br /&gt;
                    ServerUtils.LoadPlugin&amp;lt;IAssetService&amp;gt;(assetService, args);&lt;br /&gt;
&lt;br /&gt;
            server.AddStreamHandler(new AssetServerGetHandler(m_AssetService));&lt;br /&gt;
            server.AddStreamHandler(new AssetServerPostHandler(m_AssetService));&lt;br /&gt;
            server.AddStreamHandler(new AssetServerDeleteHandler(m_AssetService));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two noteworthy things about this connector:&lt;br /&gt;
* It establishes the service handlers on the server&lt;br /&gt;
* It loads a DLL containing the service implementation (finally!). &lt;br /&gt;
&lt;br /&gt;
=== Service Implementations ===&lt;br /&gt;
&lt;br /&gt;
'''OpenSim.Services.AssetService''': the default OpenSimulator implementation of the asset service. Here is a snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
    public class AssetService : AssetServiceBase, IAssetService&lt;br /&gt;
    {&lt;br /&gt;
        public AssetService(IConfigSource config) : base(config)&lt;br /&gt;
        {&lt;br /&gt;
            if (m_AssetLoader != null)&lt;br /&gt;
            {&lt;br /&gt;
                IConfig assetConfig = config.Configs[&amp;quot;AssetService&amp;quot;];&lt;br /&gt;
                if (assetConfig == null)&lt;br /&gt;
                    throw new Exception(&amp;quot;No AssetService configuration&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                string loaderArgs = assetConfig.GetString(&amp;quot;AssetLoaderArgs&amp;quot;,&lt;br /&gt;
                        String.Empty);&lt;br /&gt;
&lt;br /&gt;
                m_log.InfoFormat(&amp;quot;[ASSET]: Loading default asset set from {0}&amp;quot;, loaderArgs);&lt;br /&gt;
                m_AssetLoader.ForEachDefaultXmlAsset(loaderArgs,&lt;br /&gt;
                        delegate(AssetBase a)&lt;br /&gt;
                        {&lt;br /&gt;
                            Store(a);&lt;br /&gt;
                        });&lt;br /&gt;
                &lt;br /&gt;
                m_log.Info(&amp;quot;[ASSET CONNECTOR]: Local asset service enabled&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public AssetBase Get(string id)&lt;br /&gt;
        {&lt;br /&gt;
            m_log.DebugFormat(&amp;quot;[ASSET SERVICE]: Get asset {0}&amp;quot;, id);&lt;br /&gt;
            UUID assetID;&lt;br /&gt;
&lt;br /&gt;
            if (!UUID.TryParse(id, out assetID))&lt;br /&gt;
                return null;&lt;br /&gt;
&lt;br /&gt;
            return m_Database.FetchAsset(assetID);&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above class is loaded by the IN connector shown before.&lt;br /&gt;
&lt;br /&gt;
=== Server Shells ===&lt;br /&gt;
&lt;br /&gt;
'''OpenSim.Services.exe'''&lt;br /&gt;
&lt;br /&gt;
There is now a generic server shell that can load any IN service connectors, along with their specified service implementations. This server shell is configured with a .ini file, using exactly the same configuration variables that pertain to the asset service configuration in OpenSin.ini.&lt;br /&gt;
&lt;br /&gt;
Here is the new server shell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    public class OpenSimServer&lt;br /&gt;
    {&lt;br /&gt;
        protected static HttpServerBase m_Server = null;&lt;br /&gt;
&lt;br /&gt;
        protected static List&amp;lt;IServiceConnector&amp;gt; m_ServiceConnectors =&lt;br /&gt;
                new List&amp;lt;IServiceConnector&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
        static int Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            m_Server = new HttpServerBase(&amp;quot;Asset&amp;quot;, args);&lt;br /&gt;
&lt;br /&gt;
            IConfig serverConfig = m_Server.Config.Configs[&amp;quot;Startup&amp;quot;];&lt;br /&gt;
            if (serverConfig == null)&lt;br /&gt;
            {&lt;br /&gt;
                System.Console.WriteLine(&amp;quot;Startup config section missing in .ini file&amp;quot;);&lt;br /&gt;
                throw new Exception(&amp;quot;Configuration error&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            string connList = serverConfig.GetString(&amp;quot;ServiceConnectors&amp;quot;, String.Empty);&lt;br /&gt;
            string[] conns = connList.Split(new char[] {',', ' '});&lt;br /&gt;
&lt;br /&gt;
            foreach (string conn in conns)&lt;br /&gt;
            {&lt;br /&gt;
                if (conn == String.Empty)&lt;br /&gt;
                    continue;&lt;br /&gt;
&lt;br /&gt;
                string[] parts = conn.Split(new char[] {':'});&lt;br /&gt;
                string friendlyName = parts[0];&lt;br /&gt;
                if (parts.Length &amp;gt; 1)&lt;br /&gt;
                    friendlyName = parts[1];&lt;br /&gt;
&lt;br /&gt;
                m_log.InfoFormat(&amp;quot;[SERVER]: Loading {0}&amp;quot;, friendlyName);&lt;br /&gt;
&lt;br /&gt;
                Object[] modargs = { m_Server.Config, m_Server.HttpServer };&lt;br /&gt;
                IServiceConnector connector =&lt;br /&gt;
                        ServerUtils.LoadPlugin&amp;lt;IServiceConnector&amp;gt;(conn,&lt;br /&gt;
                        modargs);&lt;br /&gt;
&lt;br /&gt;
                if (connector != null)&lt;br /&gt;
                {&lt;br /&gt;
                    m_ServiceConnectors.Add(connector);&lt;br /&gt;
                    m_log.InfoFormat(&amp;quot;[SERVER]: {0} loaded successfully&amp;quot;, friendlyName);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    m_log.InfoFormat(&amp;quot;[SERVER]: Failed to load {0}&amp;quot;, conn);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            return m_Server.Run();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, this generic server loads all DLLs for the specificed ServiceConnectors configuration variable. Therefore it's trivial to combine several services in a single server shell, or to have several server shells each one running a service.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
This architecture splits all services and service connectors into individual region modules and DLLs that are then specified in the server's configuration files. Each server -- OpenSim.exe and all OpenSim.Services.exe -- has its own .ini file. There are two ways of configuring the servers, described next.&lt;br /&gt;
&lt;br /&gt;
=== Direct Configuration ===&lt;br /&gt;
&lt;br /&gt;
The familiar .ini file has now several new configuration variable for every service connector. See [[Services and Service Connectors Configuration]] for the extra variables pertaining to configuring the asset service in OpenSim.ini.&lt;br /&gt;
&lt;br /&gt;
As for configuring a resource server, here is an example of an asset server in the new style of server shells (these variables are stored in OpenSim.Services.ini)&lt;br /&gt;
&lt;br /&gt;
 [Startup]&lt;br /&gt;
 ; These are also available as command line options&lt;br /&gt;
 &lt;br /&gt;
 ; console = &amp;quot;local&amp;quot; ; Use &amp;quot;basic&amp;quot; to use this on a pipe&lt;br /&gt;
 ; inifile = &amp;quot;OpenSim.Servers.AssetServer.ini&amp;quot;&lt;br /&gt;
 ; logfile = &amp;quot;AssetServer.log&amp;quot; ; Also read from application config file&lt;br /&gt;
 &lt;br /&gt;
 ; Connectors, comma separated&lt;br /&gt;
 ServiceConnectors = &amp;quot;OpenSim.Server.Handlers.dll:AssetServiceConnector&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [Network]&lt;br /&gt;
 port = 8003&lt;br /&gt;
 &lt;br /&gt;
 [AssetService]&lt;br /&gt;
 LocalServiceModule = &amp;quot;OpenSim.Services.AssetService.dll:AssetService&amp;quot;&lt;br /&gt;
 StorageProvider = &amp;quot;OpenSim.Data.MySQL.dll&amp;quot;&lt;br /&gt;
 ConnectionString = &amp;quot;Data Source=localhost;Database=opensim;User ID=opensim;Password=opensim;&amp;quot;&lt;br /&gt;
 DefaultAssetLoader = &amp;quot;OpenSim.Framework.AssetLoader.Filesystem.dll&amp;quot;&lt;br /&gt;
 AssetLoaderArgs = &amp;quot;assets/AssetSets.xml&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Prepackaged System Architectures ===&lt;br /&gt;
&lt;br /&gt;
While the split in small design elements provides all the flexibility one can get from the framework, the number of configuration variables increases considerably, and can quickly become overwhelming. To address this problem we are working on configuration &amp;quot;includes&amp;quot;, which will allow us to provide pre-packaged system architectures, having all the new variables properly set up so that they can produce architectures such as the ones in the picture above. &lt;br /&gt;
&lt;br /&gt;
There will be three prepackaged system architectures: StandaloneGrid, StandardGrid and HyperGrid. Users of the framework can define additional ones.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[OpenSim:Introduction_and_Definitions#UGAIM_Services|What are UGAIM Services?]]&lt;br /&gt;
* [[OpenSim Services and Service Connectors|Services and Service Connectors Main Page]]&lt;br /&gt;
* [[Services and Service Connectors Configuration|Services and Service Connectors Configuration Page]] &lt;br /&gt;
&lt;br /&gt;
= Change Log =&lt;br /&gt;
&lt;br /&gt;
* Diva, 5/22/09, added suggestions from Justincc @ -dev.&lt;br /&gt;
&lt;br /&gt;
[[Category:Users]]&lt;br /&gt;
[[Category:Support]]&lt;br /&gt;
[[Category:Tech Reference]]&lt;br /&gt;
[[Category:Help]]&lt;br /&gt;
[[Category:Configuration]]&lt;br /&gt;
[[Category:Getting Started]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	</feed>