Desarrollo de aplicaciones que utilicen áreas de trabajo
Las aplicaciones interactúan con el servicio de área de trabajo implementando la interfaz UserWorkArea. Esta interfaz define todos los métodos utilizados para crear, manipular y terminar áreas de trabajo.
Acerca de esta tarea
package com.ibm.websphere.workarea;
public interface UserWorkArea {
void begin(String name);
void complete() throws NoWorkArea, NotOriginator;
String getName();
String[] retrieveAllKeys();
void set(String key, java.io.Serializable value)
throws NoWorkArea, NotOriginator, PropertyReadOnly;
void set(String key, java.io.Serializable value, PropertyModeType mode)
throws NoWorkArea, NotOriginator, PropertyReadOnly;
java.io.Serializable get(String key);
PropertyModeType getMode(String key);
void remove(String key)
throws NoWorkArea, NotOriginator, PropertyFixed;
}
- NoWorkArea
- Se genera cuando una solicitud necesita un área de trabajo asociada pero no existe ninguna.
- NotOriginator
- Se genera cuando una solicitud intenta manipular el contenido de un área de trabajo importada.
- PropertyReadOnly
- Se genera cuando una solicitud intenta modificar una propiedad read-only o fixed read-only.
- PropertyFixed
- La genera el método remove cuando la propiedad designada tiene una de las modalidades fixed.
Procedimiento
Ejemplo
Tipos de objeto de área de trabajo. En el ejemplo siguiente, el cliente crea un área de trabajo e inserta en ella dos propiedades: site identifier y priority (identificador de sitio y prioridad). site-identifier se establece como propiedad read-only; el cliente no permite a los destinatarios del área de trabajo que alteren temporalmente el identificador de sitio. Esta propiedad está compuesta por la empresa (company) clave y una instancia estática de un objeto SimpleSampleCompany. La propiedad priority está compuesta por la prioridad de clave y una instancia estática de un objeto SimpleSamplePriority. Los tipos de objetos están definidos según se muestra en el código de ejemplo siguiente:
public static final class SimpleSampleCompany {
public static final SimpleSampleCompany Main;
public static final SimpleSampleCompany NewYork_Sales;
public static final SimpleSampleCompany NewYork_Development;
public static final SimpleSampleCompany London_Sales;
public static final SimpleSampleCompany London_Development;
}
public static final class SimpleSamplePriority {
public static final SimpleSamplePriority Platinum;
public static final SimpleSamplePriority Gold;
public static final SimpleSamplePriority Silver;
public static final SimpleSamplePriority Bronze;
public static final SimpleSamplePriority Tin;
}
El cliente realiza entonces la invocación de un objeto remoto. El área de trabajo se propaga automáticamente; ninguno de los métodos del objeto remoto acepta un argumento área de trabajo. En el lado remoto, la solicitud la maneja primero SimpleSampleBean; el bean lee primero las propiedades site identifier y priority (identificador de sitio y prioridad) del área de trabajo. A continuación y de forma intencionada, el bean intenta -y obtiene un error- grabar directamente en el área de trabajo importada y también alterar temporalmente la propiedad site-identifier que es read-only (de sólo lectura).
SimpleSampleBean comienza correctamente un área de trabajo anidada, en la que altera temporalmente la prioridad del cliente y luego llama a otro bean, SimpleSampleBackendBean. SimpleSampleBackendBean lee las propiedades del área de trabajo, que contienen el identificador de sitio (site identifier) establecido en el cliente y la prioridad (priority) establecida en SimpleSampleBean. Finalmente, SimpleSampleBean completa su área de trabajo anidada, graba un mensaje que utiliza la propiedad site-identifier, y devuelve el control.
Utilización del gestor de particiones de área de trabajo. El siguiente ejemplo de código ilustra el uso de la interfaz de gestor de particiones de área de trabajo. El ejemplo ilustra cómo crear y recuperar una partición de área de trabajo mediante programación. Tenga en cuenta que la creación mediante programación de una partición de área de trabajo sólo está disponible en el cliente Java Platform, Enterprise Edition (Java EE). Para crear una partición de área de trabajo en el servidor, se debe utilizar la consola administrativa. Consulte el artículo del Servicio de partición de área de trabajo para conocer los parámetros de configuración disponibles para configurar una partición.
import com.ibm.websphere.workarea.WorkAreaPartitionManager;
import com.ibm.websphere.workarea.UserWorkArea;
import com.ibm.websphere.workarea.PartitionAlreadyExistsException;
import com.ibm.websphere.workarea.NoSuchPartitionException;
import java.lang.IllegalAccessError;
import java.util.Properties;
import javax.naming.InitialContext;
//Este ejemplo demuestra cómo recuperar una instancia de la
//implementación de WorkAreaPartitionManager y cómo utilizar esa
//instancia para crear una partición de área de trabajo y recuperar una partición.
//NOTA: la creación de una partición del modo que se muestra más abajo sólo está disponible
//en un cliente J2EE. Para crear una partición en el servidor, utilice la
//consola administrativa de WebSphere. La recuperación de una partición de área de
//trabajo se efectúa de la misma manera tanto en el cliente como en el servidor.
public class Example {
//Nombre de la partición que deber crearse/recuperarse
String partitionName = "myPartitionName";
//Nombre en denominación java al que está vinculada la instancia de WorkAreaPartitionManager
String jndiName = "java:comp/websphere/WorkAreaPartitionManager";
//En un cliente J2EE un usuario crearía una partición del modo siguiente:
public UserWorkArea myCreate(){
//Variable que ostenta nuestra referencia WorkAreaPartitionManager
WorkAreaPartitionManager partitionManager = null;
//Obtiene una instancia de la implementación de WorkAreaPartitionManager
try {
InitialContext initialContext = new InitialContext();
partitionManager = (WorkAreaPartitionManager) initialContext.lookup(jndiName);
} catch (Exception e) { }
//Establece las propiedades para configurar nuestra partición de área de trabajo
Properties props = new Properties();
props.put("maxSendSize","12345");
props.put("maxReceiveSize","54321");
props.put("Bidirectional","true");
props.put("DeferredAttributeSerialization","true");
//Variable que se utiliza para ostentar la partición de área de trabajo recién creada
UserWorkArea myPartition = null;
try{
//Así se crea una partición en el cliente J2EE. Utilice la
//Consola administrativa de WebSphere para crear una partición
//de área de trabajo en el servidor.
myPartition = partitionManager.createWorkAreaPartition(partitionName,props);
}
catch (PartitionAlreadyExistsException e){ }
catch (IllegalAccessException e){ }
return myPartition;
}
//. . . .
//Para recuperar una partición de área de trabajo más adelante o
//de otra clase, haga lo siguiente (desde el cliente o el servidor):
public UserWorkArea myGet(){
//Variable que ostenta nuestra referencia WorkAreaPartitionManager
WorkAreaPartitionManager partitionManager = null;
//Obtiene una instancia de la implementación de WorkAreaPartitionManager
try {
InitialContext initialContext = new InitialContext();
partitionManager = (WorkAreaPartitionManager) initialContext.lookup(jndiName);
} catch (Exception e) { }
//Variable que se utiliza para ostentar la partición de área de trabajo recuperada
UserWorkArea myPartition = null;
try{
myPartition = partitionManager.getWorkAreaPartition(partitionName);
}catch(NoSuchPartitionException e){ }
return myPartition;
}
}
Qué hacer a continuación
Para obtener información adicional sobre el área de trabajo, consulte el paquete com.ibm.websphere.workarea en la API. La documentación de la API generada está disponible en la tabla de contenido del centro de información en la vía de acceso
.