Ejb 3.0 Glassfish 2.X Netbeans 6.X

3,562 views

Published on

Laboratorio usando EJB3.0 con GlassFish 2.x y Netbeans 6.x - Beans de session y JMS

Published in: Technology
  • buena ayuda
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Ejb 3.0 Glassfish 2.X Netbeans 6.X

  1. 1. LABORATORIO EJB 3.0 GLASFISH V2.X Y NETBEANS 6.X Instructor : LEONARDO TORRES ALTEZ APIS : EJB 3.0 Tecnologias : RMI , JNDI , EJB , JMS Requisitos : Netbeans 6.x , Glassfish , JDK 1.6X EJERCICIOS EJB SESION STATELESS 1 Iniciar un proyecto EJB 2
  2. 2. 3 Escoger Serv de App GlashFish 4 Nuevo Session Bean 5 Nombre : Miprimerejb package cibertec; 6 import javax.ejb.Stateless; import javax.swing.JOptionPane; @Stateless(mappedName=quot;alias_MiprimerejbBeanquot; , description=quot;ejb de pruebaquot;) public class MiprimerejbBean implements MiprimerejbLocal,MiprimerejbRemote{
  3. 3. public void m1(String mensaje) { JOptionPane.showMessageDialog(null, quot;El mensaje recibido :quot; + mensaje); } } 7 Definir interfaz Remota package cibertec; import javax.ejb.Remote; @Remote public interface MiprimerejbRemote { public void m1(String mensaje); } 8 Definir interfaz Local package cibertec; import javax.ejb.Local; @Local public interface MiprimerejbLocal { public void m1(String mensaje); } 9 Clic derecho y Run
  4. 4. 10 Ahora crear la aplicación Cliente 11 12
  5. 5. 13 Copiar el paquete cibertec 14 Pegarlo en el otro proyecto Cliente 15 Borrar las clases que no usamos 16 Metodo Main public class Main {
  6. 6. /** * @param args the command line arguments */ public static void main(String[] args) throws Exception{ // TODO code application logic here InitialContext ctx = new InitialContext(); MiprimerejbRemote ejb = (MiprimerejbRemote) ctx.lookup(quot;alias_MiprimerejbBeanquot;); ejb.m1(quot;Hola Mundoquot;); } } 16 El metodo main anterior no funciona si queremos contectarnos a un Servidor de Apps externo CONFIGURANDO SERV DE APPS PARA RECIBIR LLAMADAS REMOTAS 17 18 Usuario admin. Password adminadmin
  7. 7. 19 Cambiar el metodo main import cibertec.MiprimerejbRemote; import javax.naming.Context; import javax.naming.InitialContext; public class Main { public static InitialContext getInitialContext() throws Exception { java.util.Hashtable prop= new java.util.Hashtable(); prop.put(Context.INITIAL_CONTEXT_FACTORY,quot;com.sun.enterprise.naming.SerialInitContextFactoryquot;); prop.put(quot;org.omg.CORBA.ORBInitialHostquot;, quot;192.168.1.100quot;); // NOTE: IIOP is set on port 3701 but this works on port 3700 prop.put(quot;org.omg.CORBA.ORBInitialPortquot;, quot;1072quot;); return new InitialContext(prop); } public static void main(String[] args) throws Exception{ // TODO code application logic here InitialContext ctx = getInitialContext(); MiprimerejbRemote ejb = (MiprimerejbRemote) ctx.lookup(quot;alias_MiprimerejbBeanquot;); ejb.m1(quot;Hola Mundoquot;); } } 20 Aumentemos metodos @PostConstruct public void postcons() { callback al EJB System.out.println(quot;posconsquot;); } @PreDestroy public void predes() { System.out.println(quot;predesquot;); } @AroundInvoke public Object interceptor(InvocationContext ctx) throws Exception { System.out.println(quot;interceptorr llamadoquot;); return ctx.proceed(); } 21 Prueba la invocación desde el cliente. Para que sirve @PostConstruct ? Para que sirve @PreDestroy ? Para que sirve @AroundInvoke ? Que pasa si el metodo “interceptor” retorna una excepcion ¿?
  8. 8. EJBS DE SESION STATEFULL 22 23 EJB session package cibertec; import javax.ejb.Stateful; @Stateful(mappedName=quot;alias_MiprimerejbconsesionBeanquot;) public class MiprimerejbconsesionBean implements MiprimerejbconsesionRemote, MiprimerejbconsesionLocal { int sumaTotal =0; public int m2(int suma) { sumaTotal = sumaTotal + suma; return sumaTotal; } } 24 Interfaz local package cibertec; import javax.ejb.Local; @Local public interface MiprimerejbconsesionLocal { public int m2(int suma); } 25 Interfaz remota package cibertec; import javax.ejb.Remote; @Remote public interface MiprimerejbconsesionRemote { public int m2(int suma); } 26 Llamada en el cliente MiprimerejbconsesionRemote ejb = (MiprimerejbconsesionRemote) ctx.lookup(quot;alias_MiprimerejbconsesionBeanquot;); System.out.println(ejb.m2(4)); System.out.println(ejb.m2(2)); System.out.println(ejb.m2(5)); EJBS DE JMS
  9. 9. 28 29 30
  10. 10. 31 package cibertec; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(mappedName = quot;jms/Nuevoquot;, activationConfig = { @ActivationConfigProperty(propertyName = quot;acknowledgeModequot;, propertyValue = quot;Auto- acknowledgequot;), @ActivationConfigProperty(propertyName = quot;destinationTypequot;, propertyValue = quot;javax.jms.Queuequot;) }) public class NewMessageBean implements MessageListener { public NewMessageBean() { } public void onMessage(Message message) { TextMessage msg = null; try { if (message instanceof TextMessage) { msg = (TextMessage) message; System.out.println(quot;A Message received in TMDB: quot; + msg.getText()); } else { System.out.println(quot;Message of wrong type: quot; + message.getClass().getName()); } } catch (JMSException e) { e.printStackTrace(); } catch (Throwable te) { te.printStackTrace(); } } } 32 Cambiar en metodo main try { Context ctx = getInitialContext(); QueueConnectionFactory connectionFactory = (QueueConnectionFactory) ctx.lookup(quot;jms/NuevoFactoryquot;); Queue queue = (Queue) ctx.lookup(quot;jms/Nuevoquot;); QueueConnection connection = connectionFactory.createQueueConnection(); QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(queue); TextMessage message = session.createTextMessage(); message.setText(quot;enviandooooooooo quot;); messageProducer.send(message); } catch (Exception e) { e.printStackTrace(); }

×