ObjectGrid-XML-Deskriptordatei

Verwenden Sie zum Konfigurieren von WebSphere eXtreme Scale eine ObjectGrid-XML-Deskriptordatei und die API "ObjectGrid".

In den folgenden Abschnitten werden XML-Beispieldateien bereitgestellt, um verschiedene Konfigurationen zu veranschaulichen. Jedes Element und Attribut der XML-Datei wird definiert. Verwenden Sie das ObjectGrid-XML-Deskriptorschema, um die XML-Deskriptordatei zu erstellen. Ein Beispiel zum XML-Schema für den ObjectGrid-Deskriptors finden Sie im Abschnitt Datei objectGrid.xsd.

Es wird eine geänderte Version der ursprünglichen Datei companyGrid.xml verwendet. Die folgende Datei companyGridSingleMap.xml gleicht der Datei companyGrid.xml. Die Datei companyGridSingleMap.xml hat eine einzige Map, und die Datei companyGrid.xml hat vier Maps. Die Elemente und Attribute der Datei sind im Anschluss an das Beispiel detailliert beschrieben.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
	xmlns="http://ibm.com/ws/objectgrid/config">

		<objectGrids>
<objectGrid name="CompanyGrid">
						<backingMap name="Customer"/>
				</objectGrid>
		</objectGrids>
</objectGridConfig>

Element "objectGridConfig"

Das Element "objectGridConfig" ist das Ausgangselement der XML-Datei. Schreiben Sie dieses Element in Ihrem eXtreme-Scale-XML-Dokument, wie im vorherigen Beispiel gezeigt. Dieses Element konfiguriert den Namespace der Datei und die Schemaposition. Das Schema ist in der Datei objectGrid.xsd definiert.

Element "objectGrids"

Das Element "objectGrids" ist ein Container für alle objectGrid-Elemente. In der Datei companyGridSingleMap.xml enthält das Element "objectGrids" ein einziges ObjectGrid mit dem Namen "CompanyGrid".

Element "objectGrid"

Verwenden Sie das Element "objectGrid", um ein ObjectGrid zu definieren. Jedes Attribut im Element "objectGrid" entspricht einer Methode in der Schnittstelle ObjectGrid.
Attribute
name
Gibt den Namen an, der dem ObjectGrid zugeordnet wird. Die XML-Validierung schlägt fehl, wenn dieses Attribut fehlt. (Erforderlich)
securityEnabled
Wenn Sie dieses Attribut auf true setzen, wird die Sicherheit auf ObjectGrid-Ebene aktiviert, woraufhin die Zugriffberechtigungen für die Daten in der Map aktiviert werden. Der Standardwert ist true. (Optional)
authorizationMechanism
Legt den Berechtigungsmechanismus für das Element fest. Sie können das Attribut auf einen der folgenden Werte setzen: AUTHORIZATION_MECHANISM_JAAS oder AUTHORIZATION_MECHANISM_CUSTOM. Der Standardwert ist AUTHORIZATION_MECHANISM_JAAS. Sie müssen das Attribut securityEnabled auf true setzen, damit das Attribut authorizationMechanism wirksam wird. (Optional)
permissionCheckPeriod
Gibt einen ganzzahligen Wert in Sekunden an, der angibt, wie oft die Berechtigung geprüft wird, die verwendet wird, um einen Clientzugriff zuzulassen. Der Standardwert ist 0. Wenn Sie das Attribut auf 0 setzen, wird der Berechtigungsmechanismus (Java Authentication and Authorization Service (JAAS) oder angepasste Berechtigung) bei jedem Aufruf der Methoden "get", "put", "update", "remove" und "evict" aufgefordert, zu prüfen, ob das aktuelle Subject-Objekt berechtigt ist. Ein Wert größer als 0 gibt die Anzahl an Sekunden an, für die eine Gruppe von Berechtigungen zwischengespeichert wird, bevor sie zur Aktualisierung an den Berechtigungsmechanismus zurückgegeben wird. Sie müssen das Attribut "securityEnabled" auf true setzen, damit das Attribut "permissionCheckPeriod" wirksam wird. (Optional)
txTimeout
Gibt die Zeit in Sekunden an, die einer Transaktion für die Ausführung zugestanden wird. Wenn eine Transaktion nicht innerhalb dieser Zeit abgeschlossen wird, wird sie für Rollback markiert, und es wird eine Ausnahme des Typs TransactionTimeoutException ausgelöst. Wenn Sie das Attribut auf den Wert 0 setzen, wird die Standardeinstellung von 10 Minuten als Transaktionszeitlimit verwendet. (Optional)
entityMetadataXMLFile
Gibt den Pfad zur XML-Entitätsdeskriptordatei an, die das Entitätsschema definiert. Definieren Sie Entitäten vor dem Start des Katalogservers, so dass jede Entität an eine BackingMap gebunden werden kann.
  • Für ein relatives Verzeichnis: Geben Sie die Position relativ zur Position der Datei objectgrid.xml an.
  • Für einen absoluten Pfad: Geben Sie die Position mit einem URL-Format an, wie z. B. file:// oder http://.
(Optional)
<objectGrid
(1)	name="objectGridName"
(2)	securityEnabled="true" | "false"
(3)	authorizationMechanism="AUTHORIZATION_MECHANISM_JASS" | "AUTHORIZATION_MECHANISM_CUSTOM"
(4) 	permissionCheckPeriod="permission_check_period"
(5)	txTimeout="seconds"
(6)	entityMetadataXMLFile="URL"
/>
Im folgenden Beispiel demonstriert die Datei companyGridObjectGridAttr.xml eine Methode zum Konfigurieren der Attribute eines Element "objectGrid". Die Sicherheit wird aktiviert, der Berechtigungsmechanismus wird auf "JAAS" gesetzt, und das Intervall für die Berechtigungsprüfung wird auf 45 Sekunden gesetzt. Außerdem registriert die Datei Entitäten, weil ein Attribut "entityMetadataXMLFile" angegeben wird.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlnc:xsi="http:www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
	xmlns="http://ibm.com/ws/objectgrid/config">

	<objectGrids>
		<objectGrid name="CompanyGrid" securityEnabled="true"
			authorizationMechanism="AUTHORIZATION_MECHANISM_JASS"
			permissionCheckPeriod="45"
			entityMetadataXMLFile="companyGridEntities.xml">
			<backingMap name="Customer"/>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
