@Override
public void init(ServiceContext serviceContext) throws Exception {
this.serviceContext = serviceContext;
ServiceProperties properties = serviceContext.getProperties();
int maximumPendingBytes = getOptionalDataSizeProperty(properties, PROPERTY_MAXIMUM_PENDING_BYTES, PROPERTY_MAXIMUM_PENDING_BYTES_DEFAULT);
int maximumTransferredBytes = getOptionalDataSizeProperty(properties, PROPERTY_MAXIMUM_TRANSFERRED_BYTES, PROPERTY_MAXIMUM_TRANSFERRED_BYTES_DEFAULT);
int maximumRecoveryInterval = getOptionalIntProperty(properties, PROPERTY_MAXIMUM_RECOVERY_INTERVAL, PROPERTY_MAXIMUM_RECOVERY_INTERVAL_DEFAULT);
int preparedConnectionCount = getOptionalIntProperty(properties, PROPERTY_PREPARED_CONNECTION_COUNT, PROPERTY_PREPARED_CONNECTION_COUNT_DEFAULT);
String connectStrategy = getOptionalProperty(properties, PROPERTY_CONNECT_STRATEGY, PROPERTY_CONNECT_STRATEGY_DEFAULT.apply(preparedConnectionCount));
handler = createHandler();
handler.setServiceContext(serviceContext);
handler.setMaximumPendingBytes(maximumPendingBytes);
handler.setMaximumTransferredBytes(maximumTransferredBytes);
handler.setMaximumRecoveryInterval(maximumRecoveryInterval);
handler.setPreparedConnectionCount(connectStrategy, preparedConnectionCount, serviceContext.getProcessorCount());
}