(Anterior)
Patrones de Diseño
La siguiente clase es utilizada al implementar el patrón de diseño Fábrica de Interfases ("Home Factory").
Clase FabricaEJB
import javax.ejb.*;
import java.rmi.*;
import java.util.*;
import javax.naming.*;
|
public class FabricaEJB
{
private Map mapaFabricas;
private static FabricaEJB unaFabrica;
Context ctx;
|
private FabricaEJB() throws NamingException
{
// Incializar Contexto
ctx = new InitialContext();
this.mapaFabricas = Collections.synchronizedMap(new HashMap());
}
|
public static FabricaEJB getFabrica() throws NamingException
{
if ( FabricaEJB.unaFabrica == null )
{
FabricaEJB.unaFabrica = new FabricaEJB();
}
return FabricaEJB.unaFabrica;
}
|
public EJBHome localizarHome(Class homeClass) throws NamingException
{
EJBHome elEJBHome = (EJBHome) this.mapaFabricas.get(homeClass);
if(elEJBHome == null)
{
elEJBHome = (EJBHome) javax.rmi.PortableRemoteObject.narrow (
ctx.lookup (homeClass.getName()), homeClass);
this.mapaFabricas.put(homeClass, elEJBHome);
}
return elEJBHome;
}
}
|
A través de esta fabrica es posible realizar la búsqueda de cualquier EJB ("Home Interface") utilizando el siguiente fragmento:
CuentaBancariaHome home =
(CuentaBancariaHome)FabricaEJB.getFabrica().localizarHome(AccountHome.class);
|
Nótese que la búsqueda se realiza directamente hacia el "Home Interface" utilizando la terminación class
, la primer búsqueda realizada por cualquier "Home Interface" será guardada en un "Hashmap", si posteriormente se reutiliza este "Home Factory" se retornará una copia del "Hashmap" evitando una nueva búsqueda sobre el "Home Interface".