Das folgende Codebeispiel veranschaulicht den programmgesteuerten Ansatz, um dieselbe Konfiguration wie mit der Datei companyGridObjectGridAttr.xml aus dem vorherigen Beispiel zu erhalten.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

companyGrid.setSecurityEnabled();
companyGrid.setAuthorizationMechanism(SecurityConstants.AUTHORIZATION_MECHANISM_JAAS);
companyGrid.setPermissionCheckPeriod(45);
companyGrid.registerEntities(new URL("file:companyGridEntities.xml"));

Element "backingMap"

Das Element "backingMap" wird verwendet, um eine BackingMap-Instanz in einem ObjectGrid zu definieren. Jedes der Attribute im Element "backingMap" entspricht einer Methode in der Schnittstelle "BackingMap". Einzelheiten finden Sie in Schnittstelle "BackingMap".
Attribute
name
Gibt den Namen an, der der backingMap-Instanz zugeordnet wird. Die XML-Validierung schlägt fehl, wenn dieses Attribut fehlt. (Erforderlich)
readOnly
Definiert eine BackingMap-Instanz mit Lese-/Schreibzugriff, wenn Sie den Wert false für das Attribut angeben. Wenn Sie den Wert true für das Attribut angeben, ist die BackingMap-Instanz schreibgeschützt. (Optional)
template
Gibt an, ob dynamische Maps verwendet werden können. Setzen Sie dieses Attribut auf true, wenn die BackingMap-Map eine Schablonen-Map ist. Schablonen-Maps können verwendet werden, um Maps nach dem Start von ObjectGrid dynamisch zu starten. Aufrufe der Methode "Session.getMap(String)" führen zur Erstellung dynamischer Maps, wenn der an die Methode übergebene Name dem regulären Ausdruck entspricht, der im Namensattribut der BackingMap angegeben ist. Der Standardwert ist false. (Optional)
pluginCollectionRef
Gibt eine Referenz auf ein backingMapPluginCollection-Plug-in an. Der Wert dieses Attributs muss mit dem Attribut "ID" eines backingMapCollection-Plug-ins übereinstimmen. Die Validierung schlägt fehl, wenn keine übereinstimmende ID vorhanden ist. Setzen Sie das Attribut, um BackingMap-Plug-ins wiederzuverwenden. (Optional)
numberOfBuckets
Gibt die Anzahl der für die BackingMap-Instanz zu verwendenden Buckets an. Die BackingMap-Instanz verwendet eine Hash-Tabelle für ihre Implementierung. Wenn mehrere Einträge in der BackingMap vorhanden sind, kann durch mehr Buckets eine bessere Leistung erzielt werden, weil das Risiko von Kollisionen mit zunehmender Anzahl an Buckets sinkt. Werden zusätzliche Buckets verwendet, sind auch mehr gemeinsame Zugriffe möglich. Geben Sie den Wert 0 an, um den nahen Cache in einem Client zu inaktivieren, wenn die Kommunikation mit eXtreme Scale über Fernzugriff erfolgt. Wenn Sie das Attribut für einen Client auf 0 setzen, definieren Sie den Wert nur in der ObjectGrid-XML-Deskriptordatei für Clientkorrekturwerte. (Optional)
preloadMode
Legt den Modus für vorheriges Laden (Preload) fest, wenn ein Loader-Plug-in für diese BackingMap-Instanz definiert ist. Der Standardwert ist false. Wenn Sie das Attribut auf true setzen, wird die Methode "Loader.preloadMap(Session, BackingMap)" asynchron aufgerufen. Andernfalls wird die Methode beim Laden von Daten blockiert, so dass der Cache bis zum Abschluss des Preload-Prozesses nicht verfügbar ist. Der Preload-Prozess findet während der Initialisierung statt. (Optional)
lockStrategy
Gibt an, ob der interne Sperrenmanager verwendet wird, wenn eine Transaktion auf einen Map-Eintrag zugreift. Setzen Sie dieses Attribut auf einen der folgenden drei Werte: OPTIMISTIC, PESSIMISTIC oder NONE. Der Standardwert ist OPTIMISTIC. (Optional)

Die optimistische Sperrstrategie wird gewöhnlich verwendet, wenn eine Map kein Loader-Plug-in hat, wenn hauptsächlich Leseoperationen und weniger Schreib- und Aktualisierungsoperationen in der Map durchgeführt werden und wenn das Sperren nicht vom Persistenzmanager, der eXtreme Scale als Nebencache verwendet, oder von der Anwendung übernommen wird. Eine exklusive Sperre wird für einen Map-Eintrag angefordert, der bei der Festschreibung eingefügt, aktualisiert oder entfernt wird. Die Sperre stellt sicher, dass die Versionsinformationen von anderen Transaktionen nicht geändert werden können, während die Transaktion, die festgeschrieben wird, eine optimistische Versionsprüfung durchführt.

Die pessimistische Sperrstrategie wird gewöhnlich für eine Map verwendet, die kein Loader-Plug-in hat, und wenn das Sperren nicht von einem Persistenzmanager, der eXtreme Scale als Nebencache verwendet, von einem Loader-Plug-in oder von der Anwendung übernommen wird. Die pessimistische Sperrstrategie wird verwendet, wenn bei der optimistischen Sperrstrategie zu häufig Fehler auftreten, weil Aktualisierungstransaktionen für denselben Map-Eintrag zu häufig kollidieren.

Die Strategie ohne Sperren zeigt an, dass der interne Sperrenmanager nicht benötigt wird. Die Steuerung des gemeinsamen Zugriffs erfolgt außerhalb von eXtreme Scale durch den Persistenzmanager, der eXtreme Scale als Nebencache verwendet, durch die Anwendung oder durch das Loader-Plug-in, das Datenbanksperren für die Steuerung des gemeinsamen Zugriffs verwendet.

Weitere Informationen finden Sie in Sperrenmanager.

