Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

A primeira vez que acessar o developerWorks, um perfil será criado para você. Informações do seu perfil (tais como: nome, país / região, e empresa) estarão disponíveis ao público, que poderá acompanhar qualquer conteúdo que você publicar. Seu perfil no developerWorks pode ser atualizado a qualquer momento.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Manejar Desafios de Interoperabilidade da Especificação WS-Security, Parte 3: Usando o Proxy EJB

David Leigh, Advisory Software Engineer, IBM
David Leigh é Senior Software Engineer na organização Scenario Analysis Lab do IBM Software Group, localizada no Research Triangle Park, Carolina do Norte. Suas áreas de conhecimento incluem o IBM WebSphere Process Choreographer, segurança de aplicativo e servidor, alta disponibilidade, monitoramento, IBM AIX® e Linux®.
Zeynep Latif, Software Engineer, IBM
Zeynep Latif é Software Engineer na organização Scenario Analysis Lab do IBM Software Group, localizada no Research Triangle Park, Carolina do Norte. Suas áreas de conhecimento incluem portlet e desenvolvimento de aplicativo J2EE, IBM Rational Application Developer e IBM Rational Software Architect para designa de aplicativo.

Resumo:  Incompatibilidades entre diferentes versões as especificações Web Services Security evitam que um cliente Java™ Platform, Enterprise Edition (J2EE) 1.3 se comunique com um provedor de serviços da Web J2EE 1.4 quando WS-Security é necessário. Este artigo, Parte 3 de uma série, descreve como usar um EJB como um proxy para superar esse problema de interoperabilidade. Aplicativos de amostra são fornecidos.

Visualizar mais conteúdo nesta série

Data:  16/Set/2011
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  1199 visualizações
Comentários:  


Introdução

Artigos anteriores desta série descrevem o problema de interoperabilidade do nível de especificação WS-Security e ajudam a escolher uma solução alternativa apropriada. Este artigo foca a implementação da solução alternativa de proxy EJB. A abordagem envolve criar um proxy de serviço da Web EJB que age como a cola entre o cliente J2EE 1.3 e o provedor de serviços da Web J2EE 1.4. Em comparação à abordagem de proxy de middleware descrita no artigo anterior desta série, a implementação da abordagem de proxy EJB é um exercício de programação básico. Nenhuma infraestrutura de middleware adicional é necessária se sua camada de middleware de front-end contiver um WebSphere® Application Server, Versão 6.0 ou posterior, ou outro servidor de aplicativo J2EE capaz de suportar aplicativos J2EE 1.4. Além disso, esta abordagem não é tão escalável quanto a abordagem de proxy de middleware, pois requer modificação manual de cada aplicativo cliente J2EE 1.3. A abordagem de proxy EJB descrita neste artigo é mais bem usada quando você precisa de uma solução leve de baixo custo para situações de ambiente de simulação, teste ou prova de conceito.

O esforço necessário para implementar a abordagem de proxy EJB é principalmente trabalho de desenvolvimento de aplicativo, apesar de esta solução alternativa apresentar outro aplicativo que deve ser implementado, protegido e gerenciado pela equipe de operações. Esta abordagem também requer o envolvimento de testadores e da equipe de implementação.

Desenvolvedores de aplicativos que implementam a abordagem de proxy EJB devem ter qualificações básicas de desenvolvimento de J2EE e de serviços da Web.



Este artigo descreve em detalhes como implementar a abordagem de proxy EJB usando um exemplo integralmente implementado que pode ser implementado em seu ambiente A seção Entendendo a solução descreve a abordagem em detalhes. A seção Criando a solução mostra como os aplicativos de amostra fornecidos foram desenvolvidos. A seção Trabalhando com os aplicativos de amostra descreve como customizar e executar os aplicativos de amostra em seu ambiente de tempo de execução.

Entendendo a solução

A solução de amostra supõe que você esteja tentando integrar o seguinte:

  • Um aplicativo provedor de serviços da Web J2EE 1.4 que requer WS-Security
  • Um aplicativo cliente J2EE 1.3 que precisa chamar o provedor de serviços da Web

Consulte a Figura 1 para obter uma visualização detalhada da solução alternativa de proxy EJB de amostra. Na Figura 1, o aplicativo cliente, que é um servlet J2EE 1.3, se comunica com um aplicativo proxy J2EE 1.4 EJB usando RMI/IIOP. Em seguida, o aplicativo proxy EJB se comunica com o aplicativo provedor de serviços da Web usando serviços da Web e a versão WS-Security versão 1.0. Observe que o aplicativo cliente poderia ser um servlet J2EE 1.3, um portlet J2EE 1.3 ou qualquer outro aplicativo cliente que não possa se comunicar usando a especificação WS-Security versão 1.0.


