Archivo XML de descriptor ObjectGrid

Para configurar WebSphere eXtreme Scale, utilice el archivo XML de descriptor de ObjectGrid y la API ObjectGrid.

En las siguientes secciones, se proporcionan archivos XML de ejemplo para mostrar varias configuraciones. Cada elemento y atributo del archivo XML está definido. Utilice el esquema XML de descriptor de ObjectGrid para crear el archivo XML de descriptor. Consulte Archivo objectGrid.xsd para ver un ejemplo del esquema XML de descriptor de ObjectGrid.

Se utiliza una versión modificada del archivo companyGrid.xml original. El siguiente archivo companyGridSingleMap.xml es como el archivo companyGrid.xml. El archivo companyGridSingleMap.xml tiene una correlación y el archivo companyGrid.xml tiene cuatro correlaciones. Los elementos y atributos del archivo se describen en detalle en el siguiente ejemplo.
<?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>

Elemento objectGridConfig

El elemento objectGridConfig es el elemento de nivel superior del archivo XML. Grabe este elemento en el documento XML de eXtreme Scale tal como se muestra en el ejemplo anterior. Este elemento configura el espacio de nombres del archivo y la ubicación del esquema. El esquema se define en el archivo objectGrid.xsd.

Elemento objectGrids

El elemento objectGrids es un contenedor para todos los elementos objectGrid. En el archivo companyGridSingleMap.xml, el elemento objectGrids contiene un ObjectGrid, la objectGrid CompanyGrid.

Elemento objectGrid

Utilice el elemento objectGrid para definir un ObjectGrid. Cada uno de los atributos en el elemento objectGrid se corresponde con un método en la interfaz ObjectGrid.
Atributos
name
Especifica el nombre que se asigna a ObjectGrid. La validación XML falla si falta este atributo. (Necesario)
securityEnabled
Habilita la seguridad en el nivel ObjectGrid, que habilita las autorizaciones de acceso a los datos de la correlación, cuando establece el atributo en true. El valor predeterminado es true. (Opcional)
authorizationMechanism
Establece el mecanismo de autorización para el elemento. Puede establecer el atributo en uno de estos dos valores: AUTHORIZATION_MECHANISM_JAAS o AUTHORIZATION_MECHANISM_CUSTOM. El valor predeterminado es AUTHORIZATION_MECHANISM_JAAS. Debe establecer el atributo securityEnabled en true para que se aplique el atributo authorizationMechanism. (Opcional)
permissionCheckPeriod
Especifica un valor entero en segundos que indica la frecuencia con la que se ha de comprobar el permiso que se utiliza para permitir un acceso de cliente. El valor predeterminado es 0. Cuando se establece el valor de atributo 0, cada llamada al método get, put, update, remove o evict solicita al mecanismo de autorización, ya sea la autorización JAAS (Java Authentication and Authorization Service) o a la autorización personalizada, que compruebe si el asunto actual tiene permiso. Un valor mayor que 0 indica el número de segundos que tarda en copiar en caché un conjunto de permisos antes de volver al mecanismo de autorización para que los renueve. Debe establecer el atributo securityEnabled en true para que el atributo permissionCheckPeriod entre en vigor. (Opcional)
txTimeout
Especifica la cantidad de tiempo en segundos que se permite la finalización de una transacción. Si una transacción no se completa en este periodo de tiempo, la transacción se marca para la retrotracción y se genera una excepción TransactionTimeoutException. Si establece el valor en 0, se utiliza el valor predeterminado de 10 minutos como el tiempo de espera de transacción. (Opcional)
entityMetadataXMLFile
Especifica la vía de acceso del archivo XML de descriptor de entidad que define el esquema de entidad. Defina entidades antes de iniciar el servidor de catálogo de forma que cada entidad se puede enlazar a una correlación de respaldo.
  • Para un directorio relativo: especifique la ubicación relativa a la ubicación del archivo objectgrid.xml.
  • Para una vía de acceso absoluta: especifique la ubicación con un formato de URL como, por ejemplo, file:// o http://.