numberOfLockBuckets
Legt die Anzahl der Sperr-Buckets fest, die vom Sperrenmanager für die BackingMap-Instanz verwendet werden. Setzen Sie das Attribut "lockStrategy" auf OPTIMISTIC oder PESSIMISTIC, um einen Sperrenmanager für die BackingMap-Instanz zu erstellen. Der Sperrenmanager verwendet eine Hash-Tabelle, um die Einträge zu verfolgen, die von einer oder mehreren Transaktionen gesperrt werden. Wenn viele Einträge vorhanden sind, kann durch mehr Buckets eine bessere Leistung erzielt werden, weil das Risiko von Kollisionen mit zunehmender Anzahl an Buckets sinkt. Werden zusätzliche Buckets verwendet, sind auch mehr gemeinsame Zugriffe möglich. Setzen Sie das Attribut "lockStrategy" auf NONE, um anzugeben, dass die BackingMap-Instanz keinen Sperrenmanager verwendet. (Optional)
lockTimeout
Legt das Zeitlimit für Sperre fest, das vom Sperrenmanager für die BackingMap-Instanz verwendet wird. Setzen Sie das Attribut "lockStrategy" auf OPTIMISTIC oder PESSIMISTIC, um einen Sperrenmanager für die BackingMap-Instanz zu erstellen. Zur Vermeidung von Deadlocks hat der Sperrenmanager ein Standardzeitlimit von 15 Sekunden. Bei Überschreitung des Zeitlimits wird eine Ausnahme des Typs "LockTimeoutException" ausgelöst. Der Standardwert von 15 Sekunden ist für die meisten Anwendungen ausreichend, aber auf einem System mit hoher Belastung können Zeitlimitüberschreitungen auch dann auftreten, wenn kein Deadlock vorhanden ist. Verwenden Sie das Attribut "lockTimeout", um einen höheren als den Standardwert festzulegen, um falsche Zeitlimitüberschreitungsausnahmen zu verhindern. Setzen Sie das Attribut "lockStrategy" auf NONE, um anzugeben, dass die BackingMap-Instanz keinen Sperrenmanager verwendet. (Optional)
CopyMode
Gibt an, ob eine get-Operation eines Eintrags in der BackingMap-Instanz den tatsächlichen Wert, eine Kopie des Werts oder einen Proxy für den Wert zurückgibt. Setzen Sie das Attribut "CopyMode" auf einen der folgenden fünf Werte:
COPY_ON_READ_AND_COMMIT
Der Standardwert ist COPY_ON_READ_AND_COMMIT. Setzen Sie das Attribut auf COPY_ON_READ_AND_COMMIT, um sicherzustellen, dass eine Anwendung keine Referenz auf das Wertobjekt verwendet, das in der BackingMap-Instanz enthalten ist. Stattdessen arbeitet die Anwendung immer mit einer Kopie des Werts, der in der BackingMap-Instanz enthalten ist. (Optional)
COPY_ON_READ
Setzen Sie das Attribut auf COPY_ON_READ, um eine im Vergleich mit dem Wert COPY_ON_READ_AND_COMMIT höhere Leistung zu erzielen, indem der Kopiervorgang bei der Festschreibung einer Transaktion umgangen wird. Zur Gewährleistung der Integrität der BackingMap-Daten stellt die Anwendung sicher, dass jede Referenz auf einen Eintrag nach der Festschreibung der Transaktion gelöscht wird. Durch die Festlegung dieses Werts wird eine Methode "ObjectMap.get" aufgerufen, die eine Kopie des Werts an Stelle einer Referenz auf den Wert zurückgibt, was sicherstellt, dass Änderungen, die von der Anwendung am Wert vorgenommen werden, erst dann für das BackingMap-Element wirksam werden, wenn die Transaktion festgeschrieben wird.
COPY_ON_WRITE
Setzen Sie das Attribut auf COPY_ON_WRITE, um eine im Vergleich mit dem Wert COPY_ON_READ_AND_COMMIT bessere Leistung zu erzielen, in dem der Kopiervorgang beim ersten Aufruf der Methode "ObjectMap.get" für einen bestimmten Schlüssel durch eine Transaktion umgangen wird. Stattdessen gibt die Methode "ObjectMap.get" einen Proxy für den Wert an Stelle einer Referenz auf das Wertobjekt zurück. Der Proxy stellt sicher, dass keine Kopie des Werts erstellt wird, sofern die Anwendung nicht eine Methode "set" für die Wertschnittstelle aufruft.
NO_COPY
Setzen Sie das Attribut auf den Wert NO_COPY, um einer Anwendung zu ermöglichen, ein Wertobjekt, das mit einer Methode "ObjectMap.get" abgerufen wird, nie zu ändern, um so Leistungsverbesserungen zu erzielen. Setzen Sie das Attribut für Maps, die Entitäten der EntityManager-API zugeordnet sind, auf NO_COPY.
COPY_TO_BYTES
Setzen Sie das Attribut auf COPY_TO_BYTES, um den Speicherbedarf für komplexe Objekttypen zu verringern und die Leistung zu verbessern, wenn das Kopieren des Objekts durch Serialisierung vorgenommen werden soll. Wenn ein Objekt nicht klonbar ist oder kein angepasstes ObjectTransformer-Plug-in mit einer effizienten Methode "copyValue" bereitgestellt wird, wird der Standardkopiermechanismus verwendet, um das Objekt zu serialisieren und zu dekomprimieren und die Kopie zu erstellen. Bei der Einstellung COPY_TO_BYTES wird die Dekomprimierung bei einer reinen Leseoperation und die Serialisierung bei einer reinen Festschreibungsoperation durchgeführt.
Weitere Einzelheiten zu diesen Einstellungen finden Sie in Kopiermodus optimieren.
valueInterfaceClassName
Gibt eine Klasse an, die erforderlich ist, wenn Sie das Attribut "CopyMode" auf COPY_ON_WRITE setzen. Dieses Attribut wird für alle anderen Modi ignoriert. Beim Wert COPY_ON_WRITE wird ein Proxy verwendet, wenn die Methode "ObjectMap.get" aufgerufen wird. Der Proxy stellt sicher, dass keine Kopie des Werts erstellt wird, sofern die Anwendung keine set-Methode in der Klasse aufruft, die mit dem Attribut "valueInterfaceClassName" angegeben ist. (Optional)
copyKey
Gibt an, ob eine Kopie des Schlüssels erforderlich ist, wenn ein Map-Eintrag erstellt wird. Wenn das Schlüsselobjekt kopiert wird, kann die Anwendung dasselbe Schlüsselobjekt für jede ObjectMap-Operation verwenden. Setzen Sie das Attribut auf true, um das Schlüsselobjekt zu kopieren, wenn ein Map-Eintrag erstellt wird. Der Standardwert ist false. (Optional)
nullValuesSupported
Setzen Sie das Attribut auf true, um Nullwerte in der ObjectMap zu unterstützen. Wenn Nullwerte unterstützt werden, bedeutet eine get-Operation, die null zurückgibt, dass der Wert null ist oder dass die Map den an die Methode übergebenen Schlüssel nicht enthält. Der Standardwert ist true. (Optional)
ttlEvictorType
Gibt an, wie die Verfallszeit eines BackingMap-Eintrags berechnet wird. Setzen Sie dieses Attribut auf einen der folgenden Werte: CREATION_TIME, LAST_ACCESS_TIME, LAST_UPDATE_TIME oder NONE. Der Wert CREATION_TIME zeigt an, dass die Verfallszeit eines Eintrags die Summe aus Erstellungszeit des Eintrags und Wert des Attributs "timeToLive" ist. Der Wert LAST_ACCESS_TIME zeigt an, dass die Verfallszeit eines Eintrags die Summe aus letzter Zugriffszeit des Eintrags (unabhängig davon, ob der Eintrag aktualisiert oder nur gelesen wurde) und Wert des Attributs "timeToLive" ist. Der Wert LAST_UPDATE_TIME zeigt an, dass die Verfallszeit eines Eintrags die Summe aus letzter Aktualisierungszeit des Eintrags und Wert des Attributs "timeToLive" ist. Der Wert NONE (der Standardwert) zeigt an, dass ein Eintrag keine Verfallszeit hat und so lange in der BackingMap-Instanz bleibt, bis die Anwendung den Eintrag explizit entfernt oder ungültig macht. (Optional)
timeToLive
Gibt an, wie lange (in Sekunden) jeder Map-Eintrag existiert. Der Standardwert 0 bedeutet, dass der Map-Eintrag unbegrenzt bzw. so lange existiert, bis die Anwendung den Eintrag explizit entfernt oder ungültig macht. Andernfalls entfernt der TTL-Evictor den Map-Eintrag auf der Basis dieses Werts. (Optional)
viewRef
Gibt an, dass die BackingMap eine Sicht-Map ist. (Optional)
writeBehind
Gibt an, dass die Write-behind-Unterstützung mit Write-behind-Parametern aktiviert ist. (Optional). Write-behind-Parameter setzen sich aus einer maximalen Aktualisierungszeit und einer maximalen Anzahl an Schlüsselaktualisierungen zusammen. Das Format des Write-behind-Parameters ist "[T(Zeit)][;][C(Zähler)]". Die Datenbank wird aktualisiert, wenn eines der folgenden Ereignisse eintritt:
  • Die maximale Aktualisierungszeit in Sekunden seit der letzten Aktualisierung ist abgelaufen.
  • Die Anzahl verfügbarer Aktualisierungen in der Warteschlangen-Map hat die maximal zulässige Aktualisierungsanzahl erreicht.

