Requisitos previos de programación

Aquí se describen métodos comunes, pasos requisito previo y otra información necesaria para los programadores que desarrollan aplicaciones de virtual member manager.

Importación de paquetes de virtual member manager

Para integrar las funciones de virtual member manager en la aplicación, debe importar los paquetes de virtual member manager y otros paquetes relacionados. En el ejemplo siguiente se muestran los paquetes que es necesario importar y cómo definir la clase.

import java.util.Hashtable;
import java.util.List;

import com.ibm.websphere.wim.SchemaConstants;
import com.ibm.websphere.wim.Service;
import com.ibm.websphere.wim.client.LocalServiceProvider;
import com.ibm.websphere.wim.ras.WIMTraceHelper;

import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;
import commonj.sdo.DataObject;

Obtención del servicio de virtual member manager y otros métodos comunes

Puede obtener el servicio de virtual member manager del EJB remoto o de la JVM local si la aplicación se ejecuta en WebSphere Application Server.

Nota: Si invoca virtual member manager mediante las API EJB remotas, asegúrese de que wim.ear se haya desplegado. Para obtener más información, consulte Instalación de virtual member manager.

La siguiente aplicación base de ejemplo contiene métodos locateService() que muestran cómo obtener el servicio de virtual member manager, así como otros métodos comunes que se utilizan en los ejemplos de código para diversas operaciones de virtual member manager. Sustituya las variables que aparecen en cursiva en el código siguiente por los valores reales que necesita.

/**
 * Es una aplicación base que define métodos comunes
 * utilizados en otros ejemplos de código.
 **/
public class BaseApp implements SchemaConstants
{
    /**
     * Declaración de variable común: actualización basada en el entorno
     **/
    static final String HOST = "localhost";       // nombre de host de WebSphere Application Server
    static final String BOOTSTRAP_PORT = "2809";  // Número de puerto de Arranque/RMI
    
    // Servicio de virtual member manager usado para crear llamadas de API
    static Service service = null;

    /**
     * Localiza el servicio de virtual member manager usando un EJB remoto
     * @param ejbJndiName Nombre JNDI de EJB.
     * El nombre de EJB predeterminado es "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome"
     **/
    public static Service locateService(String ejbJndiName)
    {
        try {
            		// EJB del servicio de virtual member manager de acceso remoto
            		Hashtable environment = new Hashtable();
            
            String providerURL = "corbaloc:iiop:" + HOST + ":" + BOOTSTRAP_PORT;
            environment.put(LocalServiceProvider.PROVIDER_URL, providerURL);
            if (ejbJndiName == null) {
                ejbJndiName = "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome";
            }
            environment.put(LocalServiceProvider.EJB_JNDI_NAME, ejbJndiName);
            
            service = new LocalServiceProvider(environment);
        }
        catch (Exception e) {
            		e.printStackTrace();
        }
        return service;
    }
    
    /**
     * Localiza el servicio de virtual member manager en la JVM local
     **/
    public static Service locateService()
    {
        try { 
            // Servicio de virtual member manager de acceso local
            return new LocalServiceProvider(null);
        }
        		catch(Exception e)
        {
            		e.printStackTrace();
        }

        return null;
    }

    /**
     * Ejecuta la acción como especifica el usuario
     * @param user Nombre del usuario
     * @param password Contraseña del usuario
     * @param action Acción a invocar tras un inicio de sesión correcto del usuario
     * @return Objeto devuelto por la acción
     **/
    public static Object runAsUser(String user, String password, PrivilegedExceptionAction action) throws Exception
    {
        LoginContext loginContext;
        Subject subject;

        // Inicio de sesión usando el ID de usuario y contraseña pasados, con el rol necesario
        loginContext = new LoginContext("WSLogin", new WSCallbackHandlerImpl(user, "", password));
        loginContext.login();
        subject = loginContext.getSubject();

        try {
            return WSSubject.doAs(subject, action);
        }
        catch (PrivilegedActionException excp) {
            throw (Exception) excp.getCause();
        }
    }

    public static String printDO(DataObject obj)
    {
        return WIMTraceHelper.printDataObject(obj);
    }

    /**
     * Realizar bucle a través de las entidades de DataObject e imprimir su uniqueName
     * @param root DataObject de entrada
     */
    @SuppressWarnings("unchecked")
    public static void printIdentifiers(DataObject root) throws Exception
    {
        // Obtener todas las entidades de DataObject
        List entities = root.getList(SchemaConstants.DO_ENTITIES);
        for (int i = 0; i < entities.size(); i++) {
            DataObject ent = (DataObject) entities.get(i);
            // Obtener el Identificador de entidad
            DataObject id = ent.getDataObject(SchemaConstants.DO_IDENTIFIER);
            if (id != null) {
                String uniqueName = id.getString(SchemaConstants.PROP_UNIQUE_NAME);
                System.out.println("UniqueName is  -> " +uniqueName);
            }
            else {
                System.out.println("Missing Identifier");
            }
        }
    }
}
Nota: Establezca la siguiente propiedad del sistema en la JVM del cliente, si la aplicación invoca las API de virtual member manager en modalidad local:
org.eclipse.emf.ecore.EPackage.Registry.INSTANCE=com.ibm.ws.wim.util.VMMEMFGlobalDelegatorRegistry
Si no establece esta propiedad del sistema, la implementación predeterminada de EMF predeterminada está en vigor, la cual no da soporte a un entorno de dominio de seguridad múltiple y podría corromper el esquema EMF y se podría producir un error de violación de esquema.
Limitación: La corrupción del esquema EMF también podría producirse cuando un cliente EJB remoto accede a EMF en un entorno de dominio de seguridad múltiple, si el cliente EJB está en un proceso de servidor que no es WebSphere Application o es anterior a WebSphere Application Server versión 8.0. Esto es una limitación del entorno de dominio de seguridad múltiple puesto que un proceso de cliente EJB remoto puede utilizar un máximo de un servicio de dominio a la vez. Si un cliente EJB remoto intenta operar en varios servicios de dominio simultáneamente, el registro de esquema EMF del proceso del cliente se corrompe y se produce un error de violación de esquema inesperado en la aplicación cliente.

