Skip to content

Commit 7bc2c40

Browse files
committed
Add possibility to have several trace event listeners
1 parent 5abc9bf commit 7bc2c40

28 files changed

+571
-254
lines changed

ojdbc-provider-azure/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<parent>
1111
<groupId>com.oracle.database.jdbc</groupId>
1212
<artifactId>ojdbc-extensions</artifactId>
13-
<version>${extensions-version}</version>
13+
<version>1.0.2</version>
1414
</parent>
1515

1616
<dependencyManagement>

ojdbc-provider-common/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<parent>
1212
<groupId>com.oracle.database.jdbc</groupId>
1313
<artifactId>ojdbc-extensions</artifactId>
14-
<version>${extensions-version}</version>
14+
<version>1.0.2</version>
1515
</parent>
1616

1717
<dependencies>

ojdbc-provider-gcp/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<parent>
1313
<groupId>com.oracle.database.jdbc</groupId>
1414
<artifactId>ojdbc-extensions</artifactId>
15-
<version>${extensions-version}</version>
15+
<version>1.0.2</version>
1616
</parent>
1717

1818
<dependencyManagement>

ojdbc-provider-jfr/pom.xml

+7-2
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,26 @@
66
<parent>
77
<groupId>com.oracle.database.jdbc</groupId>
88
<artifactId>ojdbc-extensions</artifactId>
9-
<version>${extensions-version}</version>
9+
<version>1.0.2</version>
1010
</parent>
1111

1212
<name>Oracle JDBC Java Flight Recorder Provider</name>
1313

1414
<groupId>com.oracle.database.jdbc</groupId>
1515
<artifactId>ojdbc-provider-jfr</artifactId>
16-
<version>${extensions-version}</version>
16+
<version>1.0.2</version>
1717

1818
<properties>
1919
<maven.compiler.source>11</maven.compiler.source>
2020
<maven.compiler.target>11</maven.compiler.target>
2121
</properties>
2222

2323
<dependencies>
24+
<dependency>
25+
<groupId>com.oracle.database.jdbc</groupId>
26+
<artifactId>ojdbc-provider-traceeventlisteners</artifactId>
27+
<version>1.0.2</version>
28+
</dependency>
2429
<dependency>
2530
<groupId>com.oracle.database.jdbc</groupId>
2631
<artifactId>ojdbc8</artifactId>

ojdbc-provider-jfr/src/main/java/oracle/jdbc/provider/jfr/FlightRecorderTraceEventListener.java

+28-8
Original file line numberDiff line numberDiff line change
@@ -38,30 +38,40 @@
3838

3939
package oracle.jdbc.provider.jfr;
4040

41+
import oracle.jdbc.provider.traceeventlisteners.spi.AbstractDiagnosticTraceEventListener;
42+
4143
import java.util.logging.Level;
4244
import java.util.logging.Logger;
4345

44-
import oracle.jdbc.TraceEventListener;
4546
import jdk.jfr.Event;
4647

