Prérequis pour la programmation

Les méthodes communes, les étapes prérequises et les autres informations requises pour les programmeurs qui développent des applications virtual member manager sont décrites ici.

Importation des packages virtual member manager

Avant d'intégrer les fonctions de virtual member manager dans votre application, vous devez importer les packages de virtual member manager ainsi que les packages associés. L'exemple ci-après montre les packages que vous devez importer et la manière de définir la classe.

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;

Extraction du service virtual member manager et des autres méthodes communes

Vous pouvez extraire le service virtual member manager à partir de l'EJB éloigné ou de la machine JVM locale si votre application est exécutée dans WebSphere Application Server.

Remarque : Si vous appelez virtual member manager à l'aide d'API d'EJB éloignées, assurez-vous que le fichier wim.ear est déployé. Pour plus d'informations, voir Installation de virtual member manager.

L'exemple d'application de base ci-après contient les méthodes locateService() qui indiquent comment obtenir le service virtual member manager, ainsi que d'autres méthodes communes utilisées dans les exemples de code des diverses opérations virtual member manager. Remplacez les variables en italiques dans le code ci-après par les valeurs réelles dont vous avez besoin.

/**
 * Il s'agit d'une application de base qui définit les méthodes communes 
 * utilisées par d'autres exemples de code.
 **/
public class BaseApp implements SchemaConstants
{
    /**
     * Déclaration des variables communes : mise à jour en fonction de l'environnement
     **/
    static final String HOST = "localhost";       // nom d'hôte de WebSphere Application Server
    static final String BOOTSTRAP_PORT = "2809";  // numéro de port d'amorçage/RMI
    
    // Service Virtual member manager utilisé pour effectuer des appels d'API
    static Service service = null;

    /**
     * Recherche le service virtual member manager à l'aide d'un EJB éloigné
     * @param ejbJndiName Nom JNDI de l'EJB. 
     * Le nom d'EJB par défaut est "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome"
     **/
    public static Service locateService(String ejbJndiName)
    {
        try {
            // Accès distant aux services virtual member manager par Enterprise JavaBeans
            Environnement table de hachage = nouvelle table de hachage 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;
    }
    
    /**
     * Recherche le service virtual member manager sur la machine virtuelle Java locale
     **/
    public static Service locateService()
    {
        try { 
            // Accès local aux services virtual member manager 
            return new LocalServiceProvider(null);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * Exécute l'action en tant qu'utilisateur spécifié
     * @param user nom d'utilisateur
     * @param password mot de passe de l'utilisateur
     * @param action Action à appeler une fois l'utilisateur connecté
     * @return Objet renvoyé par l'action
     **/
    public static Object runAsUser(String user, String password, PrivilegedExceptionAction action) throws Exception
    {
        LoginContext loginContext;
        Subject subject;

        // Connexion à l'aide de l'ID utilisateur et du mot de passe transmis, qui possèdent le rôle requis
        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);
    }

    /**
     * Boucle via les entités de l'objet de données et impression de son nom unique
     * @param root Objet de données en entrée
     */
    @SuppressWarnings("unchecked")
    public static void printIdentifiers(DataObject root) throws Exception
    {
        // Extraction de toutes les entités de l'objet de données
        List entities = root.getList(SchemaConstants.DO_ENTITIES);
        for (int i = 0; i < entities.size(); i++) {
            DataObject ent = (DataObject) entities.get(i);
            // Extraction de l'identificateur d'entité
            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");
            }
        }
    }
}
Remarque : Définissez la propriété système suivante sur la machine JVM client, si votre application appelle les API de virtual member manager en mode local :
org.eclipse.emf.ecore.EPackage.Registry.INSTANCE=com.ibm.ws.wim.util.VMMEMFGlobalDelegatorRegistry
Si vous ne définissez pas cette propriété système, l'implémentation EMF par défaut est appliquée, mais cette dernière ne prend pas en charge les environnements à plusieurs domaines de sécurité et peut endommager le schéma EMF, ce qui risque de donner lieu à une erreur de violation de schéma.
Limitation : Une corruption du schéma EMF peut également se produire si un client d'EJB éloigné accède à EMF dans un environnement à plusieurs domaines de sécurité ou si le client d'EJB se trouve sur un processus serveur autre que WebSphere Application Server ou antérieur à WebSphere Application Server version 8.0. Il s'agit d'une limitation de l'environnement à plusieurs domaines de sécurité car un processus client d'EJB éloigné ne peut utiliser qu'un service de domaine à la fois. Si un client d'EJB éloigné tente d'utiliser plusieurs services de domaine simultanément, le registre du schéma EMF du processus client est corrompu et une erreur de violation de schéma inattendue se produit dans l'application client.

Appel des API de virtual member manager

Les exemples de code des diverses opérations virtual member manager utilisent les méthodes définies dans la classe BaseApp. Voir les exemples de code pour obtenir des instructions sur la manière d'effectuer des appels d'API.

Pour appeler les API de virtual member manager dans votre code d'application, vous devez disposer de l'un des rôles suivants :

Compilation du code

Vérifiez votre paramètre de chemin de classe pour vous assurer qu'il inclut les fichiers JAR appropriés pour compiler le code.

Exécution du code

Si le code d'application est exécuté dans WebSphere Application Server comme application ou servlet, le paramètre Subject et les autres paramètres d'accès aux API de virtual member manager sont utilisés implicitement et sont identiques à ceux du serveur ou du processus sur lequel l'application est déployée.

Si l'application est exécutée en dehors de WebSphere Application Server (par exemple, à partir d'un client WebSphere Application Server), utilisez les arguments JVM ci-après lors de l'exécution de votre code compilé. Remplacez les variables en italiques dans les arguments ci-après par les valeurs réelles dont vous avez besoin.

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

