In diesem Thema sind allgemeine Methoden, vorausgesetzte Schritte und weitere erforderliche Informationen für Programmierer beschrieben, die Virtual Member Manager-Anwendungen entwickeln.
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;
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.
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");
}
}
}
}
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.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:
Administratorrolle von WebSphere Application Server
Virtual Member Manager-Rolle, die durch Verwaltungsberechtigungen für föderierte Repositorys zugeordnet wird
Weitere Informationen zu vordefinierten Virtual Member Manager-Rollen enthält der Abschnitt "Benutzer und Gruppen zur Zuordnung von Verwaltungsberechtigungen für föderierte Repositorys zu Rollen zuordnen" im Thema Sicherheit bereitstellen.
Angaben über die Zuordnung von Benutzern oder Gruppen zu den vordefinierten Virtual Member Manager-Rollen enthalten die Abschnitte für die Befehle "mapIdMgrUserToRole", "mapIdMgrGroupToRole", "removeIdMgrUsersFromRole", "removeIdMgrGroupsFromRole", "listIdMgrUsersForRoles" und "listIdMgrGroupsForRoles" im Thema über die Befehlsgruppe "IdMgrConfig" für das Objekt "AdminTask" im Information Center von WebSphere Application Server.
Ein umfassendes Beispielszenario finden Sie unter Mustercode für die Verwendung von Verwaltungsberechtigungen für föderierte Repositorys.
Überprüfen Sie Ihre Klassenpfadeinstellung, um sicherzustellen, dass sie die korrekten JAR-Dateien für die Kompilierung des Codes enthält.
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
-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