Expondo Session Beans via WebServices no NetBeans
Este blog deixou de ser mantido, mas o autor continua escrevendo aqui. Não deixe de assinar o novo feed!
Já utilizo o NetBeans a um bom tempo, mas descobri hoje uma feature que eu não conhecia. Trata-se de algo bastante simples - meio ridículo até - mas útil para aqueles que gostam de evitar a fadiga de se digitar desnecessariamente.
Suponha que você tenha um projeto de módulo EJB com um Stateless Session Bean utilizado para efetuar a operação de soma de dois inteiros:
Calculator - business interface:
-
-
package com.danielfmartins.ejb;
-
-
public interface Calculator {
-
int add(int a, int b);
-
}
-
CalculatorBean:
-
-
package com.danielfmartins.ejb;
-
-
// imports…
-
-
@Stateless
-
public class CalculatorBean implements Calculator {
-
-
public int add(int a, int b) {
-
return a + b;
-
}
-
}
-
Considere este código apenas para fins de demonstração. Bom, vamos supor que, em razão de algumas mudanças no negócio, você precise expor este Session Bean através de um WebService.
Com a nova especificação do EJB - e com o NetBeans, lógico - isso é algo muito simples de se fazer. Durante a criação de um novo WebService, no NetBeans, temos uma opção que permite que o novo WebService funcione como um delegate para um EJB já existente. Na imagem abaixo, indicamos que o WebService deverá utilizar o Stateless Session Bean Calculator:
Finalizando o assistente, uma nova classe @Stateless @WebService é criada contendo uma referência ao EJB indicado:
-
-
package com.danielfmartins.ws;
-
-
// imports…
-
-
@Stateless
-
@WebService
-
public class CalculatorWSBean {
-
-
// Add business logic below. (Right-click in editor and choose
-
// "EJB Methods > Add Business Method" or "Web Service > Add Operation")
-
@EJB
-
private Calculator calculatorBean;
-
}
-
Então, para adicionar métodos de negócio ao WebService, basta fazer exatamente como indica o comentário: clique com o botão direito no editor e escolha a opção Web Service - Add Operation:
Nesta imagem, indicamos a criação de um método add(), com informações sobre os parâmetros e tipo de retorno. O resultado:
-
-
package com.danielfmartins.ws;
-
-
// imports…
-
-
@Stateless
-
@WebService
-
public class CalculatorWSBean {
-
-
@EJB
-
private Calculator calculatorBean;
-
-
/**
-
* Web service operation
-
*/
-
@WebMethod
-
public int add(@WebParam(name = "a") int a, @WebParam(name = "b") int b) {
-
// TODO implement operation
-
return 0;
-
}
-
}
-
Com isso feito, basta delegar a chamada ao seu EJB:
-
-
package com.danielfmartins.ws;
-
-
// imports…
-
-
@Stateless @WebService
-
public class CalculatorWSBean {
-
-
@EJB
-
private Calculator calculatorBean;
-
-
@WebMethod
-
public int add(@WebParam(name = "a") int a, @WebParam(name = "b") int b) {
-
return calculatorBean.add(a, b);
-
}
-
}
-
Para ver se está tudo funcionando, faça o deploy e teste o WebService:
Cuidado!
Ninguém pode negar que a “nova” versão da especificação EJB torna as coisas mais simples de serem feitas. As poucas linhas de código (e nenhuma de XML) usadas para implementar o Session Beans e o WebServices servem para provar esta afirmação. No entanto, a nova facilidade que vemos no EJB não muda o fato de que, para se criar aplicações decentes, devemos “suar a camisa” e estudar.
Falando um pouco mais sobre o código mostrado neste post, apesar de se tratar de um recurso interessante, temos que tomar algum cuidado para não comprometermos a performance da aplicação através do aumento da carga na rede e serialização/de-serialização de objetos. Portanto, sempre que possível, declare o bean como @Local e implante o WebService dentro do mesmo EJB-JAR no qual o bean está inserido. É claro que, caso esta abordagem não seja possível de ser utilizada (o bean deve ser mantido como @Remote, por exemplo), outras medidas podem ser tomadas de modo a melhorar a performance da aplicação… mas não falarei sobre isso. Pelo menos, não hoje.
Foto por: e53.
Tags: ejb, java, javaee 5, netbeans, webservices

9 de abril de 2007 às 3:29 pm
Essa feature é mto legal..
O Workshop da BEA faz isso desde 2004 pelo menos… Algumas coisas demoram muito tempo pra aparecer no mundo LIVRE..
9 de abril de 2007 às 3:51 pm
Falando em ferramenta livre e não-livre, eu queria ter uma grana pra arranjar uma licença do Intellij IDEA. Pelo que falam por aí, deve ser bem massa.
30 de agosto de 2007 às 7:06 pm
Realmente é muito bom. Estou usando o netbeans 5.5 e JEE5 com EJB3.0; e na hora de executar o projeto estou tendo um erro no arquivo build.xml na linha 182. Você sabe como resolver este problema? Este projeto estava funcionando normalmente, e agora sempre da este erro. E qualquer projeto que eu faça da o mesmo erro e na mesma linha. Você sabe o que esta acontecendo de errado?
30 de agosto de 2007 às 8:48 pm
O NetBeans mostrou alguma mensagem de erro (tirando o número da linha)?