(Opcional)
<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"
/>
En el siguiente ejemplo, el archivo companyGridObjectGridAttr.xml muestra una forma de configurar los atributos de un elemento objectGrid. La seguridad está habilitada, el mecanismo de autorización se establece en JAAS y el periodo de comprobación de permisos en 45 segundos. El archivo también registra entidades especificando un atributo entityMetadataXMLFile.
<?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>
El siguiente código de ejemplo muestra el enfoque programático para lograr la misma configuración que el archivo companyGridObjectGridAttr.xml en el ejemplo anterior.
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"));

Elemento backingMap

El elemento backingMap se utiliza para definir una instancia de BackingMap de un ObjectGrid. Cada uno de los atributos del elemento backingMap corresponde a un método de la interfaz BackingMap. Para obtener información detallada, consulte Interfaz BackingMap.
Atributos
name
Especifica el nombre que se asigna a la instancia backingMap. Si falta este atributo, la validación XML fallará. (Necesario)
readOnly
Establece una instancia de BackingMap como lectura/grabación cuando especifique el atributo como false. Cuando se especifica el atributo como true, la instancia de BackingMap es de sólo lectura. (Opcional)
plantilla
Especifica si se pueden utilizar las correlaciones dinámicas. Establezca este valor en true si la correlación BackingMap es una correlación de plantilla. Las correlaciones de plantilla se pueden utilizar para crear dinámicamente correlaciones después de que se inicie ObjectGrid. Las llamadas a Session.getMap(String) generan que se creen correlaciones dinámicas si el nombre pasado en el método coincide con la expresión regular especificada en el atributo de nombre de backingMap. El valor predeterminado es false. (Opcional)
pluginCollectionRef
Especifica una referencia al plug-in backingMapPluginCollection. El valor de este atributo debe coincidir con el atributo de ID de un plug-in backingMapCollection. La validación falla si no existe ningún ID coincidente. Establezca el atributo de forma que se vuelvan a utilizar los plug-ins BackingMap. (Opcional)
numberOfBuckets
Especifica el número de grupos para la instancia de BackingMap que se debe utilizar. La instancia de BackingMap utiliza una correlación hash para la implementación. Si existen varias entradas en la BackingMap, si dispone de más grupos se obtendrá un mejor rendimiento porque el riesgo de colisiones disminuye a medida que aumenta el número de grupos. Un mayor número de grupos también implica mayor simultaneidad. Especifique un valor de 0 para inhabilitar la memoria caché cercana de un cliente cuando se está comunicando de forma remota con eXtreme Scale. Cuando establece el valor en 0 para un cliente, establezca el valor únicamente en el archivo de descriptor XML de ObjectGrid de alteración temporal de cliente. (Opcional)
preloadMode
Establece la modalidad de precarga si el plug-in de cargador se establece para esta instancia de BackingMap. El valor predeterminado es false. Si el atributo se establece en true, de forma asíncrona se invoca el método Loader.preloadMap(Session, BackingMap). De lo contrario, la ejecución del método se bloquea al cargar datos de modo que la memoria caché no está disponible hasta que la precarga finaliza. La precarga se produce durante la inicialización. (Opcional)
lockStrategy
Especifica si el gestor de bloqueo interno se utiliza cuando una transacción acceder a una entrada de correlación. Establezca este atributo en uno de tres valores: OPTIMISTIC, PESSIMISTIC o NONE. El valor predeterminado es OPTIMISTIC. (Opcional)

Normalmente, la estrategia de bloqueo optimista se utiliza cuando una correlación no tiene un plug-in de cargador, la correlación en su mayor parte se lee y no se graba en ella ni se actualiza con frecuencia, y el bloqueo no lo proporciona el gestor de persistencia utilizando eXtreme Scale como una memoria caché secundaria, ni la aplicación. Un bloqueo exclusivo se obtiene en una entrada de correlación que se inserta, actualiza o elimina durante la confirmación. El bloqueo garantiza que otra transacción no pueda cambiar la información de versión mientras la transacción que se confirma realice una comprobación de versión optimista.