Figura 1. Componentes da solução EJBProxy

As tarefas e produtos necessários para criar a solução são mostrados na Tabela 1.


Tabela 1. Tarefas e produtos necessários para criar a solução
Tarefas Ambiente Funções responsáveis
1. Criar um aplicativo proxy EJB J2EE 1.4, incluindo os artefatos a seguir dentro de um único projeto EJB J2EE 1.4:
  • Um bean de sessão J2EE 1.4
  • Um proxy de cliente de serviço da Web J2EE 1.4
Rational® Application DeveloperDesenvolvedor de aplicativos
2. Se necessário, criar uma biblioteca compartilhada que contenha arquivos de classe usados no serviço da Web. Rational Application DeveloperDesenvolvedor de aplicativos
3. Integrar o aplicativo cliente J2EE 1.3 ao bean de sessão EJB J2EE 1.4.Rational Application DeveloperDesenvolvedor de aplicativos
4. Integrar o bean de sessão EJB ao proxy de cliente de serviço da Web J2EE 1.4. Rational Application DeveloperDesenvolvedor de aplicativos
5. Configurar o aplicativo proxy EJB para WS-Security.Rational Application DeveloperDesenvolvedor de aplicativos
6. Empacotar a solução.Rational Application DeveloperDesenvolvedor de aplicativos
7. Implementar e realizar teste de unidade da solução no tempo de execução.WebSphere Application ServerImplementador e engenheiro de teste

A implementação da Tarefa 1 envolve o uso de assistentes apropriados no Rational Application Developer para criar um bean de sessão em um proxy de cliente de serviço da Web. Um exemplo detalhado disso pode ser localizado na seção Criando a solução .

A implementação da Tarefa 2 depende dos requisitos do aplicativo. Se sua interface de serviço da Web incluir tipos de objetos complexos, é necessário criar uma biblioteca compartilhada para permitir que esses objetos complexos sejam passados entre o aplicativo cliente e o aplicativo proxy EJB. Como o aplicativo cliente J2EE 1.3 e o proxy EJB se comunicam usando RMI, essas classes de objeto devem ser serializáveis, o que significa que devem implementar a interface java.io.Serializable . É possível criar as classes de dados complexos que implementam a interface java.io.Serializable usando opções apropriadas de geração de códigos de serviços da Web no Rational Application Developer.

A Tarefa 4 requer a criação de pacotes implementáveis para os seguintes aplicativos:

  • O aplicativo cliente. O reempacotamento desse aplicativo é necessário, pois ele é atualizado para se integrar ao aplicativo proxy EJB. O aplicativo cliente também pode precisar incluir um arquivo JAR para uma biblioteca compartilhada, se usada.
  • O aplicativo proxy EJB. Esse aplicativo deve ser empacotado como um arquivo EAR e também pode incluir um arquivo JAR para a biblioteca compartilhada, se usada.

A implementação da solução conforme fornecida na Tarefa 7 requer que os seguintes aplicativos sejam implementados:

  • O aplicativo cliente
  • O aplicativo proxy EJB
  • O aplicativo provedor de serviços da Web inalterado

Criando a solução

Esta seção descreve como criar um proxy EJB adequado que pode ser usado para integrar seus aplicativos cliente e provedor. Os fragmentos de código abaixo são obtidos dos aplicativos de amostra. São fornecidos para que seja possível ver como aplicar essa abordagem a seus próprios aplicativos. A Tabela 2 ilustra as tarefas necessárias.


Tabela 2. Etapas e produtos necessários para criar a solução
Tarefas Etapas Tipo de aplicativo Ambiente Funções responsáveis
1. Criar um aplicativo proxy EJB J2EE 1.4, incluindo os artefatos a seguir dentro de um único projeto EJB J2EE 1.4, como o EJBProxy:
  • Um bean de sessão J2EE 1.4
  • Um proxy de cliente de serviço da Web J2EE 1.4
  1. Execute estas etapas para criar um bean de sessão J2EE 1.4:
    1. Crie um projeto EJB com um projeto JAR de cliente EJB.
    2. Crie um bean de sessão EJB no projeto EJB, como DefaultSessionBean.
    3. Crie um método do bean de sessão EJB, como public SampleOperationResponse makeWebservicesCall(String inputString).
  2. Crie o cliente de serviços da Web J2EE 1.4 no projeto EJB.
Proxy EJB Rational Application Developer Desenvolvedor de aplicativos
2. Se necessário, criar uma biblioteca compartilhada que contenha arquivos de classe usados no serviço da Web. Execute estas etapas para criar a biblioteca compartilhada:
  1. Crie um projeto Java.
  2. Mova as classes do cliente de serviços da Web J2EE1.4 criadas no projeto EJB para o projeto Java.