Weitere Informationen finden Sie unter Write-behind-Caching.

Die Write-behind-Unterstützung ist eine Erweiterung des Loader-Plug-ins, das Sie verwenden, um eXtreme Scale mit der Datenbank zu integrieren. Sehen Sie sich beispielsweise die Informationen zur Konfiguration eines JPA-Loaders im Abschnitt JPA-Loader konfigurieren an.

evictionTriggers
Legt die Typen zusätzlich zu verwendender Bereinigungs-Trigger fest. Alle Evictor (Bereinigungsprogramme) für die BackingMap verwenden diese liste zusätzlicher Trigger. Zur Vermeidung von Ausnahmen des Typs "IllegalStateException" muss dieses Attribut vor der Methode "ObjectGrid.initialize()" aufgerufen werden. Beachten Sie auch, dass die Methode "ObjectGrid.getSession()" die Methode "ObjectGrid.initialize()" implizit aufruft, falls die Methode noch nicht von der Anwendung aufgerufen wurde. Einträge in der Trigger-Liste werden durch Semikolons getrennt. Zu den aktuellen Bereinigungs-Triggern gehört MEMORY_USAGE_THRESHOLD. (Optional)
<backingMap
(1)			name="objectGridName"
(2)			readOnly="true" | "false"
(3)      template="true" | "false"
(4)			pluginCollectionRef="reference to backingMapPluginCollection"
(5)			numberOfBuckets="number of buckets"
(6)			preloadMode="true" | "false"
(7)			lockStrategy="OPTIMISTIC" | "PESSIMISTIC" | "NONE"
(8)			numberOfLockBuckets="number of lock buckets"
(9)			lockTimeout="lock timeout"
(10)			copyMode="COPY_ON_READ_AND_COMMIT" | "COPY_ON_READ" | "COPY_ON_WRITE"
							| "NO_COPY" | "COPY_TO_BYTES"
(11)			valueInterfaceClassName="value interface class name"
(12)			copyKey="true" | "false"
(13)			nullValuesSupported="true" | "false"
(14)			ttlEvictorType="CREATION_TIME" | "LAST_ACCESS_TIME" | "LAST_UPDATE_TIME" | NONE"
(15)			timeToLive="time to live"
(16)			streamRef="reference to a stream"
(17)			viewRef="reference to a view"
(18)			writeBehind="write-behind parameters"
(19)			evictionTriggers="MEMORY_USAGE_THRESHOLD"
/>		
Im folgenden Beispiel wird die Datei companyGridBackingMapAttr.xml verwendet, um eine BackingMap-Beispielkonfiguration zu veranschaulichen.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
	xmlns="http://ibm.com/ws/objectgrid/config">

	<objectGrids>
