package com.google.pubsub.jms.light; import com.google.api.gax.core.RetrySettings; import com.google.api.gax.grpc.FlowControlSettings; import com.google.api.gax.grpc.ProviderManager; import com.google.common.base.MoreObjects; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSContext; import javax.jms.JMSException; import org.joda.time.Duration; /** * Default PubSub {@link ConnectionFactory} implementation. * * @author Maksym Prokhorenko */ public class PubSubConnectionFactory implements ConnectionFactory { private ProviderManager providerManager; private FlowControlSettings flowControlSettings; private RetrySettings retrySettings; @Override public Connection createConnection() throws JMSException { return new PubSubConnection(providerManager, MoreObjects.firstNonNull(flowControlSettings, getDefaultFlowControllerSettings()), MoreObjects.firstNonNull(retrySettings, getDefaultRetrySettings())); } @Override public Connection createConnection( final String userName, final String password) throws JMSException { return null; } @Override public JMSContext createContext() { return null; } @Override public JMSContext createContext(final String userName, final String password) { return null; } @Override public JMSContext createContext( final String userName, final String password, final int sessionMode) { return null; } @Override public JMSContext createContext(final int sessionMode) { return null; } public void setProviderManager(final ProviderManager providerManager) { this.providerManager = providerManager; } public void setFlowControlSettings(final FlowControlSettings flowControlSettings) { this.flowControlSettings = flowControlSettings; } public void setRetrySettings(final RetrySettings retrySettings) { this.retrySettings = retrySettings; } @SuppressWarnings("checkstyle:magicnumber") protected RetrySettings getDefaultRetrySettings() { return RetrySettings.newBuilder() .setTotalTimeout(Duration.standardSeconds(15L)) .setInitialRetryDelay(Duration.millis(200)) .setRetryDelayMultiplier(2d) .setMaxRetryDelay(Duration.standardSeconds(5L)) .setInitialRpcTimeout(Duration.millis(200)) .setRpcTimeoutMultiplier(2d) .setMaxRpcTimeout(Duration.standardSeconds(5L)) .build(); } protected FlowControlSettings getDefaultFlowControllerSettings() { return FlowControlSettings.getDefaultInstance(); } }