提交 e4d68b40 编写于 作者: A ainilife

Add HttpServletResponse into ABTestContext

上级 e06a14aa
......@@ -6,7 +6,10 @@ import java.util.List;
import org.unidal.lookup.configuration.AbstractResourceConfigurator;
import org.unidal.lookup.configuration.Component;
import com.dianping.cat.abtest.repository.ABTestEntityRepository;
import com.dianping.cat.abtest.repository.HttpABTestEntityRepository;
import com.dianping.cat.abtest.spi.ABTestGroupStrategy;
import com.dianping.cat.configuration.ClientConfigManager;
public class ABTestServerConfigurator extends AbstractResourceConfigurator {
@Override
......@@ -15,6 +18,10 @@ public class ABTestServerConfigurator extends AbstractResourceConfigurator {
all.add(C(ABTestGroupStrategy.class, IPDistributionStrategy.ID, IPDistributionStrategy.class)
.is(PER_LOOKUP));
all.add(C(ABTestEntityRepository.class, HttpABTestEntityRepository.class) //
.req(ClientConfigManager.class)
.config(E("refreshTimeInSeconds").value("6")));
return all;
}
......
......@@ -6,5 +6,17 @@
<implementation>com.dianping.abtest.sample.IPDistributionStrategy</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
</component>
<component>
<role>com.dianping.cat.abtest.repository.ABTestEntityRepository</role>
<implementation>com.dianping.cat.abtest.repository.HttpABTestEntityRepository</implementation>
<configuration>
<refreshTimeInSeconds>6</refreshTimeInSeconds>
</configuration>
<requirements>
<requirement>
<role>com.dianping.cat.configuration.ClientConfigManager</role>
</requirement>
</requirements>
</component>
</components>
</plexus>
package com.dianping.cat.abtest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.codehaus.plexus.PlexusContainer;
import org.unidal.helper.Threads;
......@@ -43,10 +44,10 @@ public final class ABTestManager {
}
}
public static void onRequestBegin(HttpServletRequest req) {
public static void onRequestBegin(HttpServletRequest request,HttpServletResponse response) {
initialize();
s_contextManager.onRequestBegin(req);
s_contextManager.onRequestBegin(request,response);
}
public static void onRequestEnd() {
......
package com.dianping.cat.abtest.spi;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface ABTestContext {
public final String DEFAULT_GROUP = "default";
......@@ -12,4 +13,6 @@ public interface ABTestContext {
public void setGroupName(String groupName);
public HttpServletRequest getHttpServletRequest();
public HttpServletResponse getHttpServletResponse();
}
......@@ -3,6 +3,7 @@ package com.dianping.cat.abtest.spi.internal;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dianping.cat.abtest.ABTestName;
import com.dianping.cat.abtest.spi.ABTestContext;
......@@ -12,7 +13,7 @@ public interface ABTestContextManager {
public List<ABTestContext> getContexts();
public void onRequestBegin(HttpServletRequest req);
public void onRequestBegin(HttpServletRequest request,HttpServletResponse response);
public void onRequestEnd();
}
......@@ -3,6 +3,7 @@ package com.dianping.cat.abtest.spi.internal;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dianping.cat.Cat;
import com.dianping.cat.abtest.spi.ABTestContext;
......@@ -16,7 +17,9 @@ public class DefaultABTestContext implements ABTestContext {
private ABTestEntity m_entity;
private HttpServletRequest m_req;
private HttpServletRequest m_request;
private HttpServletResponse m_response;
private ABTestGroupStrategy m_groupStrategy;
......@@ -61,15 +64,21 @@ public class DefaultABTestContext implements ABTestContext {
m_groupName = groupName;
}
public void setup(HttpServletRequest req) {
m_req = req;
public void setup(HttpServletRequest request,HttpServletResponse response) {
m_request = request;
m_response = response;
}
@Override
public HttpServletRequest getHttpServletRequest() {
return m_req;
return m_request;
}
@Override
public HttpServletResponse getHttpServletResponse() {
return m_response;
}
@Override
public ABTestEntity getEntity() {
return m_entity;
......@@ -78,4 +87,6 @@ public class DefaultABTestContext implements ABTestContext {
public void setGroupStrategy(ABTestGroupStrategy groupStrategy) {
m_groupStrategy = groupStrategy;
}
}
......@@ -7,6 +7,7 @@ import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.unidal.lookup.ContainerHolder;
import org.unidal.lookup.annotation.Inject;
......@@ -37,20 +38,20 @@ public class DefaultABTestContextManager extends ContainerHolder implements ABTe
if (ctx == null) {
ABTestEntity entity = m_entityManager.getEntity(testName);
ctx = createContext(entity, entry.getHttpServletRequest());
ctx = createContext(entity, entry.getHttpServletRequest(),entry.getHttpServletResponse());
map.put(name, ctx);
}
return ctx;
}
private DefaultABTestContext createContext(ABTestEntity entity, HttpServletRequest req) {
private DefaultABTestContext createContext(ABTestEntity entity, HttpServletRequest request,HttpServletResponse response) {
DefaultABTestContext ctx = new DefaultABTestContext(entity);
if (!entity.isDisabled()) {
ABTestGroupStrategy groupStrategy = entity.getGroupStrategy();
ctx.setup(req);
ctx.setup(request,response);
ctx.setGroupStrategy(groupStrategy);
}
......@@ -73,7 +74,7 @@ public class DefaultABTestContextManager extends ContainerHolder implements ABTe
DefaultABTestContext ctx = ctxMap.get(name);
if (ctx == null) {
ctx = createContext(entity, entry.getHttpServletRequest());
ctx = createContext(entity, entry.getHttpServletRequest(),entry.getHttpServletResponse());
ctxMap.put(name, ctx);
}
......@@ -95,14 +96,14 @@ public class DefaultABTestContextManager extends ContainerHolder implements ABTe
}
@Override
public void onRequestBegin(HttpServletRequest req) {
public void onRequestBegin(HttpServletRequest request,HttpServletResponse response) {
Entry entry = m_threadLocal.get();
entry.setHttpServletRequest(req);
entry.setup(request,response);
Map<String, DefaultABTestContext> map = entry.getContextMap();
for (DefaultABTestContext ctx : map.values()) {
ctx.setup(req);
ctx.setup(request,response);
}
}
......@@ -111,12 +112,23 @@ public class DefaultABTestContextManager extends ContainerHolder implements ABTe
private List<ABTestContext> m_list;
private HttpServletRequest m_req;
private HttpServletRequest m_request;
private HttpServletResponse m_response;
public Map<String, DefaultABTestContext> getContextMap() {
return m_map;
}
public void setup(HttpServletRequest request, HttpServletResponse response) {
m_request = request;
m_response = response;
}
public HttpServletResponse getHttpServletResponse() {
return m_response;
}
public void setContextList(List<ABTestContext> ctxList) {
m_list = ctxList;
}
......@@ -126,11 +138,7 @@ public class DefaultABTestContextManager extends ContainerHolder implements ABTe
}
public HttpServletRequest getHttpServletRequest() {
return m_req;
}
public void setHttpServletRequest(HttpServletRequest req) {
m_req = req;
return m_request;
}
}
}
......@@ -24,7 +24,7 @@ class ABTestComponentConfigurator extends AbstractResourceConfigurator {
all.add(C(ABTestEntityRepository.class, HttpABTestEntityRepository.class) //
.req(ClientConfigManager.class)
.config(E("refreshTime").value("6")));
.config(E("refreshTimeInSeconds").value("60")));
all.add(C(ABTestEntityManager.class, DefaultABTestEntityManager.class) //
.req(ABTestEntityRepository.class));
......
......@@ -10,6 +10,7 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dianping.cat.Cat;
import com.dianping.cat.CatConstants;
......@@ -28,6 +29,7 @@ public class CatFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
boolean isRoot = !Cat.getManager().hasContext();
if (isRoot) {
......@@ -41,7 +43,7 @@ public class CatFilter implements Filter {
if (isRoot) {
t = Cat.newTransaction(getTypeName(), getOriginalUrl(request));
logRequestClientInfo(cat, req);
ABTestManager.onRequestBegin(req);
ABTestManager.onRequestBegin(req,resp);
} else {
t = Cat.newTransaction(getTypeName() + ".Forward", getOriginalUrl(request));
}
......
......@@ -315,7 +315,7 @@
<role>com.dianping.cat.abtest.repository.ABTestEntityRepository</role>
<implementation>com.dianping.cat.abtest.repository.HttpABTestEntityRepository</implementation>
<configuration>
<refreshTime>6</refreshTime>
<refreshTimeInSeconds>60</refreshTimeInSeconds>
</configuration>
<requirements>
<requirement>
......
......@@ -6,17 +6,17 @@ import java.util.List;
import org.unidal.lookup.configuration.AbstractResourceConfigurator;
import org.unidal.lookup.configuration.Component;
import com.dianping.cat.abtest.spi.ABTestGroupStrategy;
import com.dianping.cat.abtest.spi.internal.ABTestContextManager;
import com.dianping.cat.abtest.spi.internal.ABTestEntityManager;
import com.dianping.cat.abtest.spi.internal.DefaultABTestEntityManager;
import com.dianping.cat.abtest.spi.internal.DefaultABTestContextManager;
public class ABTestServerConfigurator extends AbstractResourceConfigurator {
@Override
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
all.add(C(ABTestEntityManager.class, DefaultABTestEntityManager.class));
all.add(C(ABTestGroupStrategy.class, "roundrobin", RoundRobinGroupStrategy.class));
all.add(C(ABTestContextManager.class, DefaultABTestContextManager.class) //
.req(ABTestEntityManager.class));
return all;
}
......
<plexus>
<components>
<component>
<role>com.dianping.cat.abtest.spi.ABTestEntityManager</role>
<implementation>com.dianping.cat.abtest.spi.internal.DefaultABTestEntityManager</implementation>
</component>
<component>
<role>com.dianping.cat.abtest.spi.ABTestGroupStrategy</role>
<role-hint>roundrobin</role-hint>
<implementation>com.dianping.cat.abtest.demo.roundrobin.RoundRobinGroupStrategy</implementation>
<role>com.dianping.cat.abtest.spi.internal.ABTestContextManager</role>
<implementation>com.dianping.cat.abtest.spi.internal.DefaultABTestContextManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.abtest.spi.internal.ABTestEntityManager</role>
</requirement>
</requirements>
</component>
</components>
</plexus>
......@@ -1160,9 +1160,9 @@
<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>binlog</user>
<password>binlog</password>
<URL>jdbc:mysql://127.0.0.1:3306/cat</URL>
<user>root</user>
<password></password>
<connectionProperties><![CDATA[useUnicode=true&autoReconnect=true]]></connectionProperties>
</properties>
</configuration>
......@@ -3156,9 +3156,6 @@
<role>com.dianping.cat.system.page.abtest.Handler</role>
<implementation>com.dianping.cat.system.page.abtest.Handler</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.system.page.abtest.JspViewer</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.abtest.AbtestDao</role>
</requirement>
......@@ -3166,19 +3163,13 @@
<role>com.dianping.cat.home.dal.abtest.AbtestRunDao</role>
</requirement>
<requirement>
<role>com.dainping.cat.consumer.dal.report.ProjectDao</role>
<role>com.dianping.cat.home.dal.abtest.GroupStrategyDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.abtest.GroupStrategyDao</role>
<role>com.dainping.cat.consumer.dal.report.ProjectDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.abtest.JspViewer</role>
<implementation>com.dianping.cat.system.page.abtest.JspViewer</implementation>
<requirements>
<requirement>
<role>org.unidal.web.mvc.view.model.ModelHandler</role>
<role>com.dianping.cat.system.page.abtest.JspViewer</role>
</requirement>
</requirements>
</component>
......@@ -3209,6 +3200,15 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.page.abtest.JspViewer</role>
<implementation>com.dianping.cat.system.page.abtest.JspViewer</implementation>
<requirements>
<requirement>
<role>org.unidal.web.mvc.view.model.ModelHandler</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.alarm.AlarmRuleCreator</role>
<implementation>com.dianping.cat.system.alarm.AlarmRuleCreator</implementation>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册