Skip to content

Commit fffc565

Browse files
committed
Move shutdown hook method, and remove init lifecycle listener.
1 parent cd170c1 commit fffc565

File tree

13 files changed

+51
-62
lines changed

13 files changed

+51
-62
lines changed

apm-agent-core/src/main/java/co/elastic/apm/agent/bci/InstrumentationStatsLifecycleListener.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,20 @@
1919
package co.elastic.apm.agent.bci;
2020

2121
import co.elastic.apm.agent.bci.bytebuddy.MatcherTimer;
22-
import co.elastic.apm.agent.context.InitLifecycleListener;
23-
import co.elastic.apm.agent.impl.ElasticApmTracer;
2422
import co.elastic.apm.agent.tracer.AbstractLifecycleListener;
2523
import co.elastic.apm.agent.sdk.logging.Logger;
2624
import co.elastic.apm.agent.sdk.logging.LoggerFactory;
25+
import co.elastic.apm.agent.tracer.LifecycleListener;
26+
import co.elastic.apm.agent.tracer.Tracer;
2727

2828
import java.util.ArrayList;
2929
import java.util.Collections;
3030

31-
public class InstrumentationStatsLifecycleListener extends AbstractLifecycleListener implements InitLifecycleListener {
31+
public class InstrumentationStatsLifecycleListener extends AbstractLifecycleListener implements LifecycleListener {
3232
private static final Logger logger = LoggerFactory.getLogger(InstrumentationStatsLifecycleListener.class);
3333

3434
@Override
35-
public void init(ElasticApmTracer tracer) {
35+
public void init(Tracer tracer) {
3636
InstrumentationStats instrumentationStats = ElasticApmAgent.getInstrumentationStats();
3737
instrumentationStats.reset();
3838
instrumentationStats.setMeasureMatching(logger.isDebugEnabled());

apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSource.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818
*/
1919
package co.elastic.apm.agent.configuration;
2020

21-
import co.elastic.apm.agent.context.InitLifecycleListener;
2221
import co.elastic.apm.agent.impl.ElasticApmTracer;
2322
import co.elastic.apm.agent.report.ApmServerClient;
2423
import co.elastic.apm.agent.report.serialize.DslJsonSerializer;
2524
import co.elastic.apm.agent.sdk.logging.Logger;
2625
import co.elastic.apm.agent.sdk.logging.LoggerFactory;
26+
import co.elastic.apm.agent.tracer.LifecycleListener;
27+
import co.elastic.apm.agent.tracer.Tracer;
2728
import co.elastic.apm.agent.util.ExecutorUtils;
2829
import com.dslplatform.json.DslJson;
2930
import com.dslplatform.json.JsonReader;
@@ -44,7 +45,7 @@
4445
import java.util.regex.Matcher;
4546
import java.util.regex.Pattern;
4647

47-
public class ApmServerConfigurationSource extends AbstractConfigurationSource implements InitLifecycleListener {
48+
public class ApmServerConfigurationSource extends AbstractConfigurationSource implements LifecycleListener {
4849

4950
// log correlation is enabled by default in Java agent, thus removing it from warnings
5051
private static final Set<String> IGNORED_REMOTE_KEYS = Collections.singleton("enable_log_correlation");
@@ -114,8 +115,8 @@ public void reload() {
114115
}
115116

116117
@Override
117-
public void init(ElasticApmTracer tracer) {
118-
this.tracer = tracer;
118+
public void init(Tracer tracer) {
119+
this.tracer = tracer.require(ElasticApmTracer.class);
119120
}
120121

121122
@Override

apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/StartupInfo.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919
package co.elastic.apm.agent.configuration;
2020

21-
import co.elastic.apm.agent.context.InitLifecycleListener;
21+
import co.elastic.apm.agent.tracer.Tracer;
2222
import co.elastic.apm.agent.tracer.configuration.TimeDuration;
2323
import co.elastic.apm.agent.tracer.AbstractLifecycleListener;
2424
import co.elastic.apm.agent.impl.ElasticApmTracer;
@@ -39,7 +39,7 @@
3939
* under Apache license 2.0.
4040
* </p>
4141
*/
42-
public class StartupInfo extends AbstractLifecycleListener implements InitLifecycleListener {
42+
public class StartupInfo extends AbstractLifecycleListener {
4343

4444
private static final Logger logger = LoggerFactory.getLogger(StartupInfo.class);
4545
private final String elasticApmVersion;
@@ -57,8 +57,8 @@ private static String getJvmAndOsVersionString() {
5757
}
5858

5959
@Override
60-
public void init(ElasticApmTracer tracer) {
61-
ConfigurationRegistry configurationRegistry = tracer.getConfigurationRegistry();
60+
public void init(Tracer tracer) {
61+
ConfigurationRegistry configurationRegistry = tracer.require(ElasticApmTracer.class).getConfigurationRegistry();
6262
logConfiguration(configurationRegistry, logger);
6363
}
6464

apm-agent-core/src/main/java/co/elastic/apm/agent/context/InitLifecycleListener.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import co.elastic.apm.agent.configuration.CoreConfiguration;
2727
import co.elastic.apm.agent.configuration.MetricsConfiguration;
2828
import co.elastic.apm.agent.configuration.ServerlessConfiguration;
29-
import co.elastic.apm.agent.context.InitLifecycleListener;
3029
import co.elastic.apm.agent.report.serialize.DslJsonDataWriter;
3130
import co.elastic.apm.agent.tracer.reporting.DataWriter;
3231
import co.elastic.apm.agent.tracer.reporting.DoubleSupplier;
@@ -680,12 +679,10 @@ public List<ActivationListener> getActivationListeners() {
680679
void init(List<LifecycleListener> lifecycleListeners) {
681680
this.lifecycleListeners.addAll(lifecycleListeners);
682681
for (LifecycleListener lifecycleListener : lifecycleListeners) {
683-
if (lifecycleListener instanceof InitLifecycleListener) {
684-
try {
685-
((InitLifecycleListener) lifecycleListener).init(this);
686-
} catch (Exception e) {
687-
logger.error("Failed to init " + lifecycleListener.getClass().getName(), e);
688-
}
682+
try {
683+
lifecycleListener.init(this);
684+
} catch (Exception e) {
685+
logger.error("Failed to init " + lifecycleListener.getClass().getName(), e);
689686
}
690687
}
691688
}

apm-agent-core/src/main/java/co/elastic/apm/agent/logging/ApmServerLogAppender.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
*/
1919
package co.elastic.apm.agent.logging;
2020

21-
import co.elastic.apm.agent.context.InitLifecycleListener;
2221
import co.elastic.apm.agent.tracer.AbstractLifecycleListener;
2322
import co.elastic.apm.agent.impl.ElasticApmTracer;
2423
import co.elastic.apm.agent.report.Reporter;
24+
import co.elastic.apm.agent.tracer.LifecycleListener;
25+
import co.elastic.apm.agent.tracer.Tracer;
2526
import co.elastic.logging.log4j2.EcsLayout;
2627
import org.apache.logging.log4j.core.Appender;
2728
import org.apache.logging.log4j.core.Core;
@@ -100,11 +101,11 @@ public void append(LogEvent event) {
100101
sendLogEvent(event);
101102
}
102103

103-
public InitLifecycleListener getInitListener() {
104-
class InitListener extends AbstractLifecycleListener implements InitLifecycleListener {
104+
public LifecycleListener getInitListener() {
105+
class InitListener extends AbstractLifecycleListener {
105106
@Override
106-
public void init(ElasticApmTracer tracer) {
107-
initStreaming(tracer.getConfig(LoggingConfiguration.class), tracer.getReporter());
107+
public void init(Tracer tracer) {
108+
initStreaming(tracer.getConfig(LoggingConfiguration.class), tracer.require(ElasticApmTracer.class).getReporter());
108109
}
109110
}
110111
return new InitListener();

apm-agent-core/src/test/java/co/elastic/apm/agent/impl/LifecycleTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import co.elastic.apm.agent.MockReporter;
2222
import co.elastic.apm.agent.bci.ElasticApmAgent;
2323
import co.elastic.apm.agent.configuration.SpyConfiguration;
24-
import co.elastic.apm.agent.context.InitLifecycleListener;
2524
import co.elastic.apm.agent.tracer.AbstractLifecycleListener;
2625
import co.elastic.apm.agent.objectpool.TestObjectPoolFactory;
2726
import net.bytebuddy.agent.ByteBuddyAgent;
@@ -141,9 +140,9 @@ void testStartDisabled() throws Exception {
141140
ConfigurationRegistry configRegistry = SpyConfiguration.createSpyConfig(SimpleSource.forTest("enabled", "false"));
142141
final AtomicBoolean initialized = new AtomicBoolean();
143142
final AtomicBoolean started = new AtomicBoolean();
144-
class TestListener extends AbstractLifecycleListener implements InitLifecycleListener {
143+
class TestListener extends AbstractLifecycleListener {
145144
@Override
146-
public void init(ElasticApmTracer tracer) {
145+
public void init(co.elastic.apm.agent.tracer.Tracer tracer) {
147146
initialized.set(true);
148147
}
149148

apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/AbstractLifecycleListener.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020

2121
public abstract class AbstractLifecycleListener implements LifecycleListener {
2222

23+
@Override
24+
public void init(Tracer tracer) throws Exception {
25+
}
26+
2327
@Override
2428
public void start() throws Exception {
2529
}

apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/GlobalTracer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import co.elastic.apm.agent.tracer.reference.ReferenceCountedMap;
2525

2626
import javax.annotation.Nullable;
27+
import java.io.Closeable;
2728
import java.util.Set;
2829

2930
public class GlobalTracer implements Tracer {
@@ -133,4 +134,9 @@ public <T, C> Transaction<?> startChildTransaction(@Nullable C headerCarrier, He
133134
public ErrorCapture captureException(@Nullable Throwable e, @Nullable ClassLoader initiatingClassLoader) {
134135
return tracer.captureException(e, initiatingClassLoader);
135136
}
137+
138+
@Override
139+
public void addShutdownHook(Closeable job) {
140+
tracer.addShutdownHook(job);
141+
}
136142
}

apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/LifecycleListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@
3737
*/
3838
public interface LifecycleListener {
3939

40+
/**
41+
* Callback for tracer initialization. As opposed to {@link LifecycleListener#start()}, which may
42+
* be called in a delay, this callback is called at the bootstrap of the JVM, before anything else starts.
43+
* This may be useful for listeners that need to operate very early on, for example such that setup class loading
44+
* requirement to support OSGi systems.
45+
*/
46+
void init(Tracer tracer) throws Exception;
47+
4048
/**
4149
* Callback for when the {@link Tracer} starts.
4250
*/

0 commit comments

Comments
 (0)