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