diff --git a/cat-core/src/main/java/com/dianping/cat/Cat.java b/cat-core/src/main/java/com/dianping/cat/Cat.java index 9e3818ebde85b1c52ee756e5eb7c0bdea9682e94..4d42035baa1a04141b1d33424761068f0f11ceb3 100644 --- a/cat-core/src/main/java/com/dianping/cat/Cat.java +++ b/cat-core/src/main/java/com/dianping/cat/Cat.java @@ -38,6 +38,7 @@ public class Cat { if (!s_instance.m_initialized) { try { s_instance.setContainer(new DefaultPlexusContainer()); + s_instance.m_initialized = true; } catch (PlexusContainerException e) { throw new RuntimeException("Error when creating Plexus container, " + "please make sure the environment was setup correctly!", e); @@ -87,6 +88,7 @@ public class Cat { if (container != null) { if (!s_instance.m_initialized) { s_instance.setContainer(container); + s_instance.m_initialized = true; } else { throw new RuntimeException("Cat has already been initialized before!"); } @@ -102,6 +104,10 @@ public class Cat { } } + public static boolean isInitialized() { + return s_instance.m_initialized; + } + // this should be called when a thread ends to clean some thread local data public static void reset() { getInstance().m_manager.reset(); @@ -114,8 +120,6 @@ public class Cat { } void setContainer(PlexusContainer container) { - m_initialized = true; - try { m_manager = (MessageManager) container.lookup(MessageManager.class); } catch (ComponentLookupException e) { diff --git a/cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java b/cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java index b0867148c17062b56db8568330fa7a6f258fce11..131745bbfbb7cc78b717e06cd17c232aa43dd4db 100644 --- a/cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java +++ b/cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java @@ -5,6 +5,10 @@ import java.net.UnknownHostException; import java.util.Stack; import java.util.UUID; +import org.codehaus.plexus.logging.LogEnabled; +import org.codehaus.plexus.logging.Logger; + +import com.dianping.cat.Cat; import com.dianping.cat.configuration.model.entity.Config; import com.dianping.cat.message.Message; import com.dianping.cat.message.Transaction; @@ -15,7 +19,7 @@ import com.dianping.cat.message.spi.MessageTree; import com.dianping.cat.message.spi.internal.DefaultMessageTree; import com.site.lookup.ContainerHolder; -public class DefaultMessageManager extends ContainerHolder implements MessageManager { +public class DefaultMessageManager extends ContainerHolder implements MessageManager, LogEnabled { private TransportManager m_manager; // we don't use static modifier since MessageManager is a singleton in @@ -37,14 +41,27 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan private String m_ipAddress; + private Logger m_logger; + + private boolean m_firstMessage = true; + @Override public void add(Message message) { - getContext().add(this, message); + if (Cat.isInitialized()) { + getContext().add(this, message); + } + } + + @Override + public void enableLogging(Logger logger) { + m_logger = logger; } @Override public void end(Transaction transaction) { - getContext().end(this, transaction); + if (Cat.isInitialized()) { + getContext().end(this, transaction); + } } void flush(MessageTree tree) { @@ -62,11 +79,6 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan return m_clientConfig; } - @Override - public Config getServerConfig() { - return m_serverConfig; - } - Context getContext() { Context ctx = m_context.get(); @@ -78,6 +90,11 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan } } + @Override + public Config getServerConfig() { + return m_serverConfig; + } + @Override public void initializeClient(Config clientConfig) { if (clientConfig != null) { @@ -123,7 +140,12 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan @Override public void start(Transaction transaction) { - getContext().start(transaction); + if (Cat.isInitialized()) { + getContext().start(transaction); + } else if (m_firstMessage){ + m_firstMessage = false; + m_logger.warn("CAT client is not enabled because it's not initialized yet"); + } } static class Context { @@ -138,12 +160,12 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan m_tree.setDomain(domain); m_tree.setSessionToken(sessionToken); m_tree.setRequestToken(requestToken); - + Thread thread = Thread.currentThread(); - + m_tree.setThreadId(Long.toHexString(thread.getId())); m_tree.setThreadId(thread.getName()); - + m_tree.setHostName(hostName); m_tree.setIpAddress(ipAddress); m_tree.setMessageId(UUID.randomUUID().toString()); // TODO optimize it diff --git a/cat-home/src/test/java/com/dianping/cat/SimpleServer.java b/cat-home/src/test/java/com/dianping/cat/SimpleServer.java index 5ab86e138989340d9de7dcb28d1b3bc39a354c25..12d2e9a9b1128630a347b8a64d8405ebad3ad8b2 100644 --- a/cat-home/src/test/java/com/dianping/cat/SimpleServer.java +++ b/cat-home/src/test/java/com/dianping/cat/SimpleServer.java @@ -36,11 +36,6 @@ public class SimpleServer extends SimpleServerSupport { JettyTestSupport.startServer(new SimpleServer()); } - @Override - protected File getWarRoot() { - return new File("src/main/webapp"); - } - public static void main(String[] args) throws Exception { SimpleServer server = new SimpleServer(); @@ -70,19 +65,16 @@ public class SimpleServer extends SimpleServerSupport { } @Override - protected void postConfigure(Context ctx) { - ServletHolder holder = new ServletHolder(s_mvc); - - ctx.addServlet(new ServletHolder(s_cat), "/s/*"); - ctx.addServlet(holder, "/"); - ctx.addServlet(holder, "/r/*"); - ctx.addFilter(GzipFilter.class, "/r/*", Handler.ALL); - super.postConfigure(ctx); + protected String getContextPath() { + return "/cat"; } @Override - protected String getContextPath() { - return "/cat"; + protected File getScratchDir() { + File work = new File(System.getProperty("java.io.tmpdir", "."), "Cat"); + + work.mkdirs(); + return work; } @Override @@ -90,6 +82,22 @@ public class SimpleServer extends SimpleServerSupport { return 2281; } + @Override + protected File getWarRoot() { + return new File("src/main/webapp"); + } + + @Override + protected void postConfigure(Context ctx) { + ServletHolder holder = new ServletHolder(s_mvc); + + ctx.addServlet(new ServletHolder(s_cat), "/s/*"); + ctx.addServlet(holder, "/"); + ctx.addServlet(holder, "/r/*"); + ctx.addFilter(GzipFilter.class, "/r/*", Handler.ALL); + super.postConfigure(ctx); + } + @Test public void startServer() throws Exception { // open the page in the default browser @@ -118,15 +126,6 @@ public class SimpleServer extends SimpleServerSupport { } } - @Override - public PlexusContainer getContainer() { - return super.getContainer(); - } - - public void setServerPort(int serverPort) { - m_serverPort = serverPort; - } - public void display(String requestUri) throws Exception { StringBuilder sb = new StringBuilder(256); BrowserManager manager = lookup(BrowserManager.class); @@ -140,6 +139,11 @@ public class SimpleServer extends SimpleServerSupport { } } + @Override + public PlexusContainer getContainer() { + return super.getContainer(); + } + @Override public T lookup(Class role) throws Exception { return super.lookup(role); @@ -149,5 +153,9 @@ public class SimpleServer extends SimpleServerSupport { public T lookup(Class role, Object roleHint) throws Exception { return super.lookup(role, roleHint); } + + public void setServerPort(int serverPort) { + m_serverPort = serverPort; + } } }