Programando ADSI com Java/COM

Usando a máquina virtual da Microsoft para Java (Microsoft VM) e o Microsoft Java Compiler, você tem acesso a todos os recursos ADSI expostos por meio de qualquer componente ADSI COM, a partir de um aplicativo Java/COM. O exemplo de código Java a seguir mostra os elementos necessários para vincular a um objeto ADSI e invocar métodos nesse objeto. As funções de API ADSI necessárias e os métodos de objeto são expostos por meio 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);
}

O argumento na primeira instrução import refere-se às classes Java Wrapper empacotadas no Activeds.dll. Use o Visual J ++ para criar as classes wrapper e incluí-las em seu projeto, seguindo o procedimento abaixo.

Para criar classes wrapper e incluí-las em seu projeto

  1. Em um projeto Visual J ++, selecione Adicionar com wrapper... no menu Project .
  2. Selecione "Active DS Type Library" na caixa de diálogo Installed Components (Active DS Type Library) na caixa de diálogo COM Wrappers. Se a biblioteca de tipos não for mostrada na caixa de listagem, clique no botão Procurar... , navegue até o diretório onde Activeds.tlb está armazenado e selecione a biblioteca de tipos.

Visual J++ cria o pacote activeds para as classes Java Wrapper e incluir o pacote no caminho padrão do projeto. Para obter mais informações, consulte o pacote activeds no painel Explorar do projeto na janela do Visual J++.

Para obter um objeto ADSI que não pode ser cocriado, use uma das funções de API ADSI expostas, por exemplo, ADsGetObject ou ADsOpenObject, que também são empacotadas no Activeds.dll. O Microsoft J/Direct fornece acesso a essas e outras APIs nativas. Isso é ilustrado pelas duas últimas linhas do exemplo de código, acima.

Ao compilar, verifique se a Extensão de Idioma da Microsoft está habilitada. Para fazer isso, selecione <Propriedades do projeto... no menu Projeto na janela do projeto> Visual J++. Em seguida, clique na guia Compilar na caixa de diálogo Propriedades do <projeto>. Desmarque a caixa de seleção Desabilitar extensões de idioma da Microsoft. Se estiver compilando a partir da linha de comando, use a opção "/x-", por exemplo:

jvc /x- SimpleADSI.java

Finalmente, para que a máquina virtual carregue o componente COM, a biblioteca de vínculo dinâmico (DLL) deve estar visível no caminho do sistema. Se um erro "java.lang.UnsatisfiedLinkError" for retornado, defina o PATH para incluir o caminho que contém a DLL necessária. Por exemplo, se Activeds.dll tiver sido instalado em c:\adsi\lib, emita o seguinte comando na linha de comando:

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