Voraussetzungen für die Programmierung

In diesem Thema sind allgemeine Methoden, vorausgesetzte Schritte und weitere erforderliche Informationen für Programmierer beschrieben, die Virtual Member Manager-Anwendungen entwickeln.

Virtual Member Manager-Pakete importieren

Bevor Sie die Funktionen von Virtual Member Manager in Ihre Anwendung integrieren können, müssen Sie Virtual Member Manager-Pakete und weitere zugehörige Pakete importieren. Das folgende Beispiel zeigt die Pakete, die Sie importieren müssen. Außerdem ist dargestellt, wie die Klasse definiert wird.

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;

Virtual Member Manager-Service abrufen und andere häufig verwendete Methoden

Sie können den Virtual Member Manager-Service entweder aus der fernen EJB oder aus der lokalen JVM abrufen, falls Ihre Anwendung in WebSphere Application Server ausgeführt wird.

Anmerkung: Wenn Sie zum Aufrufen von Virtual Member Manager ferne EJB-APIs verwenden, müssen Sie sicherstellen, dass "wim.ear" implementiert ist. Weitere Informationen enthält das Thema Virtual Member Manager installieren.

Die folgende Beispielbasisanwendung enthält Methoden "locateService()", die veranschaulichen, wie der Virtual Member Manager-Service angefordert wird. Außerdem enthält sie weitere häufig verwendete Methoden, die in den Codemustern für verschiedene Virtual Member Manager-Operationen eingesetzt werden. Ersetzen Sie im folgenden Code die in Kursivschrift angegebenen Variablen durch die tatsächlich benötigten Werte.

/**
 * This is a base application which defines common methods that are 
 * used by other code samples.
 **/
public class BaseApp implements SchemaConstants
{
    /**
     * Common variable declaration: update based on the environment
     **/
    static final String HOST = "localhost";       // host name of the WebSphere Application Server
    static final String BOOTSTRAP_PORT = "2809";  // Bootstrap/RMI port number
    
    // Virtual member manager service that is used to make API calls
    static Service service = null;

