Buscar

17PSSW aula07 doc01 PCS

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

A partir da especificação EJB 3.1 para os beans de sensação sem informação de estado com acesso local 
à definição de uma interface assim como a utilização da anotação @Local são opcionais. Lembramos que 
para acesso remoto, tanto a definição da interface remota como a utilização da anotação @Remote 
continuam sendo necessárias. 
 
Para testar nosso bean de sessão criaremos um Servlet que fará uso do nosso componente. Como esse 
Servlet está rodando localmente a referencia para o bean de sessão pode ser obtida através de injeção 
de dependência com a utilização da anotação @EJB. Se desconsiderarmos essa anotação e a variável de 
instância anotada por ela, o nosso Servlet é convencional. 
 
 
package estacio; 
 
import java.io.IOException; 
import java.io.PrintWriter; 
import javax.ejb.EJB; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
@WebServlet(name = "ConversorServlet", urlPatterns = { "/ConversorServlet" }) 
public class ConversorServlet extends HttpServlet { 
 
 private static final long serialVersionUID = 1L; 
 @EJB 
 private Conversor conversorBean; 
 
 protected void processRequest(HttpServletRequest request, 
 HttpServletResponse response) throws ServletException, IOException { 
 response.setContentType("text/html"); 
 PrintWriter out = response.getWriter(); 
 try { 
 
 String valor = request.getParameter("valor"); 
 String de = request.getParameter("de"); 
 String para = request.getParameter("para"); 
 
 out.println("<html>"); 
 out.println("<head>"); 
 out.println("<title>Conversão de Escalas</title>"); 
 out.println("</head>"); 
 out.println("<body>"); 
 if (valor == null || de == null || para == null) { 
 out.println("<form action=\"ConversorServlet\" method=\"post\">"); 
 out.println("<fieldset title=\"Conversão de Escalas\">"); 
 out.println("De: <input type=\"text\" name=\"valor\"/><br/>"); 
 out.println("<select name=\"de\">"); 
 out.println("<option value=\"Celsius\">Celsius</option>"); 
 out.println("<option value=\"Fahrenheit\">Fahrenheit</option>"); 
 out.println(" <option value=\"Kelvin\">Kelvin</option>"); 
 out.println("</select>"); 
 
 
 
 out.println("Para: <select name=\"para\">"); 
 out.println("<option value=\"Celsius\">Celsius</option>"); 
 out.println("<option value=\"Fahrenheit\">Fahrenheit</option>"); 
 out.println(" <option value=\"Kelvin\">Kelvin</option>"); 
 out.println("</select>"); 
 out.println("<input type=\"submit\" value=\"Converter\"/>"); 
 out.println("</fieldset>"); 
 out.println("</form>"); 
 } else { 
 
 double valorConvertido = Double.parseDouble(valor); 
 
 if (de.equalsIgnoreCase("Celsius") 
 && para.equalsIgnoreCase("Fahrenheit")) { 
 
 out.println(valor 
 + "° " 
 + de 
 + " equivalem a " 
 + conversorBean 
 .celsiusToFahrenheit(valorConvertido) 
 + "° " + para); 
 
 } 
 } 
 // Implemente o restante da lógica 
 out.println("</body>"); 
 out.println("</html>"); 
 } catch (Exception e) { 
 e.printStackTrace(); 
 } 
 
 finally { 
 out.close(); 
 } 
 } 
 
 @Override 
 protected void doGet(HttpServletRequest request, 
 HttpServletResponse response) throws ServletException, IOException { 
 processRequest(request, response); 
 } 
 
 @Override 
 protected void doPost(HttpServletRequest request, 
 HttpServletResponse response) throws ServletException, IOException { 
 processRequest(request, response); 
 } 
 
} 
 
 
Nos casos dos beans que implementam uma interface remorta, esses objetos devem ser obtidos pelas 
aplicações remotas através do método lookup() pertencente a um objeto do tipo 
javax.naming.InitialContext. Esse objeto Java Naming and Directory Interface (JNDI) que é uma API para 
 
 
 
acesso a serviços de diretórios que possibilita a obtenção dos Session Beans remotos. Essa API é 
disponibilizada pela API dos servidores de aplicação, podendo ser inclusive utilizada pelo Java SE. 
 
Observe interface rêmora declarada abaixo que visa fornecer um método de conversão de uma 
velocidade de Km/h para M/s. 
 
package estacio; 
 
import javax.ejb.Remote; 
 
@Remote 
public interface ConversorVelocidade { 
 
 public double kmhToMs(double velocidade); 
 
} 
 
 
Agora alteraremos nosso ConversorBean para que ele implemente essa nova interface. Além de adicionar 
os métodos necessários devemos inserir também à notação @Remote, para indicar qual a interface 
remota implementada pelo nosso bean. 
 
 
package estacio; 
 
import javax.ejb.Local; 
import javax.ejb.Remote; 
import javax.ejb.Stateless; 
 
@Stateless 
@Local(Conversor.class) 
@Remote(ConversorVelocidade.class) 
public class ConversorBean implements Conversor, ConversorVelocidade{ 
 
 @Override 
 public double kmhToMs(double velocidade) { 
 return velocidade*0.277777778; 
 } 
... 
 
 
Agora nosso session bean ConversorBean tem implementados uma interface local e uma rêmora. A 
interface local já foi testada através do Servlet ConversorServlet, agora precisamos exemplificar a 
utilização dos métodos da interface remota, para isso criaremos outro projeto, só que desta vez um 
projeto Java convencional com apenas uma classe. Para isso siga os passos descritos abaixo. 
1. Arquivo/ Novo/ Classe Java 
2. Defina o nome que julgar apropriado e finaliza a criação do projeto. 
 
package estacio; 
 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
 
 
 
 
public class TesteRemoto { 
 
 public static void main(String[] args) { 
 
 try { 
 Context ic = new InitialContext(); 
 ConversorVelocidade conversorBean = (ConversorVelocidade) ic 
 .lookup("estacio.ConversorVelocidade"); 
 System.out.println(conversorBean.kmhToMs(100)); 
 } catch (NamingException ex) { 
 ex.printStackTrace(); 
 ; 
 } 
 } 
} 
 
Execute a classe para verificar o resultado obtido. 
 
Abaixo vemos o ciclo de vida de um Stateless Session Bean. 
 
http://marakana.com/bookshelf/jboss_admin_tutorial/ejb.html 
 
Existem duas anotações básicas que podem ser utilizadas nos beans de sessão: @PostConstruct e 
@PreDestroy. A primeira é utilizada para indicar qual método será executado após o bean ser 
instanciado e a segunda qual método será utilizado antes de ser destruído. 
 
Poderíamos inserir fragmento de código abaixo no bean ConversorBean para observarmos as 
consequências da utilização dessas anotações.

Outros materiais