io.debezium.connector.sqlserver.SqlServerChangeEventSourceFactory Maven / Gradle / Ivy
/*
* Copyright Debezium Authors.
*
* Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
*/
package io.debezium.connector.sqlserver;
import java.util.Optional;
import io.debezium.jdbc.MainConnectionProvidingConnectionFactory;
import io.debezium.pipeline.ErrorHandler;
import io.debezium.pipeline.EventDispatcher;
import io.debezium.pipeline.notification.NotificationService;
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotChangeEventSource;
import io.debezium.pipeline.source.snapshot.incremental.SignalBasedIncrementalSnapshotChangeEventSource;
import io.debezium.pipeline.source.spi.ChangeEventSourceFactory;
import io.debezium.pipeline.source.spi.DataChangeEventListener;
import io.debezium.pipeline.source.spi.SnapshotChangeEventSource;
import io.debezium.pipeline.source.spi.SnapshotProgressListener;
import io.debezium.pipeline.source.spi.StreamingChangeEventSource;
import io.debezium.relational.TableId;
import io.debezium.spi.schema.DataCollectionId;
import io.debezium.util.Clock;
import io.debezium.util.Strings;
public class SqlServerChangeEventSourceFactory implements ChangeEventSourceFactory {
private final SqlServerConnectorConfig configuration;
private final MainConnectionProvidingConnectionFactory connectionFactory;
private final SqlServerConnection metadataConnection;
private final ErrorHandler errorHandler;
private final EventDispatcher dispatcher;
private final Clock clock;
private final SqlServerDatabaseSchema schema;
private final NotificationService notificationService;
public SqlServerChangeEventSourceFactory(SqlServerConnectorConfig configuration, MainConnectionProvidingConnectionFactory connectionFactory,
SqlServerConnection metadataConnection, ErrorHandler errorHandler, EventDispatcher dispatcher,
Clock clock, SqlServerDatabaseSchema schema,
NotificationService notificationService) {
this.configuration = configuration;
this.connectionFactory = connectionFactory;
this.metadataConnection = metadataConnection;
this.errorHandler = errorHandler;
this.dispatcher = dispatcher;
this.clock = clock;
this.schema = schema;
this.notificationService = notificationService;
}
@Override
public SnapshotChangeEventSource getSnapshotChangeEventSource(SnapshotProgressListener snapshotProgressListener,
NotificationService notificationService) {
return new SqlServerSnapshotChangeEventSource(configuration, connectionFactory, schema, dispatcher, clock, snapshotProgressListener, notificationService);
}
@Override
public StreamingChangeEventSource getStreamingChangeEventSource() {
return new SqlServerStreamingChangeEventSource(
configuration,
connectionFactory.mainConnection(),
metadataConnection,
dispatcher,
errorHandler,
clock,
schema,
notificationService);
}
@Override
public Optional> getIncrementalSnapshotChangeEventSource(
SqlServerOffsetContext offsetContext,
SnapshotProgressListener snapshotProgressListener,
DataChangeEventListener dataChangeEventListener,
NotificationService notificationService) {
// If no data collection id is provided, don't return an instance as the implementation requires
// that a signal data collection id be provided to work.
if (Strings.isNullOrEmpty(configuration.getSignalingDataCollectionId())) {
return Optional.empty();
}
final SignalBasedIncrementalSnapshotChangeEventSource incrementalSnapshotChangeEventSource = new SignalBasedIncrementalSnapshotChangeEventSource<>(
configuration,
connectionFactory.mainConnection(),
dispatcher,
schema,
clock,
snapshotProgressListener,
dataChangeEventListener,
notificationService);
return Optional.of(incrementalSnapshotChangeEventSource);
}
}