Hook log4j to Spring bootstrapped Javelin server
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/b96bb8fe Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/b96bb8fe Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/b96bb8fe Branch: refs/heads/javelin Commit: b96bb8feb9ef44dab99238712bf0d8b83b406466 Parents: 559933f Author: Kelven Yang <[email protected]> Authored: Mon Jan 7 18:21:58 2013 -0800 Committer: Kelven Yang <[email protected]> Committed: Mon Jan 7 18:21:58 2013 -0800 ---------------------------------------------------------------------- .../entity/api/db/dao/HostDetailsDaoImpl.java | 2 +- server/src/com/cloud/server/ManagementServer.java | 2 + .../com/cloud/server/ManagementServerExtImpl.java | 45 +++++---- .../src/com/cloud/server/ManagementServerImpl.java | 61 +++++++++++- .../src/com/cloud/servlet/CloudStartupServlet.java | 74 ++++---------- 5 files changed, 104 insertions(+), 80 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b96bb8fe/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java ---------------------------------------------------------------------- diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java index 87d516b..ee5c809 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostDetailsDaoImpl.java @@ -31,7 +31,7 @@ import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; -//@Component(value="EngineHostDetailsDao") +@Component(value="EngineHostDetailsDao") @Local(value=HostDetailsDao.class) public class HostDetailsDaoImpl extends GenericDaoBase<DetailVO, Long> implements HostDetailsDao { protected final SearchBuilder<DetailVO> HostSearch; http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b96bb8fe/server/src/com/cloud/server/ManagementServer.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index 941d30c..0b77acd 100755 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -38,6 +38,8 @@ public interface ManagementServer extends ManagementService { */ long getId(); + void startup(); + /** * Fetches the version of cloud stack */ http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b96bb8fe/server/src/com/cloud/server/ManagementServerExtImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java index 992d006..8c4b388 100644 --- a/server/src/com/cloud/server/ManagementServerExtImpl.java +++ b/server/src/com/cloud/server/ManagementServerExtImpl.java @@ -23,6 +23,12 @@ import java.util.List; import java.util.Map; import java.util.TimeZone; +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + import com.cloud.api.commands.GenerateUsageRecordsCmd; import com.cloud.api.commands.GetUsageRecordsCmd; import com.cloud.domain.dao.DomainDao; @@ -39,33 +45,32 @@ import com.cloud.user.Account; import com.cloud.user.AccountVO; import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; -import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.db.Filter; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; +@Component +@Primary public class ManagementServerExtImpl extends ManagementServerImpl implements ManagementServerExt { - private final AccountDao _accountDao; - private final DomainDao _domainDao; - private final UsageDao _usageDao; - private final UsageJobDao _usageJobDao; - private final TimeZone _usageTimezone; - - protected ManagementServerExtImpl() { - super(); - - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - _accountDao = locator.getDao(AccountDao.class); - _domainDao = locator.getDao(DomainDao.class); - _usageDao = locator.getDao(UsageDao.class); - _usageJobDao = locator.getDao(UsageJobDao.class); + @Inject private AccountDao _accountDao; + @Inject private DomainDao _domainDao; + @Inject private UsageDao _usageDao; + @Inject private UsageJobDao _usageJobDao; + private TimeZone _usageTimezone; + public ManagementServerExtImpl() { + } + + @PostConstruct + void init() { + super.init(); + Map<String, String> configs = getConfigs(); - String timeZoneStr = configs.get("usage.aggregation.timezone"); - if (timeZoneStr == null) { - timeZoneStr = "GMT"; - } - _usageTimezone = TimeZone.getTimeZone(timeZoneStr); + String timeZoneStr = configs.get("usage.aggregation.timezone"); + if (timeZoneStr == null) { + timeZoneStr = "GMT"; + } + _usageTimezone = TimeZone.getTimeZone(timeZoneStr); } @Override http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b96bb8fe/server/src/com/cloud/server/ManagementServerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 0780bdd..d98825b 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -221,10 +221,12 @@ import com.cloud.utils.Ternary; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentContext; import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.SystemIntegrityChecker; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; +import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.JoinBuilder.JoinType; @@ -314,11 +316,11 @@ public class ManagementServerImpl implements ManagementServer { @Inject private ConfigurationManager _configMgr; @Inject private ResourceTagDao _resourceTagDao; - @Inject private ProjectManager _projectMgr; - @Inject private ResourceManager _resourceMgr; - @Inject private SnapshotManager _snapshotMgr; - @Inject private HighAvailabilityManager _haMgr; - @Inject private HostTagsDao _hostTagsDao; + @Inject ProjectManager _projectMgr; + @Inject ResourceManager _resourceMgr; + @Inject SnapshotManager _snapshotMgr; + @Inject HighAvailabilityManager _haMgr; + @Inject HostTagsDao _hostTagsDao; @Inject ComponentContext _placeholder; @@ -357,7 +359,54 @@ public class ManagementServerImpl implements ManagementServer { _availableIdsMap.put(id, true); } } - + + public void startup() { + s_logger.info("Startup CloudStack management server..."); + initCloudStackComponents(); + } + + private void initCloudStackComponents() { + runCheckers(); + startDaos(); // daos should not be using managers and adapters. + +/* + configureManagers(); + configureAdapters(); + startManagers(); + startAdapters(); +*/ + } + + private void runCheckers() { + Map<String, SystemIntegrityChecker> checkers = ComponentContext.getApplicationContext().getBeansOfType( + SystemIntegrityChecker.class); + + for(SystemIntegrityChecker checker : checkers.values()) { + try { + checker.check(); + } catch (Exception e) { + s_logger.error("Problems with running checker:" + checker.getClass().getName(), e); + System.exit(1); + } + } + } + + private void startDaos() { + @SuppressWarnings("rawtypes") + Map<String, GenericDaoBase> daos = ComponentContext.getApplicationContext().getBeansOfType( + GenericDaoBase.class); + + for(GenericDaoBase dao : daos.values()) { + try { + + // dao.configure(dao.getClass().getSimpleName(), params); + } catch (Exception e) { + s_logger.error("Problems with running checker:" + dao.getClass().getName(), e); + System.exit(1); + } + } + } + protected Map<String, String> getConfigs() { return _configs; } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b96bb8fe/server/src/com/cloud/servlet/CloudStartupServlet.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/servlet/CloudStartupServlet.java b/server/src/com/cloud/servlet/CloudStartupServlet.java index c3ce52f..dfd4c60 100755 --- a/server/src/com/cloud/servlet/CloudStartupServlet.java +++ b/server/src/com/cloud/servlet/CloudStartupServlet.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.servlet; -import java.util.Map; +import java.io.File; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; @@ -24,32 +24,32 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.apache.log4j.Logger; +import org.apache.log4j.PropertyConfigurator; +import org.apache.log4j.xml.DOMConfigurator; import com.cloud.api.ApiServer; import com.cloud.exception.InvalidParameterValueException; import com.cloud.server.ConfigurationServer; import com.cloud.server.ManagementServer; +import com.cloud.utils.PropertiesUtil; import com.cloud.utils.SerialVersionUID; import com.cloud.utils.component.ComponentContext; -import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.SystemIntegrityChecker; -import com.cloud.utils.db.GenericDaoBase; public class CloudStartupServlet extends HttpServlet implements ServletContextListener { public static final Logger s_logger = Logger.getLogger(CloudStartupServlet.class.getName()); static final long serialVersionUID = SerialVersionUID.CloudStartupServlet; - protected static ComponentLocator s_locator; - @Override public void init() throws ServletException { - - // Save Configuration Values + initLog4j(); + + // Save Configuration Values ConfigurationServer c = (ConfigurationServer)ComponentContext.getCompanent(ConfigurationServer.class); try { c.persistDefaultValues(); ManagementServer ms = (ManagementServer)ComponentContext.getCompanent(ManagementServer.class); + ms.startup(); ApiServer.initApiServer(ms.getApiConfig()); } catch (InvalidParameterValueException ipve) { s_logger.error("Exception starting management server ", ipve); @@ -73,50 +73,18 @@ public class CloudStartupServlet extends HttpServlet implements ServletContextLi @Override public void contextDestroyed(ServletContextEvent sce) { } - - // - // following should be moved to CloudStackServer component later to encapsulate business logic in one place - // - private void initCloudStackComponents() { - runCheckers(); - startDaos(); // daos should not be using managers and adapters. - -/* - configureManagers(); - configureAdapters(); - startManagers(); - startAdapters(); -*/ - } - - private void runCheckers() { - Map<String, SystemIntegrityChecker> checkers = ComponentContext.getApplicationContext().getBeansOfType( - SystemIntegrityChecker.class); - - for(SystemIntegrityChecker checker : checkers.values()) { - try { - checker.check(); - } catch (Exception e) { - s_logger.error("Problems with running checker:" + checker.getClass().getName(), e); - System.exit(1); - } - } - } - - private void startDaos() { - @SuppressWarnings("rawtypes") - Map<String, GenericDaoBase> daos = ComponentContext.getApplicationContext().getBeansOfType( - GenericDaoBase.class); - - for(GenericDaoBase dao : daos.values()) { - try { - - // dao.configure(dao.getClass().getSimpleName(), params); - } catch (Exception e) { - s_logger.error("Problems with running checker:" + dao.getClass().getName(), e); - System.exit(1); - } - } - } + private void initLog4j() { + File file = PropertiesUtil.findConfigFile("log4j-cloud.xml"); + if (file != null) { + s_logger.info("log4j configuration found at " + file.getAbsolutePath()); + DOMConfigurator.configureAndWatch(file.getAbsolutePath()); + } else { + file = PropertiesUtil.findConfigFile("log4j-cloud.properties"); + if (file != null) { + s_logger.info("log4j configuration found at " + file.getAbsolutePath()); + PropertyConfigurator.configureAndWatch(file.getAbsolutePath()); + } + } + } }