La estrategia de bloqueo pesimista normalmente se usa para una correlación que no tiene un plug-in de cargador y el bloqueo no está proporcionado por el gestor de persistencia utilizando un eXtreme Scale como memoria caché lateral, por el plug-in de cargador o por la aplicación. La estrategia de bloqueo pesimista se utiliza cuando la estrategia de bloqueo optimista falla con demasiada frecuencia debido a que las transacciones de actualización colisionan frecuentemente en la misma entrada de correlación.

La estrategia sin bloqueo indica que el LockManager interno no es necesario. El control de simultaneidad se proporciona fuera de eXtreme Scale, ya sea a través del gestor de persistencia que utiliza eXtreme Scale como una memoria caché secundaria o aplicación, o mediante el plug-in de cargador que utiliza los bloqueos de base de datos para controlar la concurrencia.

Para obtener más información, consulte Gestor de bloqueo.

numberOfLockBuckets
Establece el número de grupos de bloqueo que utiliza el gestor de bloqueos para la instancia de BackingMap. Establezca el atributo lockStrategy en OPTIMISTIC o PESSIMISTIC para crear un gestor de bloqueos para la instancia de BackingMap. El gestor de bloqueos utiliza una correlación hash para realizar un seguimiento de las entradas bloqueadas por una o más transacciones. Si existen muchas entradas, si dispone más grupos de bloqueo se obtendrá un mejor rendimiento porque el riesgo de colisiones disminuye a medida que aumenta el número de grupos. Un número mayor de grupos también implica mayor simultaneidad. Establezca el atributo lockStrategy en NONE para especificar que la instancia de BackingMap no utilice el gestor de bloqueos. (Opcional)
lockTimeout
Establece el tiempo de espera de bloqueo que utiliza el gestor de bloqueos para la instancia de BackingMap. Establezca el atributo lockStrategy en OPTIMISTIC o PESSIMISTIC para crear un gestor de bloqueos para la instancia de BackingMap. Para impedir que se produzcan puntos muertos, el gestor de bloqueos tiene un valor de tiempo de espera predeterminado de 15 segundos. Si se supera el límite de tiempo de espera, se produce una excepción LockTimeoutException. El valor predeterminado de 15 segundos es suficiente para la mayoría de las aplicaciones, pero en un sistema con mucha cara, el tiempo de espera puede producirse cuando no existe ningún punto muerto. Utilice el atributo lockTimeout para aumentar el valor del valor predeterminado para impedir que se produzcan excepciones de tiempo de espera excedido falsas. Establezca el atributo lockStrategy en NONE para especificar que la instancia de BackingMap no utilice el gestor de bloqueos. (Opcional)
CopyMode
Especifica si una operación get de una entrada de la instancia de BackingMap devuelve el valor real, una copia del valor o un proxy para el valor. Establezca el atributo CopyMode en uno de estos cinco valores:
COPY_ON_READ_AND_COMMIT
El valor predeterminado es COPY_ON_READ_AND_COMMIT. Establezca el valor en COPY_ON_READ_AND_COMMIT para asegurar que una aplicación nunca tenga una referencia a un objeto de valor que esté en la instancia de BackingMap. En cambio, la aplicación siempre funciona con una copia del valor que está en la instancia de BackingMap. (Opcional)
COPY_ON_READ
Establezca el valor en COPY_ON_READ para mejorar el rendimiento sobre el valor de COPY_ON_READ_AND_COMMIT eliminando la copia que se produce cuando se confirma una transacción. Para conservar la integridad de los datos de BackingMap, la aplicación confirma la supresión de cada referencia a una entrada una vez que la transacción se ha confirmado. Si se establece este valor hace que un método ObjectMap.get devuelva una copia del valor en lugar de una referencia al valor, lo que garantiza que los cambios que la aplicación realice en el valor no afecten al elemento BackingMap hasta que la transacción se haya confirmado.
COPY_ON_WRITE
Establezca el valor en COPY_ON_WRITE para mejorar el rendimiento sobre el valor COPY_ON_READ_AND_COMMIT eliminando la copia que se produce la primera vez que una transacción de una clave dada llama al método ObjectMap.get. En cambio, el método ObjectMap.get devuelve un proxy al valor en lugar de una referencia directa al objeto de valor. El proxy garantiza que no se haga una copia del valor salvo que la aplicación llame a un método set en la interfaz de valor.
NO_COPY
Establezca el valor en NO_COPY para permitir que una aplicación nunca modifique un objeto de valor que se haya obtenido utilizando un método ObjectMap.get a cambio de mejoras de rendimiento. Establezca el valor en NO_COPY para las correlaciones asociadas a las entidades de la API de EntityManager.
COPY_TO_BYTES
Establezca el valor en COPY_TO_BYTES para mejorar la huella de la memoria para los tipos Object complejos y para mejorar el rendimiento cuando la copia de un Object se basa en la serialización para realizar la copia. Si un Object no se puede clonar o no se proporciona un ObjectTransformer personalizado con un método copyValue eficaz, el mecanismo de copia predeterminado es serializar e inflar el objeto para realizar una copia. Con el valor COPY_TO_BYTES, la operación de inflar sólo se realiza durante la lectura y la operación de serialización sólo se realiza durante el compromiso.
Para obtener más información sobre estos valores, consulte Ajuste de la modalidad de copia.
valueInterfaceClassName
Especifica una clase que es necesaria al establecer el atributo CopyMode en COPY_ON_WRITE. Este atributo se ignora para las demás modalidades. El valor COPY_ON_WRITE utiliza un proxy cuando se realizan llamadas al método ObjectMap.get. El proxy garantiza que no se haga una copia del valor salvo que la aplicación llame a un método set en la clase que se especifica como atributo valueInterfaceClassName. (Opcional)
copyKey
Especifica si la copia de la clave es necesaria cuando se crea una entrada de correlación. Si se copia el objeto de clave se permite que la aplicación utilice el mismo objeto de clave para cada operación ObjectMap. Establezca el valor en true para copiar el objeto de clave cuando se crea una entrada de correlación. El valor predeterminado es false. (Opcional)
nullValuesSupported
Establezca el valor en true para dar soporte a valores nulos en la ObjectMap. Cuando se da soporte a valores nulos, una operación get que devuelve un nulo podría significar que el valor es nulo o que la correlación no contiene la clave que se ha pasado al método. El valor predeterminado es true. (Opcional)
ttlEvictorType
Especifica cómo se calcula la hora de caducidad de una entrada BackingMap. Establezca este atributo en uno de estos valores: CREATION_TIME, LAST_ACCESS_TIME, LAST_UPDATE_TIME o NONE. El valorCREATION_TIME indica que la hora de caducidad de una entrada es la suma de la hora de creación de la entrada más el valor del atributo timeToLive. El valor LAST_ACCESS_TIME indica que la hora de caducidad de una entrada es la suma de la hora del último acceso de la entrada (si se ha actualizado la entrada o simplemente se ha leído) más el valor del atributo timeToLive. El valor LAST_UPDATE_TIME indica que la hora de caducidad de una entrada es la suma de la hora de la última actualización de la entrada más el valor del atributo timeToLive. El valor NONE, que es el valor predeterminado, indica que una entrada no tiene hora de caducidad y que estará presente en la instancia de BackingMap hasta que la aplicación elimine o anule de forma explícita la entrada. (Opcional)
timeToLive
Especifica en segundos cuánto tiempo existe cada entrada de correlación. El valor predeterminado 0 significa que la entrada de correlación siempre existe, o hasta que la aplicación elimina o anula la entrada de forma explícita. De lo contrario, el desalojador TTL desaloja la entrada de correlación basándose en este valor. (Opcional)
viewRef
Especifica que la backingMap es una correlación de vistas. (Opcional)
writeBehind
Especifica que el soporte de grabación diferida se ha habilitado con los parámetros de consulta diferida (opcional). Los parámetros write-behind constan de un tiempo de actualización máximo y un recuento máximo de actualizaciones de claves. El formato del parámetro write-behind es "[T(tiempo)][;][C(recuento)]". La base de datos se actualiza cuando se produce uno de los siguientes sucesos:
  • Ha transcurrido el tiempo de actualización máximo, especificado en segundos, desde la última actualización.
  • El número de actualizaciones disponibles en la correlación de cola ha alcanzado el recuento de actualizaciones máximo.