    /**
     * Locates virtual member manager service using a remote EJB
     * @param ejbJndiName JNDI name of the EJB. 
     * Default EJB name is "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome"
     **/
    public static Service locateService(String ejbJndiName)
    {
        try {
            // Remote access virtual member manager Service EJB
            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;
    }
    
    /**
     * Locates virtual member manager service in local JVM
     **/
    public static Service locateService()
    {
        try { 
            // Local access virtual member manager Service 
            return new LocalServiceProvider(null);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * Runs action as specified user
     * @param user user name
     * @param password password of the user
     * @param action Action to invoke after successful login of the user
     * @return Object returned by the action
     **/
    public static Object runAsUser(String user, String password, PrivilegedExceptionAction action) throws Exception
    {
        LoginContext loginContext;
        Subject subject;

        // Login using the userid and password that was passed, which has the required role
        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);
    }

    /**
     * Loop through the entities in the DataObject and print its uniqueName
     * @param root input DataObject
     */
    @SuppressWarnings("unchecked")
    public static void printIdentifiers(DataObject root) throws Exception
    {
        // Get all entities in the DataObject
        List entities = root.getList(SchemaConstants.DO_ENTITIES);
        for (int i = 0; i < entities.size(); i++) {
            DataObject ent = (DataObject) entities.get(i);
            // Get the entity Identifier
            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");
            }
        }
    }
}
Anmerkung: Legen Sie das folgende Systemmerkmal auf der Client-JVM fest, falls Ihre Anwendung Virtual Member Manager-APIs im Lokalmodus aufruft:
org.eclipse.emf.ecore.EPackage.Registry.INSTANCE=com.ibm.ws.wim.util.VMMEMFGlobalDelegatorRegistry
Falls Sie dieses Systemmerkmal nicht festlegen, ist die EMF-Standardimplementierung wirksam, die eine Umgebung mit mehreren Sicherheitsdomänen nicht unterstützt. In diesem Fall kann es sein, dass das EMF-Schema beschädigt wird und ein Fehler für einen Schemaverstoß eintritt.
Einschränkung: Ein EMF-Schemaverstoß kann außerdem auftreten, wenn ein ferner EJB-Client in einer Umgebung mit mehreren Sicherheitsdomänen auf EMF zugreift und sich der EJB-Client in einem Serverprozess befindet, der nicht zu WebSphere Application Server oder aber zu einer älteren Version als WebSphere Application Server 8.0 gehört. Dies ist eine Einschränkung für Umgebungen mit mehreren Sicherheitsdomänen, da ein ferner EJB-Clientprozess jeweils immer nur maximal einen Domänenservice verwenden kann. Falls ein ferner EJB-Client versucht, gleichzeitig mit mehreren Domänenservices zu arbeiten, wird die EMF-Schemaregistry des Clientprozesses beschädigt und in der Clientanwendung tritt ein unerwarteter Fehler für einen Schemaverstoß auf.

Virtual Member Manager-APIs aufrufen

Die Codemuster für die verschiedenen Virtual Member Manager-Operationen verwenden die in der Klasse "BaseApp" definierten Methoden. Anweisungen dazu, wie Sie API-Aufrufe vornehmen, finden Sie in den Codemustern.

Damit Sie in Ihrem Anwendungscode Virtual Member Manager-APIs aufrufen können, muss Ihnen eine der folgenden Rollen zugeordnet sein:

Code kompilieren

Überprüfen Sie Ihre Klassenpfadeinstellung, um sicherzustellen, dass sie die korrekten JAR-Dateien für die Kompilierung des Codes enthält.

Code ausführen

Falls der Anwendungscode innerhalb von WebSphere Application Server als Anwendung oder als Servlet ausgeführt wird, werden das Subjekt und andere Parameter für den Zugriff auf Virtual Member Manager-APIs implizit verwendet und sind mit denen des Servers oder des Prozesses identisch, auf dem die Anwendung implementiert ist.

Wird die Anwendung außerhalb von WebSphere Application Server ausgeführt, beispielsweise über einen WebSphere Application Server-Client, verwenden Sie bei der Ausführung des kompilierten Codes die folgenden JVM-Argumente. Ersetzen Sie in den folgenden Argumenten die in Kursivschrift angegebenen Variablen durch die tatsächlich benötigten Werte.

-Djava.security.auth.login.config=<was-ausgangsverzeichnis>/properties/wsjaas_client.conf 
-Dcom.ibm.CORBA.ConfigURL=<was-home-url>/properties/sas.client.props
-Dcom.ibm.SSL.ConfigURL=<WAS-home-url>/properties/ssl.client.props 

Verwenden Sie die folgenden Argumente nur dann, wenn Sie die in den CORBA-Eigenschaftendateien angegebenen Berechtigungsnachweise überschreiben müssen:

-Dcom.ibm.CORBA.loginSource=properties 
-Dcom.ibm.CORBA.loginUserid=administrator-id
-Dcom.ibm.CORBA.loginPassword=administratorkennwort
Es folgend einige Beispiele von JVM-Argumenten mit Musterwerten:
-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
Überprüfen Sie Ihre Klassenpfadeinstellung, um sicherzustellen, dass sie die folgenden JAR-Dateien enthält, bevor Sie versuchen, den Code auszuführen:
  • <was-ausgangsverzeichnis>\lib\j2ee.jar
  • <was-ausgangsverzeichnis>\lib\bootstrap.jar
  • Alle JAR-Dateien unter <was-ausgangsverzeichnis>\plugins

Merkmalschema erweitern

Datenobjekte "propertySchema" und "extensionPropertySchema"
Mit dem Datenobjekt "propertySchema" wird ein Merkmaltyp erstellt und zur Ausführungszeit zu einem vorhandenen Virtual Member Manager-Entitätstyp hinzugefügt. Das neue Merkmal wird zur Datei "wimxmlextension.xml" hinzugefügt. Falls Sie jedoch auch das Datenbankschema des Repositorys für Merkmalserweiterungen erweitern wollen, müssen Sie das Datenobjekt "extensionPropertySchema" verwenden. Das neue Merkmal wird zum vorhandenen Entitätstyp in der Datei "wimxmlextension.xml" hinzugefügt und außerdem in der Datenbank für Merkmalserweiterungen gespeichert.
Anmerkung: Wenn Sie ein Merkmal in einem angepassten Namespace erweitern und dann APIs von Virtual Member Manager zum Abrufen oder Suchen verwenden, müssen Sie das Namespace-Präfix zusammen mit dem Merkmalnamen im Datengraphen explizit nennen (<namespace-präfix>:<merkmalname>). Wenn im Standardnamespace und im angepassten Namespace ein Merkmal mit demselben Namen vorhanden ist und Sie eine Entität mit diesem Merkmalnamen erstellen, verwendet Virtual Member Manager zum Erstellen der Entität das Merkmal im Standardnamespace.
Einen Mustercode, in dem das Datenobjekt "propertySchema" verwendet wird, finden Sie unter Mustercode für die Erweiterung des Schemas in einem LDAP-Repository. Einen Mustercode, in dem das Datenobjekt "extensionPropertySchema" verwendet wird, finden Sie unter Mustercode für die Erweiterung des Schemas im Repository für Merkmalserweiterungen.
Merkmalsdatentypen
Nachfolgend ist die Syntax von Datentypen dargestellt, die für Virtual Member Manager-Merkmale unterstützt werden. Weitere Informationen enthält der Abschnitt "SchemaConstants" im Thema mit den Informationen zu Javadoc für Virtual Member Manager im Informationen Center von 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


Rechtliche Hinweise | Feedback