<objectGrid name="CompanyGrid">
			 <backingMap name="Customer" readOnly="true"
					numberOfBuckets="641" preloadMode="false"
					lockStrategy="OPTIMISTIC" numberOfLockBuckets="409"
					lockTimeout="30" copyMode="COPY_ON_WRITE"
					valueInterfaceClassName="com.ibm.websphere.samples.objectgrid.CounterValueInterface"
					copyKey="true" nullValuesSupported="false"
					ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3000"/>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
Der folgende Beispielcode demonstriert den programmgesteuerten Ansatz, um dieselbe Konfiguration zu erhalten wie mit der Datei companyGridBackingMapAttr.xml aus dem vorherigen Beispiel:
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

BackingMap customerMap = companyGrid.defineMap("Customer");
customerMap.setReadOnly(true);
customerMap.setNumberOfBuckets(641);
customerMap.setPreloadMode(false);
customerMap.setLockStrategy(LockStrategy.OPTIMISTIC);
customerMap.setNumberOfLockBuckets(409);
customerMap.setLockTimeout(30);

// Wenn der Kopiermodus auf COPY_ON_WRITE gesetzt wird, ist eine Klasse "valueInterface" erforderlich.
customerMap.setCopyMode(CopyMode.COPY_ON_WRITE, 
	com.ibm.websphere.samples.objectgrid.CounterValueInterface.class);
customerMap.setCopyKey(true);
customerMap.setNullValuesSupported(false);
customerMap.setTtlEvictorType(TTLType.LAST_ACCESS_TIME);
customerMap.setTimeToLive(3000); // Lebensdauer (TTL) auf 50 Minuten setzen

Element "bean"

Verwenden Sie das Element "bean", um Plug-ins zu definieren. Sie können Plug-ins objectGrid- und BackingMap-Elementen zuordnen.
Attribute
id
Gibt den Typ des zu erstellenden Plug-ins an. (Erforderlich)
Die gültigen Plug-ins für eine Bean, die ein untergeordnetes Element des Elements "objectGrid" ist, sind in der folgenden Liste aufgeführt:
  • TransactionCallback-Plug-in
  • ObjectGridEventListener-Plug-in
  • SubjectSource-Plug-in
  • SubjectValidation-Plug-in
Die gültigen Plug-ins für eine Bean, die ein untergeordnetes Element des Elements "backingMapPluginCollection" ist, sind in der folgenden Liste aufgeführt:
  • Loader-Plug-in
  • ObjectTransformer-Plug-in
  • OptimisticCallback-Plug-in
  • Evictor-Plug-in
  • MapEventListener-Plug-in
  • MapIndex-Plug-in
className
Gibt den Namen der Klasse bzw. SpringBean an, die zum Erstellen des Plug-ins instanziiert werden soll. Die Klasse muss die Schnittstelle für den Plug-in-Typ implementieren. Wenn Sie beispielsweises ObjectGridEventListener als Wert für das Attribut "id" angeben, muss der Wert des Attributs "className" auf eine Klasse verweisen, die die Schnittstelle ObjectGridEventListener implementiert. Das Attribut "className" oder "osgiService" ist erforderlich.
osgiService
Gibt den Namen des OSGi-Service an, der im OSGi-Service-Manager gesucht werden soll. Wenn Sie das Eclipse-Equinox-OSGi-Framework mit dem Eclipse-Gemini- oder Apache-Aries-Blueprint-Container ausführen, können Plug-ins mit einer OSGi-Blueprint-XML-Datei definiert werden. Die anderen Bean-Eigenschaften werden gewöhnlich nicht verwendet, wenn ein osgiService-Name verwendet wird, da die Bean-Eigenschaften in der Blueprint-Konfigurationsdatei konfiguriert werden. Weitere Informationen finden Sie unter OSGi-fähige Plug-ins mit der ObjectGrid-XML-Deskriptordatei konfigurieren. Das Attribut "className" oder "osgiService" ist erforderlich.
<bean
(1)	id="TransactionCallback" | "ObjectGridEventListener" |"SubjectSource" |
     "SubjectValidation" | "Loader" | "ObjectTransformer" |
    "OptimisticCallback" | "Evictor" | "MapEventListener" | "MapIndexPlugin"
(2)	className="class name" | "(spring)bean name"
/>

Im folgenden Beispiel wird die Datei companyGridBean.xml verwendet, um zu veranschaulichen, wie Plug-ins mit dem Element "bean" konfiguriert werden. Ein ObjectGridEventListener-Plug-in wird dem ObjectGrid "CompanyGrid" hinzugefügt. Das Attribut "className" für dieses Element "bean" ist "com.ibm.websphere.objectgrid.plugins.builtins.TranPropListener". Diese Klasse implementiert die Schnittstelle "com.ibm.websphere.objectgrid.plugins.ObjectGridEventListener".

Es wird auch ein BackingMap-Plug-in in der Datei companyGridBean.xml definiert. Ein Evictor-Plug-in wird der BackingMap-Instanz "Customer" hinzugefügt. Das die Bean-ID "Evictor" lautet, muss das Attribut "className" eine Klasse angeben, die die Schnittstelle "com.ibm.websphere.objectgrid.plugins.Evictor" implementiert. Die Klasse "com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor" implementiert diese Schnittstelle. Die BackingMap referenziert ihre Plug-ins über das Attribut "pluginCollectionRef".
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
	xmlns="http://ibm.com/ws/objectgrid/config">

	<objectGrids>
<objectGrid name="CompanyGrid">
			bean id="ObjectGridEventListener"
				className="com.ibm.websphere.objectgrid.plugins.builtins.TranPropListener"/>
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor/>
		</backingMapPluginCollection>
	</backingMapPluginCollections>
</objectGridConfig>
Das folgende Codebeispiel veranschaulicht den programmgesteuerten Ansatz, um dieselbe Konfiguration wie mit der Datei companyGridBean.xml aus dem vorherigen Beispiel zu erhalten.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
TranPropListener tranPropListener = new TranPropListener();
companyGrid.addEventListener(tranPropListener);