Para obtener más información, consulte Almacenamiento en memoria caché de grabación diferida.

El soporte de grabación diferida es una ampliación del plug-in Loader, que puede utilizar para integrar eXtreme Scale con la base de datos. Por ejemplo, consulte la información del apartado Configuración de cargadores JPA sobre cómo configurar un cargador JPA.

evictionTriggers
Establece los tipos de desencadenantes de desalojo adicionales que se deben usar. Todos los desalojos de la correlación de respaldo utilizan esta lista de desencadenantes adicionales. Para evitar una IllegalStateException, se debe invocar este atributo antes de invocar el método ObjectGrid.initialize(). Además, tenga en cuenta que el método ObjectGrid.getSession() invoca de forma implícita el método ObjectGrid.initialize() si la aplicación todavía no ha invocado el método. Las entradas de la lista de desencadenantes están separadas por signos de punto y coma. Los desencadenadores del desalojo Current incluyen MEMORY_USAGE_THRESHOLD. (Opcional)
<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"
/>		
En el siguiente ejemplo, el archivo companyGridBackingMapAttr.xml se utiliza para mostrar una configuración de backingMap de ejemplo.
<?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>
El siguiente código de ejemplo demuestra el enfoque programático para obtener la misma configuración que el archivo companyGridBackingMapAttr.xml en el ejemplo anterior:
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);

