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.
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:
| 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. | Rational Application Developer | Desenvolvedor de aplicativos |
| 3. Integrar o aplicativo cliente J2EE 1.3 ao bean de sessão EJB J2EE 1.4. | Rational Application Developer | Desenvolvedor de aplicativos |
| 4. Integrar o bean de sessão EJB ao proxy de cliente de serviço da Web J2EE 1.4. | Rational Application Developer | Desenvolvedor de aplicativos |
| 5. Configurar o aplicativo proxy EJB para WS-Security. | Rational Application Developer | Desenvolvedor de aplicativos |
| 6. Empacotar a solução. | Rational Application Developer | Desenvolvedor de aplicativos |
| 7. Implementar e realizar teste de unidade da solução no tempo de execução. | WebSphere Application Server | Implementador 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
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:
|
| 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:
| Proxy EJB, aplicativo cliente | Rational Application Developer | Desenvolvedor 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 cliente | Rational Application Developer | Desenvolvedor 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 EJB | Rational Application Developer | Desenvolvedor de aplicativos |
| 5. Configurar o aplicativo proxy EJB para WS-Security. | Configure o aplicativo proxy EJB para segurança. | Proxy EJB | Rational Application Developer | Implementador |
| 6. Empacotar a solução. | Crie pacotes para os seguintes aplicativos da solução:
| Aplicativo cliente, proxy EJB, provedor de serviços da Web | Rational Application Developer | Implementador |
| 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 Web | WebSphere Application Server | Implementador e engenheiro de teste |
Tarefa 1. Criando o aplicativo proxy EJB
Para implementar esta etapa:
- 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.
- 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, *_Desere*_Helper. Nomes de classes relacionadas do aplicativo de amostra sãoSampleOperationResponse_Ser, SampleOperationResponse_DesereSampleOperationResponse_Helper. - Um proxy de cliente e stubs do lado do cliente
*_PortTypeProxye*SOAPStub. Nomes de classes relacionadas do aplicativo de amostra sãoSampleOperationResponse_PortTypeProxyeSampleServiceSOAPStub. - Uma interface e uma classe de implementação para o localizador do servidor do
lado do cliente
*_Servicee*_ServiceLocator. Nomes de classes relacionadas do aplicativo de amostra sãoSampleService_ServiceeSampleService_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.
- 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
EJBAccessBeancomo parte do aplicativo servlet e usa o métodopublic SampleOperationResponse ejbCall(String inputString)para fazer a chamada proxy EJB. AEJBAccessBeanestá 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.
- 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 complexoSampleOperationResponseno aplicativo cliente de amostrapublic class SampleServlet2_3. Opublic class SampleServlet2_3també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.
- 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:
- No
projeto ServletEAR, abra o arquivo
META-INF/application.xmle clique na guia Module . - 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.
- Acesse o projeto da Web, destaque-o e clique no mesmo com o botão direito do mouse. Acesse Properties > Java Jar Dependencies.
- 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.
- Clique em OK.
- No projeto da Web, abra o arquivo
WebContent/WEB-INF/web.xmle clique na guia Overview . - 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.
- 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.
- Acesse o projeto de cliente EJB, destaque-o e clique no mesmo com o botão direito do mouse. Acesse Properties > Java Jar Dependencies.
- Na tela Java Jar Dependencies , selecione o projeto para a biblioteca compartilhada.
- Clique em OK.
- O arquivo do cliente EJB é incluído no EAR do aplicativo cliente e no EAR do proxy EJB.
- 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.
- No
projeto EAR de proxy EJB, abra o arquivo
META-INF/application.xmle clique na guia Module . - 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.
- Acesse o projeto EJB, destaque-o e clique no mesmo com o botão direito do mouse. Acesse Properties > Java Jar Dependencies.
- Na tela Java Jar Dependencies, selecione o projeto Java da biblioteca compartilhada a ser incluído em Java Jar Dependencies.
- Clique em OK.
- No
projeto EAR de proxy EJB, abra o arquivo
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 tipoSampleOperationResponsecomplexo. Esse tipo de dados contém o seguinte:String serviceResponseString. O serviço da Web coloca o valor deinputStringnessa 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:
- Aceita a
cadeia de caractere de entrada
inputStringque o aplicativo cliente fornece. - 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çãosampleOperation(inputString). Essa operação é fornecida pela classeSampleService_PortTypeProxy. Em resposta, o proxy recebe um objeto de tipo de dadosSampleOperationResponse. - Obtém uma
instância do objeto complexo
SampleOperationResponse. - 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.
- Aceita a
cadeia de caractere de entrada
- 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:
- Importar o código de origem dos aplicativos de amostra para uma área de trabalho do Rational Application Developer.
- Atualizar os arquivos de origem necessários para refletirem os nomes de hosts de seu ambiente de tempo de execução.
- Empacotar os componentes a solução.
- Implementar os aplicativos no tempo de execução.
- Configurar a segurança no WebSphere Application Server.
- 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.
- Clique em File > Importe selecione Project Interchange.
- 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 Web | Projeto EAR | SampleServiceEAR | Este projeto inclui o arquivo application.xml
. |
| Provedor de serviços da Web | Projeto EJB | SampleServiceEJB | Este projeto inclui o bean de sessão EJB
SampleServiceBean. |
| Provedor de serviços da Web | Projeto Java | SampleServiceEJBClient | Este projeto inclui as seguintes classes:
|
| Provedor de serviços da Web | Projeto da Web | SampleServiceWeb | Este 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 EJB | Projeto EAR | EJBProxyEAR | Este projeto inclui o arquivo application.xml
. |
| Proxy EJB | Projeto EJB | EJBProxy |
|
| Proxy EJB | Projeto Java | EJBProxyClient | Este projeto inclui as seguintes classes:
|
| Proxy EJB e cliente | Projeto Java | CommonClasses |
|
| Cliente | Projeto EAR | SampleClientEAR | Este projeto inclui o arquivo application.xml
. |
| Cliente | Projeto da Web | SampleClient | Este projeto inclui dois tipos de classes:
|
Tarefas 2 - 4. Atualizando, empacotando e implementando a solução de amostra no tempo de execução
- 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.
- Customize o método
public SampleOperationResponse ejbCall(String inputString)deEJBAccessBean. 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. - 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
- A classe do localizador localizou no projeto
EJBProxy
- Gere
novamente as classes de implementação EJB, pois o aplicativo Proxy EJB
fornecido não inclui classes de implementação geradas.
- Na perspectiva J2EE, acesse o projeto EJBProxy. Em seguida, destaque-o e clique no mesmo com o botão direito do mouse.
- Selecione Deploy.
- Customize o método
- 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:
- Execute o servlet exibido na página de entrada, conforme mostrado na Figura 4. Será solicitado que você autentique no servlet.
- 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.
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.
Os autores gostariam de agradecer Billy Lo e Hyen V Chung por seus comentários e contribuições como revisores técnicos.
| Descrição | Nome | Tamanho | Método de download |
|---|---|---|---|
| Sample projects zip file | SampleProjects.zip | 71KB | HTTP |
| Sample service ear file | SampleService.ear | 74KB | HTTP |
| Sample EJB proxy ear file | EJBProxy.ear | 93KB | HTTP |
| Sample client ear file | SampleClient.ear | 104KB | HTTP |
Informações sobre métodos de download
Aprender
- Use um feed RSS para solicitar a notificação com relação aos artigos futuros desta
série. (Descubra mais sobre feeds
RSS do conteúdo do developerWorks.)
- Visite o WebSphere Application Server Information
Center para obter informações rápidas e centralizadas sobre:
- Conceitos de EJB
- Implementação de arquivos EAR
- Serviços da Web e conceitos de segurança
- Confira WebSphere Version 6 Web Services Handbook
Development and Deployment para obter informações rápidas e centralizadas
sobre conceitos e recursos do aplicativo de serviços da Web.
- Consulte Web services security with WebSphere
Application Server Version 6--Part 4 para obter informações sobre como
proteger um serviço da Web usando tokens lightweight third party authentication
(LTPA).
- Visite o centro de informações do Rational
Application Developer, que fornece informações sobre:
- Conceitos do ambiente de desenvolvimento integrado Java
- Desenvolvimento e conceitos de EJB
- Desenvolvimento e conceitos de serviços da Web
- Acesse a página de portal do WebSphere no
developerWorks para obter informações sobre aplicativos WebSphere
Portal.
- Consulte o artigo Developing a portlet which accesses an
enterprise bean (developerWorks, setembro de 2004), que explica como criar
uma chamada de bean de sessão stateless a partir de um portlet.
- A zona de serviços da Web e SOA no IBM
developerWorks hospeda centenas de artigos informativos e tutoriais introdutórios,
intermediários e avançados sobre como desenvolver aplicativos de serviços da
Web.
- O Web site do IBM SOA oferece uma visão
geral de SOA e como a IBM pode ajudá-lo a chegar lá.
- Fique por dentro dos eventos técnicos e webcasts do
developerWorks. Consulte especialmente os resumos de instruções técnicas
sobre SOA e serviços da Web:
- Get started on SOA with WebSphere's proven, flexible entry points
- Building SOA solutions and managing the service lifecycle
- SCA/SDO: To drive the next generation of SOA
- SOA reuse and connectivity
- Procure livros sobre estes e outros tópicos técnicos
na Safari bookstore.
Obter produtos e tecnologias
- Inove em seu próximo projeto
de desenvolvimento com o software de avaliação da IBM, disponível
para download ou em DVD.
Discutir
- Participar do fórum de discussão.
- Participe da comunidade do developerWorks
participando dos blogs do developerWorks.

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.