BackingMap customerMap = companyGrid.defineMap("Customer");
Evictor lruEvictor = new com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor();
customerMap.setEvictor(lruEvictor);

Weitere Einzelheiten zur Verwendung von Plug-ins finden Sie im Abschnitt Übersicht über Plug-ins.

Element "property"

Verwenden Sie das Element "property", um Plug-ins Eigenschaften hinzuzufügen. Der Name der Eigenschaft muss einer set-Methode in der von der übergeordneten Bean referenzierten Klasse entsprechen.
Attribute
name
Der Name der Eigenschaft. Der Wert, der diesem Attribut zugeordnet wird, muss einer set-Methode in der Klasse entsprechen, die mit dem Attribut "className" der übergeordneten Bean angegeben wird. Wenn Sie beispielsweise das Attribut "className" der Bean auf com.ibm.MyPlugin setzen und der angegebene Name der Eigenschaft size lautet, muss die Klasse com.ibm.MyPlugin eine Methode setSize enthalten. (Erforderlich)
type
Gibt den Typ der Eigenschaft an. Der Typ wird an die set-Methode übergeben, die mit dem Attribut "name" angegeben wurde. Die gültigen Werte sind primitive Java-Typen, ihre java.lang-Pendants und java.lang.String. Die Attribute "name" und "type" müssen einer Methodensignatur im Attribut "className" der Bean entsprechen. Wenn Sie beispielsweise den Namen size und den Typ int festlegen, muss eine Methode "setSize(int)" in der Klasse vorhanden sein, die mit dem Attribut "className" für die Bean angegeben wurde. (Erforderlich)
value
Gibt den Wert der Eigenschaft an. Dieser Wert wird in den mit dem Attribut "type" angegebenen Typ konvertiert und anschließend als Parameter in dem Aufruf der set-Methode verwendet, die mit den Attributen "name" und "type" angegeben wurde. Der Wert dieses Attributs wird nicht validiert. (Erforderlich)
description
Beschreibt die Eigenschaft. (Optional)
<bean
(1)			name="name"
(2)	type="java.lang.String" | "boolean" | "java.lang.Boolean" | "int" |
						 "java.lang.Integer" | "double" | "java.lang.Double" | "byte" |
						 "java.lang.Byte" | "short" | "java.lang.Short" | "long" | 
						 "java.lang.Long" | "float" | "java.lang.Float" | "char" | 
						 "java.lang.Character"
(3)			value="value"
(4)	description="description"
/>
Im folgenden Beispiel wird die Datei companyGridProperty.xml verwendet, um zu veranschaulichen, wie einer Bean ein Element "property" hinzugefügt wird. In diesem Beispiel wird einem Evictor eine Eigenschaft mit dem Namen "maxSize" und dem Typ "int" hinzugefügt. Die Klasse com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor hat eine Methodensignatur, die der Methode setMaxSize(int) entspricht. Der ganzzahlige Wert 499 wird an die Methode setMaxSize(int) in der Klasse com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor übergeben.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
	xmlns="http://ibm.com/ws/objectgrid/config">

	<objectGrids>
<objectGrid name="CompanyGrid">
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor>
					<property name="maxSize" type="int" value="449"
							description="The maximum size of the LRU Evictor"/>
			</bean>
		</backingMapPluginCollection>
	</backingMapPluginCollections>
</objectGridConfig>
Das folgende Codebeispiel veranschaulicht den programmgesteuerten Ansatz, um dieselbe Konfiguration wie mit der Datei companyGridProperty.xml aus dem vorherigen Beispiel zu erhalten.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);

BackingMap customerMap = companyGrid.defineMap("Customer");

LRUEvictor lruEvictor = new com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor();
// Wenn Sie die XML-Datei verwenden würden, würde die hinzugefügte
// Eigenschaft den folgenden Aufruf bewirken
lruEvictor.setMaxSize(449);
customerMap.setEvictor(lruEvictor);

Element "backingMapPluginsCollections"

Das Element "backingMapPluginsCollections" ist ein Container für alle backingMapPluginCollection-Elemente. In der Datei companyGridProperty.xml aus dem vorherigen Beispiel enthält das Element "backingMapPluginCollections" ein einziges Element "backingMapPluginCollection" mit der ID customerPlugins.

Element "backingMapPluginCollection"

Das Element "backingMapPluginCollection" definiert die BackingMap-Plug-ins und wird über das Attribut id identifiziert. Geben Sie das Attribut "pluginCollectionRef" an, um die Plug-ins zu referenzieren. Wenn Sie mehrere BackingMap-Plug-ins auf ähnliche Weise konfigurieren, kann jede BackingMap dasselbe Element "backingMapPluginCollection" referenzieren.
Attribute
id
Identifiziert die backingMapPluginCollection und wird vom Attribut "pluginCollectionRef" des Elements "backingMap" referenziert. Jede ID muss eindeutig sein. Wenn der Wert des Attributs "pluginCollectionRef" nicht mit der ID eines der backingMapPluginCollection-Elemente übereinstimmt, schlägt die XML-Validierung fehl. Es können beliebig viele backingMap-Elemente ein einziges Element "backingMapPluginCollection" referenzieren. (Erforderlich)
<backingMapPluginCollection 
(1)			id="id"
/>
Im folgenden Beispiel wird die Datei companyGridCollection.xml verwendet, um zu veranschaulichen, wie das Element "backingMapPluginCollection" verwendet wird. In dieser Datei verwendet die BackingMap "Customer" die backingMapPluginCollection "customerPlugins", um die BackingMap "Customer" mit einem LRUEvictor-Plug-in zu konfigurieren. Die BackingMaps "Item" und "OrderLine" referenzieren die backingMapPluginCollection "collection2". Für diese BackingMaps ist jeweils ein LFUEvictor-Plug-in definiert.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
	xmlns="http://ibm.com/ws/objectgrid/config">

	<objectGrids>
<objectGrid name="CompanyGrid">
			<backingMap name="Customer"
				pluginCollectionRef="customerPlugins"/>
			<backingMap name="Item" pluginCollectionRef="collection2"/>
			<backingMap name="OrderLine"
				pluginCollectionRef="collection2"/>