Proxy EJB, aplicativo clienteRational Application DeveloperDesenvolvedor de aplicativos
3. Integrar o aplicativo cliente J2EE 1.3 ao bean de sessão EJB J2EE 1.4.Atualize o aplicativo cliente para fazer chamadas EJB.Aplicativo clienteRational Application DeveloperDesenvolvedor de aplicativos
4. Integrar o bean de sessão EJB ao proxy de cliente de serviço da Web.Atualize o método do bean de sessão EJB, public SampleOperationResponse makeWebservicesCall(String inputString), para fazer as chamadas de serviços da Web. Proxy EJBRational Application DeveloperDesenvolvedor de aplicativos
5. Configurar o aplicativo proxy EJB para WS-Security.Configure o aplicativo proxy EJB para segurança.Proxy EJBRational Application DeveloperImplementador
6. Empacotar a solução.Crie pacotes para os seguintes aplicativos da solução:
  • Aplicativo cliente
  • Proxy EJB
  • Provedor de serviços da Web
Aplicativo cliente, proxy EJB, provedor de serviços da WebRational Application DeveloperImplementador
7. Implementar e testar a solução durante o tempo de execução.Implemente e teste os aplicativos da solução empacotados no ambiente de tempo de execução Aplicativo cliente, proxy EJB, provedor de serviços da WebWebSphere Application ServerImplementador e engenheiro de teste

Tarefa 1. Criando o aplicativo proxy EJB

Para implementar esta etapa:

  1. As operações EJB são mostradas na Tabela 2. Consulte Recursos para links para explicações detalhadas da implementação das operações relacionadas a EJB necessárias.
  2. A seguir é mostrado o básico para criar um cliente de serviço da Web. Consulte as seções Visão geral da solução e Recursos para links para explicações detalhadas das operações relacionadas ao cliente de serviços da Web.
    • Chame o Web Service Client Wizard no Rational Application Developer.
    • Selecione Java proxy como um tipo de cliente e insira um URI para um WSDL na Web Service Selection Page.
    • Na Client Environment Configuration Page, selecione a versão de J2EE como 1.4 e EJB como um tipo de cliente, juntamente com um projeto de cliente e um projeto EAR.

Tarefa 2. Criando uma biblioteca compartilhada

Você está pronto para mover as classes do cliente de serviço da Web J2EE 1.4 após concluir a Tarefa 1 e criar um projeto Java. Consulte a seção Recursos para obter explicações detalhadas para implementar esta etapa. As classes do cliente de serviço da Web geradas estão localizadas em uma pasta determinada pelo namespace de destino do serviço da Web. Segue uma lista de arquivos a serem movidos:

  • Uma classe Java para cada tipo de dados complexo. O nome da classe relacionada do aplicativo de amostra é SampleOperationResponse.
  • Um serializador, um desserializador e uma classe auxiliar para cada tipo de dados complexo, *_Ser, *_Deser e *_Helper. Nomes de classes relacionadas do aplicativo de amostra são SampleOperationResponse_Ser, SampleOperationResponse_Deser e SampleOperationResponse_Helper.
  • Um proxy de cliente e stubs do lado do cliente *_PortTypeProxy e *SOAPStub. Nomes de classes relacionadas do aplicativo de amostra são SampleOperationResponse_PortTypeProxy e SampleServiceSOAPStub.
  • Uma interface e uma classe de implementação para o localizador do servidor do lado do cliente *_Service e *_ServiceLocator. Nomes de classes relacionadas do aplicativo de amostra são SampleService_Service e SampleService_ServiceLocator.
  • Classes de extensão específicas do WebSphere *_ServiceInformation. O nome da classe relacionada do aplicativo de amostra é SampleService_ServiceInformation.

A Figura 2 mostra os arquivos que foram relocalizados para o aplicativo de amostra.


Figura 2. Arquivos relocalizados

Mover as classes do cliente de serviço da Web resulta em erros de compilação, pois os arquivos J2EE.jar e webservices.jar não estão no caminho de criação Java do projeto Java inicialmente. Uma biblioteca apropriada, que inclui os arquivos J2EE.jar e webservices.jar, é incluída no caminho de criação Java do projeto Java após você concluir a Tarefa 4. Empacotando os aplicativos da solução.

Tarefa 3. Chamando o aplicativo proxy EJB a partir do aplicativo cliente

