Download Nueva colección ejercicios temas 8, 9 y 10
Document related concepts
no text concepts found
Transcript
COLECCIÓN DE PROBLEMAS Y CUESTIONES SERVIDORES DE INFORMACIÓN Curso 2005-2006 Temas 8, 9 y 10 Pregunta 1. Comente qué entiende por vista local y remota de un EJB Pregunta 2. Comente el ciclo de vida de un EJB de sesión con estado. Sol: ¿En qué se diferencia de un EJB de sesión sin estado? Sol: Los métodos son los mismos pero algunos no se invocan (activación y pasivación). Además el método create de un EJB de sesión sin estado no tiene argumentos y no crea el Bean sino que obtiene uno del pool. 1 Problema 3. Dado el siguiente EJB: package com.examples; import javax.ejb.*; public class HelloBean implements SessionBean { public void ejbCreate() {} public void ejbActivate() {} public void ejbPassivate() {} public void ejbRemove() {} public void setSessionContext(SessionContext sc){} public String sayHello () { System.out.println ("Someone called sayHello()"); return “Hello! World”; } } definir las interfaces Home y Componente. Sol: package com.examples; import javax.ejb.*; import java.rmi.*; public interface HelloHome extends EJBHome { public Hello create() throws CreateException, RemoteException; } package com.examples; import javax.ejb.*; import java.rmi.*; public interface Hello extends EJBObject { public String sayHello() throws RemoteException; } 2 Problema 4. Comentar la información que puede sacar del Bean a partir del siguiente descriptor de despliegue de dicho EJB. Por ejemplo comente cómo puede enterarse el Bean sobre si una transacción ha sido exitosa o no. <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <description>Deployment descriptor for the sb JOnAS example</description> <display-name>sb example</display-name> <enterprise-beans> <session> <ejb-name>Op</ejb-name> <home>sb.OpHome</home> <remote>sb.Op</remote> <ejb-class>sb.OpBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> <env-entry> <env-entry-name>prop1</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>prop1 value</env-entry-value> </env-entry> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>Op</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar> Sol: Se trata de un SessionBean con estado del que todos sus métodos son transaccionales y la demarcación de las transacciones la gestiona el contenedor para todos los métodos del Bean. Si los métodos del Bean se ejecutan fuera de una transacción el contenedor creará una nueva dentro de la que ejecutar los métodos. Si éstos son invocados dentro de una transacción el contenedor la propaga al Bean. Al tratarse de un SessionBean con estado, si queremos que este pueda gestionar su estado de forma transaccional (no existe CMP para EJBs de Sesión) se debe implementar la interfaz SessionSynchronization. Más información que podemos sacar es el nombre de las iterfaces Home y componente (que serán remotas) así como el nombre del Bean y la clase que lo implementa. 3 Problema 5. Comentar dónde puede encontrar el siguiente código y por qué: ... public abstract Collection getAddresses( ); public abstract void setAddresses ( Collection addresses); public abstract Collection getSubscriptions( ); public abstract void setSubscriptions ( Collection subscriptions); Sol: Se trata de un EJB de Entidad cuya persistencia la gestiona el contenedor y a partir de la versión 2.0 de los EJBs. Cuestión 6. Comentar la siguiente Query: SELECT DISTINCT OBJECT(p) FROM Player p WHERE p.position = ?1 AND p.name = ?2 4