<backingMap name="Order"/>
		</objectGrid>
	</objectGrids>
	<backingMapPluginCollections>
<backingMapPluginCollection id="customerPlugins">
			<bean id="Evictor"
					className="com.ibm.websphere.objectGrid.plugins.builtins.LRUEvictor/>
		</backingMapPluginCollection>
		<backingMapPluginCollection id="collection2">
			<bean id="Evictor"
					className="com.ibm.websphere.objectgrid.plugins.builtins.LFUEvictor/>
			<bean id="OptimisticCallback"
					className="com.ibm.websphere.samples.objectgrid.EmployeeOptimisticCallBackImpl"/>
		</backingMapPluginCollection>
		</backingMapPluginCollections>
</objectGridConfig>
Das folgende Codebeispiel veranschaulicht den programmgesteuerten Ansatz, um dieselbe Konfiguration wie mit der Datei companyGridCollection.xml aus dem vorherigen Beispiel zu erhalten.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();

ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
BackingMap customerMap = companyGrid .defineMap("Customer");
LRUEvictor customerEvictor = new LRUEvictor();
customerMap.setEvictor(customerEvictor);

BackingMap itemMap = companyGrid.defineMap("Item");
LFUEvictor itemEvictor = new LFUEvictor();
itemMap.setEvictor(itemEvictor);

BackingMap orderLineMap = companyGrid.defineMap("OrderLine");
LFUEvictor orderLineEvictor = new LFUEvictor();
orderLineMap.setEvictor(orderLineEvictor);

BackingMap orderMap = companyGrid.defineMap("Order");

Element "querySchema"

Das Element "querySchema" definiert Beziehungen zwischen BackingMaps und identifiziert den Objekttyp jeder Map. Diese Informationen werden von ObjectQuery verwendet, um Zeichenfolgen in der Abfragesprache in Map-Zugriffsaufrufe zu übersetzen. Weitere Informationen finden Sie im Abschnitt ObjectQuery-Schema konfigurieren.

Element "mapSchemas"

Jedes Element "querySchema" hat ein einziges Element "mapSchemas", das ein oder mehrere mapSchema-Elemente enthält.

Element "mapSchema"

Ein Element "mapSchema" definiert den Typ der Objekte, die in einer BackingMap gespeichert werden, und enthält Anweisungen zum Zugriff auf die Daten.
Attribute
mapName
Gibt den Namen der BackingMap an, die dem Schema hinzugefügt werden soll. (Erforderlich)
valueClass
Gibt den Typ des Objekts an, der im Wertabschnitt der BackingMap gespeichert wird. (Erforderlich)
primaryKeyField
Gibt den Namen des Primärschlüsselattributs im Attribut "valueClass" an. Der Primärschlüssel muss auch im Schlüsselabschnitt der BackingMap gespeichert werden. (Optional)
accessType
Gibt an, wie die Abfragesteuerkomponente die persistenten Daten in den valueClass-Objektinstanzen überwacht und auf diese zugreift. Wenn Sie das Attribut auf den Wert FIELD setzen, werden die Klassenfelder überwacht und dem Schema hinzugefügt. Wenn Sie das Attribut auf den Wert PROPERTY setzen, werden die Attribute, die den get- und is-Methoden zugeordnet sind, verwendet. Der Standardwert ist PROPERTY. (Optional)
<mapSchema
(1)			mapName="backingMapName"
(2)			valueClass="com.mycompany.OrderBean"
(3)			primaryKeyField="orderId"
(4)			accessType="PROPERTY" | "FIELD"
/>
Im folgenden Beispiel wird die Datei companyGridQuerySchemaAttr.xml verwendet, um eine Beispielkonfiguration für mapSchema zu veranschaulichen:
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
	xmlns="http://ibm.com/ws/objectgrid/config">

	<objectGrids>
<objectGrid name="CompanyGrid">
<backingMap name="Order"/>
			<backingMap name="Customer"/>

			<querySchema>
				<mapSchemas>
					<mapSchema mapName="Order"
						valueClass="com.mycompany.OrderBean"
						primaryKeyField="orderNumber"
						accessType="FIELD"/>
					<mapSchema mapName="Customer"
						valueClass="com.mycompany.CustomerBean"
						primaryKeyField="id"
						accessType="FIELD"/>
				</mapSchemas>
			</querySchema>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
Das folgende Codebeispiel veranschaulicht den programmgesteuerten Ansatz, um dieselbe Konfiguration wie mit der Datei companyGridQuerySchemaAttr.xml aus dem vorherigen Beispiel zu erhalten.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
companyGrid.defineMap("Order");
companyGrid.defineMap("Customer");