// cuando se establece la modalidad de copia en COPY_ON_WRITE, es necesaria la clase valueInterface
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); // establecer el tiempo de vida en 50 minutos

Elemento bean

Utilice el elemento bean para definir plug-ins. Puede conectar plug-ins a los elementos objectGrid y BackingMap.
Atributos
id
Especifica el tipo de plug-in que se va a crear. (Necesario)
En la siguiente lista se incluyen los plug-ins válidos para un bean que es un elemento hijo del elemento objectGrid:
  • Plug-in TransactionCallback
  • Plug-in ObjectGridEventListener
  • Plug-in SubjectSource
  • Plug-in SubjectValidation
En la siguiente lista se incluyen los plug-ins válidos para un bean que es un elemento hijo del elemento backingMapPluginCollection:
  • Plug-in Loader
  • Plug-in ObjectTransformer
  • Plug-in OptimisticCallback
  • Plug-in Evictor
  • Plug-in MapEventListener
  • Plug-in MapIndex
className
Especifica el nombre de la clase o bean de spring de la que se debe crear una instancia para crear el plug-in. La clase debe implementar la interfaz de tipo plug-in. Por ejemplo, si especifica ObjectGridEventListener como el valor del atributo id, el valor de atributo className debe hacer referencia a una clase que implemente la interfaz ObjectGridEventListener. Se necesita className u osgiService.
osgiService
Especifica el nombre del servicio OSGi a buscar en el administrador de servicios OSGi. Cuando se ejecutan en la infraestructura OSGi de Eclipse Equinox con el contenedor Eclipse Gemini o Apache Aries Blueprint, los plug-ins se pueden definir mediante un archivo XML de OSGi Blueprint. Las demás propiedades de bean no se suelen utilizar cuando se utiliza un nombre osgiService, puesto que las propiedades de bean se configuran en el archivo de configuración Blueprint. Si desea más información, consulte Configuración de plug-ins habilitados para OSGi mediante el archivo XML de descriptor de ObjectGrid. Se necesita className u osgiService.
<bean
(1)			id="TransactionCallback" | "ObjectGridEventListener" |"SubjectSource" |
     "SubjectValidation" | "Loader" | "ObjectTransformer" |
    "OptimisticCallback" | "Evictor" | "MapEventListener" | "MapIndexPlugin"
