package org.tgdb.servicelocator;
import org.tgdb.adminmanager.AdminManagerRemoteHome;
import org.tgdb.resource.file.FileRemoteHome;
import org.tgdb.export.ExportManagerRemoteHome;
import org.tgdb.export.filter.GQLFilterRemoteHome;
import org.tgdb.model.expmodel.ExpModelRemoteHome;
import org.tgdb.species.gene.GeneRemoteHome;
import org.tgdb.model.modelmanager.ModelManagerRemoteHome;
import org.tgdb.model.reference.ReferenceRemoteHome;
import org.tgdb.model.researchapplication.ResearchApplicationRemoteHome;
import org.tgdb.model.strain.allele.StrainAlleleRemoteHome;
import org.tgdb.model.strain.mutationtype.MutationTypeRemoteHome;
import org.tgdb.model.strain.state.StrainStateRemoteHome;
import org.tgdb.model.strain.strain.StrainRemoteHome;
import org.tgdb.model.strain.type.StrainTypeRemoteHome;
import org.tgdb.project.privilege.PrivilegeRemoteHome;
import org.tgdb.project.project.ProjectRemoteHome;
import org.tgdb.project.projectmanager.ProjectManagerRemoteHome;
import org.tgdb.project.role.RoleRemoteHome;
import org.tgdb.project.securityprinciple.SecurityPrincipleRemoteHome;
import org.tgdb.project.user.UserRemoteHome;
import org.tgdb.resource.link.LinkRemoteHome;
import org.tgdb.resource.resource.ResourceRemoteHome;
import org.tgdb.resource.resourcecategory.ResourceCategoryRemoteHome;
import org.tgdb.resource.resourcemanager.ResourceManagerRemoteHome;
import org.tgdb.samplingunit.samplingunit.SamplingUnitRemoteHome;
import org.tgdb.samplingunit.samplingunitmanager.SamplingUnitManagerRemoteHome;
import org.tgdb.simplelog.SimpleLogRemoteHome;
import org.tgdb.species.chromosome.ChromosomeRemoteHome;
import org.tgdb.species.species.SpeciesRemoteHome;
import java.lang.reflect.Method;
import java.util.HashMap;
import javax.ejb.EJBHome;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import org.tgdb.model.geneticbackground.GeneticBackgroundRemoteHome;
import org.tgdb.model.geneticbackground.GeneticBackgroundValuesRemoteHome;
import org.tgdb.model.availability.AvailabilityRemoteHome;
import org.tgdb.model.availablegeneticbackgrounds.AvailableGeneticBackgroundRemoteHome;
import org.tgdb.model.repositories.RepositoriesRemoteHome;
import org.tgdb.expression.expressionmodel.ExpressionModelRemoteHome;
import org.tgdb.genome.integrationcopy.IntegrationCopyRemoteHome;
public class ServiceLocator {
// singleton's private instance
private static ServiceLocator me;
private static int totalTime;
static {
me = new ServiceLocator();
totalTime=0;
cache = new HashMap();
}
private ServiceLocator() {}
// returns the Service Locator instance
static public ServiceLocator getInstance() {
return me;
}
// Services Constants Inner Class - service objects
public class Services {
final public static int PROJECT = 0;
final public static int SAMPLINGUNIT = 1;
final public static int USER = 2;
final public static int INDIVIDUAL = 3;
final public static int GENOTYPE = 4;
final public static int ALLELE = 5;
final public static int MARKER = 6;
final public static int MARKERSET = 7;
final public static int UMARKERSET = 8;
final public static int UMARKER = 9;
final public static int UALLELE = 10;
final public static int CHROMOSOME = 11;
final public static int SPECIES = 12;
final public static int FILE = 13;
final public static int GROUPING = 14;
final public static int PHENOTYPE = 15;
final public static int PHENOTYPEMANAGER = 16;
final public static int SAMPLINGUNITMANAGER = 17;
final public static int GENOTYPEMANAGER = 18;
final public static int PROJECTMANAGER = 19;
final public static int VARIABLE= 22;
final public static int ROLE= 23;
final public static int SECURITYPRINCIPLE = 24;
final public static int PRIVILEGE = 25;
final public static int VARIABLESET = 26;
final public static int UVARIABLE = 27;
final public static int UVARIABLESET = 28;
final public static int GROUP = 30;
final public static int SAMPLE = 31;
final public static int EXPORTMANAGER = 32;
final public static int GQLFILTER = 33;
final public static int LINK = 34;
final public static int RESOURCEMANAGER = 35;
final public static int EXPMODEL = 36;
final public static int GENETICMODIFICATION = 37;
final public static int RESEARCHAPPLICATION = 38;
final public static int MODELMANAGER = 39;
final public static int GENEONTOLOGY = 40;
final public static int GENE = 43;
final public static int REFERENCE = 44;
final public static int SIMPLELOG = 45;
final public static int ADMINMANAGER = 46;
final public static int RESOURCE = 47;
final public static int RESOURCECATEGORY = 48;
final public static int PROCESS = 50;
final public static int PROTEIN = 53;
final public static int PROTEINFAMILY = 54;
final public static int PROTEINCOMPLEX = 55;
final public static int STRAIN = 56;
final public static int STRAIN_TYPE = 57;
final public static int STRAIN_STATE = 58;
final public static int STRAIN_ALLELE = 59;
final public static int MUTATION_TYPE = 60;
final public static int GENETIC_BACKGROUND = 61;
final public static int GENETIC_BACKGROUND_VALUES = 62;
final public static int REPOSITORIES = 63;
final public static int AVAILABLE_GENETIC_BACKGROUNDS = 64;
final public static int AVAILABILITY = 65;
final public static int EXPRESSION_MODEL = 71;
final public static int INTEGRATION_COPY = 72;
}
// Project EJB related constants
final static Class PROJECT_CLASS = ProjectRemoteHome.class;
final static String PROJECT_NAME = "ejb/CreZOOProjectBean";
final static Class SU_CLASS = SamplingUnitRemoteHome.class;
final static String SU_NAME = "ejb/CreZOOSamplingUnitBean";
final static Class SUMANAGER_CLASS = SamplingUnitManagerRemoteHome.class;
final static String SUMANAGER_NAME = "ejb/CreZOOSamplingUnitManagerBean";
final static Class USER_CLASS = UserRemoteHome.class;
final static String USER_NAME = "ejb/CreZOOUserBean";
final static Class CHROMOSOME_CLASS = ChromosomeRemoteHome.class;
final static String CHROMOSOME_NAME = "ejb/CreZOOChromosomeBean";
final static Class SPECIES_CLASS = SpeciesRemoteHome.class;
final static String SPECIES_NAME = "ejb/CreZOOSpeciesBean";
final static Class FILE_CLASS = FileRemoteHome.class;
final static String FILE_NAME = "ejb/CreZOOFileBean";
final static Class PROJECTMANAGER_CLASS = ProjectManagerRemoteHome.class;
final static String PROJECTMANAGER_NAME = "ejb/CreZOOProjectManagerBean";
final static Class ROLE_CLASS = RoleRemoteHome.class;
final static String ROLE_NAME = "ejb/CreZOORoleBean";
final static Class SECURITYPRINCIPLE_CLASS = SecurityPrincipleRemoteHome.class;
final static String SECURITYPRINCIPLE_NAME = "ejb/CreZOOSecurityPrincipleBean";
final static Class PRIVILEGE_CLASS = PrivilegeRemoteHome.class;
final static String PRIVILEGE_NAME = "ejb/CreZOOPrivilegeBean";
final static Class EXPORTMANAGER_CLASS = ExportManagerRemoteHome.class;
final static String EXPORTMANAGER_NAME = "ejb/CreZOOExportManagerBean";
final static Class GQLFILTER_CLASS = GQLFilterRemoteHome.class;
final static String GQLFILTER_NAME = "ejb/CreZOOGQLFilterBean";
final static Class LINK_CLASS = LinkRemoteHome.class;
final static String LINK_NAME = "ejb/CreZOOLinkBean";
final static Class RESOURCEMANAGER_CLASS = ResourceManagerRemoteHome.class;
final static String RESOURCEMANAGER_NAME = "ejb/CreZOOResourceManagerBean";
final static Class EXPMODEL_CLASS = ExpModelRemoteHome.class;
final static String EXPMODEL_NAME = "ejb/CreZOOExpModelBean";
final static Class RESEARCHAPPLICATION_CLASS = ResearchApplicationRemoteHome.class;
final static String RESEARCHAPPLICATION_NAME = "ejb/CreZOOResearchApplicationBean";
final static Class MODELMANAGER_CLASS = ModelManagerRemoteHome.class;
final static String MODELMANAGER_NAME = "ejb/CreZOOModelManagerBean";
final static Class GENE_CLASS = GeneRemoteHome.class;
final static String GENE_NAME = "ejb/CreZOOGeneBean";
final static Class REFERENCE_CLASS = ReferenceRemoteHome.class;
final static String REFERENCE_NAME = "ejb/CreZOOReferenceBean";
final static Class SIMPLELOG_CLASS = SimpleLogRemoteHome.class;
final static String SIMPLELOG_NAME = "ejb/CreZOOSimpleLogBean";
final static Class ADMINMANAGER_CLASS = AdminManagerRemoteHome.class;
final static String ADMINMANAGER_NAME = "ejb/CreZOOAdminManagerBean";
final static Class RESOURCE_CLASS = ResourceRemoteHome.class;
final static String RESOURCE_NAME = "ejb/CreZOOResourceBean";
final static Class RESOURCECATEGORY_CLASS = ResourceCategoryRemoteHome.class;
final static String RESOURCECATEGORY_NAME = "ejb/CreZOOResourceCategoryBean";
final static Class STRAIN_CLASS = StrainRemoteHome.class;
final static String STRAIN_NAME = "ejb/CreZOOStrainBean";
final static Class STRAIN_TYPE_CLASS = StrainTypeRemoteHome.class;
final static String STRAIN_TYPE_NAME = "ejb/CreZOOStrainTypeBean";
final static Class STRAIN_STATE_CLASS = StrainStateRemoteHome.class;
final static String STRAIN_STATE_NAME = "ejb/CreZOOStrainStateBean";
final static Class STRAIN_ALLELE_CLASS = StrainAlleleRemoteHome.class;
final static String STRAIN_ALLELE_NAME = "ejb/CreZOOStrainAlleleBean";
final static Class MUTATION_TYPE_CLASS = MutationTypeRemoteHome.class;
final static String MUTATION_TYPE_NAME = "ejb/CreZOOMutationTypeBean";
final static Class GENETIC_BACKGROUND_CLASS = GeneticBackgroundRemoteHome.class;
final static String GENETIC_BACKGROUND_NAME = "ejb/CreZOOGeneticBackgroundBean";
final static Class GENETIC_BACKGROUND_VALUES_CLASS = GeneticBackgroundValuesRemoteHome.class;
final static String GENETIC_BACKGROUND_VALUES_NAME = "ejb/CreZOOGeneticBackgroundValuesBean";
final static Class REPOSITORIES_CLASS = RepositoriesRemoteHome.class;
final static String REPOSITORIES_NAME = "ejb/CreZOORepositoriesBean";
final static Class AVAILABLE_GENETIC_BACKGROUNDS_CLASS = AvailableGeneticBackgroundRemoteHome.class;
final static String AVAILABLE_GENETIC_BACKGROUNDS_NAME = "ejb/CreZOOAvailableGeneticBackgroundBean";
final static Class AVAILABILITY_CLASS = AvailabilityRemoteHome.class;
final static String AVAILABILITY_NAME = "ejb/CreZOOAvailabilityBean";
final static Class EXPRESSION_MODEL_CLASS = ExpressionModelRemoteHome.class;
final static String EXPRESSION_MODEL_NAME = "ejb/CreZOOExpressionModelBean";
final static Class INTEGRATION_COPY_CLASS = IntegrationCopyRemoteHome.class;
final static String INTEGRATION_COPY_NAME = "ejb/CreZOOIntegrationCopyBean";
private static EJBHome cacheProject;
// Returns the Class for the required service
static private Class getServiceClass(int service){
switch( service ) {
case Services.PROJECT:
return PROJECT_CLASS;
case Services.SAMPLINGUNIT:
return SU_CLASS;
case Services.USER:
return USER_CLASS;
case Services.CHROMOSOME:
return CHROMOSOME_CLASS;
case Services.SPECIES:
return SPECIES_CLASS;
case Services.FILE:
return FILE_CLASS;
case Services.SAMPLINGUNITMANAGER:
return SUMANAGER_CLASS;
case Services.PROJECTMANAGER:
return PROJECTMANAGER_CLASS;
case Services.ROLE:
return ROLE_CLASS;
case Services.SECURITYPRINCIPLE:
return SECURITYPRINCIPLE_CLASS;
case Services.PRIVILEGE:
return PRIVILEGE_CLASS;
case Services.EXPORTMANAGER:
return EXPORTMANAGER_CLASS;
case Services.GQLFILTER:
return GQLFILTER_CLASS;
case Services.LINK:
return LINK_CLASS;
case Services.RESOURCEMANAGER:
return RESOURCEMANAGER_CLASS;
case Services.EXPMODEL:
return EXPMODEL_CLASS;
case Services.RESEARCHAPPLICATION:
return RESEARCHAPPLICATION_CLASS;
case Services.MODELMANAGER:
return MODELMANAGER_CLASS;
case Services.GENE:
return GENE_CLASS;
case Services.REFERENCE:
return REFERENCE_CLASS;
case Services.SIMPLELOG:
return SIMPLELOG_CLASS;
case Services.ADMINMANAGER:
return ADMINMANAGER_CLASS;
case Services.RESOURCE:
return RESOURCE_CLASS;
case Services.RESOURCECATEGORY:
return RESOURCECATEGORY_CLASS;
case Services.STRAIN:
return STRAIN_CLASS;
case Services.STRAIN_TYPE:
return STRAIN_TYPE_CLASS;
case Services.STRAIN_STATE:
return STRAIN_STATE_CLASS;
case Services.STRAIN_ALLELE:
return STRAIN_ALLELE_CLASS;
case Services.MUTATION_TYPE:
return MUTATION_TYPE_CLASS;
case Services.GENETIC_BACKGROUND:
return GENETIC_BACKGROUND_CLASS;
case Services.GENETIC_BACKGROUND_VALUES:
return GENETIC_BACKGROUND_VALUES_CLASS;
case Services.REPOSITORIES:
return REPOSITORIES_CLASS;
case Services.AVAILABLE_GENETIC_BACKGROUNDS:
return AVAILABLE_GENETIC_BACKGROUNDS_CLASS;
case Services.AVAILABILITY:
return AVAILABILITY_CLASS;
case Services.EXPRESSION_MODEL:
return EXPRESSION_MODEL_CLASS;
case Services.INTEGRATION_COPY:
return INTEGRATION_COPY_CLASS;
}
return null;
}
// returns the JNDI name for the required service
static private String getServiceName(int service){
switch( service ) {
case Services.PROJECT:
return PROJECT_NAME;
case Services.SAMPLINGUNIT:
return SU_NAME;
case Services.USER:
return USER_NAME;
case Services.CHROMOSOME:
return CHROMOSOME_NAME;
case Services.SPECIES:
return SPECIES_NAME;
case Services.FILE:
return FILE_NAME;
case Services.SAMPLINGUNITMANAGER:
return SUMANAGER_NAME;
case Services.PROJECTMANAGER:
return PROJECTMANAGER_NAME;
case Services.ROLE:
return ROLE_NAME;
case Services.SECURITYPRINCIPLE:
return SECURITYPRINCIPLE_NAME;
case Services.PRIVILEGE:
return PRIVILEGE_NAME;
case Services.EXPORTMANAGER:
return EXPORTMANAGER_NAME;
case Services.GQLFILTER:
return GQLFILTER_NAME;
case Services.LINK:
return LINK_NAME;
case Services.RESOURCEMANAGER:
return RESOURCEMANAGER_NAME;
case Services.EXPMODEL:
return EXPMODEL_NAME;
case Services.RESEARCHAPPLICATION:
return RESEARCHAPPLICATION_NAME;
case Services.MODELMANAGER:
return MODELMANAGER_NAME;
case Services.GENE:
return GENE_NAME;
case Services.REFERENCE:
return REFERENCE_NAME;
case Services.SIMPLELOG:
return SIMPLELOG_NAME;
case Services.ADMINMANAGER:
return ADMINMANAGER_NAME;
case Services.RESOURCE:
return RESOURCE_NAME;
case Services.RESOURCECATEGORY:
return RESOURCECATEGORY_NAME;
case Services.STRAIN:
return STRAIN_NAME;
case Services.STRAIN_TYPE:
return STRAIN_TYPE_NAME;
case Services.STRAIN_STATE:
return STRAIN_STATE_NAME;
case Services.STRAIN_ALLELE:
return STRAIN_ALLELE_NAME;
case Services.MUTATION_TYPE:
return MUTATION_TYPE_NAME;
case Services.GENETIC_BACKGROUND:
return GENETIC_BACKGROUND_NAME;
case Services.GENETIC_BACKGROUND_VALUES:
return GENETIC_BACKGROUND_VALUES_NAME;
case Services.REPOSITORIES:
return REPOSITORIES_NAME;
case Services.AVAILABLE_GENETIC_BACKGROUNDS:
return AVAILABLE_GENETIC_BACKGROUNDS_NAME;
case Services.AVAILABILITY:
return AVAILABILITY_NAME;
case Services.EXPRESSION_MODEL:
return EXPRESSION_MODEL_NAME;
case Services.INTEGRATION_COPY:
return INTEGRATION_COPY_NAME;
}
return null;
}
private static HashMap cache;
private EJBHome getFromCache(int service) {
EJBHome home = null;
return (EJBHome)cache.get(new Integer(service));
}
private void addToCache(int service, EJBHome home)
{
if (!cache.containsKey(new Integer(service)))
cache.put(new Integer(service), home);
}
/**
* gets the EJBHome for the given service using the
* JNDI name and the Class for the EJBHome
*/
public EJBHome getHome( int s ) throws ServiceLocatorException {
//long t1 = System.currentTimeMillis();
EJBHome home = null;
try {
Context initial = new InitialContext();
home = getFromCache(s);
if (home==null)
{
// Look up using the service name from
// defined constant
Object objref =
initial.lookup(getServiceName(s));
// Narrow using the EJBHome Class from
// defined constant
Object obj = PortableRemoteObject.narrow(
objref, getServiceClass(s));
home = (EJBHome)obj;
// Add this home to cache
addToCache(s, home);
}
} catch( NamingException ex ) {
ex.printStackTrace();
throw new ServiceLocatorException("Naming error");
} catch( Exception ex ) {
ex.printStackTrace();
throw new ServiceLocatorException("getHome failed");
}
//long t2 = System.currentTimeMillis();
//totalTime+=t2-t1;
return home;
}
public Object getManager(int s) throws ServiceLocatorException {
Object o = null;
try
{
EJBHome tmp = getHome(s);
Method m = tmp.getClass().getMethod("create", null);
o = m.invoke(tmp, null);
}
catch (Exception e)
{
e.printStackTrace();
throw new ServiceLocatorException(e.getMessage());
}
return o;
}
}