/*
* RHQ Management Platform
* Copyright (C) 2005-2014 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
package org.rhq.enterprise.server.util;
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import javax.transaction.TransactionManager;
import org.jetbrains.annotations.NotNull;
import org.jboss.mx.util.MBeanProxyExt;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.alert.AlertConditionManagerBean;
import org.rhq.enterprise.server.alert.AlertConditionManagerLocal;
import org.rhq.enterprise.server.alert.AlertDefinitionManagerBean;
import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal;
import org.rhq.enterprise.server.alert.AlertManagerBean;
import org.rhq.enterprise.server.alert.AlertManagerLocal;
import org.rhq.enterprise.server.alert.AlertNotificationManagerBean;
import org.rhq.enterprise.server.alert.AlertNotificationManagerLocal;
import org.rhq.enterprise.server.alert.AlertTemplateManagerBean;
import org.rhq.enterprise.server.alert.AlertTemplateManagerLocal;
import org.rhq.enterprise.server.alert.GroupAlertDefinitionManagerBean;
import org.rhq.enterprise.server.alert.GroupAlertDefinitionManagerLocal;
import org.rhq.enterprise.server.alert.engine.AlertConditionCacheManagerBean;
import org.rhq.enterprise.server.alert.engine.AlertConditionCacheManagerLocal;
import org.rhq.enterprise.server.alert.engine.jms.AlertConditionConsumerBean;
import org.rhq.enterprise.server.alert.engine.jms.CachedConditionProducerBean;
import org.rhq.enterprise.server.alert.engine.jms.CachedConditionProducerLocal;
import org.rhq.enterprise.server.auth.SubjectManagerBean;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.auth.prefs.SubjectPreferencesCacheBean;
import org.rhq.enterprise.server.auth.prefs.SubjectPreferencesCacheLocal;
import org.rhq.enterprise.server.authz.AuthorizationManagerBean;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
import org.rhq.enterprise.server.authz.RoleManagerBean;
import org.rhq.enterprise.server.authz.RoleManagerLocal;
import org.rhq.enterprise.server.bundle.BundleManagerBean;
import org.rhq.enterprise.server.bundle.BundleManagerLocal;
import org.rhq.enterprise.server.cloud.AffinityGroupManagerBean;
import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal;
import org.rhq.enterprise.server.cloud.FailoverListManagerBean;
import org.rhq.enterprise.server.cloud.FailoverListManagerLocal;
import org.rhq.enterprise.server.cloud.PartitionEventManagerBean;
import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal;
import org.rhq.enterprise.server.cloud.StatusManagerBean;
import org.rhq.enterprise.server.cloud.StatusManagerLocal;
import org.rhq.enterprise.server.cloud.StorageNodeManagerBean;
import org.rhq.enterprise.server.cloud.StorageNodeManagerLocal;
import org.rhq.enterprise.server.cloud.TopologyManagerBean;
import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.cloud.instance.CacheConsistencyManagerBean;
import org.rhq.enterprise.server.cloud.instance.CacheConsistencyManagerLocal;
import org.rhq.enterprise.server.cloud.instance.ServerManagerBean;
import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal;
import org.rhq.enterprise.server.common.EntityManagerFacade;
import org.rhq.enterprise.server.common.EntityManagerFacadeLocal;
import org.rhq.enterprise.server.configuration.ConfigurationManagerBean;
import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
import org.rhq.enterprise.server.configuration.DynamicConfigurationPropertyBean;
import org.rhq.enterprise.server.configuration.DynamicConfigurationPropertyLocal;
import org.rhq.enterprise.server.configuration.metadata.ConfigurationMetadataManagerBean;
import org.rhq.enterprise.server.configuration.metadata.ConfigurationMetadataManagerLocal;
import org.rhq.enterprise.server.content.AdvisoryManagerBean;
import org.rhq.enterprise.server.content.AdvisoryManagerLocal;
import org.rhq.enterprise.server.content.ContentManagerBean;
import org.rhq.enterprise.server.content.ContentManagerLocal;
import org.rhq.enterprise.server.content.ContentSourceManagerBean;
import org.rhq.enterprise.server.content.ContentSourceManagerLocal;
import org.rhq.enterprise.server.content.ContentUIManagerBean;
import org.rhq.enterprise.server.content.ContentUIManagerLocal;
import org.rhq.enterprise.server.content.DistributionManagerBean;
import org.rhq.enterprise.server.content.DistributionManagerLocal;
import org.rhq.enterprise.server.content.RepoManagerBean;
import org.rhq.enterprise.server.content.RepoManagerLocal;
import org.rhq.enterprise.server.content.metadata.ContentSourceMetadataManagerBean;
import org.rhq.enterprise.server.content.metadata.ContentSourceMetadataManagerLocal;
import org.rhq.enterprise.server.core.AgentManagerBean;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.core.CoreServerMBean;
import org.rhq.enterprise.server.core.EmailManagerBean;
import org.rhq.enterprise.server.core.EmailManagerLocal;
import org.rhq.enterprise.server.core.RemoteClientManagerBean;
import org.rhq.enterprise.server.core.RemoteClientManagerLocal;
import org.rhq.enterprise.server.core.StartupBean;
import org.rhq.enterprise.server.core.StartupLocal;
import org.rhq.enterprise.server.core.plugin.PluginDeploymentScannerMBean;
import org.rhq.enterprise.server.dashboard.DashboardManagerBean;
import org.rhq.enterprise.server.dashboard.DashboardManagerLocal;
import org.rhq.enterprise.server.discovery.DiscoveryBossBean;
import org.rhq.enterprise.server.discovery.DiscoveryBossLocal;
import org.rhq.enterprise.server.drift.DriftManagerBean;
import org.rhq.enterprise.server.drift.DriftManagerLocal;
import org.rhq.enterprise.server.drift.DriftTemplateManagerBean;
import org.rhq.enterprise.server.drift.DriftTemplateManagerLocal;
import org.rhq.enterprise.server.drift.JPADriftServerBean;
import org.rhq.enterprise.server.drift.JPADriftServerLocal;
import org.rhq.enterprise.server.event.EventManagerBean;
import org.rhq.enterprise.server.event.EventManagerLocal;
import org.rhq.enterprise.server.install.remote.RemoteInstallManagerBean;
import org.rhq.enterprise.server.install.remote.RemoteInstallManagerLocal;
import org.rhq.enterprise.server.inventory.InventoryManagerBean;
import org.rhq.enterprise.server.inventory.InventoryManagerLocal;
import org.rhq.enterprise.server.measurement.AvailabilityManagerBean;
import org.rhq.enterprise.server.measurement.AvailabilityManagerLocal;
import org.rhq.enterprise.server.measurement.CallTimeDataManagerBean;
import org.rhq.enterprise.server.measurement.CallTimeDataManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementBaselineManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementBaselineManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementChartsManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementChartsManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementCompressionManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementCompressionManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementDataManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementDataManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementDefinitionManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementDefinitionManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementOOBManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementOOBManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementProblemManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementProblemManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementScheduleManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementScheduleManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementViewManagerBean;
import org.rhq.enterprise.server.measurement.MeasurementViewManagerLocal;
import org.rhq.enterprise.server.operation.OperationManagerBean;
import org.rhq.enterprise.server.operation.OperationManagerLocal;
import org.rhq.enterprise.server.plugin.ServerPluginManagerBean;
import org.rhq.enterprise.server.plugin.ServerPluginManagerLocal;
import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceMBean;
import org.rhq.enterprise.server.purge.PurgeManagerBean;
import org.rhq.enterprise.server.purge.PurgeManagerLocal;
import org.rhq.enterprise.server.report.DataAccessManagerBean;
import org.rhq.enterprise.server.report.DataAccessManagerLocal;
import org.rhq.enterprise.server.resource.PlatformUtilizationManagerBean;
import org.rhq.enterprise.server.resource.PlatformUtilizationManagerLocal;
import org.rhq.enterprise.server.resource.ProductVersionManagerBean;
import org.rhq.enterprise.server.resource.ProductVersionManagerLocal;
import org.rhq.enterprise.server.resource.ResourceAvailabilityManagerBean;
import org.rhq.enterprise.server.resource.ResourceAvailabilityManagerLocal;
import org.rhq.enterprise.server.resource.ResourceBossBean;
import org.rhq.enterprise.server.resource.ResourceBossLocal;
import org.rhq.enterprise.server.resource.ResourceFactoryManagerBean;
import org.rhq.enterprise.server.resource.ResourceFactoryManagerLocal;
import org.rhq.enterprise.server.resource.ResourceManagerBean;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerBean;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerRemote;
import org.rhq.enterprise.server.resource.cluster.ClusterManagerBean;
import org.rhq.enterprise.server.resource.cluster.ClusterManagerLocal;
import org.rhq.enterprise.server.resource.group.LdapGroupManagerBean;
import org.rhq.enterprise.server.resource.group.LdapGroupManagerLocal;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerBean;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.resource.group.definition.GroupDefinitionExpressionBuilderManagerBean;
import org.rhq.enterprise.server.resource.group.definition.GroupDefinitionExpressionBuilderManagerLocal;
import org.rhq.enterprise.server.resource.group.definition.GroupDefinitionManagerBean;
import org.rhq.enterprise.server.resource.group.definition.GroupDefinitionManagerLocal;
import org.rhq.enterprise.server.resource.metadata.PluginManagerBean;
import org.rhq.enterprise.server.resource.metadata.PluginManagerLocal;
import org.rhq.enterprise.server.resource.metadata.ResourceMetadataManagerBean;
import org.rhq.enterprise.server.resource.metadata.ResourceMetadataManagerLocal;
import org.rhq.enterprise.server.scheduler.SchedulerBean;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
import org.rhq.enterprise.server.search.SavedSearchManagerBean;
import org.rhq.enterprise.server.search.SavedSearchManagerLocal;
import org.rhq.enterprise.server.storage.StorageClientManager;
import org.rhq.enterprise.server.storage.StorageClusterSettingsManagerBean;
import org.rhq.enterprise.server.storage.StorageClusterSettingsManagerLocal;
import org.rhq.enterprise.server.storage.StorageNodeOperationsHandlerBean;
import org.rhq.enterprise.server.storage.StorageNodeOperationsHandlerLocal;
import org.rhq.enterprise.server.subsystem.AlertSubsystemManagerBean;
import org.rhq.enterprise.server.subsystem.AlertSubsystemManagerLocal;
import org.rhq.enterprise.server.subsystem.ConfigurationSubsystemManagerBean;
import org.rhq.enterprise.server.subsystem.ConfigurationSubsystemManagerLocal;
import org.rhq.enterprise.server.subsystem.OperationHistorySubsystemManagerBean;
import org.rhq.enterprise.server.subsystem.OperationHistorySubsystemManagerLocal;
import org.rhq.enterprise.server.support.SupportManagerBean;
import org.rhq.enterprise.server.support.SupportManagerLocal;
import org.rhq.enterprise.server.sync.SynchronizationManagerBean;
import org.rhq.enterprise.server.sync.SynchronizationManagerLocal;
import org.rhq.enterprise.server.system.SystemInfoManagerBean;
import org.rhq.enterprise.server.system.SystemInfoManagerLocal;
import org.rhq.enterprise.server.system.SystemManagerBean;
import org.rhq.enterprise.server.system.SystemManagerLocal;
import org.rhq.enterprise.server.tagging.TagManagerBean;
import org.rhq.enterprise.server.tagging.TagManagerLocal;
import org.rhq.enterprise.server.test.TestBean;
import org.rhq.enterprise.server.test.TestLocal;
/**
* Methods that allow POJO objects to obtain references to EJB/JPA objects. These convenience methods attempt to
* minimize the amount of exception handling required by throwing runtime exceptions for the cases where there are no
* easy recovery options.
*
* @author John Mazzitelli
* @author Ian Springer
*/
public final class LookupUtil {
/**
* Prevent instantiation.
*/
private LookupUtil() {
// only static access ...
}
/**
* Returns the main data source that can be used to directly access the database.
*
* @return a transactional data source to connect to the database
*/
public static DataSource getDataSource() {
try {
InitialContext context = new InitialContext();
DataSource ds = (DataSource) context.lookup(RHQConstants.DATASOURCE_JNDI_NAME);
context.close();
return ds;
} catch (Exception e) {
throw new RuntimeException("Failed to get the data source", e);
}
}
/**
* Returns the transaction manager that you can use for your own managed transactions.
* Use this sparingly and only inside code that is outside of any CMT-scoped objects.
*
* @return the transaction manager
*/
public static TransactionManager getTransactionManager() {
try {
InitialContext context = new InitialContext();
String jndi = RHQConstants.TRANSACTION_MANAGER_JNDI_NAME;
TransactionManager tm = (TransactionManager) context.lookup(jndi);
context.close();
return tm;
} catch (Exception e) {
throw new RuntimeException("Failed to get the transaction manager", e);
}
}
/**
* Creates and returns an EntityManager that allows you to perform JPA operations.
*
* @return a unique entity manager object
*
* @throws RuntimeException if failed to get the entity manager for some reason
*/
public static EntityManager getEntityManager() {
try {
InitialContext context = new InitialContext();
EntityManagerFactory factory = (EntityManagerFactory) context.lookup(RHQConstants.ENTITY_MANAGER_JNDI_NAME);
context.close();
return factory.createEntityManager();
} catch (Exception e) {
throw new RuntimeException("Failed to create an entity manager", e);
}
}
public static CachedConditionProducerBean getActiveConditionProducer() {
return lookupLocal(CachedConditionProducerBean.class);
}
public static AlertConditionConsumerBean getActiveConditionConsumer() {
return lookupLocal(AlertConditionConsumerBean.class);
}
public static RemoteClientManagerLocal getRemoteClientManager() {
return lookupLocal(RemoteClientManagerBean.class);
}
public static AgentManagerLocal getAgentManager() {
return lookupLocal(AgentManagerBean.class);
}
public static AlertConditionCacheManagerLocal getAlertConditionCacheManager() {
return lookupLocal(AlertConditionCacheManagerBean.class);
}
public static AlertConditionManagerLocal getAlertConditionManager() {
return lookupLocal(AlertConditionManagerBean.class);
}
public static AlertDefinitionManagerLocal getAlertDefinitionManager() {
return lookupLocal(AlertDefinitionManagerBean.class);
}
public static GroupAlertDefinitionManagerLocal getGroupAlertDefinitionManager() {
return lookupLocal(GroupAlertDefinitionManagerBean.class);
}
public static AlertManagerLocal getAlertManager() {
return lookupLocal(AlertManagerBean.class);
}
public static AlertNotificationManagerLocal getAlertNotificationManager() {
return lookupLocal(AlertNotificationManagerBean.class);
}
public static AlertTemplateManagerLocal getAlertTemplateManager() {
return lookupLocal(AlertTemplateManagerBean.class);
}
public static AlertSubsystemManagerLocal getAlertSubsystemManager() {
return lookupLocal(AlertSubsystemManagerBean.class);
}
public static AuthorizationManagerLocal getAuthorizationManager() {
return lookupLocal(AuthorizationManagerBean.class);
}
public static AvailabilityManagerLocal getAvailabilityManager() {
return lookupLocal(AvailabilityManagerBean.class);
}
public static BundleManagerLocal getBundleManager() {
return lookupLocal(BundleManagerBean.class);
}
public static CallTimeDataManagerLocal getCallTimeDataManager() {
return lookupLocal(CallTimeDataManagerBean.class);
}
public static ConfigurationManagerLocal getConfigurationManager() {
return lookupLocal(ConfigurationManagerBean.class);
}
public static DynamicConfigurationPropertyLocal getDynamicConfigurationProperty() {
return lookupLocal(DynamicConfigurationPropertyBean.class);
}
public static ConfigurationSubsystemManagerLocal getConfigurationSubsystemManager() {
return lookupLocal(ConfigurationSubsystemManagerBean.class);
}
public static ContentManagerLocal getContentManager() {
return lookupLocal(ContentManagerBean.class);
}
public static ContentUIManagerLocal getContentUIManager() {
return lookupLocal(ContentUIManagerBean.class);
}
public static DiscoveryBossLocal getDiscoveryBoss() {
return lookupLocal(DiscoveryBossBean.class);
}
public static EmailManagerLocal getEmailManagerBean() {
return lookupLocal(EmailManagerBean.class);
}
public static EntityManagerFacadeLocal getEntityManagerFacade() {
Class<EntityManagerFacade> clazz = EntityManagerFacade.class;
return (EntityManagerFacadeLocal) lookupByName(clazz.getSimpleName(), clazz.getName() + "Local");
}
public static EventManagerLocal getEventManager() {
return lookupLocal(EventManagerBean.class);
}
public static FailoverListManagerLocal getFailoverListManager() {
return lookupLocal(FailoverListManagerBean.class);
}
public static GroupDefinitionManagerLocal getGroupDefinitionManager() {
return lookupLocal(GroupDefinitionManagerBean.class);
}
public static GroupDefinitionExpressionBuilderManagerLocal getGroupDefinitionExpressionBuilderManager() {
return lookupLocal(GroupDefinitionExpressionBuilderManagerBean.class);
}
public static StorageClientManager getStorageClientManager() {
try {
return (StorageClientManager) new InitialContext().lookup(
"java:global/rhq/rhq-server/" + StorageClientManager.class.getSimpleName());
} catch (NamingException e) {
String msg = "Unable to access " + StorageClientManager.class + " due to JNDI error. You may " +
"need to restart the server so that the storage client subsystem can be reinitialized.";
throw new RuntimeException(msg, e);
}
}
public static MeasurementDefinitionManagerLocal getMeasurementDefinitionManager() {
return lookupLocal(MeasurementDefinitionManagerBean.class);
}
public static MeasurementScheduleManagerLocal getMeasurementScheduleManager() {
return lookupLocal(MeasurementScheduleManagerBean.class);
}
public static MeasurementDataManagerLocal getMeasurementDataManager() {
return lookupLocal(MeasurementDataManagerBean.class);
}
public static MeasurementChartsManagerLocal getMeasurementChartsManager() {
return lookupLocal(MeasurementChartsManagerBean.class);
}
public static MeasurementCompressionManagerLocal getMeasurementCompressionManager() {
return lookupLocal(MeasurementCompressionManagerBean.class);
}
public static MeasurementProblemManagerLocal getMeasurementProblemManager() {
return lookupLocal(MeasurementProblemManagerBean.class);
}
public static MeasurementViewManagerLocal getMeasurementViewManager() {
return lookupLocal(MeasurementViewManagerBean.class);
}
public static MeasurementBaselineManagerLocal getMeasurementBaselineManager() {
return lookupLocal(MeasurementBaselineManagerBean.class);
}
public static MeasurementOOBManagerLocal getOOBManager() {
return lookupLocal(MeasurementOOBManagerBean.class);
}
public static OperationManagerLocal getOperationManager() {
return lookupLocal(OperationManagerBean.class);
}
public static OperationHistorySubsystemManagerLocal getOperationHistorySubsystemManager() {
return lookupLocal(OperationHistorySubsystemManagerBean.class);
}
public static PartitionEventManagerLocal getPartitionEventManager() {
return lookupLocal(PartitionEventManagerBean.class);
}
public static ConfigurationMetadataManagerLocal getConfigurationMetadataManager() {
return lookupLocal(ConfigurationMetadataManagerBean.class);
}
public static ContentSourceMetadataManagerLocal getContentSourceMetadataManager() {
return lookupLocal(ContentSourceMetadataManagerBean.class);
}
public static ContentSourceManagerLocal getContentSourceManager() {
return lookupLocal(ContentSourceManagerBean.class);
}
public static DriftManagerLocal getDriftManager() {
return lookupLocal(DriftManagerBean.class);
}
public static DriftTemplateManagerLocal getDriftTemplateManager() {
return lookupLocal(DriftTemplateManagerBean.class);
}
public static JPADriftServerLocal getJPADriftServer() {
return lookupLocal(JPADriftServerBean.class);
}
public static RepoManagerLocal getRepoManagerLocal() {
return lookupLocal(RepoManagerBean.class);
}
public static DistributionManagerLocal getDistributionManagerLocal() {
return lookupLocal(DistributionManagerBean.class);
}
public static AdvisoryManagerLocal getAdvisoryManagerLocal() {
return lookupLocal(AdvisoryManagerBean.class);
}
public static AffinityGroupManagerLocal getAffinityGroupManager() {
return lookupLocal(AffinityGroupManagerBean.class);
}
public static TopologyManagerLocal getTopologyManager() {
return lookupLocal(TopologyManagerBean.class);
}
public static StorageNodeManagerLocal getStorageNodeManager() {
return lookupLocal(StorageNodeManagerBean.class);
}
public static StorageNodeOperationsHandlerLocal getStorageNodeOperationsHandler() {
return lookupLocal(StorageNodeOperationsHandlerBean.class);
}
public static StorageClusterSettingsManagerLocal getStorageClusterSettingsManagerLocal() {
return lookupLocal(StorageClusterSettingsManagerBean.class);
}
public static ClusterManagerLocal getClusterManager() {
return lookupLocal(ClusterManagerBean.class);
}
public static ServerManagerLocal getServerManager() {
return lookupLocal(ServerManagerBean.class);
}
public static CacheConsistencyManagerLocal getCacheConsistencyManager() {
return lookupLocal(CacheConsistencyManagerBean.class);
}
public static RemoteInstallManagerLocal getRemoteInstallManager() {
return lookupLocal(RemoteInstallManagerBean.class);
}
public static PluginManagerLocal getPluginManager() {
return lookupLocal(PluginManagerBean.class);
}
public static ResourceMetadataManagerLocal getResourceMetadataManager() {
return lookupLocal(ResourceMetadataManagerBean.class);
}
public static ResourceBossLocal getResourceBoss() {
return lookupLocal(ResourceBossBean.class);
}
public static ResourceGroupManagerLocal getResourceGroupManager() {
return lookupLocal(ResourceGroupManagerBean.class);
}
public static ResourceManagerLocal getResourceManager() {
return lookupLocal(ResourceManagerBean.class);
}
public static ResourceAvailabilityManagerLocal getResourceAvailabilityManager() {
return lookupLocal(ResourceAvailabilityManagerBean.class);
}
public static ResourceFactoryManagerLocal getResourceFactoryManager() {
return lookupLocal(ResourceFactoryManagerBean.class);
}
public static ResourceTypeManagerLocal getResourceTypeManager() {
return lookupLocal(ResourceTypeManagerBean.class);
}
public static ResourceTypeManagerRemote getResourceTypeManagerRemote() {
return lookupRemote(ResourceTypeManagerBean.class);
}
public static RoleManagerLocal getRoleManager() {
return lookupLocal(RoleManagerBean.class);
}
public static SchedulerLocal getSchedulerBean() {
return lookupLocal(SchedulerBean.class);
}
public static SavedSearchManagerLocal getSavedSearchManager() {
return lookupLocal(SavedSearchManagerBean.class);
}
public static SubjectManagerLocal getSubjectManager() {
return lookupLocal(SubjectManagerBean.class);
}
public static SystemManagerLocal getSystemManager() {
return lookupLocal(SystemManagerBean.class);
}
public static ProductVersionManagerLocal getProductVersionManager() {
return lookupLocal(ProductVersionManagerBean.class);
}
public static CachedConditionProducerLocal getCachedConditionProducerLocal() {
return lookupLocal(CachedConditionProducerBean.class);
}
public static SupportManagerLocal getSupportManager() {
return lookupLocal(SupportManagerBean.class);
}
public static StatusManagerLocal getStatusManager() {
return lookupLocal(StatusManagerBean.class);
}
public static ServerPluginManagerLocal getServerPluginManager() {
return lookupLocal(ServerPluginManagerBean.class);
}
public static TagManagerLocal getTagManager() {
return lookupLocal(TagManagerBean.class);
}
public static InventoryManagerLocal getInventoryManager() {
return lookupLocal(InventoryManagerBean.class);
}
public static DashboardManagerLocal getDashboardManagerLocal() {
return lookupLocal(DashboardManagerBean.class);
}
public static SynchronizationManagerLocal getSynchronizationManager() {
return lookupLocal(SynchronizationManagerBean.class);
}
public static PlatformUtilizationManagerLocal getPlatformUtilizationManager() {
return lookupLocal(PlatformUtilizationManagerBean.class);
}
public static SubjectPreferencesCacheLocal getSubjectPreferencesCache() {
return lookupLocal(SubjectPreferencesCacheBean.class);
}
public static StartupLocal getStartupLocal() {
return lookupLocal(StartupBean.class);
}
public static SystemInfoManagerLocal getSystemInfoManager() {
return lookupLocal(SystemInfoManagerBean.class);
}
public static PurgeManagerLocal getPurgeManager() {
return lookupLocal(PurgeManagerBean.class);
}
public static CoreServerMBean getCoreServer() {
MBeanServer mbs = getJBossMBeanServer();
CoreServerMBean rhqServer = (CoreServerMBean) MBeanProxyExt.create(CoreServerMBean.class,
CoreServerMBean.OBJECT_NAME, mbs);
return rhqServer;
}
public static PluginDeploymentScannerMBean getPluginDeploymentScanner() {
MBeanServer jBossMBeanServer = getJBossMBeanServer();
PluginDeploymentScannerMBean scanner = (PluginDeploymentScannerMBean) MBeanProxyExt.create(
PluginDeploymentScannerMBean.class, PluginDeploymentScannerMBean.OBJECT_NAME, jBossMBeanServer);
return scanner;
}
public static ServerPluginServiceMBean getServerPluginService() {
MBeanServer jBossMBeanServer = getJBossMBeanServer();
ServerPluginServiceMBean service = (ServerPluginServiceMBean) MBeanProxyExt.create(
ServerPluginServiceMBean.class, ServerPluginServiceMBean.OBJECT_NAME, jBossMBeanServer);
return service;
}
private static MBeanServer getJBossMBeanServer() {
// The default MBean server for AS7 is the platform MBeanServer
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
return mbs;
}
/**
* Generic method to lookup an Ejb bean by name and the interface name
*
* @param beanName the name of the EJB bean
* @param interfaceName the full class name of either the remote or local interface
*
* @return the bean accessed through specified interface
*/
public static Object getEjb(String beanName, String interfaceName) {
return lookupByName(beanName, interfaceName);
}
/**
* This is a test bean used only by test code or by things like control.jsp.
*/
public static TestLocal getTest() {
return lookupLocal(TestBean.class);
}
// Private Methods
private static String getLocalJNDIName(String beanName, String interfaceName) {
return "java:global/rhq/rhq-server/" + beanName + "!" + interfaceName;
}
private static <T> String getLocalJNDIName(@NotNull
Class<? extends T> beanClass) {
return getLocalJNDIName(beanClass.getSimpleName(), beanClass.getName().replace("Bean", "Local"));
}
/**
* Returns the JNDI name of the remote interface for the given EJB class.
*
* @param beanClass the EJB class whose remote interface JNDI name is to be returned
*
* @return JNDI name that the remote interface is registered as
*/
private static <T> String getRemoteJNDIName(@NotNull
Class<? extends T> beanClass) {
return ("java:global/rhq/rhq-server/" + beanClass.getSimpleName() + "!" + beanClass.getName()
.replace("Bean", "Remote"));
}
private static <T> T lookupLocal(Class<? extends T> type) {
String localJNDIName = "-not initialized-";
try {
localJNDIName = getLocalJNDIName(type);
return (T) lookup(localJNDIName);
} catch (NamingException e) {
throw new RuntimeException("Failed to lookup local interface to EJB " + type + ", localJNDI=["
+ localJNDIName + "]", e);
}
}
private static Object lookupByName(String beanName, String localInterfaceName) {
String localJNDIName = "-not initialized-";
try {
localJNDIName = getLocalJNDIName(beanName, localInterfaceName);
return lookup(localJNDIName);
} catch (NamingException e) {
throw new RuntimeException("Failed to lookup local interface to EJB " + beanName + ", localJNDI=["
+ localJNDIName + "]", e);
}
}
private static <T> T lookupRemote(Class<? extends T> type) {
try {
return (T) lookup(getRemoteJNDIName(type));
} catch (NamingException e) {
throw new RuntimeException("Failed to lookup remote interface to EJB " + type, e);
}
}
/**
* Looks up the given JNDI name in an initial context and returns the object that was found.
*
* @param name JNDI name to lookup
*
* @return the object that was found
*
* @throws NamingException when resource not found
*/
private static Object lookup(String name) throws NamingException {
InitialContext initialContext = new InitialContext();
try {
return initialContext.lookup(name);
} finally {
initialContext.close();
}
}
public static DataAccessManagerLocal getDataAccessManager() {
return lookupLocal(DataAccessManagerBean.class);
}
public static LdapGroupManagerLocal getLdapGroupManager() {
return lookupLocal(LdapGroupManagerBean.class);
}
}