Você está pronto para executar esta etapa após concluir a Tarefa 1 e a Tarefa 2 da Tabela 2. Esta seção explica as atualizações necessárias para o aplicativo cliente para chamar o proxy EJB que, por sua vez, chama o provedor de serviços da Web.

  1. Inclua um método que seja responsável por fazer a chamada proxy EJB e retornar um objeto complexo. O aplicativo de amostra usar a classe Java EJBAccessBean como parte do aplicativo servlet e usa o método public SampleOperationResponse ejbCall(String inputString) para fazer a chamada proxy EJB. A EJBAccessBean está localizada no projeto SampleClient.

    Listagem 1. Método de servlet de amostra fazendo uma chamada EJB
    
    /**
    * Step 1. Add required imports
    **/
    
    package test.bean;
    
        import java.util.Hashtable;
        import javax.naming.Context;
        import javax.naming.InitialContext;
        import javax.rmi.PortableRemoteObject;
    
        import com.test.SampleOperationResponse;
        import ejbs.DefaultSession;
        import ejbs.DefaultSessionHome;
        ...
    
        public SampleOperationResponse ejbCall(String inputString)
        {
            //Enterprise Bean name is: DefaultSession
            DefaultSession sampleProxy = null;
            Hashtable env = new Hashtable();
            SampleOperationResponse responseObj = null;
    
            try {
            
                /** 
                * Step 2. Set the following JNDI environment properties in the 
                *         initial context constructor and get the initial context.
                * i. java.naming.provider.url (provider URL) property that specifies the 
                *       location of the registry. 
                * ii.java.naming.factory.initial which specifies the class name of the 
                *       initial context factory for the registry service provider. 
                **/
            
                env.put(Context.INITIAL_CONTEXT_FACTORY, 
                    "com.ibm.websphere.naming.WsnInitialContextFactory");
                env.put(Context.PROVIDER_URL, "corbaloc::localhost:2809");
    
                InitialContext initialContext = new InitialContext(env);  
                ...		
    
            
                /**
                * Step 3. Perform the lookup
                **/
            
                String jndiName = "ejb/ejbs/DefaultSessionHome";	        
                Object ejbObj = initialContext.lookup(jndiName); 
                ...	        
    
            
                /**
                * Step 4. Get the home interface for the EJB Proxy: DefaultSession.  
                **/
            
                DefaultSessionHome home = (DefaultSessionHome) PortableRemoteObject
                                            .narrow(ejbObj, DefaultSessionHome.class);
                ...
    
            
                /**
                * Step 5. Obtain the remote reference for the EJB Proxy: DefaultSession.
                **/	        
            
                sampleProxy = home.create();
                ...
            
                /**
                * Step 6. Invoke and work with the remote EJB method, 
              * makeWebservicesCall(String inputString, OtherMethodParameters parameters)
                **/	        
            
                responseObj = sampleProxy.makeWebServicesCall(inputString);
                ...
            }
            catch(Exception e)
            {
                System.out.println("EJBAccessBean::ejbCall() -> Caught an error with 
                                            following reason: " + e.getMessage());
            }
    
            return responseObj;
        }
    
    

    Como os aplicativos cliente e proxy EJB podem não residir no mesmo contêiner do servidor de aplicativos, conforme mostrado na Figura 1, propriedades de contexto padrão não podem ser usadas para consultar a interface inicial do bean de sessão EJB.

  2. O fragmento de código em negrito na Listagem 2 ilustra a segunda atualização para chamar o método public SampleOperationResponse ejbCall(String inputString) , que faz a chamada EJB e retorna o objeto complexo SampleOperationResponse no aplicativo cliente de amostra public class SampleServlet2_3. O public class SampleServlet2_3 também está localizado no projeto SampleClient.

    Listagem 2. Chamando a chamada proxy EJB
    ...
    import com.test.SampleOperationResponse;
    import test.bean.EJBAccessBean;
    ...
    
    public class SampleServlet2_3 extends HttpServlet implements Servlet 
    {
        ...
    
        protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws 
                                                    ServletException, IOException 
        { 
            ...
            displayInputPage(arg0, arg1);
            ...
        } 
        ... 
     
        protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws 
                                                    ServletException, IOException 
        {  
            ...
            String inputValue = (String)arg0.getParameter("inputText");
            if (inputValue != null)
            {   
                ...
            
                EJBAccessBean accessBean = new EJBAccessBean();
                SampleOperationResponse responseObj = accessBean.ejbCall(inputValue); 
                ...
            }
            ...
        }
        ...
    }
                         

A próxima etapa da criação da solução é atualizar o bean de sessão no projeto EJB para chamar o provedor de serviços da Web usando a classe proxy do cliente de serviços da Web gerada.

Tarefa 4. Chamando o aplicativo provedor de serviços da Web a partir do bean de sessão EJB

O fragmento de código mostrado na Listagem 3 mostra o método do método do bean EJB public SampleOperationResponse makeWebservicesCall(String inputString), que foi criado na Tarefa 1 a partir da Tabela 2. Esse método chama o provedor de serviços da Web usando a classe de proxy de cliente de serviço da Web SampleService_PortTypeProxy e retorna um objeto complexo, SampleOperationResponse, a seu responsável pela chamada. O bean de sessão EJB public class DefaultSessionBean está localizado no projeto EJBProxy.


Listagem 3. Chamando um provedor de serviços da Web

            /**
            * Step 1. Add required imports
            **/
            import com.test.SampleOperationResponse;
            import com.test.SampleService_PortTypeProxy;
            ...

            
            /**
            * Step 2. This sample EJB method accepts a String as a method parameter, which
            * will be provided by the servlet. 
            * This method passes its method parameter to the to the Web service provider
            * and returns a SampleOperationResponse type of complex object to the 
            * servlet.
            **/ 

            public SampleOperationResponse makeWebServicesCall(String inputString)
            {                
                
                /**
                * Step 3. Instantiate the Web service proxy class 
                * SampleService_PortTypeProxy, and invoke the Web service operation 
                * sampleOperation(inputString)
                **/

                SampleService_PortTypeProxy sampleServiceProxy = 
                            new SampleService_PortTypeProxy();	
                
                SampleOperationResponse response = null;
		
                try
                {
                    response = sampleServiceProxy.sampleOperation(inputString);
			
                }
                else
                    System.out.println("DefaultSessionBean::makeWebServicesCall() -> 
                        Response String is Null");
                }
                catch(Exception e)
                {
                    System.out.println("DefaultSessionBean::makeWebServicesCall() -> 
                        An error caught with the following reason" + e.getMessage());
                }
		
                return response;
            }
        

A Figura 3 mostra o diagrama de sequência para visualizar como o aplicativo cliente chama o provedor de serviços da Web por meio do proxy EJB.


Figura 3. Diagrama de sequência para chamar o provedor de serviços da Web J2EE 1.4 a partir do servlet J2EE 1.3

Tarefa 5. Configurando o aplicativo proxy EJB para WS-Security

Consulte Recursos para obter explicações detalhadas para implementar esta etapa.

Tarefa 6. Empacotando os aplicativos da solução

Esta seção descreve como empacotar os componentes da solução criando no ambiente do Rational Application Developer.

  1. Empacotar o aplicativo cliente.

    Os arquivos JAR dependentes a seguir devem ser empacotados com o aplicativo cliente:

    • O arquivo JAR o cliente EJB. Esse arquivo JAR do cliente foi gerado por padrão pelo conjunto de ferramentas quando o aplicativo proxy EJB foi criado (consulte a Tarefa 1 na Tabela 2).
    • O arquivo JAR que contém a biblioteca compartilhada.

    Seguem as tarefas necessárias para empacotar o servlet, que é usado como o aplicativo cliente no exemplo deste artigo:

    1. No projeto ServletEAR, abra o arquivo META-INF/application.xml e clique na guia Module .
    2. Abra a seção Project Utility JARs e selecione o projeto do cliente EJB. Em seguida, selecione o projeto Java da biblioteca compartilhada. Esta etapa inclui dois arquivos JAR em Project Utility JARs: os JARs do cliente EJB e o JAR da biblioteca compartilhada.
    3. Acesse o projeto da Web, destaque-o e clique no mesmo com o botão direito do mouse. Acesse Properties > Java Jar Dependencies.
    4. Na tela Java Jar Dependencies, selecione o projeto de cliente EJB. Em seguida, selecione o projeto Java da biblioteca compartilhada a ser incluído em Java Jar Dependencies.
    5. Clique em OK.
    6. No projeto da Web, abra o arquivo WebContent/WEB-INF/web.xml e clique na guia Overview .
    7. Acesse o espiral Web Library Projects e inclua o projeto de cliente EJB. Em seguida, inclua o projeto Java da biblioteca compartilhada a ser incluído em Web Library Projects.
  2. Empacotar o cliente EJB.

    O projeto de cliente EJB precisa ter conhecimento das classes de serviço da Web em um arquivo JAR dependente, portanto, o arquivo JAR que contém a biblioteca compartilhada precisa ser configurado. As etapas a seguir mostram um exemplo.

    1. Acesse o projeto de cliente EJB, destaque-o e clique no mesmo com o botão direito do mouse. Acesse Properties > Java Jar Dependencies.
    2. Na tela Java Jar Dependencies , selecione o projeto para a biblioteca compartilhada.
    3. Clique em OK.
    4. O arquivo do cliente EJB é incluído no EAR do aplicativo cliente e no EAR do proxy EJB.
  3. Empacotar o proxy EJB.

    O projeto EJB para o aplicativo proxy EJB também precisa ter conhecimento das classes de serviço da Web em um arquivo JAR dependente.

    1. No projeto EAR de proxy EJB, abra o arquivo META-INF/application.xml e clique na guia Module .
    2. Abra a seção Project Utility JARs e selecione o projeto Java da biblioteca compartilhada que inclui os arquivos de classe de serviço da Web. Esta etapa inclui dois arquivos JAR em Project Utility JARs: o JAR do cliente EJB e o JAR da biblioteca compartilhada.
    3. Acesse o projeto EJB, destaque-o e clique no mesmo com o botão direito do mouse. Acesse Properties > Java Jar Dependencies.
    4. Na tela Java Jar Dependencies, selecione o projeto Java da biblioteca compartilhada a ser incluído em Java Jar Dependencies.
    5. Clique em OK.

Os aplicativos agora estão prontos para implementação e teste.

Tarefa 7. Implementando e testando a solução

Consulte Recursos para links para explicações detalhadas para implementar esta etapa.


Trabalhando com os aplicativos de amostra

Esta seção explica como implementar os aplicativos de amostra completamente implementado em seu ambiente de tempo de execução. Para implementar as amostras, é necessário ter:

  • WebSphere Application Server, Versão 5.0.x ou posterior para executar o aplicativo cliente.
  • WebSphere Application Server, Versão 6.0.x ou posterior para executar o aplicativo proxy EJB e o aplicativo provedor de serviços da Web.

Esses ambientes de tempo de execução devem ser configurados para usar segurança global e devem ser configurados para usar autenticação LTPA com a mesma chave LTPA.

A primeira etapa para trabalhar com o aplicativo de amostra é fazer download dos arquivos fornecidos na seção Download . Os arquivos são:

  • SampleProjects.zip, que inclui código de origem dos aplicativos de amostra
  • SampleService.ear, que é o archive implementável para o aplicativo provedor de serviços da Web
  • EJBProxy.ear, que é o archive implementável para o aplicativo proxy EJB
  • SampleClient.ear, que é o archive implementável para o aplicativo cliente

Os aplicativos de amostra fornecidos para este artigo são intencionalmente simples para manter o foco no entendimento da solução proxy EJB. Os aplicativos de amostra seguem o padrão de design Model-View-Controller (MVC), com as seguintes características:

  • O aplicativo provedor de serviços da Web de amostra constitui a camada de modelo da solução. Ele contém um componente EJB e um componente de serviço da Web. O serviço da Web fornece a operação sampleOperation(inputString) . Essa operação pega um valor String na camada do controlador e retorna um objeto do tipo SampleOperationResponse complexo. Esse tipo de dados contém o seguinte:
    • String serviceResponseString. O serviço da Web coloca o valor de inputString nessa cadeia de caractere de resposta.
    • String serviceUserName. O componente EJB do serviço da Web insere o nome de usuário contido no contexto de segurança atual nessa cadeia de caractere de resposta.
  • O aplicativo cliente de amostra constitui a camada de controlador da solução. Contém um servlet J2EE 1.3 que implementa a especificação do servlet 2.3. O aplicativo cliente de amostra faz o seguinte:
    • Exibe uma página de entrada para um usuário para fornecer uma cadeia de caractere.
    • Chama o aplicativo proxy EJB usando a cadeia de caractere fornecida como o valor inputString .
    • Exibe a chamada proxy EJB resultante na página de saída mostrada na Figura 5.
  • O aplicativo proxy EJB de amostra faz parte da camada de modelo e contém um bean de sessão EJB. O aplicativo proxy EJB faz o seguinte:
    1. Aceita a cadeia de caractere de entrada inputString que o aplicativo cliente fornece.
    2. Chama a classe de proxy de serviços da Web SampleService_PortTypeProxy, que, por sua vez, passa a cadeia de caractere de entrada ao provedor de serviços da Web usando a operação sampleOperation(inputString) . Essa operação é fornecida pela classe SampleService_PortTypeProxy . Em resposta, o proxy recebe um objeto de tipo de dados SampleOperationResponse .
    3. Obtém uma instância do objeto complexo SampleOperationResponse.
    4. Retorna a instância do objeto complexo ao aplicativo cliente, que exibe os atributos do objeto na página de saída conforme mostrado na Figura 5.
  • O aplicativo provedor de serviços da Web de amostra está configurado para usar WS-Security com um token Lightweight Third Party Authentication (LTPA). Tokens LTPA são uma maneira de propagar identidade do usuário de um cliente para um provedor de serviços da Web. Ao retornar e exibir o nome de usuário do contexto de segurança atual, conforme visto no aplicativo provedor de serviços, essas operações de amostra podem validar se o aplicativo cliente J2EE 1.3 é realmente capaz de se comunicar com o provedor de serviços da Web J2EE 1.4.

Agora você está pronto para executar uma das ações a seguir após fazer download dos arquivos fornecidos:

  • Executar os aplicativos de amostra em WebSphere Application Servers remotos, conforme mostrado na Figura 1. Execute as Tarefas 1-6 para customizar e executar os aplicativos de amostra remotamente, conforme a lista a seguir.
  • Executar os aplicativos de amostra localmente no mesmo WebSphere Application Server. Ignore as Tarefas 1-3 e siga as Tarefas 4-6, conforme mostrado na lista a seguir.

As tarefas necessárias para executar os aplicativos de amostra local ou remotamente são as seguintes:

  1. Importar o código de origem dos aplicativos de amostra para uma área de trabalho do Rational Application Developer.
  2. Atualizar os arquivos de origem necessários para refletirem os nomes de hosts de seu ambiente de tempo de execução.
  3. Empacotar os componentes a solução.
  4. Implementar os aplicativos no tempo de execução.
  5. Configurar a segurança no WebSphere Application Server.
  6. Executar os aplicativos de amostra.

A seção a seguir descreve essas tarefas em detalhes.

Tarefa 1. Importando o código de origem dos aplicativos de amostra

O código de origem dos aplicativos de amostra, que são compostos por vários artefatos conforme mostrado na Tabela 3, está contido no arquivo SampleProjects.zip . O recurso de exportação Project Interchange do Rational Application Developer foi usado para exportar o código de origem da solução para o arquivo SampleProjects.zip para que esse código de origem possa ser facilmente importado para outra área de trabalho do Rational Application Developer.

  1. Clique em File > Importe selecione Project Interchange.
  2. Clique em Next. Em seguida, forneça o local do arquivo zip e selecione os projetos fornecidos.

Tabela 3. Lista de artefatos do aplicativo de amostra
Tipo de aplicativo Tipo de projeto Nome do projeto Descrição
Provedor de serviços da WebProjeto EARSampleServiceEAREste projeto inclui o arquivo application.xml .
Provedor de serviços da WebProjeto EJBSampleServiceEJBEste projeto inclui o bean de sessão EJB SampleServiceBean.
Provedor de serviços da WebProjeto JavaSampleServiceEJBClient Este projeto inclui as seguintes classes:
  • Uma interface remota do bean de sessão SampleService
  • Uma interface inicial do bean de sessão SampleServiceHome
  • Uma interface local do bean de sessão SampleServiceLocal
  • Uma interface inicial local do bean de sessão SampleServiceLocalHome
Provedor de serviços da WebProjeto da WebSampleServiceWebEste projeto inclui serviços da Web relacionados a classes, inclusive uma classe Java para o tipo de dados complexo no WSDL a ser transferida para e a partir do serviço SampleOperationResponse.
Proxy EJBProjeto EAREJBProxyEAREste projeto inclui o arquivo application.xml .
Proxy EJBProjeto EJBEJBProxy
  • Classes do cliente de serviço da Web J2EE 1.4:
    • Uma classe Java para o tipo de dados complexo no WSDL a ser transferida para e a partir do serviço SampleOperationResponse
    • Uma classe SampleService_PortTypeProxy de proxy de cliente de serviço da Web
  • Um bean de sessão EJB DefaultSessionBean
Proxy EJBProjeto JavaEJBProxyClient Este projeto inclui as seguintes classes:
  • Uma interface remota do bean de sessão DefaultSession
  • Uma interface inicial do bean de sessão DefaultSessionHome
Proxy EJB e clienteProjeto JavaCommonClasses
  • Este projeto inclui a biblioteca compartilhada na qual as classes de serviço da Web estão localizadas.
ClienteProjeto EARSampleClientEAREste projeto inclui o arquivo application.xml .
ClienteProjeto da WebSampleClient Este projeto inclui dois tipos de classes:
  • Um servlet J2EE 1.3 criado com a especificação Servlet 2.3 SampleServlet2_3
  • Uma classe auxiliar para o servlet EJBAccessBean

Tarefas 2 - 4. Atualizando, empacotando e implementando a solução de amostra no tempo de execução

  1. O código de origem do aplicativo cliente e o proxy EJB devem ser customizados para refletirem os nomes de hosts de seu ambiente de tempo de execução.
    1. Customize o método public SampleOperationResponse ejbCall(String inputString) de EJBAccessBean. Forneça um nome de host onde seu aplicativo proxy EJB está localizado como uma URL de provedor, conforme mostrado na Etapa 2 na Listagem 1.
    2. Forneça um nome de host nos arquivos a seguir. Procure a cadeia de caractere localhost e substitua-a por um nome de host apropriado.
      • A classe do localizador localizou no projeto EJBProxy com.test.SampleService_ServiceLocator.java
      • O arquivo WSDL localizou no diretório META-INF do projeto EJBProxy sampleService.wsdl
    3. Gere novamente as classes de implementação EJB, pois o aplicativo Proxy EJB fornecido não inclui classes de implementação geradas.
      1. Na perspectiva J2EE, acesse o projeto EJBProxy. Em seguida, destaque-o e clique no mesmo com o botão direito do mouse.
      2. Selecione Deploy.
  2. Após customizar os arquivos necessários, você estará pronto para criar pacotes implementáveis para o servlet e os aplicativos EJBProxy usando os projetos SampleClientEAR e EJBProxyEAR. Em seguida, implemente-os e o arquivo SampleService.ear fornecido para o aplicativo provedor de serviços da Web no WebSphere Application Server.

Tarefa 5. Configurando a segurança no WebSphere Application Server

Configure o WebSphere Application Server de forma que o Active Authentication Mechanism esteja configurado para LTPA. Faça isso clicando na opção Security and Global Security usando o console administrativo do WebSphere.

Tarefa 6. Executando a solução de amostra

Você está pronto para executar a solução após customizar e implementar os aplicativos de amostra em seu WebSphere Application Server. As etapas a seguir ilustram como executar a solução de amostra:

  1. Execute o servlet exibido na página de entrada, conforme mostrado na Figura 4. Será solicitado que você autentique no servlet.
  2. Autentique usando qualquer ID de usuário que faça parte do registro usado para segurança global. Forneça uma cadeia de caractere de entrada conforme exibido na página e clique no botão Send .

Figura 4. Página de entrada

O servlet chama o aplicativo proxy EJB com a cadeia de caractere de entrada a ser fornecida ao aplicativo provedor de serviços da Web. Em seguida, exibe o resultado retornado da chamada do aplicativo proxy EJB em uma página de saída, conforme mostrado na Figura 5.


Figura 5. Página de saída

O ID do usuário exibido na página de saída deve ser o mesmo usado para autenticação no servlet. Se esse for o caso, pode estar confiante de que a identidade do usuário do cliente está sendo propagada com sucesso ao aplicativo provedor de serviços da Web usando WS-Security.


Conclusão

Este artigo descreve como usar um proxy EJB para tratar do problema de interoperabilidade do nível de especificação WS-Security. Esta abordagem é mais adequada para situações de ambiente de simulação, teste ou prova de conceito, em que a atualização de aplicativos consumidores de serviços da Web para J2EE 1.4 não é uma opção e em que o custo de configurar um proxy de middleware é proibitivo. Esta abordagem é principalmente um exercício de desenvolvimento de aplicativo direto. Exemplos mostram como lidar com algumas das armadilhas em torno de tipos de mensagens complexos.


Agradecimentos

Os autores gostariam de agradecer Billy Lo e Hyen V Chung por seus comentários e contribuições como revisores técnicos.



Downloads

DescriçãoNomeTamanhoMétodo de download
Sample projects zip fileSampleProjects.zip71KBHTTP
Sample service ear fileSampleService.ear74KBHTTP
Sample EJB proxy ear fileEJBProxy.ear93KBHTTP
Sample client ear fileSampleClient.ear104KBHTTP

Informações sobre métodos de download


Recursos

Aprender

Obter produtos e tecnologias

Discutir

Sobre os autores

David Leigh

David Leigh é Senior Software Engineer na organização Scenario Analysis Lab do IBM Software Group, localizada no Research Triangle Park, Carolina do Norte. Suas áreas de conhecimento incluem o IBM WebSphere Process Choreographer, segurança de aplicativo e servidor, alta disponibilidade, monitoramento, IBM AIX® e Linux®.

Zeynep Latif é Software Engineer na organização Scenario Analysis Lab do IBM Software Group, localizada no Research Triangle Park, Carolina do Norte. Suas áreas de conhecimento incluem portlet e desenvolvimento de aplicativo J2EE, IBM Rational Application Developer e IBM Rational Software Architect para designa de aplicativo.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Tecnologia Java
ArticleID=757458
ArticleTitle=Manejar Desafios de Interoperabilidade da Especificação WS-Security, Parte 3: Usando o Proxy EJB
publish-date=09162011
author1-email=dleigh@us.ibm.com
author1-email-cc=
author2-email=zeynep@us.ibm.com
author2-email-cc=