diff --git a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/agent/jetty/provider/handler/reader/ReferenceJsonReader.java b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/agent/jetty/provider/handler/reader/ReferenceJsonReader.java index 8ddbfba0f..b7dc32921 100644 --- a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/agent/jetty/provider/handler/reader/ReferenceJsonReader.java +++ b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/agent/jetty/provider/handler/reader/ReferenceJsonReader.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.collector.agent.jetty.provider.handler.reader; import com.google.gson.stream.JsonReader; @@ -30,16 +29,16 @@ public class ReferenceJsonReader implements StreamJsonReader spanListeners; private final SegmentParserListenerManager listenerManager; private String segmentId; private long timeBucket = 0; @@ -62,9 +64,12 @@ public class SegmentParse { public SegmentParse(ModuleManager moduleManager, SegmentParserListenerManager listenerManager) { this.moduleManager = moduleManager; this.listenerManager = listenerManager; + this.spanListeners = new LinkedList<>(); } public boolean parse(UpstreamSegment segment, ISegmentParseService.Source source) { + createSpanListeners(); + try { List traceIds = segment.getGlobalTraceIdsList(); TraceSegmentObject segmentObject = TraceSegmentObject.parseFrom(segment.getSegment()); @@ -173,12 +178,12 @@ public class SegmentParse { } private void notifyListenerToBuild() { - listenerManager.getSpanListeners().forEach(SpanListener::build); + spanListeners.forEach(SpanListener::build); } private void notifyExitListener(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { - for (SpanListener listener : listenerManager.getSpanListeners()) { + for (SpanListener listener : spanListeners) { if (listener instanceof ExitSpanListener) { ((ExitSpanListener)listener).parseExit(spanDecorator, applicationId, applicationInstanceId, segmentId); } @@ -187,7 +192,7 @@ public class SegmentParse { private void notifyEntryListener(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { - for (SpanListener listener : listenerManager.getSpanListeners()) { + for (SpanListener listener : spanListeners) { if (listener instanceof EntrySpanListener) { ((EntrySpanListener)listener).parseEntry(spanDecorator, applicationId, applicationInstanceId, segmentId); } @@ -196,7 +201,7 @@ public class SegmentParse { private void notifyLocalListener(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { - for (SpanListener listener : listenerManager.getSpanListeners()) { + for (SpanListener listener : spanListeners) { if (listener instanceof LocalSpanListener) { ((LocalSpanListener)listener).parseLocal(spanDecorator, applicationId, applicationInstanceId, segmentId); } @@ -205,7 +210,7 @@ public class SegmentParse { private void notifyFirstListener(SpanDecorator spanDecorator, int applicationId, int applicationInstanceId, String segmentId) { - for (SpanListener listener : listenerManager.getSpanListeners()) { + for (SpanListener listener : spanListeners) { if (listener instanceof FirstSpanListener) { ((FirstSpanListener)listener).parseFirst(spanDecorator, applicationId, applicationInstanceId, segmentId); } @@ -213,10 +218,14 @@ public class SegmentParse { } private void notifyGlobalsListener(UniqueId uniqueId) { - for (SpanListener listener : listenerManager.getSpanListeners()) { + for (SpanListener listener : spanListeners) { if (listener instanceof GlobalTraceIdsListener) { ((GlobalTraceIdsListener)listener).parseGlobalTraceId(uniqueId); } } } + + private void createSpanListeners() { + listenerManager.getSpanListenerFactories().forEach(spanListenerFactory -> spanListeners.add(spanListenerFactory.create(moduleManager))); + } } diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/SegmentParserListenerManager.java b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/SegmentParserListenerManager.java index 86c1ba1f3..65b2bc342 100644 --- a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/SegmentParserListenerManager.java +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/parser/SegmentParserListenerManager.java @@ -20,24 +20,24 @@ package org.apache.skywalking.apm.collector.analysis.segment.parser.provider.par import java.util.ArrayList; import java.util.List; -import org.apache.skywalking.apm.collector.analysis.segment.parser.define.listener.SpanListener; +import org.apache.skywalking.apm.collector.analysis.segment.parser.define.listener.SpanListenerFactory; /** * @author peng-yongsheng */ public class SegmentParserListenerManager { - private List spanListeners; + private List spanListenerFactories; public SegmentParserListenerManager() { - this.spanListeners = new ArrayList<>(); + this.spanListenerFactories = new ArrayList<>(); } - public void add(SpanListener spanListener) { - spanListeners.add(spanListener); + public void add(SpanListenerFactory spanListenerFactory) { + spanListenerFactories.add(spanListenerFactory); } - public List getSpanListeners() { - return spanListeners; + public List getSpanListenerFactories() { + return spanListenerFactories; } } diff --git a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/service/SegmentParserListenerRegister.java b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/service/SegmentParserListenerRegister.java index 2a903d067..cd65c35b9 100644 --- a/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/service/SegmentParserListenerRegister.java +++ b/apm-collector/apm-collector-analysis/analysis-segment-parser/segment-parser-provider/src/main/java/org/apache/skywalking/apm/collector/analysis/segment/parser/provider/service/SegmentParserListenerRegister.java @@ -18,7 +18,7 @@ package org.apache.skywalking.apm.collector.analysis.segment.parser.provider.service; -import org.apache.skywalking.apm.collector.analysis.segment.parser.define.listener.SpanListener; +import org.apache.skywalking.apm.collector.analysis.segment.parser.define.listener.SpanListenerFactory; import org.apache.skywalking.apm.collector.analysis.segment.parser.define.service.ISegmentParserListenerRegister; import org.apache.skywalking.apm.collector.analysis.segment.parser.provider.parser.SegmentParserListenerManager; @@ -33,7 +33,7 @@ public class SegmentParserListenerRegister implements ISegmentParserListenerRegi this.listenerManager = listenerManager; } - @Override public void register(SpanListener spanListener) { - this.listenerManager.add(spanListener); + @Override public void register(SpanListenerFactory spanListenerFactory) { + this.listenerManager.add(spanListenerFactory); } }