N'utilisez les arguments suivants que si vous devez remplacer les données d'identification spécifiées dans le fichier de propriétés CORBA :

-Dcom.ibm.CORBA.loginSource=properties 
-Dcom.ibm.CORBA.loginUserid=IDAdmin 
-Dcom.ibm.CORBA.loginPassword=Mot_de_passe_Admin
Voici quelques examples d'argument de machine virtuelle Java avec des exemples de valeur :
-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
Vérifiez votre paramètre de chemin de classe pour vous assurer qu'il inclut les fichiers JAR suivants avant de tenter d'exécuter le code :
  • <WAS_HOME>\lib\j2ee.jar
  • <WAS_HOME>\lib\bootstrap.jar
  • Tous les fichiers JAR sous <WAS_HOME>\plugins

Schéma de propriété étendu

Objets de données propertySchema et extensionPropertySchema
L'objet de données propertySchema permet de créer un type de propriété et de l'ajouter à un type d'entité virtual member manager existant lors de la phase d'exécution. La nouvelle propriété est ajoutée au fichier wimxmlextension.xml. Toutefois, si vous souhaitez également étendre le schéma de base de données du référentiel des extensions de propriété, vous devez utiliser l'objet de données extensionPropertySchema. Si vous utilisez l'objet de données extensionPropertySchema, la nouvelle propriété est ajoutée au type d'entité existant dans le fichier wimxmlextension.xml et stockée dans la base de données des extensions de propriété.
Remarque : Si vous étendez une propriété dans un espace de nom personnalisé, puis utilisez l'API d'obtention ou de recherche de virtual member manager, vous devez mentionner explicitement le préfixe de l'espace de nom avec le nom de propriété dans le graphique de données (<nsPrefix>:<propName>). Si une propriété du même nom existe dans l'espace de nom par défaut et dans l'espace de nom personnalisé et que vous créez une entité avec ce nom de propriété, virtual member manager utilise la propriété qui figure dans l'espace de nom par défaut pour créer l'entité.
Pour un exemple de code qui utilise l'objet de données propertySchema, voir Exemple de code pour l'extension du schéma dans un référentiel LDAP. Pour un exemple de code qui utilise l'objet de données extensionPropertySchema, voir Exemple de code pour l'extension du schéma dans le référentiel d'extension de propriété.
Types de données de propriété
La syntaxe des types de données pris en charge pour les propriétés de virtual member manager est répertoriée ici. Pour plus d'informations, reportez-vous à la section SchemaConstants du Javadoc virtual member manager dans le centre de documentation 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


Conditions d'utilisation | Commentaires