maia_modificado/.svn/pristine/3e/3e05779349f99917cdbd757266c...

82 lines
2.8 KiB
Plaintext
Executable File

package com.fp.facadeclient.helper;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.fp.common.logger.APPLogger;
import com.fp.facadeclient.ejb.FacadeBeanJsfRemote;
public class ServiceLocatorJsf {
// Nombre del ear sin .ear
private static final String APP_NAME = "maiaear-2.1";
// Nombre del modulo ejb es el jar que contiene los ejb sin .jar
private static final String MODULE_NAME = "facade";
// Paquete clase de la interface remota.
private static final String BEAN_REMOTO = FacadeBeanJsfRemote.class.getName();
/**
* Almacena una instancia de ServiceLocator.
*/
private static ServiceLocatorJsf cache;
private final Map<String, FacadeBeanJsfRemote> mbeans = new HashMap<String, FacadeBeanJsfRemote>();
/**
* Entrega una instancia de ServiceLocator.
* @return ServiceLocator
*/
public static ServiceLocatorJsf getInstance() {
if (ServiceLocatorJsf.cache != null) {
return ServiceLocatorJsf.cache;
}
synchronized (ServiceLocator.class) {
if (ServiceLocatorJsf.cache == null) {
ServiceLocatorJsf.cache = new ServiceLocatorJsf();
}
}
return ServiceLocatorJsf.cache;
}
/**
* Entrega un proxy de los ejb remotos.
* @param nombesessionbean Nombre del ejb remoto a obtener un proxy.
* @return FacadeBeanRemote
*/
public FacadeBeanJsfRemote getFacadeRemote(String nombesessionbean) throws Exception {
FacadeBeanJsfRemote bean = this.mbeans.get(nombesessionbean);
if (bean == null) {
synchronized (this.mbeans) {
bean = this.mbeans.get(nombesessionbean);
if (bean == null) {
APPLogger.getLogger().info("Obtiene una coneccion al EJB ==> " + nombesessionbean);
bean = ServiceLocatorJsf.lookupRemoteStatelessFacadeBean(nombesessionbean);
this.mbeans.put(nombesessionbean, bean);
}
}
}
return bean;
}
/**
* Busca y entrega el proxy de un ejb con el cual se ejecuta un servicio de negocio.
* @return FacadeBeanJsfRemote
* @throws NamingException
*/
private static FacadeBeanJsfRemote lookupRemoteStatelessFacadeBean(String beanname) throws NamingException {
// Tiene que ser hashtable no considerar en el pmd.
Hashtable<String, String> jndiProperties = new Hashtable<String, String>(); // NOPMD by jorge on 6/19/12 3:36 PM
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context context = new InitialContext(jndiProperties);
String aux = "ejb:" + ServiceLocatorJsf.APP_NAME + "/" + ServiceLocatorJsf.MODULE_NAME + "//" + beanname + "!"
+ ServiceLocatorJsf.BEAN_REMOTO;
return (FacadeBeanJsfRemote) context.lookup(aux);
}
// LIbrerias
// jboss-client-7.1.0.Final.jar esta bajo jbos-as-7.1.0.final\bin\client
}