Aquí se describen métodos comunes, pasos requisito previo y otra información necesaria para los programadores que desarrollan aplicaciones 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;
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.
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");
}
}
}
}
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.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:
Rol de administrador de WebSphere Application Server.
Rol de virtual member manager asignado mediante los derechos de gestión de depósito federado.
Para obtener más información sobre los roles de virtual member manager predefinidos, consulte el apartado Correlación de usuarios y grupos con roles para asignar derechos de gestión de depósito federado en Suministro de seguridad.
Para obtener información sobre cómo asignar usuarios o grupos a los roles predefinidos de virtual member manager, lea sobre los mandatos mapIdMgrUserToRole, mapIdMgrGroupToRole, removeIdMgrUsersFromRole, removeIdMgrGroupsFromRole, listIdMgrUsersForRoles y listIdMgrGroupsForRoles en el tema Grupo de mandatos IdMgrConfig para el objeto AdminTask en el Information Center de WebSphere Application Server.
Para obtener un caso de ejemplo completo, consulte el tema Código de ejemplo para utilizar derechos de gestión de depósito federado.
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.
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
-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