Esse artigo faz parte da revista Java Magazine edição 20. Clique aqui para ler todos os artigos desta edição

jm20_capa.jpg

Clique aqui para ler esse artigo em PDF.imagem_pdf.jpg

EJBs a Serviço

Exponha Session Beans como Web Services

 

Aprenda como disponibilizar um Enterprise JavaBean existente como um serviço web e acessá-lo de outras linguagens e plataformas

 

Uma das grandes novidades da especificação EJB 2.1 foi o suporte a web services. Com a nova versão EJBs podem ser expostos como web services, tornando-se acessíveis via SOAP (Simple Object Access Protocol) por clientes de outras plataformas ou tecnologias. Este artigo mostra como alterar um EJB paraque possa ser acessado como web service e como acessar o serviço exposto usando um cliente escrito em outra linguagem.

 

Instalando o J2EE SDK 1.4

 

Para executar os exemplos vamos precisar de um servidor de aplicações que suporte J2EE 1.4. O J2EE SDK 1.4 da Sun vem com um servidor gratuito aderente ao padrão J2EE 1.4. Após o download desse SDK (veja links), execute o arquivo e siga os passos na tela (Figura 1). A senha solicitada no passo seguinte será usada para acessar a interface administrativa do servidor, e uma tela final de confirmação indica que a instalação foi bem sucedida.

 

Figura 1. Instalação do J2EE SDK 1.4: tela inicial e especificação da senha da interface administrativa

 

 

Iniciando o servidor

 

O servidor pode ser iniciado através do utilitário asadmin, localizado no diretório

 

bin do servidor:

 

C:\Sun\AppServer\bin>asadmin

Use “exit” to exit and “help” for online help.

 

asadmin> start-domain

Starting Domain domain1, please wait.

Log redirected to

   C:\Sun\AppServer\domains\domain1\logs\server.log.

Domain domain1 started.

 

Após iniciar o servidor, a interface administrativa pode ser acessada via browser em http://localhost: 4848/admin (veja a Figura 2). É necessário autenticar-se com o nome de usuário e senha especificados na instalação.

 

Figura 2. Interface administrativa do servidor do J2EE SDK 1.4

 

 

Criação e deploy do EJB

 

Criaremos um EJB simples para depois expô-lo como um web service. O bean terá dois métodos:

double celsiusToFarenheit(double celsius);

double farenheitToCelsius(double farenheit);

 

As Listagens 1, 2 e 3 mostram as interfaces remota e home, além da classe de implementação do bean. Os descritores de deployment (padrão e proprietário) estão nas Listagens 4 e 5. Esses cinco fontes são empacotados num arquivo bean.jar, respeitando a estrutura apresentada na Figura 3.

O deploy do EJB pode ser feito com um assistente chamado via o comando Applications>EJB Modules da interface administrativa do servidor (Figura 4).

 

 

Figura 3. Módulo EJB de exemplo

 

Figura 4. Deployment do EJB

 

Mapeamento Java/WSDL

Para que uma interface remota de um session bean stateless possa ser mapeada para WSDL, ela pode conter somente os seguintes tipos Java:

?Tipos primitivos: boolean, byte, short, int, long, float, double.

?Classes do J2SE: java.lang.String,java. util.Date, java.util.Calendar, java.math. BigInteger, java.math.BigDecimal, javax.xml. namespace.QName, java.net.URI (e somente estas).

?Arrays formados por qualquer tipo acima.

?Exceções, exceto as derivadas de RuntimeException.

?JavaBeans, desde que todas as variáveis de instância dessejam dos tipos acima.

 

 

 

Expondo como um web service

 

A especificação EJB 2.1 estabelece que um session bean stateless pode ser acessado de três maneiras:

·          Localmente – uma classe acessa o EJB usando uma referência comum; para isso o cliente deve estar na mesma JVM que o EJB. Na prática, esse tipo de acesso é realizado entre dois EJBs.  

·         Remotamente – uma classe que está em outra JVM acessa o EJB; nesse caso, ocorre serialização. O acesso é feito usando o protocolo RMI sobre IIOP.

·         Como web service – o acesso é feito através do protocolo SOAP, usando HTTP para o transporte; este tipo de acesso é suportado a partir da especificação EJB 2.1.

 

Para que um EJB possa ser exposto como um web service, ele deve ser um stateless session bean. Além disso, é preciso:

 

·         Definir uma interface que estenda java.rmi.Remote contendo os métodos a serem expostos no web service. Esta interface é conhecida como Web Service Endpoint Interface (WSEI).

...

Quer ler esse conteúdo completo? Tenha acesso completo