4748
/**
4849
* TraceEventListener that creates Java Flight Recorder events for each
4950
* round trip.
5051
*/
51-
public class FlightRecorderTraceEventListener implements TraceEventListener {
52+
public class FlightRecorderTraceEventListener extends AbstractDiagnosticTraceEventListener implements FlightRecorderTraceEventListenerMBean {
5253

53-
private final boolean enableSensitiveData;
54+
/**
55+
* Name of the property used to enable or disable this listener.
56+
*/
57+
public static final String FLIGHT_RECORDER_TRACE_EVENT_LISTENER_ENABLED = "oracle.jdbc.provider.jfr.enabled";
58+
/**
59+
* Name of the property used to enable or disable sensitive data for this
60+
* listener.
61+
*/
62+
public static final String FLIGHT_RECORDER_TRACE_EVENT_LISTENER_SENSITIVE_ENABLED = "oracle.jdbc.provider.jfr.sensitive-enabled";
5463

5564
private static Logger logger = Logger.getLogger(FlightRecorderTraceEventListener.class.getName());
5665

5766
/**
5867
* Constructor
59-
* @param enableSensitiveData if true, events will contain sensitive information like
68+
* @param enabled if true, JFR events will be created
69+
* @param sensitiveDataEnabled if true, events will contain sensitive information like
6070
* SQL statements and usernames.
6171
*/
62-
public FlightRecorderTraceEventListener(boolean enableSensitiveData) {
63-
this.enableSensitiveData = enableSensitiveData;
64-
logger.log(Level.INFO, "FlightRecorderTraceEventListener started: sensitive data enabled " + this.enableSensitiveData);
72+
public FlightRecorderTraceEventListener(boolean enabled, boolean sensitiveDataEnabled) {
73+
super(enabled, sensitiveDataEnabled);
74+
logger.log(Level.INFO, "FlightRecorderTraceEventListener started: sensitive data enabled " + this.sensitiveDataEnabled);
6575
}
6676

6777
/**
@@ -82,7 +92,7 @@ public Object roundTrip(Sequence sequence, TraceContext traceContext, Object use
8292
event.set(1, traceContext.databaseOperation());
8393
event.set(2, traceContext.tenant());
8494
event.set(3, traceContext.getSqlId());
85-
if (enableSensitiveData) {
95+
if (sensitiveDataEnabled) {
8696
event.set(4, traceContext.originalSqlText());
8797
event.set(5, traceContext.actualSqlText());
8898
event.set(6, traceContext.user());
@@ -94,5 +104,15 @@ public Object roundTrip(Sequence sequence, TraceContext traceContext, Object use
94104
return null;
95105
}
96106

107+
@Override
108+
protected String getEnabledSystemProperty() {
109+
return FLIGHT_RECORDER_TRACE_EVENT_LISTENER_ENABLED;
110+
}
111+
112+
@Override
113+
protected String getEnableSensitiveDataSystemProperty() {
114+
return FLIGHT_RECORDER_TRACE_EVENT_LISTENER_SENSITIVE_ENABLED;
115+
}
116+
97117
}
98118

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package oracle.jdbc.provider.jfr;
2+
3+
import oracle.jdbc.provider.traceeventlisteners.spi.DiagnosticTraceEventListenerMBean;
4+
5+
public interface FlightRecorderTraceEventListenerMBean extends DiagnosticTraceEventListenerMBean {
6+
7+
}

ojdbc-provider-jfr/src/main/java/oracle/jdbc/provider/jfr/FlightRecorderTraceEventListenerProvider.java

+11-30
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@
3838

3939
package oracle.jdbc.provider.jfr;
4040

41-
import java.util.Arrays;
4241
import java.util.Collection;
4342
import java.util.Collections;
4443
import java.util.List;
4544
import java.util.Map;
4645

46+
import oracle.jdbc.provider.traceeventlisteners.spi.AbstractDiagnosticTraceEventListenerProvider;
47+
import oracle.jdbc.provider.traceeventlisteners.spi.DiagnosticTraceEventListenerProvider;
4748
import oracle.jdbc.TraceEventListener;
4849
import oracle.jdbc.spi.TraceEventListenerProvider;
4950

@@ -55,50 +56,30 @@
5556
* To enable sensitive data set the connection property
5657
* oracle.jdbc.provider.traceEventListener.enableSensitiveData to true.
5758
*/
58-
public class FlightRecorderTraceEventListenerProvider implements TraceEventListenerProvider {
59+
public class FlightRecorderTraceEventListenerProvider extends AbstractDiagnosticTraceEventListenerProvider implements DiagnosticTraceEventListenerProvider {
5960

6061
/**
6162
* Set this value to the connection property {@link oracle.jdbc.OracleConnection#CONNECTION_PROPERTY_PROVIDER_TRACE_EVENT_LISTENER}
6263
* to indicate that this provider should be used.
6364
*/
6465
public static final String TRACE_EVENT_LISTENER_NAME = "java-flight-recorder-trace-event-listener-provider";
6566

66-
private static final Parameter ENABLE_SENSITIVE_DATA = new Parameter() {
67-
@Override
68-
public boolean isSensitive() {
69-
return false;
70-
}
71-
@Override
72-
public String name() {
73-
return "enableSensitiveData";
74-
}
75-
};
76-
7767
@Override
78-
public String getName() {
79-
return TRACE_EVENT_LISTENER_NAME;
68+
public TraceEventListener getTraceEventListener(boolean enableSensitiveData) {
69+
return getTraceEventListenerFromMBean(true, enableSensitiveData);
8070
}
8171

8272
@Override
83-
public Collection<? extends Parameter> getParameters() {
84-
85-
List<Parameter> parameters = Collections.singletonList(ENABLE_SENSITIVE_DATA);
86-
return parameters;
73+
protected String getProviderName() {
74+
return TRACE_EVENT_LISTENER_NAME;
8775
}
8876

8977
@Override
90-
public TraceEventListener getTraceEventListener(Map<Parameter, CharSequence> parametersMap) {
91-
boolean enableSensitiveData = getBooleanParameterValue(ENABLE_SENSITIVE_DATA, parametersMap);
92-
return new FlightRecorderTraceEventListener(enableSensitiveData);
78+
protected TraceEventListener getTraceEventListener(boolean enabled, boolean enableSensitiveData) {
79+
return new FlightRecorderTraceEventListener(enabled, enableSensitiveData);
9380
}
9481

95-
private boolean getBooleanParameterValue(Parameter parameter, Map<Parameter, CharSequence> parametersMap) {
96-
CharSequence value = parametersMap.get(parameter);
97-
if (value != null) {
98-
return Boolean.valueOf(value.toString());
99-
}
100-
return false;
10182

102-
}
103-
83+
84+
10485
}

ojdbc-provider-jfr/src/main/java/oracle/jdbc/provider/jfr/OracleEventFactory.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ public static Event createEvent(DatabaseFunction databaseFunction) {
7676
eventAnnotations.add(new AnnotationElement(Category.class, new String[] { "Oracle JDBC", "Round trips" }));
7777

7878
List<ValueDescriptor> fields = new ArrayList<ValueDescriptor>();
79-
fields.add(new ValueDescriptor(String.class, "Connection ID"));
80-
fields.add(new ValueDescriptor(String.class, "Database operation"));
81-
fields.add(new ValueDescriptor(String.class, "Original SQL text"));
82-
fields.add(new ValueDescriptor(String.class, "Actual SQL text"));
83-
fields.add(new ValueDescriptor(String.class, "Database user"));
84-
fields.add(new ValueDescriptor(String.class, "Database tenant"));
85-
fields.add(new ValueDescriptor(String.class, "SQL ID"));
79+
fields.add(new ValueDescriptor(String.class, "Connection_ID"));
80+
fields.add(new ValueDescriptor(String.class, "Database_operation"));
81+
fields.add(new ValueDescriptor(String.class, "Database_tenant"));
82+
fields.add(new ValueDescriptor(String.class, "SQL_ID"));
83+
fields.add(new ValueDescriptor(String.class, "Original_SQL_text"));
84+
fields.add(new ValueDescriptor(String.class, "Actual_SQL_text"));
85+
fields.add(new ValueDescriptor(String.class, "Database_user"));
8686

8787
EventFactory f = EventFactory.create(eventAnnotations, fields);
8888
return f.newEvent();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
oracle.jdbc.provider.jfr.FlightRecorderTraceEventListenerProvider

ojdbc-provider-jfr/src/test/java/oracle/jdbc/provider/jfr/FlightRecorderTraceEventListenerTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void resetMocks() {
7979
@Test
8080
public void roundTripSensitiveSuccessTest() throws Exception {
8181
FlightRecorderTraceEventListener traceEventListener =
82-
new FlightRecorderTraceEventListener(true);
82+
new FlightRecorderTraceEventListener(true, true);
8383
traceEventListener.roundTrip(Sequence.BEFORE, traceContext, traceEventListener);
8484
// check
8585
eventFactory.verify(
@@ -102,7 +102,7 @@ public void roundTripSensitiveSuccessTest() throws Exception {
102102
@Test
103103
public void roundTripNotSensitiveSuccessTest() throws Exception {
104104
FlightRecorderTraceEventListener traceEventListener =
105-
new FlightRecorderTraceEventListener(false);
105+
new FlightRecorderTraceEventListener(true, false);
106106
traceEventListener.roundTrip(Sequence.BEFORE, traceContext, null);
107107
// check
108108
eventFactory.verify(

ojdbc-provider-oci/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<parent>
1111
<groupId>com.oracle.database.jdbc</groupId>
1212
<artifactId>ojdbc-extensions</artifactId>
13-
<version>${extensions-version}</version>
13+
<version>1.0.2</version>
1414
</parent>
1515

1616
<dependencyManagement>

ojdbc-provider-opentelemetry/pom.xml

+7-2
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,23 @@
1111
<parent>
1212
<groupId>com.oracle.database.jdbc</groupId>
1313
<artifactId>ojdbc-extensions</artifactId>
14-
<version>${extensions-version}</version>
14+
<version>1.0.2</version>
1515
</parent>
1616

1717
<properties>
18-
<opentelemetry.version>1.42.1</opentelemetry.version>
18+
<opentelemetry.version>1.44.1</opentelemetry.version>
1919
</properties>
2020

2121
<dependencies>
2222
<dependency>
2323
<groupId>com.oracle.database.jdbc</groupId>
2424
<artifactId>ojdbc8</artifactId>
2525
</dependency>
26+
<dependency>
27+
<groupId>com.oracle.database.jdbc</groupId>
28+
<artifactId>ojdbc-provider-traceeventlisteners</artifactId>
29+
<version>1.0.2</version>
30+
</dependency>
2631
<dependency>
2732
<groupId>io.opentelemetry</groupId>
2833
<artifactId>opentelemetry-api</artifactId>

0 commit comments

Comments
 (0)