(2)			className="class name" | "(spring)bean name"
/>

En el siguiente ejemplo el archivo companyGridBean.xml se utiliza para mostrar cómo configurar plug-ins utilizando el elemento bean. Se añade un plug-in ObjectGridEventListener al ObjectGrid CompanyGrid. El atributo className para este bean es la clase com.ibm.websphere.objectgrid.plugins.builtins.TranPropListener. Esta clase implementa la interfaz com.ibm.websphere.objectgrid.plugins.ObjectGridEventListener según sea necesario.

En el archivo companyGridBean.xml también se define un plug-in BackingMap. Un plug-in evictor se añade a la instancia de BackingMap Customer. Dado que el ID de bean es Evictor, el atributo className debe especificar una clase que implemente la interfaz com.ibm.websphere.objectgrid.plugins.Evictor. La clase com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor implementa esta interfaz. La backingMap hace referencia a sus plug-ins utilizando el atributo 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>
El siguiente código de ejemplo muestra el enfoque programático para lograr la misma configuración que el archivo companyGridBean.xml en el ejemplo anterior.
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);

Para obtener información más detallada sobre la utilización de los plug-ins, consulte Visión general de los plug-ins.

Elemento property

Utilice el elemento property para añadir propiedades a plug-ins. El nombre de la propiedad debe corresponder a un método set de la clase a la que hace referencia el bean que lo contiene.
Atributos
name
Especifica el nombre de la propiedad. El valor que se asigna a este atributo debe corresponder a un método set de la clase que se proporciona como el atributo className de bean que lo contiene. Por ejemplo, si establece el atributo className del bean en com.ibm.MyPlugin y el nombre de la propiedad que proporciona es size, la clase com.ibm.MyPlugin debe tener un método setSize. (Necesario)
type
Especifica el tipo de la propiedad. El tipo se pasa al método set identificado por el atributo name. Los valores válidos son los primitivos Java, sus correspondientes java.lang y java.lang.String. Los atributos de nombre y tipo deben corresponder a una signatura de método del atributo className del bean. Por ejemplo, si establece el nombre como size y el tipo como int, debe haber un método setSize(int) en la clase que se especifica como el atributo className para el bean. (Necesario)
value
Especifica el valor de la propiedad. Este valor se convierte en el tipo que se especifica mediante el atributo de tipo y se utiliza como un parámetro en la llamada al método set que se identifica mediante los atributos de nombre y tipo. El valor de este atributo no se valida de ningún modo. (Necesario)
description
Describe la propiedad. (Opcional)
<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"
/>
En el siguiente ejemplo, el archivo companyGridProperty.xml se utiliza para mostrar cómo añadir un elemento property a un bean. En este ejemplo, un elemento property con el nombre maxSize y el tipo int se añade a un desalojador. La clase com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor tiene una firma de método que coincide con el método setMaxSize(int). Se proporciona un valor entero de 499 al método setMaxSize(int) en la clase com.ibm.websphere.objectgrid.plugins.builtins.LRUEvictor.
<?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="Tamaño máximo del desalojador LRU"/>
			</bean>
		</backingMapPluginCollection>
	</backingMapPluginCollections>
</objectGridConfig>
El siguiente código de ejemplo muestra el enfoque programático para lograr la misma configuración que el archivo companyGridProperty.xml en el ejemplo anterior.
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();
// si en su lugar se utiliza el archivo XML,
// la propiedad añadida provocará que se realice la siguiente llamada
lruEvictor.setMaxSize(449);
customerMap.setEvictor(lruEvictor);

Elemento backingMapPluginsCollections