// Schema definieren
QueryConfig queryCfg = new QueryConfig();
queryCfg.addQueryMapping(new QueryMapping(
    "Order", OrderBean.class.getName(), "orderNumber", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryMapping(new QueryMapping(
    "Customer", CustomerBean.class.getName(), "id", QueryMapping.FIELD_ACCESS));
companyGrid.setQueryConfig(queryCfg);

Element "relationships"

Jedes Element "querySchema" hat kein oder ein Element "relationships", das eine oder mehrere Elemente "relationship" enthält.

Element "relationship"

Ein Element "relationship" definiert die Beziehung zwischen zwei BackingMaps sowie die Attribute im Attribut "valueClass", die für die Beziehungsbindung verwendet werden.
Attribute
source
Gibt den Namen der valueClass der Quellenseite einer Beziehung an. (Erforderlich)
target
Gibt den Namen der valueClass der Zielseite einer Beziehung an. (Erforderlich)
relationField
Gibt den Namen des Attributs in der Quellen-valueClass an, die auf das Ziel verweist. (Erforderlich)
invRelationField
Gibt den Namen des Attributs in der Ziel-valueClass an, die auf die Quelle verweist. Wenn Sie dieses Attribut nicht angeben, ist die Beziehung unidirektional. (Optional)
<mapSchema
(1)			source="com.mycompany.OrderBean"
(2)			target="com.mycompany.CustomerBean"
(3)			relationField="customer"
(4)			invRelationField="orders"
/>
Im folgenden Beispiel wird die Datei companyGridQuerySchemaWithRelationshipAttr.xml verwendet, um eine mapSchema-Beispielkonfiguration zu veranschaulichen, die eine bidirektionale Beziehung enthält.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
	xmlns="http://ibm.com/ws/objectgrid/config">

	<objectGrids>
<objectGrid name="CompanyGrid">
<backingMap name="Order"/>
			<backingMap name="Customer"/>

			<querySchema>
				<mapSchemas>
					<mapSchema mapName="Order"
						valueClass="com.mycompany.OrderBean"
						primaryKeyField="orderNumber"
						accessType="FIELD"/>
					<mapSchema mapName="Customer"
						valueClass="com.mycompany.CustomerBean"
						primaryKeyField="id"
						accessType="FIELD"/>
				</mapSchemas>
				<relationships>
					<relationship
						source="com.mycompany.OrderBean"
						target="com.mycompany.CustomerBean"
						relationField="customer"/>
						invRelationField="orders"/>
				</relationships>
			</querySchema>
		</objectGrid>
	</objectGrids>
</objectGridConfig>
Das folgende Codebeispiel veranschaulicht den programmgesteuerten Ansatz, um dieselbe Konfiguration wie mit der Datei companyGridQuerySchemaWithRelationshipAttr.xml aus dem vorherigen Beispiel zu erhalten.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
companyGrid.defineMap("Order");
companyGrid.defineMap("Customer");

// Schema definieren
QueryConfig queryCfg = new QueryConfig();
queryCfg.addQueryMapping(new QueryMapping(
    "Order", OrderBean.class.getName(), "orderNumber", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryMapping(new QueryMapping(
    "Customer", CustomerBean.class.getName(), "id", QueryMapping.FIELD_ACCESS));
queryCfg.addQueryRelationship(new QueryRelationship(
     OrderBean.class.getName(), CustomerBean.class.getName(), "customer", "orders"));
companyGrid.setQueryConfig(queryCfg);

Element "stream"

Das Element "stream" stellt einen Datenstrom für die Abfragesteuerkomponente für Datenströme dar. Jedes Attribut des Elements "stream" entspricht einer Methode in der Schnittstelle "StreamMetadata".
Attribute
name
Gibt den Namen des Datenstroms an. Die Validierung schlägt fehl, wenn dieses Attribut nicht angegeben wird. (Erforderlich)
valueClass
Gibt den Klassentyp des Werts an, der in der ObjectMap des Datenstroms gespeichert wird. Der Klassentyp wird verwendet, um das Objekt in Datenstromereignisse zu konvertieren und um eine SQL-Anweisung zu generieren, wenn die Anweisung nicht angegeben ist. (Erforderlich)
sql
Gibt die SQL-Anweisung des Datenstroms an. Wenn Sie diese Eigenschaft nicht angeben, wird eine Datenstrom-SQL durch Reflexion der Attribute bzw. Zugriffsmethoden im Attribut "valueClass" bzw. durch Verwendung der Tupelattribute der Entitätsmetadaten generiert. (Optional)
access
Gibt den Typ für den Zugriff auf die Attribute der Wertklasse an. Wenn Sie das Attribut auf den Wert FIELD setzen, werden die Attribute durch Java-Reflexion direkt aus den Feldern abgerufen. Andernfalls werden Zugriffsmethoden für das Lesen der Attribute verwendet. Der Standardwert ist PROPERTY. (Optional)
<stream
(1)			name="streamName"
(2)			valueClass="streamMapClassType"
(3)			sql="streamSQL create stream stockQuote
				 keyed by t ( transactionvolume INTEGER, price DECIMAL (9,2), issue VARCHAR(100) );"
(4)			access="PROPERTY" | "FIELD"
/>

Element "view"

Das Element "view" stellt eine Datenstromabfragesicht dar. Jedes Element "stream" entspricht einer Methode in der Schnittstelle "ViewMetadata".
Attribute
name
Gibt den Namen der Sicht an. Die Validierung schlägt fehl, wenn dieses Attribut nicht angegeben wird. (Erforderlich)
sql
Gibt die SQL des Datenstroms an, die die Sichtkonvertierung definiert. Die Validierung schlägt fehl, wenn dieses Attribut nicht angegeben wird. (Erforderlich)
valueClass
Gibt den Klassentyp des Werts an, der in dieser Sicht der ObjectMap gespeichert wird. Der Klassentyp wird verwendet, um die Sichtereignisse in das richtige Tupelformat zu konvertieren, das mit diesem Klassentyp kompatibel ist. Wenn Sie den Klassentyp nicht angeben, wird ein Standardformat gemäß den Spaltendefinition in Stream Processing Technology Structured Query Language (SPTSQL) verwendet. Wenn Entitätsmetadaten für diese Sicht-Map definiert sind, verwenden Sie das Attribut "valueClass" nicht. (Optional)
access
Gibt den Typ für den Zugriff auf die Attribute der Wertklasse an. Wenn Sie den Zugriffstyp auf FIELD setzen, werden die Spaltenwerte durch Java-Reflexion direkt aus den Feldern abgerufen. Andernfalls werden Zugriffsmethoden für das Definieren der Attribute verwendet. Der Standardwert ist PROPERTY. (Optional)
<view
(1)			name="viewName"
(2)			valueClass="viewMapValueClass"
(3)			sql="viewSQL CREATE VIEW last5MinuteAvgPrice AS
						SELECT issue, avg(price) as totalVolume
 					  FROM (SELECT * FROM stockQuote FETCH LATEST 5 MINUTES) group by issue;"/>
(4)			access="PROPERTY" | "FIELD"
/>

Element "basic"

Das Element "basic" wird verwendet, um eine Zuordnung des Attributnamens in der Wertklasse bzw. den Entitätsmetadaten zu der in SPTSQL definierten Spalte zu definieren.
<basic
(1)			name="attributeName"
(2)			column="columnName"
/>

Element "id"

Das Element "id" wird für die Zuordnung eines Schlüsselattributs verwendet.
<id
(1)			name="idName"
(2)			column="columnName"
/>