Llamada de las API de virtual member manager

En los ejemplos de código para diversas operaciones de virtual member manager se utilizan los métodos definidos en la clase BaseApp. Consulte los ejemplos de código para obtener instrucciones sobre cómo realizar llamadas de API.

Para llamar a las API de virtual member manager en el código de aplicación, debe estar asignado a uno de los roles siguientes:

Compilación del código

Compruebe el valor de vía de acceso de clases para asegurarse de que incluye los archivos JAR (Java archive) correctos para la compilación del código.

Ejecución del código

Si el código de aplicación se ejecuta dentro de WebSphere Application Server como una aplicación o como un servlet, se utilizan implícitamente Subject y otros parámetros para acceder a las API de virtual member manager y son iguales que los del servidor o proceso en el que se despliega la aplicación.

Si la aplicación se ejecuta fuera de WebSphere Application Server, por ejemplo, desde un cliente de WebSphere Application Server, utilice los siguientes argumentos de JVM cuando ejecute el código compilado. Sustituya las variables que aparecen en cursiva en los argumentos siguientes por los valores reales que necesita.

-Djava.security.auth.login.config=<INICIO_WAS>/properties/wsjaas_client.conf
-Dcom.ibm.CORBA.ConfigURL=<URL_INICIO_WAS>/properties/sas.client.props
-Dcom.ibm.SSL.ConfigURL=<URL_INICIO_WAS>/properties/ssl.client.props 

Utilice los argumentos siguientes sólo cuando deba alterar temporalmente las credenciales especificadas en el archivo de propiedades CORBA:

-Dcom.ibm.CORBA.loginSource=properties 
-Dcom.ibm.CORBA.loginUserid=ID_Usuario_Admin
-Dcom.ibm.CORBA.loginPassword=Contraseña Admin
A continuación se proporcionan algunos ejemplos de argumentos de JVM con valores de ejemplo:
-Djava.security.auth.login.config=C:/Progra~1/IBM/WebSphere/AppClient/properties/wsjaas_client.conf 
-Dcom.ibm.CORBA.ConfigURL=file:/Progra~1/IBM/WebSphere/AppClient/properties/sas.client.props
-Dcom.ibm.SSL.ConfigURL=file:/Progra~1/IBM/WebSphere/AppClient/properties/ssl.client.props 
-Dcom.ibm.CORBA.loginSource=properties
-Dcom.ibm.CORBA.loginUserid=admin
-Dcom.ibm.CORBA.loginPassword=admin
Compruebe el valor de vía de acceso de clases para asegurarse de que incluye los siguientes archivos JAR antes de intentar ejecutar el código:
  • <INICIO_WAS>\lib\j2ee.jar
  • <INICIO_WAS>\lib\bootstrap.jar
  • Todos los archivos JAR bajo <INICIO_WAS>\plugins

Ampliación del esquema de propiedad

Objetos de datos propertySchema y extensionPropertySchema
El objeto de datos propertySchema se utiliza para crear un tipo de propiedad y añadirlo a un tipo de entidad existente de virtual member manager en la ejecución. La nueva propiedad se añade al archivo wimxmlextension.xml. Sin embargo, si también desea extender el esquema de base de datos del depósito de extensión de propiedades, debe utilizar el objeto de datos extensionPropertySchema. Si utiliza el objeto de datos extensionPropertySchema, la nueva propiedad se añade al tipo de entidad existente en el archivo wimxmlextension.xml y se almacena en la base de datos de extensión de propiedades.
Nota: Si extiende una propiedad en un espacio de nombres personalizado y, a continuación, utiliza las API de obtención o búsqueda de virtual member manager, debe indicar explícitamente el prefijo de espacio de nombres, junto con el nombre de la propiedad en el gráfico de datos (<prefijo_ns>:<nombre_pop>). Si existe una propiedad con el mismo nombre tanto en el espacio de nombres predeterminado como en el espacio de nombres personalizado y crea una entidad con ese nombre de propiedad, virtual member manager utiliza la propiedad del espacio de nombres predeterminado para crear la entidad.
Para obtener código de ejemplo que utilice el objeto de datos propertySchema, consulte Código de ejemplo para extender el esquema en un depósito LDAP. Para obtener código de ejemplo que utilice el objeto de datos extensionPropertySchema, consulte Código de ejemplo para extender el esquema en el depósito de extensión de propiedades.
Tipos de datos de propiedad
A continuación se indica la sintaxis de los tipos de datos soportados para las propiedades de virtual member manager. Para obtener más información, consulte el apartado sobre SchemaConstants del Javadoc de virtual member manager en el Information Center de WebSphere Application Server.
  • DATA_TYPE_ANY_SIMPLE_TYPE
  • DATA_TYPE_ANY_URI
  • DATA_TYPE_BASE_64_BINARY
  • DATA_TYPE_BOOLEAN
  • DATA_TYPE_BYTE
  • DATA_TYPE_DATE
  • DATA_TYPE_DATE_TIME
  • DATA_TYPE_DOUBLE
  • DATA_TYPE_IDENTIFIER_TYPE
  • DATA_TYPE_INT
  • DATA_TYPE_LONG
  • DATA_TYPE_SHORT
  • DATA_TYPE_STRING
  • DATA_TYPE_TOKEN


Condiciones de uso | Comentarios