El elemento backingMapPluginsCollections es un contenedor para todos los elementos backingMapPluginCollection. En el archivo companyGridProperty.xml de la sección anterior, el elemento backingMapPluginCollections contiene un elemento backingMapPluginCollection con el ID customerPlugins.

Elemento backingMapPluginCollection

El elemento backingMapPluginCollection define los plug-ins BackingMap y se identifica mediante el atributo id. Especifique el atributo pluginCollectionRef para hacer referencia a los plug-ins. Al configurar varios plug-ins BackingMaps de forma parecida, cada BackingMap puede hacer referencia al mismo elemento backingMapPluginCollection.
Atributos
id
Identifica la backingMapPluginCollection, a la que hace referencia el atributo pluginCollectionRef del elemento backingMap. Cada ID debe ser exclusivo. Si el valor de un atributo pluginCollectionRef no coincide con el ID de un elemento backingMapPluginCollection, la validación XML falla. Cualquier número de elementos backingMap pueden hacer referencia a un solo elemento backingMapPluginCollection. (Necesario)
<backingMapPluginCollection
(1)			id="id"
/>
En el siguiente ejemplo, el archivo companyGridCollection.xml se utiliza para mostrar cómo utilizar el elemento backingMapPluginCollection. En este archivo, la BackingMap Customer utiliza la backingMapPluginCollection customerPlugins para configurar la BackingMap Customer con un LRUEvictor. Los elementos BackingMaps Item y OrderLine hacen referencia a labackingMapPluginCollection collection2. Cada una de estas BackingMaps tienen un conjunto LFUEvictor.
<?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>
El siguiente código de ejemplo muestra el enfoque programático para lograr la misma configuración que el archivo companyGridCollection.xml en el ejemplo anterior.
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");

Elemento querySchema

El elemento querySchema define las relaciones entre BackingMaps e identifica el tipo de objeto en cada correlación. Esta información la utiliza ObjectQuery para convertir series de lenguaje de consulta en llamadas de acceso a correlaciones. Para obtener más información, consulte Configuración de un esquema ObjectQuery.

Elemento mapSchemas

Cada elemento querySchema tiene un elemento mapSchemas que contiene uno o más elementos mapSchema.

Elemento mapSchema

Un elemento mapSchema define el tipo de objeto que se almacena en una BackingMap y las instrucciones para acceder a los datos.
Atributos
mapName
Especifica el nombre de la BackingMap que se va a añadir al esquema. (Necesario)
valueClass
Especifica el tipo que objeto que se almacena en la parte de valor de BackingMap. (Necesario)
primaryKeyField
Especifica el nombre del atributo de clave primaria en el atributo valueClass. La clave primaria también debe almacenarse en la parte de claves de BackingMap. (Opcional)
accessType
Identifica cómo el motor de consulta realiza una introspección y accede a los datos persistentes en las instancias del objeto valueClass. Si establece el valor en FIELD, se realiza una introspección en los campos de clase y se añaden al esquema. Si el valor es PROPERTY, se utilizan los atributos asociados a los métodos get e is. El valor predeterminado es PROPERTY. (Opcional)
<mapSchema
(1)			mapName="backingMapName"
(2)			valueClass="com.mycompany.OrderBean"
(3)			primaryKeyField="orderId"
(4)			accessType="PROPERTY" | "FIELD"
/>
En el siguiente ejemplo, el archivo companyGridQuerySchemaAttr.xml se utiliza para mostrar una configuración de mapSchema de ejemplo.
<?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>
El siguiente código de ejemplo muestra el enfoque programático para lograr la misma configuración que el archivo companyGridQuerySchemaAttr.xml en el ejemplo anterior.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
companyGrid.defineMap("Order");
companyGrid.defineMap("Customer");

// Definir el esquema
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);

Elemento relationships

Cada elemento querySchema tiene cero o un elemento relationships que contiene uno o más elementos relationship.

Elemento relationship

