Roy Golan has uploaded a new change for review. Change subject: core: CDI - EJB cleanup - Backend and Scheduler ......................................................................
core: CDI - EJB cleanup - Backend and Scheduler Remove all Backend and Scheduler EJB annotations and make them regular java beans, basically by adding a default no-args constructor and removing all EJB annotation :) Next, care for an application init method which will load the backend as @Startup is no longer there. Once the CDI container loads the backend it will inject its dependencies, Dbfacade, Scheduler and so on, which will init them implicitly. This means we have a trivial startup routine which is driven by dependencies - load the bean with the most dependencies(here Backend) and the container will init them, if necessary. Change-Id: I126fa3f4240e81814ec9e902cb2e93ce364589ff Signed-off-by: Roy Golan <[email protected]> --- M backend/manager/modules/bll/pom.xml M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/KerberosManager.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/InMemoryLockManager.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java M backend/manager/modules/scheduler/pom.xml M backend/manager/modules/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java A backend/manager/modules/scheduler/src/main/resources/META-INF/beans.xml M frontend/webadmin/modules/frontend/pom.xml M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java 15 files changed, 112 insertions(+), 169 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/19887/1 diff --git a/backend/manager/modules/bll/pom.xml b/backend/manager/modules/bll/pom.xml index 1e7e00b..2b76732 100644 --- a/backend/manager/modules/bll/pom.xml +++ b/backend/manager/modules/bll/pom.xml @@ -8,7 +8,7 @@ </parent> <artifactId>bll</artifactId> - <packaging>ejb</packaging> + <packaging>jar</packaging> <name>Backend Logic @Service bean</name> @@ -67,8 +67,6 @@ <groupId>${engine.groupId}</groupId> <artifactId>scheduler</artifactId> <version>${engine.version}</version> - <scope>provided</scope> - <type>ejb</type> </dependency> <dependency> diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java index 33aac7b5..eb6dba6 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java @@ -6,23 +6,16 @@ import java.util.concurrent.TimeUnit; import javax.annotation.PostConstruct; -import javax.ejb.ConcurrencyManagement; -import javax.ejb.ConcurrencyManagementType; -import javax.ejb.DependsOn; -import javax.ejb.Local; -import javax.ejb.Singleton; import javax.ejb.Startup; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; import javax.interceptor.ExcludeClassInterceptors; -import javax.interceptor.Interceptors; import org.apache.commons.collections.KeyValue; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.ovirt.engine.core.bll.attestationbroker.AttestThread; import org.ovirt.engine.core.bll.context.CommandContext; -import org.ovirt.engine.core.bll.interceptors.ThreadLocalSessionCleanerInterceptor; import org.ovirt.engine.core.bll.interfaces.BackendCommandObjectsHandler; import org.ovirt.engine.core.bll.interfaces.BackendInternal; import org.ovirt.engine.core.bll.job.ExecutionContext; @@ -45,7 +38,6 @@ import org.ovirt.engine.core.common.config.ConfigCommon; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBllMessages; -import org.ovirt.engine.core.common.interfaces.BackendLocal; import org.ovirt.engine.core.common.interfaces.ErrorTranslator; import org.ovirt.engine.core.common.interfaces.ITagsHandler; import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend; @@ -72,24 +64,11 @@ import org.ovirt.engine.core.utils.ejb.BeanType; import org.ovirt.engine.core.utils.ejb.EjbUtils; import org.ovirt.engine.core.utils.log.Log; -import org.ovirt.engine.core.utils.log.LogFactory; import org.ovirt.engine.core.utils.osinfo.OsInfoPreferencesLoader; import org.ovirt.engine.core.utils.timer.SchedulerUtilQuartzImpl; -// Here we use a Singleton Bean -// The @Startup annotation is to make sure the bean is initialized on startup. -// @ConcurrencyManagement - we use bean managed concurrency: -// Singletons that use bean-managed concurrency allow full concurrent access -// to all the business and timeout methods in the singleton. -// The developer of the singleton is responsible for ensuring that the state -// of the singleton is synchronized across all clients. -@DependsOn("Scheduler") -@Local({ BackendLocal.class, BackendInternal.class, BackendCommandObjectsHandler.class }) -@Interceptors({ ThreadLocalSessionCleanerInterceptor.class }) -@Singleton +@ApplicationScoped @Startup -@TransactionAttribute(TransactionAttributeType.SUPPORTS) -@ConcurrencyManagement(ConcurrencyManagementType.BEAN) public class Backend implements BackendInternal, BackendCommandObjectsHandler { private ITagsHandler mTagsHandler; @@ -99,6 +78,12 @@ private static boolean firstInitialization = true; private String poolMonitoringJobId; private String autoStartVmsRunnerJobId; + + @Inject + private Log log; + @Inject + private SchedulerUtilQuartzImpl quartz; + public static BackendInternal getInstance() { return EjbUtils.findBean(BeanType.BACKEND, BeanProxyType.LOCAL); @@ -130,7 +115,7 @@ Initialize(); } - private static void checkDBConnectivity() { + private void checkDBConnectivity() { boolean dbUp = false; long expectedTimeout = System.currentTimeMillis() @@ -163,10 +148,6 @@ return _startedAt; } - /** - * Initializes internal data - * <exception>VdcBLL.VdcBLLException - */ @Override public void Initialize() { log.info("Start initializing " + getClass().getSimpleName()); @@ -221,7 +202,7 @@ Integer sessionTimeOutInvalidationInterval = Config.<Integer> GetValue(ConfigValues.UserSessionTimeOutInvalidationInterval); // negative value means session should never expire, therefore no need to clean sessions. if (sessionTimeoutInterval > 0) { - SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(SessionDataContainer.getInstance(), + quartz.scheduleAFixedDelayJob(SessionDataContainer.getInstance(), "cleanExpiredUsersSessions", new Class[] {}, new Object[] {}, sessionTimeoutInterval, sessionTimeOutInvalidationInterval, TimeUnit.MINUTES); @@ -232,8 +213,8 @@ int vmPoolMonitorIntervalInMinutes = Config.<Integer> GetValue(ConfigValues.VmPoolMonitorIntervalInMinutes); poolMonitoringJobId = - SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(new VmPoolMonitor(), - "managePrestartedVmsInAllVmPools", new Class[] {}, new Object[] {}, + quartz.scheduleAFixedDelayJob(new VmPoolMonitor(), + "managePrestartedVmsInAllVmPools", new Class[]{}, new Object[]{}, vmPoolMonitorIntervalInMinutes, vmPoolMonitorIntervalInMinutes, TimeUnit.MINUTES); @@ -245,8 +226,8 @@ autoStartVmsRunnerIntervalInSeconds, TimeUnit.SECONDS); int quotaCacheIntervalInMinutes = Config.<Integer> GetValue(ConfigValues.QuotaCacheIntervalInMinutes); - SchedulerUtilQuartzImpl.getInstance().scheduleAFixedDelayJob(QuotaManager.getInstance(), - "updateQuotaCache", new Class[] {}, new Object[] {}, + quartz.scheduleAFixedDelayJob(QuotaManager.getInstance(), + "updateQuotaCache", new Class[]{}, new Object[]{}, 1, quotaCacheIntervalInMinutes, TimeUnit.MINUTES); //initializes attestation initAttestation(); @@ -312,7 +293,7 @@ /** * Handles compensation in case of uncompleted compensation-aware commands resulted from server failure. */ - private static void compensate() { + private void compensate() { // get all command snapshot entries List<KeyValue> commandSnapshots = DbFacade.getInstance().getBusinessEntitySnapshotDao().getAllCommands(); @@ -666,7 +647,7 @@ @Override @ExcludeClassInterceptors public void triggerPoolMonitoringJob() { - SchedulerUtilQuartzImpl.getInstance().triggerJob(poolMonitoringJobId); + quartz.triggerJob(poolMonitoringJobId); } private void initOsRepository() { @@ -687,5 +668,4 @@ return runAction(action, true, ExecutionHandler.createDefaultContexForTasks(executionContext)); } - private static final Log log = LogFactory.getLog(Backend.class); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java index 3886002..6a55376 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java @@ -7,6 +7,7 @@ import javax.ejb.DependsOn; import javax.ejb.Singleton; import javax.ejb.Startup; +import javax.inject.Inject; import org.ovirt.engine.core.bll.gluster.GlusterJobsManager; import org.ovirt.engine.core.bll.job.ExecutionHandler; @@ -30,17 +31,14 @@ * The following bean is created in order to initialize and start all related vdsms schedulers * in the system after all beans finished initialization */ -@Singleton -@Startup -@DependsOn({ "Backend"}) public class InitBackendServicesOnStartupBean implements InitBackendServicesOnStartup{ - private static Log log = LogFactory.getLog(InitBackendServicesOnStartupBean.class); + @Inject + private Log log; - /** - * This method is called upon the bean creation as part - * of the management Service bean life cycle. - */ + @Inject + Backend backend; + @Override @PostConstruct public void create() { @@ -55,7 +53,7 @@ public void migrateVM(List<Guid> initialHosts, Guid vmToMigrate) { MigrateVmParameters parameters = new MigrateVmParameters(false, vmToMigrate); parameters.setInitialHosts(new ArrayList<Guid>(initialHosts)); - Backend.getInstance().runInternalAction(VdcActionType.MigrateVm, + backend.runInternalAction(VdcActionType.MigrateVm, parameters, ExecutionHandler.createInternalJobContext()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java index 34bc364..3a96c1d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java @@ -4,11 +4,7 @@ import java.util.List; import java.util.Map; -import javax.ejb.DependsOn; -import javax.ejb.Local; -import javax.ejb.Stateless; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; +import javax.inject.Inject; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.job.ExecutionContext; @@ -52,15 +48,16 @@ import org.ovirt.engine.core.utils.linq.Function; import org.ovirt.engine.core.utils.linq.LinqUtils; import org.ovirt.engine.core.utils.log.Log; -import org.ovirt.engine.core.utils.log.LogFactory; import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; import org.ovirt.engine.core.vdsbroker.MonitoringStrategyFactory; -@Stateless(name = "VdsEventListener") -@TransactionAttribute(TransactionAttributeType.SUPPORTS) -@Local(IVdsEventListener.class) -@DependsOn("Backend") public class VdsEventListener implements IVdsEventListener { + + @Inject + Backend backend; + + @Inject + private Log log; @Override public void vdsMovedToMaintenance(VDS vds) { @@ -77,7 +74,7 @@ new StorageDomainPoolParametersBase(storageDomainId, storagePoolId); parameters.setIsInternal(true); parameters.setInactive(true); - boolean isSucceeded = Backend.getInstance().runInternalAction(VdcActionType.DeactivateStorageDomain, + boolean isSucceeded = backend.runInternalAction(VdcActionType.DeactivateStorageDomain, parameters, ExecutionHandler.createInternalJobContext()).getSucceeded(); return new EventResult(isSucceeded, EventType.DOMAINNOTOPERATIONAL); @@ -86,7 +83,7 @@ @Override public EventResult masterDomainNotOperational(Guid storageDomainId, Guid storagePoolId, boolean isReconstructToInactiveDomains) { VdcActionParametersBase parameters = new ReconstructMasterParameters(storagePoolId, storageDomainId, true, isReconstructToInactiveDomains); - boolean isSucceeded = Backend.getInstance().runInternalAction(VdcActionType.ReconstructMasterDomain, + boolean isSucceeded = backend.runInternalAction(VdcActionType.ReconstructMasterDomain, parameters, ExecutionHandler.createInternalJobContext()).getSucceeded(); return new EventResult(isSucceeded, EventType.RECONSTRUCT); @@ -113,7 +110,7 @@ tempVar.setSaveToDb(saveToDb); tempVar.setStorageDomainId(domainId); tempVar.setShouldBeLogged(logCommand); - Backend.getInstance().runInternalAction(VdcActionType.SetNonOperationalVds, tempVar, ExecutionHandler.createInternalJobContext()); + backend.runInternalAction(VdcActionType.SetNonOperationalVds, tempVar, ExecutionHandler.createInternalJobContext()); } @Override @@ -130,7 +127,7 @@ if (executeSshSoftFencing) { VdcReturnValueBase retVal = - Backend.getInstance().runInternalAction(VdcActionType.SshSoftFencing, + backend.runInternalAction(VdcActionType.SshSoftFencing, new VdsActionParameters(vds.getId()), ExecutionHandler.createInternalJobContext()); // if SSH Soft Fencing command execution was successful, do not execute @@ -140,7 +137,7 @@ if (MonitoringStrategyFactory.getMonitoringStrategyForVds(vds).isPowerManagementSupported() && shouldExecRealFencing) { - Backend.getInstance().runInternalAction(VdcActionType.VdsNotRespondingTreatment, + backend.runInternalAction(VdcActionType.VdsNotRespondingTreatment, new FenceVdsActionParameters(vds.getId(), FenceActionType.Restart), ExecutionHandler.createInternalJobContext()); } @@ -151,7 +148,7 @@ @Override public boolean vdsUpEvent(final VDS vds) { HostStoragePoolParametersBase params = new HostStoragePoolParametersBase(vds); - boolean isSucceeded = Backend.getInstance().runInternalAction(VdcActionType.InitVdsOnUp, params).getSucceeded(); + boolean isSucceeded = backend.runInternalAction(VdcActionType.InitVdsOnUp, params).getSucceeded(); if (isSucceeded) { ThreadPoolUtil.execute(new Runnable() { @Override @@ -177,7 +174,7 @@ })); ExecutionContext executionContext = new ExecutionContext(); executionContext.setMonitored(true); - Backend.getInstance().runInternalMultipleActions(VdcActionType.MigrateVmToServer, + backend.runInternalMultipleActions(VdcActionType.MigrateVmToServer, vmToServerParametersList, executionContext); } @@ -203,32 +200,32 @@ @Override public void processOnCpuFlagsChange(Guid vdsId) { - Backend.getInstance().runInternalAction(VdcActionType.HandleVdsCpuFlagsOrClusterChanged, + backend.runInternalAction(VdcActionType.HandleVdsCpuFlagsOrClusterChanged, new VdsActionParameters(vdsId)); } @Override public void handleVdsVersion(Guid vdsId) { - Backend.getInstance().runInternalAction(VdcActionType.HandleVdsVersion, new VdsActionParameters(vdsId)); + backend.runInternalAction(VdcActionType.HandleVdsVersion, new VdsActionParameters(vdsId)); } @Override public void processOnVmPoweringUp(Guid vds_id, Guid vmid, String display_ip, int display_port) { - IVdsAsyncCommand command = Backend.getInstance().getResourceManager().GetAsyncCommandForVm(vmid); + IVdsAsyncCommand command = backend.getResourceManager().GetAsyncCommandForVm(vmid); if (command != null) { command.onPowerringUp(); if (command.getAutoStart() && command.getAutoStartVdsId() != null) { try { String otp64 = Ticketing.GenerateOTP(); - Backend.getInstance() + backend .getResourceManager() .RunVdsCommand(VDSCommandType.SetVmTicket, new SetVmTicketVDSCommandParameters(vds_id, vmid, otp64, 60, "", Guid.Empty)); log.infoFormat( "VdsEventListener.ProcessOnVmPoweringUp - Auto start logic, starting spice to vm - {0} ", vmid); - Backend.getInstance() + backend .getResourceManager() .RunVdsCommand( VDSCommandType.StartSpice, @@ -269,7 +266,7 @@ if (transactionScopeOption != null) { tempVar.setTransactionScopeOption(transactionScopeOption); } - Backend.getInstance().runInternalAction(VdcActionType.SetStoragePoolStatus, tempVar); + backend.runInternalAction(VdcActionType.SetStoragePoolStatus, tempVar); } @Override @@ -289,7 +286,7 @@ event.getVmName(), vmId); // Try to start it again: - final VdcReturnValueBase result = Backend.getInstance().runInternalAction(VdcActionType.RunVm, + final VdcReturnValueBase result = backend.runInternalAction(VdcActionType.RunVm, new RunVmParams(vmId), ExecutionHandler.createInternalJobContext()); @@ -322,7 +319,7 @@ @Override public void rerun(Guid vmId) { - final IVdsAsyncCommand command = Backend.getInstance().getResourceManager().GetAsyncCommandForVm(vmId); + final IVdsAsyncCommand command = backend.getResourceManager().GetAsyncCommandForVm(vmId); if (command != null) { // The command will be invoked in a different VDS in its rerun method, so we're calling // its rerun method from a new thread so that it won't be executed within our current VDSM lock @@ -337,7 +334,7 @@ @Override public void runningSucceded(Guid vmId) { - IVdsAsyncCommand command = Backend.getInstance().getResourceManager().GetAsyncCommandForVm(vmId); + IVdsAsyncCommand command = backend.getResourceManager().GetAsyncCommandForVm(vmId); if (command != null) { command.runningSucceded(); } @@ -345,11 +342,10 @@ @Override public void removeAsyncRunningCommand(Guid vmId) { - IVdsAsyncCommand command = Backend.getInstance().getResourceManager().RemoveAsyncRunningCommand(vmId); + IVdsAsyncCommand command = backend.getResourceManager().RemoveAsyncRunningCommand(vmId); if (command != null) { command.reportCompleted(); } } - private static Log log = LogFactory.getLog(VdsEventListener.class); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/KerberosManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/KerberosManager.java index a11fee7..27cf850 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/KerberosManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/KerberosManager.java @@ -2,6 +2,7 @@ import java.io.File; +import org.ovirt.engine.core.common.config.AppConfig; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; @@ -15,31 +16,27 @@ import javax.ejb.Startup; import javax.ejb.ConcurrencyManagement; import javax.ejb.ConcurrencyManagementType; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; /** * Manage the container's Kerberos initialization. * */ -// Here we use a Singleton bean -// The @Startup annotation is to make sure the bean is initialized on startup. -// @ConcurrencyManagement - we use bean managed concurrency: -// Singletons that use bean-managed concurrency allow full concurrent access to all the -// business and timeout methods in the singleton. -// The developer of the singleton is responsible for ensuring that the state of the singleton is synchronized across all clients. -// The @DependsOn annotation is in order to make sure it is started after the Backend bean is initialized +@ApplicationScoped @SuppressWarnings("restriction") -@Singleton -@Startup -@DependsOn("Backend") -@ConcurrencyManagement(ConcurrencyManagementType.BEAN) public class KerberosManager implements KerberosManagerSericeManagmentMBean { - private static Log log = LogFactory.getLog(KerberosManager.class); + @Inject + private Log log; + + @Inject + AppConfig config; private boolean isKerberosAuth() { boolean isKerberosAuth = false; - String authMethod = org.ovirt.engine.core.common.config.Config.<String> GetValue(ConfigValues.AuthenticationMethod); - String domainName = org.ovirt.engine.core.common.config.Config.<String> GetValue(ConfigValues.DomainName); + String authMethod = config.<String> getValue(ConfigValues.AuthenticationMethod); + String domainName = config.<String> getValue(ConfigValues.DomainName); String ldapSecurityAuthentication = org.ovirt.engine.core.common.config.Config.<String> GetValue(ConfigValues.LDAPSecurityAuthentication); if (authMethod.equalsIgnoreCase("LDAP")) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java index 7be4df5..13bc902 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java @@ -9,23 +9,15 @@ import java.util.concurrent.ConcurrentHashMap; import javax.annotation.PostConstruct; -import javax.ejb.Local; -import javax.ejb.Singleton; -import javax.ejb.DependsOn; -import javax.ejb.Startup; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; -import javax.ejb.ConcurrencyManagement; -import javax.ejb.ConcurrencyManagementType; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.DbUserCacheManager; import org.ovirt.engine.core.common.businessentities.LdapGroup; -import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.AppConfig; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.utils.EnumUtils; -import org.ovirt.engine.core.utils.log.Log; -import org.ovirt.engine.core.utils.log.LogFactory; import org.ovirt.engine.core.dal.dbbroker.generic.DomainsPasswordMap; import org.ovirt.engine.core.ldap.LdapProviderType; import org.ovirt.engine.core.ldap.LdapSRVLocator; @@ -35,24 +27,16 @@ import org.ovirt.engine.core.utils.ejb.EjbUtils; import org.ovirt.engine.core.utils.kerberos.AuthenticationResult; import org.ovirt.engine.core.utils.kerberos.KerberosUtils; +import org.ovirt.engine.core.utils.log.Log; -// Here we use a Singleton bean -// The @Startup annotation is to make sure the bean is initialized on startup. -// @ConcurrencyManagement - we use bean managed concurrency: -// Singletons that use bean-managed concurrency allow full concurrent access to all the -// business and timeout methods in the singleton. -// The developer of the singleton is responsible for ensuring that the state of the singleton is synchronized across all clients. -// The @DependsOn annotation is in order to make sure it is started after the stated beans are initialized -@Singleton -@Startup -@DependsOn({"Backend","Scheduler","KerberosManager"}) -@Local(UsersDomainsCacheManager.class) -@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) -@ConcurrencyManagement(ConcurrencyManagementType.BEAN) +@ApplicationScoped public class UsersDomainsCacheManagerService implements UsersDomainsCacheManager { - private static Log log = LogFactory.getLog(UsersDomainsCacheManagerService.class); + @Inject + private Log log; + @Inject + AppConfig config; private Map<String, Domain> domainsByName = new HashMap<String, Domain>(); private Map<String, ConcurrentHashMap<String, UserDomainInfo>> domainsUsersInfoByUserNameAndDomainName = new HashMap<String, ConcurrentHashMap<String, UserDomainInfo>>(); @@ -71,10 +55,10 @@ } private void fillLdapServersMap() { - String ldapServerPerDomainEntry = Config.<String> GetValue(ConfigValues.LdapServers); + String ldapServerPerDomainEntry = config.<String> getValue(ConfigValues.LdapServers); if (!ldapServerPerDomainEntry.isEmpty()) { String[] domainServerPairs = ldapServerPerDomainEntry.split(","); - int ldapPort = Config.<Integer> GetValue(ConfigValues.LDAPServerPort); + int ldapPort = config.<Integer> getValue(ConfigValues.LDAPServerPort); for (String domainServerPair : domainServerPairs) { String[] parts = domainServerPair.split(":"); @@ -103,7 +87,7 @@ // use // Note that every change in one will probably require the same change in the other private void fillUsersMap() { - String userPerDomainEntry = Config.<String> GetValue(ConfigValues.AdUserName); + String userPerDomainEntry = config.<String> getValue(ConfigValues.AdUserName); if (!userPerDomainEntry.isEmpty()) { String[] domainUserPairs = userPerDomainEntry.split(","); @@ -118,12 +102,12 @@ } private void fillPasswordsMap() { - passwordPerDomain = Config.<DomainsPasswordMap> GetValue(ConfigValues.AdUserPassword); + passwordPerDomain = config.<DomainsPasswordMap> getValue(ConfigValues.AdUserPassword); } private void fillLdapSecurityAuthenticationMap() { - String ldapSecurityAuthEntry = Config.<String> GetValue(ConfigValues.LDAPSecurityAuthentication); + String ldapSecurityAuthEntry = config.<String> getValue(ConfigValues.LDAPSecurityAuthentication); if (!ldapSecurityAuthEntry.isEmpty()) { String[] ldapSecurityPairs = ldapSecurityAuthEntry.split(","); @@ -151,7 +135,7 @@ public void create() { log.info("Start initializing " + getClass().getSimpleName()); - String authMethod = Config.<String> GetValue(ConfigValues.AuthenticationMethod); + String authMethod = config.<String> getValue(ConfigValues.AuthenticationMethod); if (!authMethod.equalsIgnoreCase("LDAP")) { return; } @@ -192,7 +176,7 @@ */ protected Map<String, LdapProviderType> parseLDAPProviders() { Map<String, LdapProviderType> domainProviderTypes = new HashMap<String, LdapProviderType>(); - for (String pair : StringUtils.split(Config.<String> GetValue(ConfigValues.LDAPProviderTypes), ",")) { + for (String pair : StringUtils.split(config.<String> getValue(ConfigValues.LDAPProviderTypes), ",")) { if (pair != null) { String[] split = StringUtils.split(pair, ":"); if (split != null && split[0] != null && split[1] != null) { @@ -261,7 +245,7 @@ } private void constructLDAPUrlOnDNSFailure(Domain domain) { - int ldapPort = Config.<Integer> GetValue(ConfigValues.LDAPServerPort); + int ldapPort = config.<Integer> getValue(ConfigValues.LDAPServerPort); StringBuilder ldapURL = new StringBuilder(); ldapURL.append("ldap://").append(domain.getName()).append(":").append(ldapPort); try { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java index 51db089..3b374dc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/eventqueue/EventQueueMonitor.java @@ -10,12 +10,8 @@ import java.util.concurrent.FutureTask; import java.util.concurrent.locks.ReentrantLock; -import javax.ejb.ConcurrencyManagement; -import javax.ejb.ConcurrencyManagementType; -import javax.ejb.Local; -import javax.ejb.Singleton; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; import org.ovirt.engine.core.common.eventqueue.Event; import org.ovirt.engine.core.common.eventqueue.EventQueue; @@ -24,16 +20,13 @@ import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.utils.log.Log; -import org.ovirt.engine.core.utils.log.LogFactory; import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil; -@Singleton(name = "EventQueue") -@ConcurrencyManagement(ConcurrencyManagementType.BEAN) -@TransactionAttribute(TransactionAttributeType.SUPPORTS) -@Local(EventQueue.class) +@ApplicationScoped public class EventQueueMonitor implements EventQueue { - private static Log log = LogFactory.getLog(EventQueueMonitor.class); + @Inject + Log log; private static final ConcurrentMap<Guid, ReentrantLock> poolsLockMap = new ConcurrentHashMap<Guid, ReentrantLock>(); private static final Map<Guid, LinkedList<Pair<Event, FutureTask<EventResult>>>> poolsEventsMap = @@ -151,7 +144,7 @@ return poolsLockMap.get(poolId); } - private static class InternalEventQueueThread implements Runnable { + private class InternalEventQueueThread implements Runnable { private Guid storagePoolId; private ReentrantLock lock; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/InMemoryLockManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/InMemoryLockManager.java index dbc3c26..deb7827 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/InMemoryLockManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/InMemoryLockManager.java @@ -22,6 +22,8 @@ import javax.ejb.Startup; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; import javax.management.MBeanServer; import javax.management.ObjectName; @@ -34,11 +36,7 @@ /** * The following class an implementation of internal locking mechanism */ -@Startup -@Singleton(name = "LockManager") -@ConcurrencyManagement(ConcurrencyManagementType.BEAN) -@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) -@Local(LockManager.class) +@ApplicationScoped public class InMemoryLockManager implements LockManager, LockManagerMonitorMXBean { private static final Pair<Boolean, Set<String>> LOCK_INSERT_SUCCESS_RESULT = new Pair<Boolean, Set<String>>(Boolean.TRUE, Collections.<String>emptySet()); @@ -51,7 +49,8 @@ private MBeanServer platformMBeanServer; private ObjectName objectName = null; - private static Log log = LogFactory.getLog(InMemoryLockManager.class); + @Inject + private Log log; @PostConstruct public void registerInJMX() { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java index 8391659..7b12181 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java @@ -5,6 +5,7 @@ * Config Class */ public final class Config implements AppConfig { + private static IConfigUtilsInterface _configUtils; private static Config instance = new Config(); diff --git a/backend/manager/modules/scheduler/pom.xml b/backend/manager/modules/scheduler/pom.xml index 6c6a466..5b8706b 100644 --- a/backend/manager/modules/scheduler/pom.xml +++ b/backend/manager/modules/scheduler/pom.xml @@ -8,7 +8,7 @@ </parent> <artifactId>scheduler</artifactId> - <packaging>ejb</packaging> + <packaging>jar</packaging> <name>engine scheduler bean</name> @@ -29,6 +29,11 @@ <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> </dependency> + + <dependency> + <groupId>javax.enterprise</groupId> + <artifactId>cdi-api</artifactId> + </dependency> </dependencies> <build> diff --git a/backend/manager/modules/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java b/backend/manager/modules/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java index 82e5280..9b09534 100644 --- a/backend/manager/modules/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java +++ b/backend/manager/modules/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java @@ -14,16 +14,9 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; -import javax.ejb.ConcurrencyManagement; -import javax.ejb.ConcurrencyManagementType; -import javax.ejb.DependsOn; -import javax.ejb.Singleton; -import javax.ejb.Startup; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; +import javax.inject.Inject; import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.utils.ejb.BeanProxyType; @@ -38,17 +31,6 @@ import org.quartz.TriggerKey; import org.quartz.impl.StdSchedulerFactory; -// Here we use a Singleton bean, names Scheduler. -// The @Startup annotation is to make sure the bean is initialized on startup. -// @ConcurrencyManagement - we use bean managed concurrency: -// Singletons that use bean-managed concurrency allow full concurrent access to all the -// business and timeout methods in the singleton. -// The developer of the singleton is responsible for ensuring that the state of the singleton is synchronized across all clients. -@Singleton(name = "Scheduler") -@DependsOn("LockManager") -@Startup -@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) -@ConcurrencyManagement(ConcurrencyManagementType.BEAN) public class SchedulerUtilQuartzImpl implements SchedulerUtil { // consts @@ -61,8 +43,8 @@ public static final String CONFIGURABLE_DELAY_KEY_NAME = "configDelayKeyName"; private static final String TRIGGER_PREFIX = "trigger"; - // members - private final Log log = LogFactory.getLog(SchedulerUtilQuartzImpl.class); + @Inject + private Log log; private Scheduler sched; private final AtomicLong sequenceNumber = new AtomicLong(Long.MIN_VALUE); diff --git a/backend/manager/modules/scheduler/src/main/resources/META-INF/beans.xml b/backend/manager/modules/scheduler/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/backend/manager/modules/scheduler/src/main/resources/META-INF/beans.xml diff --git a/frontend/webadmin/modules/frontend/pom.xml b/frontend/webadmin/modules/frontend/pom.xml index 3e5ed74..5c0806e 100644 --- a/frontend/webadmin/modules/frontend/pom.xml +++ b/frontend/webadmin/modules/frontend/pom.xml @@ -55,6 +55,11 @@ <version>${engine.version}</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>javax.inject</groupId> + <artifactId>javax.inject</artifactId> + <version>1</version> + </dependency> </dependencies> <build> <resources> diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java index 780947a..0baabb7 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GenericApiGWTServiceImpl.java @@ -4,6 +4,7 @@ import java.util.Random; import javax.ejb.EJB; +import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @@ -33,10 +34,13 @@ private static final Logger log = Logger.getLogger(GenericApiGWTServiceImpl.class); + @Inject private BackendLocal backend; - @EJB(beanInterface = BackendLocal.class, - mappedName = "java:global/engine/bll/Backend!org.ovirt.engine.core.common.interfaces.BackendLocal") + public GenericApiGWTServiceImpl() { + } + + @Inject public void setBackend(BackendLocal backend) { this.backend = backend; } diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java index c392d3f..b782320 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java @@ -6,6 +6,7 @@ import java.util.Locale; import javax.ejb.EJB; +import javax.inject.Inject; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; @@ -73,13 +74,13 @@ private static final String HOST_JSP = "/GwtHostPage.jsp"; //$NON-NLS-1$ private static final String UTF_CONTENT_TYPE = "text/html; charset=UTF-8"; //$NON-NLS-1$ + @Inject private BackendLocal backend; private ObjectMapper mapper; private BrandingManager brandingManager; - @EJB(beanInterface = BackendLocal.class, - mappedName = "java:global/engine/bll/Backend!org.ovirt.engine.core.common.interfaces.BackendLocal") + @Inject public void setBackend(BackendLocal backend) { this.backend = backend; } -- To view, visit http://gerrit.ovirt.org/19887 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I126fa3f4240e81814ec9e902cb2e93ce364589ff Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Roy Golan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
