Hook log4j to Spring bootstrapped Javelin server

This commit is contained in:
Kelven Yang 2013-01-07 18:21:58 -08:00
parent 559933f062
commit b96bb8feb9
5 changed files with 104 additions and 80 deletions

View File

@ -31,7 +31,7 @@ import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction; import com.cloud.utils.db.Transaction;
//@Component(value="EngineHostDetailsDao") @Component(value="EngineHostDetailsDao")
@Local(value=HostDetailsDao.class) @Local(value=HostDetailsDao.class)
public class HostDetailsDaoImpl extends GenericDaoBase<DetailVO, Long> implements HostDetailsDao { public class HostDetailsDaoImpl extends GenericDaoBase<DetailVO, Long> implements HostDetailsDao {
protected final SearchBuilder<DetailVO> HostSearch; protected final SearchBuilder<DetailVO> HostSearch;

View File

@ -38,6 +38,8 @@ public interface ManagementServer extends ManagementService {
*/ */
long getId(); long getId();
void startup();
/** /**
* Fetches the version of cloud stack * Fetches the version of cloud stack
*/ */

View File

@ -23,6 +23,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TimeZone; 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.GenerateUsageRecordsCmd;
import com.cloud.api.commands.GetUsageRecordsCmd; import com.cloud.api.commands.GetUsageRecordsCmd;
import com.cloud.domain.dao.DomainDao; import com.cloud.domain.dao.DomainDao;
@ -39,33 +45,32 @@ import com.cloud.user.Account;
import com.cloud.user.AccountVO; import com.cloud.user.AccountVO;
import com.cloud.user.UserContext; import com.cloud.user.UserContext;
import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.AccountDao;
import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.db.Filter; import com.cloud.utils.db.Filter;
import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction; import com.cloud.utils.db.Transaction;
@Component
@Primary
public class ManagementServerExtImpl extends ManagementServerImpl implements ManagementServerExt { public class ManagementServerExtImpl extends ManagementServerImpl implements ManagementServerExt {
private final AccountDao _accountDao; @Inject private AccountDao _accountDao;
private final DomainDao _domainDao; @Inject private DomainDao _domainDao;
private final UsageDao _usageDao; @Inject private UsageDao _usageDao;
private final UsageJobDao _usageJobDao; @Inject private UsageJobDao _usageJobDao;
private final TimeZone _usageTimezone; private 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);
public ManagementServerExtImpl() {
}
@PostConstruct
void init() {
super.init();
Map<String, String> configs = getConfigs(); Map<String, String> configs = getConfigs();
String timeZoneStr = configs.get("usage.aggregation.timezone"); String timeZoneStr = configs.get("usage.aggregation.timezone");
if (timeZoneStr == null) { if (timeZoneStr == null) {
timeZoneStr = "GMT"; timeZoneStr = "GMT";
} }
_usageTimezone = TimeZone.getTimeZone(timeZoneStr); _usageTimezone = TimeZone.getTimeZone(timeZoneStr);
} }
@Override @Override

View File

@ -221,10 +221,12 @@ import com.cloud.utils.Ternary;
import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Adapters;
import com.cloud.utils.component.ComponentContext; import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.component.SystemIntegrityChecker;
import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.crypt.DBEncryptionUtil;
import com.cloud.utils.db.DB; import com.cloud.utils.db.DB;
import com.cloud.utils.db.Filter; import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.GlobalLock;
import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.JoinBuilder;
import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.JoinBuilder.JoinType;
@ -314,11 +316,11 @@ public class ManagementServerImpl implements ManagementServer {
@Inject private ConfigurationManager _configMgr; @Inject private ConfigurationManager _configMgr;
@Inject private ResourceTagDao _resourceTagDao; @Inject private ResourceTagDao _resourceTagDao;
@Inject private ProjectManager _projectMgr; @Inject ProjectManager _projectMgr;
@Inject private ResourceManager _resourceMgr; @Inject ResourceManager _resourceMgr;
@Inject private SnapshotManager _snapshotMgr; @Inject SnapshotManager _snapshotMgr;
@Inject private HighAvailabilityManager _haMgr; @Inject HighAvailabilityManager _haMgr;
@Inject private HostTagsDao _hostTagsDao; @Inject HostTagsDao _hostTagsDao;
@Inject ComponentContext _placeholder; @Inject ComponentContext _placeholder;
@ -357,7 +359,54 @@ public class ManagementServerImpl implements ManagementServer {
_availableIdsMap.put(id, true); _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() { protected Map<String, String> getConfigs() {
return _configs; return _configs;
} }

View File

@ -16,7 +16,7 @@
// under the License. // under the License.
package com.cloud.servlet; package com.cloud.servlet;
import java.util.Map; import java.io.File;
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import javax.servlet.ServletContextListener;
@ -24,32 +24,32 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
import com.cloud.api.ApiServer; import com.cloud.api.ApiServer;
import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.InvalidParameterValueException;
import com.cloud.server.ConfigurationServer; import com.cloud.server.ConfigurationServer;
import com.cloud.server.ManagementServer; import com.cloud.server.ManagementServer;
import com.cloud.utils.PropertiesUtil;
import com.cloud.utils.SerialVersionUID; import com.cloud.utils.SerialVersionUID;
import com.cloud.utils.component.ComponentContext; 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 class CloudStartupServlet extends HttpServlet implements ServletContextListener {
public static final Logger s_logger = Logger.getLogger(CloudStartupServlet.class.getName()); public static final Logger s_logger = Logger.getLogger(CloudStartupServlet.class.getName());
static final long serialVersionUID = SerialVersionUID.CloudStartupServlet; static final long serialVersionUID = SerialVersionUID.CloudStartupServlet;
protected static ComponentLocator s_locator;
@Override @Override
public void init() throws ServletException { public void init() throws ServletException {
initLog4j();
// Save Configuration Values
// Save Configuration Values
ConfigurationServer c = (ConfigurationServer)ComponentContext.getCompanent(ConfigurationServer.class); ConfigurationServer c = (ConfigurationServer)ComponentContext.getCompanent(ConfigurationServer.class);
try { try {
c.persistDefaultValues(); c.persistDefaultValues();
ManagementServer ms = (ManagementServer)ComponentContext.getCompanent(ManagementServer.class); ManagementServer ms = (ManagementServer)ComponentContext.getCompanent(ManagementServer.class);
ms.startup();
ApiServer.initApiServer(ms.getApiConfig()); ApiServer.initApiServer(ms.getApiConfig());
} catch (InvalidParameterValueException ipve) { } catch (InvalidParameterValueException ipve) {
s_logger.error("Exception starting management server ", ipve); s_logger.error("Exception starting management server ", ipve);
@ -73,50 +73,18 @@ public class CloudStartupServlet extends HttpServlet implements ServletContextLi
@Override @Override
public void contextDestroyed(ServletContextEvent sce) { public void contextDestroyed(ServletContextEvent sce) {
} }
// private void initLog4j() {
// following should be moved to CloudStackServer component later to encapsulate business logic in one place File file = PropertiesUtil.findConfigFile("log4j-cloud.xml");
// if (file != null) {
private void initCloudStackComponents() { s_logger.info("log4j configuration found at " + file.getAbsolutePath());
runCheckers(); DOMConfigurator.configureAndWatch(file.getAbsolutePath());
startDaos(); // daos should not be using managers and adapters. } else {
file = PropertiesUtil.findConfigFile("log4j-cloud.properties");
/* if (file != null) {
configureManagers(); s_logger.info("log4j configuration found at " + file.getAbsolutePath());
configureAdapters(); PropertyConfigurator.configureAndWatch(file.getAbsolutePath());
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);
}
}
}
} }