Un elemento relationship define la relación entre dos BackingMaps y los atributos del atributo valueClass que enlaza la relación.
Atributos
source
Especifica el nombre de valueClass del origen de una relación. (Necesario)
target
Especifica el nombre de valueClass del destino de una relación. (Necesario)
relationField
Especifica el nombre del atributo del origen valueClass que hace referencia al destino. (Necesario)
invRelationField
Especifica el nombre del atributo del destino valueClass que hace referencia al origen. Si no se especifica este atributo, la relación es de una dirección. (Opcional)
<mapSchema
(1)			source="com.mycompany.OrderBean"
(2)			target="com.mycompany.CustomerBean"
(3)			relationField="customer"
(4)			invRelationField="orders"
/>
En el ejemplo siguiente, se utiliza el archivo companyGridQuerySchemaWithRelationshipAttr.xml para mostrar una configuración de mapSchema de ejemplo que incluye una relación bidireccional.
<?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>
El siguiente código de ejemplo muestra el enfoque programático para lograr la misma configuración que el archivo companyGridQuerySchemaWithRelationshipAttr.xml en el ejemplo anterior.
ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager();
ObjectGrid companyGrid = objectGridManager.createObjectGrid("CompanyGrid", false);
companyGrid.defineMap("Order");
companyGrid.defineMap("Customer");

// Definir el esquema
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);

Elemento stream

El elemento stream representa una secuencia para el motor de consulta de secuencias. Cada atributo del elemento stream corresponde a un método en la interfaz StreamMetadata.
Atributos
name
Especifica el nombre de la secuencia. Si no se especifica este atributo, la validación fallará. (Necesario)
valueClass
Especifica el tipo de clase del valor que está almacenado en la ObjectMap de la secuencia. El tipo de clase se utiliza para convertir el objeto en los sucesos de secuencia y para generar una sentencia SQL si la sentencia no se proporciona. (Necesario)
sql
Especifica la sentencia SQL de la secuencia. Si no se proporciona esta propiedad, se genera un SQL de secuencia reflejando los atributos o métodos de acceso en el atributo valueClass o utilizando los atributos de tuple de los metadatos de entidad. (Opcional)
access
Especifica el tipo para acceder a los atributos de la clase de valor. Si establece el valor en FIELD, los atributos se recuperan directamente de los campos utilizando el reflejo de Java. De lo contrario, se utilizarán métodos de descriptor de acceso para leer los atributos. El valor predeterminado es PROPERTY. (Opcional)
<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"
/>

Elemento view

El elemento view representa una vista de consulta de secuencias. Cada elemento stream corresponde a un método de la interfaz ViewMetadata.
Atributos
name
Especifica el nombre de la vista. Si no se especifica este atributo, la validación fallará. (Necesario)
sql
Especifica el SQL de la secuencia, que define la transformación de la vista. Si no se especifica este atributo, la validación fallará. (Necesario)
valueClass
Especifica el tipo de clase del valor que está almacenado en esta vista de ObjectMap. El tipo de clase se utiliza para convertir sucesos de vista en el formato de tuple correcto que sea compatible con este tipo de clase. Si no se proporciona el tipo de clase, se utiliza un formato predeterminado que sigue a la definiciones de columna en SPTSQL (Stream Processing Technology Structured Query Language). Si se definen metadatos de entidad para esta correlación de vistas, no utilice el atributo valueClass. (Opcional)
access
Especifica el tipo para acceder a los atributos de la clase de valor. Si establece el tipo de acceso a FIELD, los valores de la columna se establecen directamente en los campos utilizando el reflejo Java. De lo contrario, se utilizarán métodos de descriptor de acceso para establecer los atributos. El valor predeterminado es PROPERTY. (Opcional)
<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"
/>

Elemento basic

El elemento basic se utiliza para definir una correlación del nombre de atributo en la clase de valor o metadatos de entidad con la columna que se ha definido en SPTSQL.
<basic
(1)			name="attributeName"
(2)			column="columnName"
/>

Elemento id

El elemento ID se utiliza para una correlación de atributo clave.
<id
(1)			name="idName"
(2)			column="columnName"
/>