Programación de ADSI con Java/COM

Con la máquina virtual de Microsoft para Java (VM de Microsoft) y el compilador de Java de Microsoft, tiene acceso a todas las características adsi expuestas a través de cualquier componente COM adsi, desde una aplicación Java/COM. En el siguiente ejemplo de código Java se muestran los elementos necesarios para enlazar a un objeto ADSI e invocar métodos en ese objeto. Las funciones y los métodos de objeto de la API ADSI necesarios se exponen a través de Activeds.dll.

import activeds.*;       // ADSI COM Wrapper classes
import com.ms.com.*;     // to use _Guid data type in COM.

public Class SimpleADSI 
{
    IADs obj;
    String path = "WinNT://domain/machine,computer";
    _Guid riid = IADs.iid;
    public static void main(String args[]) 
    {
        try 
        {
            obj = (IADs)ADsGetObject(path, riid);
            System.out.println( "Object name:  " + obj.getName() );
            System.out.println( "      class:  " + obj.getSchema() );
            System.out.println( "    ADsPath:  " + obj.getADsPath() );
            System.out.println( "     parent:  " + obj.getParent() );
        }
        catch (Exception e) 
        {
            System.out.println( "SimpleADSI Error: " + e.toString() );
        }
    }

    /** @dll.import("activeds", ole) */
    private static native IUnknown ADsGetObject(String path, _Guid riid);
}

El argumento de la primera instrucción import hace referencia a las clases contenedoras de Java empaquetadas en Activeds.dll. Use Visual J++ para crear las clases contenedoras e incluirlas en el proyecto, siguiendo el procedimiento siguiente.

Para crear clases contenedoras e incluirlas en el proyecto

  1. En un proyecto de Visual J++, seleccione Agregar contenedor com... en el menú Proyecto .
  2. Seleccione "Active DS Type Library" (Biblioteca de tipos de DS activa) en el cuadro de diálogo Componentes instalados: en el cuadro de diálogo Contenedores COM. Si la biblioteca de tipos no se muestra en el cuadro de lista, haga clic en el botón Examinar... , vaya al directorio donde se almacena Activeds.tlb y, a continuación, seleccione la biblioteca de tipos.

Visual J++ crea el paquete activeds para las clases de contenedor de Java e incluye el paquete en la ruta de acceso predeterminada del proyecto. Para obtener más información, vea el paquete activeds en el panel Exploración del proyecto en la ventana Visual J++.

Para obtener un objeto ADSI que no se puede crear, use una de las funciones de API ADSI expuestas, por ejemplo, ADsGetObject o ADsOpenObject, que también se empaquetan en Activeds.dll. Microsoft J/Direct proporciona acceso a estas y otras API nativas. Esto se muestra en las dos últimas líneas del ejemplo de código anterior.

Al compilar, asegúrese de que la extensión de lenguaje de Microsoft está habilitada. Para ello, seleccione <Propiedades del proyecto> ... en el menú Proyecto de la ventana del proyecto de Visual J++. A continuación, haga clic en la pestaña Compilar del cuadro de diálogo Propiedades del <proyecto>. Desactive la casilla Deshabilitar extensiones de lenguaje de Microsoft . Si se compila desde la línea de comandos, use el modificador "/x-", por ejemplo:

jvc /x- SimpleADSI.java

Por último, para que la máquina virtual cargue el componente COM, la biblioteca de vínculos dinámicos (DLL) debe estar visible en la ruta de acceso del sistema. Si se devuelve un error "java.lang.UnsatisfiedLinkError", establezca path para incluir la ruta de acceso que contiene el archivo DLL necesario. Por ejemplo, si Activeds.dll se ha instalado en c:\adsi\lib, emita el siguiente comando desde la línea de comandos:

set PATH = %PATH%; c:\adsi\lib