São descritos aqui os métodos comuns, as etapas de pré-requisito e outras informações necessárias aos programadores que estão desenvolvendo aplicativos do gerenciador de membro virtual.
Antes de integrar funções de gerenciador de membro virtual em seu aplicativo, você deve importar pacotes de gerenciador de membro virtual e outros pacotes relacionados. O exemplo a seguir mostra os pacotes que você deve importar e como definir a 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;
O serviço do gerenciador de membro virtual poderá ser obtido do EJB remoto ou da JVM local, se o seu aplicativo estiver sendo executado no WebSphere Application Server.
O seguinte aplicativo base de amostra contém métodos locateService() que mostram como obter o serviço do gerenciador de membro virtual, bem como outros métodos comuns usados nas amostras de código em diversas operações do gerenciador de membro virtual. Substitua as variáveis mostradas em itálico no seguinte código pelos valores reais que você precisa.
/**
* Este é um aplicativo base que define métodos comuns que são
* usados por outras amostras de código.
**/
public class BaseApp implements SchemaConstants
{
/**
* declaração de variável comum: atualização baseada no ambiente
**/
static final String HOST = "localhost"; // nome do host do WebSphere Application Server
static final String BOOTSTRAP_PORT = "2809"; // Autoinicialização/número da porta RMI
// Serviço do gerenciador de membro virtual usado para fazer chamadas de API
static Service service = null;
/**
* Localiza o serviço do gerenciador de membro virtual usando um EJB remoto
* @param ejbJndiName Nome JNDI do EJB.
* O nome EJB padrão é "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome"
**/
public static Service locateService(String ejbJndiName)
{
try {
// EJB Remoto do Serviço do gerenciador de membro virtual
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 o serviço do gerenciador de membro virtual na JVM local
**/
public static Service locateService()
{
try {
// Serviço de acesso local do gerenciador de membro virtual
return new LocalServiceProvider(null);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* Executa ação conforme especificado pelo usuário
* @param user nome de usuário
* @param password senha do usuário
* @param action Ação a ser chamada após login com êxito do usuário
* @return Objeto retornado pela ação
**/
public static Object runAsUser(String user, String password, PrivilegedExceptionAction action) throws Exception
{
LoginContext loginContext;
Subject subject;
// Login usando ID do usuário e senha transmitidos, com a função obrigatória
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);
}
/**
* Efetuar loop pelas entidades no DataObject e imprimir seu uniqueName
* @param root input DataObject
*/
@SuppressWarnings("unchecked")
public static void printIdentifiers(DataObject root) throws Exception
{
// Obter todas as entidades no DataObject
List entities = root.getList(SchemaConstants.DO_ENTITIES);
for (int i = 0; i < entities.size(); i++) {
DataObject ent = (DataObject) entities.get(i);
// Obter o Identificador de entidade
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
Se
você não configurar essa propriedade de sistema, a implementação EMF padrão entrará em
vigor, a qual não suporta ambiente com vários domínios de segurança, e pode corromper o
esquema EMF e provocar erro de violação de esquema.As amostras de código para diversas operações do gerenciador de membro virtual usam os métodos definidos na classe BaseApp. Consulte as amostras de código para obter instruções sobre como fazer chamadas de API.
Para chamar as APIs do gerenciador de membro virtual no código do aplicativo, você deve estar designado a uma das seguintes funções:
Função de administrador do WebSphere Application Server.
Função do gerenciador de membro virtual designada usando direitos de gerenciamento de repositório associado.
Para obter informações adicionais sobre as funções de gerenciador de membro virtual predefinidas, consulte a seção Mapeando usuários e grupos para funções para designar direitos de gerenciamento de repositório associado em Fornecendo Segurança.
Para obter informações sobre como designar usuários ou grupos às funções predefinidas do gerenciador de membro virtual, leia sobre os comandos mapIdMgrUserToRole, mapIdMgrGroupToRole, removeIdMgrUsersFromRole, removeIdMgrGroupsFromRole, listIdMgrUsersForRoles e listIdMgrGroupsForRoles, no tópico Grupo de comandos IdMgrConfig para o objeto AdminTask no centro de informações do WebSphere Application Server.
Para obter um cenário de exemplo de ponta a ponta, consulte o tópico Código de amostra para usar direitos de gerenciamento de repositório associado.
Verifique a configuração do caminho de classe para assegurar-se de que ela inclua os arquivos Java archive (JAR) corretos, para compilar o código.
Se o código do aplicativo estiver sendo executado no WebSphere Application Server como um aplicativo ou servlet, Assunto e outros parâmetros para acessar as APIs do gerenciador de membro virtual serão usados implicitamente e serão os mesmos do servidor ou processo no qual o aplicativo foi implementado.
Se o aplicativo estiver sendo executado fora do WebSphere Application Server, por exemplo, a partir de um cliente do WebSphere Application Server, use os seguintes argumentos da JVM ao executar o código compilado. Substitua as variáveis mostradas em itálico nos seguintes argumentos pelos valores reais que você precisa.
-Djava.security.auth.login.config=<WAS_HOME>/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
Use os seguintes argumentos apenas quando você tiver de substituir as credenciais especificadas no arquivo de propriedades CORBA:
-Dcom.ibm.CORBA.loginSource=properties
-Dcom.ibm.CORBA.loginUserid=AdminUserId
-Dcom.ibm.CORBA.loginPassword=Admin Password
-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