提交 36062aa4 编写于 作者: F Frankie Wu

big change

- downgrade dog-home from war to jar
- add system module to cat-home with signing support
- bug fix in PlainTextMessageCodec
上级 6122029a
......@@ -99,7 +99,7 @@ public class PlainTextMessageCodec implements MessageCodec, LogEnabled {
byte identifier = buf.readByte();
String timestamp = helper.read(buf, TAB);
String type = helper.read(buf, TAB);
String name = helper.read(buf, TAB);
String name = helper.readRaw(buf, TAB);
if (identifier == 'E') {
DefaultEvent event = new DefaultEvent(type, name);
......@@ -267,7 +267,7 @@ public class PlainTextMessageCodec implements MessageCodec, LogEnabled {
count += helper.write(buf, TAB);
count += helper.write(buf, message.getType());
count += helper.write(buf, TAB);
count += helper.write(buf, message.getName());
count += helper.writeRaw(buf, message.getName());
count += helper.write(buf, TAB);
if (policy != Policy.WITHOUT_STATUS) {
......
......@@ -123,7 +123,12 @@
<goal>dal-jdbc</goal>
</goals>
<configuration>
<manifest><![CDATA[${basedir}/src/main/resources/META-INF/dal/jdbc/report-manifest.xml,]]></manifest>
<manifest><![CDATA[
${basedir}/src/main/resources/META-INF/dal/jdbc/report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/jdbc/alarm-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/jdbc/notification-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/jdbc/user-manifest.xml,
]]></manifest>
</configuration>
</execution>
</executions>
......
......@@ -17,6 +17,12 @@ final class CatDatabaseConfigurator extends AbstractJdbcResourceConfigurator {
defineSimpleTableProviderComponents(all, "cat", com.dianping.cat.home.dal.report._INDEX.getEntityClasses());
defineDaoComponents(all, com.dianping.cat.home.dal.report._INDEX.getDaoClasses());
defineSimpleTableProviderComponents(all, "cat", com.dianping.cat.home.dal.alarm._INDEX.getEntityClasses());
defineDaoComponents(all, com.dianping.cat.home.dal.alarm._INDEX.getDaoClasses());
defineSimpleTableProviderComponents(all, "cat", com.dianping.cat.home.dal.notification._INDEX.getEntityClasses());
defineDaoComponents(all, com.dianping.cat.home.dal.notification._INDEX.getDaoClasses());
return all;
}
}
......@@ -136,10 +136,14 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(ModuleManager.class, DefaultModuleManager.class) //
.config(E("topLevelModules").value(CatHomeModule.ID)));
// model service
all.addAll(new ServiceComponentConfigurator().defineComponents());
// database
all.addAll(new CatDatabaseConfigurator().defineComponents());
all.addAll(new UserDatabaseConfigurator().defineComponents());
// Please keep it last
// web, please keep it last
all.addAll(new WebComponentConfigurator().defineComponents());
return all;
......
package com.dianping.dog.home.build;
package com.dianping.cat.build;
import java.util.ArrayList;
import java.util.List;
......@@ -6,19 +6,16 @@ import java.util.List;
import com.site.dal.jdbc.configuration.AbstractJdbcResourceConfigurator;
import com.site.lookup.configuration.Component;
final class CatDatabaseConfigurator extends AbstractJdbcResourceConfigurator {
final class UserDatabaseConfigurator extends AbstractJdbcResourceConfigurator {
@Override
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
all.add(defineJdbcDataSourceConfigurationManagerComponent("datasources.xml"));
all.add(defineJdbcDataSourceComponent("cat", "com.mysql.jdbc.Driver", "jdbc:mysql://192.168.7.43:3306/cat", "dpcom_cat", "password", "<![CDATA[useUnicode=true&autoReconnect=true]]>"));
all.add(defineJdbcDataSourceComponent("user", "com.mysql.jdbc.Driver", "jdbc:mysql://192.168.8.44:3306/hawk", "hawk", "hawk", "<![CDATA[useUnicode=true&autoReconnect=true]]>"));
defineSimpleTableProviderComponents(all, "cat", com.dianping.dog.home.dal.alarm._INDEX.getEntityClasses());
defineDaoComponents(all, com.dianping.dog.home.dal.alarm._INDEX.getDaoClasses());
defineSimpleTableProviderComponents(all, "cat", com.dianping.dog.home.dal.notification._INDEX.getEntityClasses());
defineDaoComponents(all, com.dianping.dog.home.dal.notification._INDEX.getDaoClasses());
defineSimpleTableProviderComponents(all, "user", com.dainping.cat.home.dal.user._INDEX.getEntityClasses());
defineDaoComponents(all, com.dainping.cat.home.dal.user._INDEX.getDaoClasses());
return all;
}
......
......@@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import com.dianping.cat.report.ReportModule;
import com.dianping.cat.system.SystemModule;
import com.site.lookup.configuration.Component;
import com.site.web.configuration.AbstractWebComponentsConfigurator;
......@@ -13,7 +15,7 @@ class WebComponentConfigurator extends AbstractWebComponentsConfigurator {
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
defineModuleRegistry(all, ReportModule.class, ReportModule.class);
defineModuleRegistry(all, ReportModule.class, ReportModule.class, SystemModule.class);
return all;
}
......
......@@ -41,8 +41,7 @@ com.dianping.cat.report.page.cross.Handler.class,
com.dianping.cat.report.page.cache.Handler.class,
com.dianping.cat.report.page.database.Handler.class,
com.dianping.cat.report.page.database.Handler.class
})
public class ReportModule extends AbstractModule {
......
package com.dianping.dog.alarm;
package com.dianping.cat.system;
import java.io.File;
......@@ -14,13 +14,19 @@ import org.unidal.webres.resource.spi.IResourceRegistry;
import org.unidal.webres.tag.resource.ResourceTagConfigurator;
import org.unidal.webres.taglib.basic.ResourceTagLibConfigurator;
import com.dainping.cat.home.dal.user.DpAdminLogin;
import com.site.web.mvc.Action;
import com.site.web.mvc.ActionContext;
import com.site.web.mvc.ActionPayload;
import com.site.web.mvc.Page;
public class AlarmContext<T extends ActionPayload<? extends Page, ? extends Action>> extends ActionContext<T> {
public class SystemContext<T extends ActionPayload<? extends Page, ? extends Action>> extends ActionContext<T> {
private DpAdminLogin m_signinMember;
public DpAdminLogin getSigninMember() {
return m_signinMember;
}
@Override
public void initialize(HttpServletRequest request, HttpServletResponse response) {
super.initialize(request, response);
......@@ -51,4 +57,8 @@ public class AlarmContext<T extends ActionPayload<? extends Page, ? extends Acti
}
}
public void setSigninMember(DpAdminLogin signinMember) {
m_signinMember = signinMember;
}
}
package com.dianping.dog.alarm;
package com.dianping.cat.system;
import com.site.web.mvc.AbstractModule;
import com.site.web.mvc.annotation.ModuleMeta;
import com.site.web.mvc.annotation.ModulePagesMeta;
@ModuleMeta(name = "alarm", defaultInboundAction = "home", defaultTransition = "default", defaultErrorAction = "default")
@ModuleMeta(name = "s", defaultInboundAction = "alarm", defaultTransition = "default", defaultErrorAction = "default")
@ModulePagesMeta({
com.dianping.dog.alarm.page.home.Handler.class
com.dianping.cat.system.page.alarm.Handler.class,
com.dianping.cat.system.page.login.Handler.class
})
public class AlarmModule extends AbstractModule {
public class SystemModule extends AbstractModule {
}
package com.dianping.dog.alarm;
package com.dianping.cat.system;
import com.site.web.mvc.Page;
import com.site.web.mvc.annotation.ModuleMeta;
public enum AlarmPage implements Page {
public enum SystemPage implements Page {
HOME("home", "home", "Home", "Home", true);
ALARM("alarm", "alarm", "Alarm", "Alarm", true),
LOGIN("login", "login", "Login", "Login", false);
private String m_name;
......@@ -17,7 +19,7 @@ public enum AlarmPage implements Page {
private boolean m_standalone;
private AlarmPage(String name, String path, String title, String description, boolean standalone) {
private SystemPage(String name, String path, String title, String description, boolean standalone) {
m_name = name;
m_path = path;
m_title = title;
......@@ -25,8 +27,8 @@ public enum AlarmPage implements Page {
m_standalone = standalone;
}
public static AlarmPage getByName(String name, AlarmPage defaultPage) {
for (AlarmPage action : AlarmPage.values()) {
public static SystemPage getByName(String name, SystemPage defaultPage) {
for (SystemPage action : SystemPage.values()) {
if (action.getName().equals(name)) {
return action;
}
......@@ -40,7 +42,7 @@ public enum AlarmPage implements Page {
}
public String getModuleName() {
ModuleMeta meta = AlarmModule.class.getAnnotation(ModuleMeta.class);
ModuleMeta meta = SystemModule.class.getAnnotation(ModuleMeta.class);
if (meta != null) {
return meta.name();
......@@ -67,7 +69,7 @@ public enum AlarmPage implements Page {
return m_standalone;
}
public AlarmPage[] getValues() {
return AlarmPage.values();
public SystemPage[] getValues() {
return SystemPage.values();
}
}
package com.dianping.dog.alarm.page.home;
package com.dianping.cat.system.page.alarm;
public enum Action implements com.site.web.mvc.Action {
VIEW("view");
......
package com.dianping.cat.system.page.alarm;
import com.dianping.cat.system.SystemContext;
public class Context extends SystemContext<Payload> {
}
package com.dianping.dog.alarm.page.home;
package com.dianping.cat.system.page.alarm;
import java.io.IOException;
import javax.servlet.ServletException;
import com.dianping.dog.alarm.AlarmPage;
import com.dianping.cat.system.SystemPage;
import com.site.lookup.annotation.Inject;
import com.site.web.mvc.PageHandler;
import com.site.web.mvc.annotation.InboundActionMeta;
import com.site.web.mvc.annotation.OutboundActionMeta;
import com.site.web.mvc.annotation.PayloadMeta;
import com.site.web.mvc.annotation.PreInboundActionMeta;
public class Handler implements PageHandler<Context> {
@Inject
private JspViewer m_jspViewer;
@Override
@PreInboundActionMeta("login")
@PayloadMeta(Payload.class)
@InboundActionMeta(name = "home")
@InboundActionMeta(name = "alarm")
public void handleInbound(Context ctx) throws ServletException, IOException {
// display only, no action here
}
@Override
@OutboundActionMeta(name = "home")
@OutboundActionMeta(name = "alarm")
public void handleOutbound(Context ctx) throws ServletException, IOException {
Model model = new Model(ctx);
model.setAction(Action.VIEW);
model.setPage(AlarmPage.HOME);
model.setPage(SystemPage.ALARM);
m_jspViewer.view(ctx, model);
}
}
package com.dianping.dog.alarm.page.home;
package com.dianping.cat.system.page.alarm;
public enum JspFile {
VIEW("/jsp/alarm/home.jsp"),
VIEW("/jsp/system/alarm.jsp"),
;
......
package com.dianping.dog.alarm.page.home;
package com.dianping.cat.system.page.alarm;
import com.dianping.dog.alarm.AlarmPage;
import com.dianping.cat.system.SystemPage;
import com.site.web.mvc.view.BaseJspViewer;
public class JspViewer extends BaseJspViewer<AlarmPage, Action, Context, Model> {
public class JspViewer extends BaseJspViewer<SystemPage, Action, Context, Model> {
@Override
protected String getJspFilePath(Context ctx, Model model) {
Action action = model.getAction();
......
package com.dianping.dog.alarm.page.home;
package com.dianping.cat.system.page.alarm;
import com.dianping.dog.alarm.AlarmPage;
import com.dianping.cat.system.SystemPage;
import com.site.web.mvc.ViewModel;
public class Model extends ViewModel<AlarmPage, Action, Context> {
public class Model extends ViewModel<SystemPage, Action, Context> {
public Model(Context ctx) {
super(ctx);
}
......
package com.dianping.dog.alarm.page.home;
package com.dianping.cat.system.page.alarm;
import com.dianping.dog.alarm.AlarmPage;
import com.dianping.cat.system.SystemPage;
import com.site.web.mvc.ActionContext;
import com.site.web.mvc.ActionPayload;
import com.site.web.mvc.payload.annotation.FieldMeta;
public class Payload implements ActionPayload<AlarmPage, Action> {
private AlarmPage m_page;
public class Payload implements ActionPayload<SystemPage, Action> {
private SystemPage m_page;
@FieldMeta("op")
private Action m_action;
......@@ -21,13 +21,13 @@ public class Payload implements ActionPayload<AlarmPage, Action> {
}
@Override
public AlarmPage getPage() {
public SystemPage getPage() {
return m_page;
}
@Override
public void setPage(String page) {
m_page = AlarmPage.getByName(page, AlarmPage.HOME);
m_page = SystemPage.getByName(page, SystemPage.ALARM);
}
@Override
......
package com.dianping.cat.system.page.login;
public enum Action implements com.site.web.mvc.Action {
LOGIN("login"),
LOGOUT("logout");
private String m_name;
private Action(String name) {
m_name = name;
}
public static Action getByName(String name, Action defaultAction) {
for (Action action : Action.values()) {
if (action.getName().equals(name)) {
return action;
}
}
return defaultAction;
}
@Override
public String getName() {
return m_name;
}
}
package com.dianping.cat.system.page.login;
import com.dianping.cat.system.SystemContext;
public class Context extends SystemContext<Payload> {
}
package com.dianping.cat.system.page.login;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import com.dainping.cat.home.dal.user.DpAdminLogin;
import com.dianping.cat.system.SystemContext;
import com.dianping.cat.system.SystemPage;
import com.dianping.cat.system.page.login.service.Credential;
import com.dianping.cat.system.page.login.service.Session;
import com.dianping.cat.system.page.login.service.SigninContext;
import com.dianping.cat.system.page.login.service.SigninService;
import com.site.lookup.annotation.Inject;
import com.site.web.jsp.function.Encoder;
import com.site.web.mvc.ActionContext;
import com.site.web.mvc.ErrorObject;
import com.site.web.mvc.PageHandler;
import com.site.web.mvc.annotation.InboundActionMeta;
import com.site.web.mvc.annotation.OutboundActionMeta;
import com.site.web.mvc.annotation.PayloadMeta;
public class Handler implements PageHandler<Context>, LogEnabled {
@Inject
private JspViewer m_jspViewer;
@Inject
private SigninService m_signinService;
private Logger m_logger;
private SigninContext createSigninContext(Context ctx) {
return new SigninContext(ctx.getHttpServletRequest(), ctx.getHttpServletResponse());
}
public void enableLogging(Logger logger) {
m_logger = logger;
}
@Override
@PayloadMeta(Payload.class)
@InboundActionMeta(name = "login")
public void handleInbound(Context ctx) throws ServletException, IOException {
Payload payload = ctx.getPayload();
Action action = payload.getAction();
if (payload.isSubmit() && action == Action.LOGIN) {
String account = payload.getAccount();
String password = payload.getPassword();
if (account != null && account.length() != 0 && password != null) {
SigninContext sc = createSigninContext(ctx);
Credential credential = new Credential(account, password);
Session session = m_signinService.signin(sc, credential);
if (session == null) {
ctx.addError(new ErrorObject("biz.login"));
} else {
ctx.redirect(payload.getRtnUrl());
ctx.stopProcess();
return;
}
} else {
ctx.addError(new ErrorObject("biz.login.input").setArguments("account", account, "password", password));
}
} else if (action == Action.LOGOUT) {
SigninContext sc = createSigninContext(ctx);
m_signinService.signout(sc);
ctx.redirect(payload.getRtnUrl());
ctx.stopProcess();
return;
} else {
SigninContext sc = createSigninContext(ctx);
Session session = m_signinService.validate(sc);
if (session != null) {
ActionContext<?> parent = ctx.getParent();
if (parent instanceof SystemContext) {
SystemContext<?> context = (SystemContext<?>) parent;
DpAdminLogin member = session.getMember();
context.setSigninMember(member);
logAccess(ctx, member);
return;
} else if (parent != null) {
throw new RuntimeException(String.format("%s should extend %s!", ctx.getClass(), SystemContext.class));
}
}
}
// skip actual action, show sign-in form
ctx.skipAction();
}
@Override
@OutboundActionMeta(name = "login")
public void handleOutbound(Context ctx) throws ServletException, IOException {
Model model = new Model(ctx);
Payload payload = ctx.getPayload();
model.setPage(SystemPage.LOGIN);
model.setAction(Action.LOGIN);
if (ctx.getParent() != null && (payload.getRtnUrl() == null || payload.getRtnUrl().length() == 0)) {
HttpServletRequest request = ctx.getHttpServletRequest();
String qs = request.getQueryString();
String requestURI = request.getRequestURI();
if (qs != null) {
payload.setRtnUrl(requestURI + "?" + qs);
} else {
payload.setRtnUrl(requestURI);
}
}
m_jspViewer.view(ctx, model);
}
@SuppressWarnings("unchecked")
private void logAccess(Context ctx, DpAdminLogin member) {
StringBuilder sb = new StringBuilder(256);
SimpleDateFormat dateFormat = new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");
HttpServletRequest request = ctx.getHttpServletRequest();
String actionUri = ctx.getRequestContext().getActionUri();
sb.append(dateFormat.format(new Date()));
sb.append(" ").append(member.getLoginName()).append('/').append(member.getLoginId()).append(' ');
if (request.getMethod().equalsIgnoreCase("post")) {
Enumeration<String> names = request.getParameterNames();
boolean hasQuestion = actionUri.indexOf('?') >= 0;
sb.append(actionUri);
while (names.hasMoreElements()) {
String name = names.nextElement();
String[] attributes = request.getParameterValues(name);
for (String attribute : attributes) {
if (attribute.length() > 0) {
if (!hasQuestion) {
sb.append('?');
hasQuestion = true;
} else {
sb.append('&');
}
sb.append(name).append('=').append(Encoder.urlEncode(attribute));
}
}
}
} else {
sb.append(actionUri);
}
m_logger.info(sb.toString());
}
}
package com.dianping.cat.system.page.login;
public enum JspFile {
LOGIN("/jsp/system/login.jsp"),
;
private String m_path;
private JspFile(String path) {
m_path = path;
}
public String getPath() {
return m_path;
}
}
package com.dianping.cat.system.page.login;
import com.dianping.cat.system.SystemPage;
import com.site.web.mvc.view.BaseJspViewer;
public class JspViewer extends BaseJspViewer<SystemPage, Action, Context, Model> {
@Override
protected String getJspFilePath(Context ctx, Model model) {
Action action = model.getAction();
switch (action) {
case LOGIN:
return JspFile.LOGIN.getPath();
}
throw new RuntimeException("Unknown action: " + action);
}
}
package com.dianping.cat.system.page.login;
import com.dianping.cat.system.SystemPage;
import com.site.web.mvc.ViewModel;
public class Model extends ViewModel<SystemPage, Action, Context> {
public Model(Context ctx) {
super(ctx);
}
@Override
public Action getDefaultAction() {
return Action.LOGIN;
}
}
package com.dianping.cat.system.page.login;
import com.dianping.cat.system.SystemPage;
import com.site.web.mvc.ActionContext;
import com.site.web.mvc.ActionPayload;
import com.site.web.mvc.payload.annotation.FieldMeta;
public class Payload implements ActionPayload<SystemPage, Action> {
private SystemPage m_page;
@FieldMeta("op")
private Action m_action;
@FieldMeta("rtnUrl")
private String m_rtnUrl;
@FieldMeta("account")
private String m_account;
@FieldMeta("password")
private String m_password;
@FieldMeta("login")
private boolean m_submit;
public String getAccount() {
return m_account;
}
@Override
public Action getAction() {
return m_action;
}
@Override
public SystemPage getPage() {
return m_page;
}
public String getPassword() {
return m_password;
}
public String getRtnUrl() {
return m_rtnUrl;
}
public boolean isSubmit() {
return m_submit;
}
public void setAccount(String account) {
m_account = account;
}
public void setAction(String action) {
m_action = Action.getByName(action, Action.LOGIN);
}
@Override
public void setPage(String page) {
m_page = SystemPage.getByName(page, SystemPage.LOGIN);
}
public void setPassword(String password) {
m_password = password;
}
public void setRtnUrl(String rtnUrl) {
m_rtnUrl = rtnUrl;
}
public void setSubmit(boolean submit) {
m_submit = submit;
}
@Override
public void validate(ActionContext<?> ctx) {
if (m_action == null) {
m_action = Action.LOGIN;
}
}
}
package com.dianping.cat.system.page.login.service;
import javax.servlet.http.Cookie;
public class CookieManager {
protected Cookie createCookie(String name, String value) {
Cookie cookie = new Cookie(name, value);
cookie.setPath("/");
return cookie;
}
public String getCookie(SigninContext ctx, String name) {
Cookie[] cookies = ctx.getRequest().getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
return cookie.getValue();
}
}
}
return null;
}
public void removeCookie(SigninContext ctx, String name) {
Cookie cookie = createCookie(name, null);
cookie.setMaxAge(0);
ctx.getResponse().addCookie(cookie);
}
public void setCookie(SigninContext ctx, String name, String value) {
Cookie cookie = createCookie(name, value);
ctx.getResponse().addCookie(cookie);
}
}
package com.dianping.cat.system.page.login.service;
import com.dianping.cat.system.page.login.spi.ICredential;
public class Credential implements ICredential {
private String m_account;
private String m_password;
public Credential(String account, String password) {
m_account = account;
m_password = password;
}
public String getAccount() {
return m_account;
}
public String getPassword() {
return m_password;
}
}
package com.dianping.cat.system.page.login.service;
import com.dainping.cat.home.dal.user.DpAdminLogin;
import com.dianping.cat.system.page.login.spi.ISession;
public class Session implements ISession {
private DpAdminLogin m_member;
public Session(DpAdminLogin member) {
m_member = member;
}
public DpAdminLogin getMember() {
return m_member;
}
}
package com.dianping.cat.system.page.login.service;
import com.dainping.cat.home.dal.user.DpAdminLogin;
import com.dainping.cat.home.dal.user.DpAdminLoginDao;
import com.dainping.cat.home.dal.user.DpAdminLoginEntity;
import com.dianping.cat.Cat;
import com.dianping.cat.system.page.login.spi.ISessionManager;
import com.site.dal.jdbc.DalException;
import com.site.dal.jdbc.DalNotFoundException;
import com.site.lookup.annotation.Inject;
public class SessionManager implements ISessionManager<Session, Token, Credential> {
@Inject
private DpAdminLoginDao m_memberDao;
@Override
public Token authenticate(Credential credential) {
String account = credential.getAccount();
String password = credential.getPassword();
try {
DpAdminLogin member = m_memberDao.authenticate(account, password, DpAdminLoginEntity.READSET_FULL);
return new Token(member.getLoginId());
} catch (DalNotFoundException e) {
// failed
} catch (DalException e) {
Cat.getProducer().logError(e);
}
return null;
}
@Override
public Session validate(Token token) {
try {
DpAdminLogin member = m_memberDao.findByPK(token.getMemberId(), DpAdminLoginEntity.READSET_FULL);
return new Session(member);
} catch (DalNotFoundException e) {
// failed
} catch (DalException e) {
Cat.getProducer().logError(e);
}
return null;
}
}
package com.dianping.cat.system.page.login.service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dianping.cat.system.page.login.spi.IContext;
public class SigninContext implements IContext {
private HttpServletRequest m_request;
private HttpServletResponse m_response;
public SigninContext(HttpServletRequest request, HttpServletResponse response) {
m_request = request;
m_response = response;
}
public HttpServletRequest getRequest() {
return m_request;
}
public HttpServletResponse getResponse() {
return m_response;
}
}
package com.dianping.cat.system.page.login.service;
import com.dianping.cat.system.page.login.spi.ISigninService;
import com.site.lookup.annotation.Inject;
public class SigninService implements ISigninService<SigninContext, Credential, Session> {
private static final String TOKEN = "token";
@Inject
private TokenManager m_tokenManager;
@Inject
private SessionManager m_sessionManager;
@Override
public Session signin(SigninContext ctx, Credential credential) {
Token token = m_sessionManager.authenticate(credential);
if (token != null) {
Session session = m_sessionManager.validate(token);
if (session != null) {
m_tokenManager.setToken(ctx, token);
}
return session;
} else {
return null;
}
}
@Override
public void signout(SigninContext ctx) {
m_tokenManager.removeToken(ctx, TOKEN);
}
@Override
public Session validate(SigninContext ctx) {
Token token = m_tokenManager.getToken(ctx, TOKEN);
if (token != null) {
Session session = m_sessionManager.validate(token);
return session;
} else {
return null;
}
}
}
package com.dianping.cat.system.page.login.service;
import com.dianping.cat.system.page.login.spi.IToken;
public class Token implements IToken {
private int m_adminId;
private int m_memberId;
public Token(int memberId) {
m_memberId = memberId;
}
public Token(int adminId, int memberId) {
m_adminId = adminId;
m_memberId = memberId;
}
public int getAdminId() {
return m_adminId;
}
public int getMemberId() {
return m_memberId;
}
@Override
public String getName() {
return "token";
}
}
package com.dianping.cat.system.page.login.service;
import java.util.regex.Pattern;
import com.dianping.cat.system.page.login.spi.ITokenBuilder;
public class TokenBuilder implements ITokenBuilder<SigninContext, Token> {
private static final String SP = "|";
private static final long ONE_DAY = 24 * 60 * 60 * 1000L;
@Override
public String build(SigninContext ctx, Token token) {
StringBuilder sb = new StringBuilder(256);
sb.append(token.getMemberId()).append(SP);
sb.append(System.currentTimeMillis()).append(SP);
sb.append(ctx.getRequest().getRemoteAddr()).append(SP);
sb.append(getCheckSum(sb.toString()));
return sb.toString();
}
protected int getCheckSum(String str) {
return str.hashCode();
}
@Override
public Token parse(SigninContext ctx, String value) {
String[] parts = value.split(Pattern.quote(SP));
if (parts.length == 4) {
int index = 0;
int memberId = Integer.parseInt(parts[index++]);
long lastLoginDate = Long.parseLong(parts[index++]);
String remoteIp = parts[index++];
int checkSum = Integer.parseInt(parts[index++]);
int expectedCheckSum = getCheckSum(value.substring(0, value.lastIndexOf(SP) + 1));
if (checkSum == expectedCheckSum) {
if (remoteIp.equals(ctx.getRequest().getRemoteAddr())) {
if (lastLoginDate + ONE_DAY > System.currentTimeMillis()) {
return new Token(memberId);
}
}
}
}
return null;
}
}
package com.dianping.cat.system.page.login.service;
import com.dianping.cat.system.page.login.spi.ITokenManager;
import com.site.lookup.annotation.Inject;
public class TokenManager implements ITokenManager<SigninContext, Token> {
@Inject
private CookieManager m_cookieManager;
@Inject
private TokenBuilder m_tokenBuilder;
@Override
public Token getToken(SigninContext ctx, String name) {
String value = m_cookieManager.getCookie(ctx, name);
if (value != null) {
return m_tokenBuilder.parse(ctx, value);
} else {
return null;
}
}
@Override
public void removeToken(SigninContext ctx, String name) {
m_cookieManager.removeCookie(ctx, name);
}
@Override
public void setToken(SigninContext ctx, Token token) {
String name = token.getName();
String value = m_tokenBuilder.build(ctx, token);
m_cookieManager.setCookie(ctx, name, value);
}
}
package com.dianping.cat.system.page.login.spi;
public interface IContext {
}
package com.dianping.cat.system.page.login.spi;
public interface ICredential {
}
\ No newline at end of file
package com.dianping.cat.system.page.login.spi;
public interface ISession {
}
\ No newline at end of file
package com.dianping.cat.system.page.login.spi;
public interface ISessionManager<S extends ISession, T extends IToken, C extends ICredential> {
public T authenticate(C credential);
public S validate(T token);
}
\ No newline at end of file
package com.dianping.cat.system.page.login.spi;
public interface ISigninService<C extends IContext, T extends ICredential, S extends ISession> {
public S signin(C ctx, T credential);
public void signout(C ctx);
public S validate(C ctx);
}
package com.dianping.cat.system.page.login.spi;
public interface IToken {
public String getName();
}
\ No newline at end of file
package com.dianping.cat.system.page.login.spi;
public interface ITokenBuilder<C extends IContext, T extends IToken> {
public T parse(C ctx, String str);
public String build(C ctx, T token);
}
package com.dianping.cat.system.page.login.spi;
public interface ITokenManager<C extends IContext, T extends IToken> {
public T getToken(C ctx, String name);
public void removeToken(C ctx, String name);
public void setToken(C ctx, T token);
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<entities do-package="com.dianping.dog.home.dal.alarm" gen="true" />
<entities do-package="com.dianping.cat.home.dal.alarm" gen="true" />
<?xml version="1.0" encoding="UTF-8"?>
<entities do-package="com.dianping.dog.home.dal.notification" gen="true" />
<entities do-package="com.dianping.cat.home.dal.notification" gen="true" />
<?xml version="1.0" encoding="UTF-8"?>
<entities>
<entity name="dp-admin-login" table="DP_AdminLogin" alias="da">
<member name="login-id" field="LoginID" value-type="int" length="10" />
<member name="admin-id" field="AdminID" value-type="int" length="10" />
<member name="login-name" field="LoginName" value-type="String" length="48" />
<member name="password" field="Password" value-type="String" length="96" />
<member name="email" field="Email" value-type="String" length="120" />
<member name="real-name" field="RealName" value-type="String" length="48" />
<primary-key />
<readsets>
<readset name="FULL" all="true" />
</readsets>
<updatesets>
<updateset name="FULL" all="true" />
</updatesets>
<query-defs>
<query name="find-by-PK" type="SELECT">
<statement><![CDATA[SELECT <FIELDS/> FROM <TABLE/>]]></statement>
</query>
<query name="insert" type="INSERT">
<statement><![CDATA[INSERT INTO <TABLE/>(<FIELDS/>) VALUES(<VALUES/>)]]></statement>
</query>
<query name="update-by-PK" type="UPDATE">
<statement><![CDATA[UPDATE <TABLE/> SET <FIELDS/>]]></statement>
</query>
<query name="delete-by-PK" type="DELETE">
<statement><![CDATA[DELETE FROM <TABLE/>]]></statement>
</query>
</query-defs>
</entity>
</entities>
<?xml version="1.0" encoding="UTF-8"?>
<entities do-package="com.dainping.cat.home.dal.user" gen="true">
<entity name="dp-admin-login" table="DP_AdminLogin" alias="da">
<member name="login-id" field="LoginID" value-type="int" length="10" key="true" />
<var name="key-login-id" value-type="int" key-member="login-id" />
<primary-key />
<query-defs>
<query name="find-by-PK" type="SELECT">
<param name="key-login-id" />
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='login-id'/> = ${key-login-id}
]]></statement>
</query>
<query name="authenticate" type="SELECT">
<param name="login-name" />
<param name="password" />
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='login-name'/> = ${login-name}
AND <FIELD name='password'/> = md5(${password})
]]></statement>
</query>
</query-defs>
</entity>
</entities>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="wizard.xml" />
<file path="user-codegen.xml" />
<file path="user-dal.xml" />
</manifest>
......@@ -1009,12 +1009,139 @@
</requirement>
</requirements>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>ruleinstance</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>ruleinstance</logical-table-name>
<physical-table-name>ruleinstance</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>ruletemplate</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>ruletemplate</logical-table-name>
<physical-table-name>ruletemplate</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>subscriber</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>subscriber</logical-table-name>
<physical-table-name>subscriber</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>com.dianping.cat.home.dal.alarm.RuleinstanceDao</role>
<implementation>com.dianping.cat.home.dal.alarm.RuleinstanceDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.alarm.RuletemplateDao</role>
<implementation>com.dianping.cat.home.dal.alarm.RuletemplateDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.home.dal.alarm.SubscriberDao</role>
<implementation>com.dianping.cat.home.dal.alarm.SubscriberDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>maillog</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>maillog</logical-table-name>
<physical-table-name>maillog</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>com.dianping.cat.home.dal.notification.MaillogDao</role>
<implementation>com.dianping.cat.home.dal.notification.MaillogDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.site.dal.jdbc.datasource.JdbcDataSourceConfigurationManager</role>
<implementation>com.site.dal.jdbc.datasource.JdbcDataSourceConfigurationManager</implementation>
<configuration>
<datasourceFile>datasources.xml</datasourceFile>
</configuration>
</component>
<component>
<role>com.site.dal.jdbc.datasource.DataSource</role>
<role-hint>user</role-hint>
<implementation>com.site.dal.jdbc.datasource.JdbcDataSource</implementation>
<configuration>
<id>user</id>
<maximum-pool-size>3</maximum-pool-size>
<connection-timeout>1s</connection-timeout>
<idle-timeout>10m</idle-timeout>
<statement-cache-size>1000</statement-cache-size>
<properties>
<driver>com.mysql.jdbc.Driver</driver>
<URL>jdbc:mysql://192.168.8.44:3306/hawk</URL>
<user>hawk</user>
<password>hawk</password>
<connectionProperties><![CDATA[useUnicode=true&autoReconnect=true]]></connectionProperties>
</properties>
</configuration>
<requirements>
<requirement>
<role>com.site.dal.jdbc.datasource.JdbcDataSourceConfigurationManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>DP_AdminLogin</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>DP_AdminLogin</logical-table-name>
<physical-table-name>DP_AdminLogin</physical-table-name>
<data-source-name>user</data-source-name>
</configuration>
</component>
<component>
<role>com.dainping.cat.home.dal.user.DpAdminLoginDao</role>
<implementation>com.dainping.cat.home.dal.user.DpAdminLoginDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.site.web.mvc.model.ModuleRegistry</role>
<implementation>com.site.web.mvc.model.ModuleRegistry</implementation>
<configuration>
<modules>
<module default="true">com.dianping.cat.report.ReportModule</module>
<module>com.dianping.cat.system.SystemModule</module>
</modules>
</configuration>
</component>
......@@ -2195,5 +2322,88 @@
<role>com.dianping.cat.report.page.database.JspViewer</role>
<implementation>com.dianping.cat.report.page.database.JspViewer</implementation>
</component>
<component>
<role>com.dianping.cat.system.SystemModule</role>
<implementation>com.dianping.cat.system.SystemModule</implementation>
</component>
<component>
<role>com.dianping.cat.system.page.alarm.Handler</role>
<implementation>com.dianping.cat.system.page.alarm.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.page.alarm.JspViewer</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.alarm.JspViewer</role>
<implementation>com.dianping.cat.system.page.alarm.JspViewer</implementation>
</component>
<component>
<role>com.dianping.cat.system.page.login.Handler</role>
<implementation>com.dianping.cat.system.page.login.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.page.login.JspViewer</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.page.login.service.SigninService</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.login.JspViewer</role>
<implementation>com.dianping.cat.system.page.login.JspViewer</implementation>
</component>
<component>
<role>com.dianping.cat.system.page.login.service.SigninService</role>
<implementation>com.dianping.cat.system.page.login.service.SigninService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.page.login.service.TokenManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.page.login.service.SessionManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.login.service.TokenManager</role>
<implementation>com.dianping.cat.system.page.login.service.TokenManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.page.login.service.CookieManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.system.page.login.service.TokenBuilder</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.login.service.CookieManager</role>
<implementation>com.dianping.cat.system.page.login.service.CookieManager</implementation>
</component>
<component>
<role>com.dianping.cat.system.page.login.service.TokenBuilder</role>
<implementation>com.dianping.cat.system.page.login.service.TokenBuilder</implementation>
</component>
<component>
<role>com.dianping.cat.system.page.login.service.SessionManager</role>
<implementation>com.dianping.cat.system.page.login.service.SessionManager</implementation>
<requirements>
<requirement>
<role>com.dainping.cat.home.dal.user.DpAdminLoginDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dainping.cat.home.dal.user.DpAdminLoginDao</role>
<implementation>com.dainping.cat.home.dal.user.DpAdminLoginDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
</components>
</plexus>
<wizard package="com.dianping.cat.home">
<wizard package="com.dianping.cat">
<jdbc package="com.dianping.cat.home.dal" name="cat">
<datasource>
<driver>com.mysql.jdbc.Driver</driver>
......@@ -14,5 +14,25 @@
<table name="monthreport"/>
<table name="location"/>
</group>
<group name="alarm" package="com.dianping.cat.home.dal.alarm">
<table name="ruleinstance"/>
<table name="ruletemplate"/>
<table name="subscriber"/>
</group>
<group name="notification" package="com.dianping.cat.home.dal.notification">
<table name="maillog"/>
</group>
</jdbc>
<jdbc package="com.dainping.cat.home.dal" name="user">
<datasource>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://192.168.8.44:3306/hawk</url>
<user>hawk</user>
<password>hawk</password>
<properties>useUnicode=true&amp;autoReconnect=true</properties>
</datasource>
<group name="user" package="com.dainping.cat.home.dal.user">
<table name="DP_AdminLogin"/>
</group>
</jdbc>
</wizard>
<?xml version="1.0" encoding="UTF-8"?>
<wizard package="com.dianping.cat">
<webapp package="com.dianping.cat" webres="true">
<module name="report" path="r">
......@@ -44,7 +43,7 @@
<page name="health" title="Health" path="health">
<description>Health</description>
</page>
<page name="monthreport" title="monthreport" path="monthreport" standalone="false">
<page name="monthreport" title="monthreport" path="monthreport" standalone="false">
<description>Month Report</description>
</page>
<page name="cross" title="Cross" path="cross">
......@@ -56,10 +55,14 @@
<page name="database" title="Database" path="database">
<description>Database</description>
</page>
<page name="14" title="14" path="monthreport">
<description>14</description>
</module>
<module name="system" path="s" default="false">
<page name="alarm" title="Alarm" default="true" path="alarm">
<description>Alarm</description>
</page>
<page name="login" title="Login" default="true" path="login" standalone="false">
<description>Login</description>
</page>
</module>
</webapp>
</wizard>
......@@ -25,7 +25,7 @@
<url-pattern>/r/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>cat-servlet</servlet-name>
<servlet-name>mvc-servlet</servlet-name>
<url-pattern>/s/*</url-pattern>
</servlet-mapping>
<jsp-config>
......
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="ctx" type="com.dianping.cat.report.page.14.Context" scope="request"/>
<jsp:useBean id="payload" type="com.dianping.cat.report.page.14.Payload" scope="request"/>
<jsp:useBean id="model" type="com.dianping.cat.report.page.14.Model" scope="request"/>
View of 14 page under report
\ No newline at end of file
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="ctx" type="com.dianping.cat.system.page.alarm.Context" scope="request"/>
<jsp:useBean id="payload" type="com.dianping.cat.system.page.alarm.Payload" scope="request"/>
<jsp:useBean id="model" type="com.dianping.cat.system.page.alarm.Model" scope="request"/>
View of alarm page under system
\ No newline at end of file
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="ctx" type="com.dianping.cat.system.page.login.Context" scope="request"/>
<jsp:useBean id="payload" type="com.dianping.cat.system.page.login.Payload" scope="request"/>
<jsp:useBean id="model" type="com.dianping.cat.system.page.login.Model" scope="request"/>
<form name="login" method="post" action="${model.pageUri}">
<input type="hidden" name="rtnUrl" value="${payload.rtnUrl}" />
<table border="0">
<tr>
<td>Account:</td>
<td><input type="text" name="account" value="${payload.account}" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="login" value="Login" /></td>
</tr>
</table>
</form>
\ No newline at end of file
......@@ -8,7 +8,6 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>dog-home</artifactId>
<name>Dog Home</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
......@@ -18,62 +17,17 @@
<groupId>com.dianping.cat</groupId>
<artifactId>cat-consumer</artifactId>
</dependency>
<dependency>
<groupId>com.site.common</groupId>
<artifactId>web-framework</artifactId>
<version>1.0.15</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>org.json</artifactId>
<version>chargebee-1.0</version>
</dependency>
<dependency>
<groupId>com.site.common</groupId>
<artifactId>test-framework</artifactId>
<version>1.0.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unidal.webres</groupId>
<artifactId>WebResServer</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.14</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1</artifactId>
<version>6.1.14</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.site.dal</groupId>
<artifactId>dal-jdbc</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.20</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
......@@ -121,19 +75,6 @@ org.eclipse.jdt.core.compiler.compliance=1.6]]></content>
<className>com.dianping.dog.build.ComponentsConfigurator</className>
</configuration>
</execution>
<execution>
<id>generate dal jdbc model</id>
<phase>generate-sources</phase>
<goals>
<goal>dal-jdbc</goal>
</goals>
<configuration>
<manifest><![CDATA[
${basedir}/src/main/resources/META-INF/dal/jdbc/alarm-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/jdbc/notification-manifest.xml,
]]></manifest>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
......
package com.dianping.dog.alarm.page.home;
import com.dianping.dog.alarm.AlarmContext;
public class Context extends AlarmContext<Payload> {
}
......@@ -56,10 +56,6 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
all.add(C(DataService.class, DataService.class)
.req(ConnectorManager.class)
.req(EventDispatcher.class));
// Please keep it as last
all.addAll(new WebComponentConfigurator().defineComponents());
return all;
}
......
package com.dianping.dog.build;
import java.util.ArrayList;
import java.util.List;
import com.dianping.dog.alarm.AlarmModule;
import com.site.lookup.configuration.Component;
import com.site.web.configuration.AbstractWebComponentsConfigurator;
class WebComponentConfigurator extends AbstractWebComponentsConfigurator {
@SuppressWarnings("unchecked")
@Override
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
defineModuleRegistry(all, AlarmModule.class, AlarmModule.class);
return all;
}
}
package com.dianping.dog.home.build;
import java.util.ArrayList;
import java.util.List;
import com.site.lookup.configuration.AbstractResourceConfigurator;
import com.site.lookup.configuration.Component;
public class ComponentsConfigurator extends AbstractResourceConfigurator {
@Override
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
all.addAll(new CatDatabaseConfigurator().defineComponents());
return all;
}
public static void main(String[] args) {
generatePlexusComponentsXmlFile(new ComponentsConfigurator());
}
}
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<domain id="Dog"/>
</config>
......@@ -93,31 +93,151 @@
</requirement>
</requirements>
</component>
<component>
<role>com.site.dal.jdbc.datasource.JdbcDataSourceConfigurationManager</role>
<implementation>com.site.dal.jdbc.datasource.JdbcDataSourceConfigurationManager</implementation>
<configuration>
<datasourceFile>datasources.xml</datasourceFile>
</configuration>
</component>
<component>
<role>com.site.dal.jdbc.datasource.DataSource</role>
<role-hint>cat</role-hint>
<implementation>com.site.dal.jdbc.datasource.JdbcDataSource</implementation>
<configuration>
<id>cat</id>
<maximum-pool-size>3</maximum-pool-size>
<connection-timeout>1s</connection-timeout>
<idle-timeout>10m</idle-timeout>
<statement-cache-size>1000</statement-cache-size>
<properties>
<driver>com.mysql.jdbc.Driver</driver>
<URL>jdbc:mysql://192.168.7.43:3306/cat</URL>
<user>dpcom_cat</user>
<password>password</password>
<connectionProperties><![CDATA[useUnicode=true&autoReconnect=true]]></connectionProperties>
</properties>
</configuration>
<requirements>
<requirement>
<role>com.site.dal.jdbc.datasource.JdbcDataSourceConfigurationManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>ruleinstance</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>ruleinstance</logical-table-name>
<physical-table-name>ruleinstance</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>ruletemplate</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>ruletemplate</logical-table-name>
<physical-table-name>ruletemplate</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>subscriber</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>subscriber</logical-table-name>
<physical-table-name>subscriber</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>com.dianping.dog.home.dal.alarm.RuleinstanceDao</role>
<implementation>com.dianping.dog.home.dal.alarm.RuleinstanceDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.dog.home.dal.alarm.RuletemplateDao</role>
<implementation>com.dianping.dog.home.dal.alarm.RuletemplateDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.dog.home.dal.alarm.SubscriberDao</role>
<implementation>com.dianping.dog.home.dal.alarm.SubscriberDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.site.dal.jdbc.mapping.TableProvider</role>
<role-hint>maillog</role-hint>
<implementation>com.site.dal.jdbc.mapping.SimpleTableProvider</implementation>
<configuration>
<logical-table-name>maillog</logical-table-name>
<physical-table-name>maillog</physical-table-name>
<data-source-name>cat</data-source-name>
</configuration>
</component>
<component>
<role>com.dianping.dog.home.dal.notification.MaillogDao</role>
<implementation>com.dianping.dog.home.dal.notification.MaillogDao</implementation>
<requirements>
<requirement>
<role>com.site.dal.jdbc.QueryEngine</role>
</requirement>
</requirements>
</component>
<component>
<role>com.site.web.mvc.model.ModuleRegistry</role>
<implementation>com.site.web.mvc.model.ModuleRegistry</implementation>
<configuration>
<modules>
<module default="true">com.dianping.dog.alarm.AlarmModule</module>
<module default="true">com.dianping.dog.console.ConsoleModule</module>
</modules>
</configuration>
</component>
<component>
<role>com.dianping.dog.alarm.AlarmModule</role>
<implementation>com.dianping.dog.alarm.AlarmModule</implementation>
<role>com.dianping.dog.console.ConsoleModule</role>
<implementation>com.dianping.dog.console.ConsoleModule</implementation>
</component>
<component>
<role>com.dianping.dog.console.page.home.Handler</role>
<implementation>com.dianping.dog.console.page.home.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.dog.console.page.home.JspViewer</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.dog.console.page.home.JspViewer</role>
<implementation>com.dianping.dog.console.page.home.JspViewer</implementation>
</component>
<component>
<role>com.dianping.dog.alarm.page.home.Handler</role>
<implementation>com.dianping.dog.alarm.page.home.Handler</implementation>
<role>com.dianping.dog.console.page.login.Handler</role>
<implementation>com.dianping.dog.console.page.login.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.dog.alarm.page.home.JspViewer</role>
<role>com.dianping.dog.console.page.login.JspViewer</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.dog.alarm.page.home.JspViewer</role>
<implementation>com.dianping.dog.alarm.page.home.JspViewer</implementation>
<role>com.dianping.dog.console.page.login.JspViewer</role>
<implementation>com.dianping.dog.console.page.login.JspViewer</implementation>
</component>
</components>
</plexus>
<wizard package="com.dianping.dog.home">
<jdbc package="com.dianping.dog.home.dal" name="cat">
<datasource>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://192.168.7.43:3306/cat</url>
<user>dpcom_cat</user>
<password>password</password>
<properties>useUnicode=true&amp;autoReconnect=true</properties>
</datasource>
<group name="alarm" package="com.dianping.dog.home.dal.alarm">
<table name="ruleinstance"/>
<table name="ruletemplate"/>
<table name="subscriber"/>
</group>
<group name="notification" package="com.dianping.dog.home.dal.notification">
<table name="maillog"/>
</group>
</jdbc>
</wizard>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="wizard.xml" />
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<wizard>
<webapp package="com.dianping.dog" name="dog" webres="true" cat="true">
<module name="alarm" path="alarm" default="true">
<page name="home" title="Home" default="true" path="home">
<description>Home</description>
</page>
</module>
</webapp>
</wizard>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<filter>
<filter-name>cat-filter</filter-name>
<filter-class>com.dianping.cat.servlet.CatFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cat-filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<listener>
<listener-class>com.dianping.cat.servlet.CatListener</listener-class>
</listener>
<servlet>
<servlet-name>mvc-servlet</servlet-name>
<servlet-class>com.site.web.MVC</servlet-class>
<init-param>
<param-name>cat-client-xml</param-name>
<param-value>/data/appdatas/cat/client.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-servlet</servlet-name>
<url-pattern>/alarm/*</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="utf-8"?>
<web-app xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee">
<servlet>
<servlet-name>mvc-servlet</servlet-name>
<servlet-class>com.site.web.MVC</servlet-class>
<init-param>
<param-name>cat-client-xml</param-name>
<param-value>/data/appdatas/cat/client.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-servlet</servlet-name>
<url-pattern>/alarm/*</url-pattern>
</servlet-mapping>
</web-app>
<%@ page contentType="text/html; charset=utf-8" %>
<jsp:useBean id="ctx" type="com.dianping.dog.alarm.page.home.Context" scope="request"/>
<jsp:useBean id="payload" type="com.dianping.dog.alarm.page.home.Payload" scope="request"/>
<jsp:useBean id="model" type="com.dianping.dog.alarm.page.home.Model" scope="request"/>
View of home page under alarm
\ No newline at end of file
package com.dianping.dog;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.servlet.GzipFilter;
import com.site.test.jetty.JettyServer;
@RunWith(JUnit4.class)
public class TestServer extends JettyServer {
public static void main(String[] args) throws Exception {
TestServer server = new TestServer();
server.startServer();
server.showReport();
server.stopServer();
}
@Before
public void before() throws Exception {
System.setProperty("devMode", "true");
super.startServer();
}
@Override
protected String getContextPath() {
return "/dog";
}
@Override
protected int getServerPort() {
return 3640;
}
@Override
protected void postConfigure(WebAppContext context) {
context.addFilter(GzipFilter.class, "/alarm/*", Handler.ALL);
}
@Test
public void showReport() throws Exception {
// open the page in the default browser
display("/dog/alarm");
waitForAnyKey();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册