
com.sap.cds.feature.messaging.em.jms.EnterpriseMessagingConnectionProvider Maven / Gradle / Ivy
/**************************************************************************
* (C) 2019-2024 SAP SE or an SAP affiliate company. All rights reserved. *
**************************************************************************/
package com.sap.cds.feature.messaging.em.jms;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sap.cds.services.messaging.jms.BrokerConnection;
import com.sap.cds.services.messaging.jms.BrokerConnectionProvider;
import com.sap.cloud.environment.servicebinding.api.ServiceBinding;
import com.sap.cloud.servicesdk.xbem.core.MessagingServiceFactory;
import com.sap.cloud.servicesdk.xbem.core.exception.MessagingException;
import com.sap.cloud.servicesdk.xbem.core.impl.MessagingServiceFactoryCreator;
import com.sap.cloud.servicesdk.xbem.extension.sapcp.jms.MessagingServiceJmsConnectionFactory;
import com.sap.cloud.servicesdk.xbem.extension.sapcp.jms.MessagingServiceJmsSettings;
/**
* Implementation of the {@link BrokerConnectionProvider} class for enterprise messaging.
*/
public class EnterpriseMessagingConnectionProvider extends BrokerConnectionProvider {
private static final Logger logger = LoggerFactory.getLogger(EnterpriseMessagingConnectionProvider.class);
private final ServiceBinding binding;
public EnterpriseMessagingConnectionProvider(ServiceBinding binding) {
super(binding.getName().get());
this.binding = binding;
}
@Override
public BrokerConnection createBrokerConnection(String name, Map clientProperties) throws MessagingException {
MessagingServiceJmsSettings settings = new MessagingServiceJmsSettings();
// backwards compatibility
int oldMaxReconnectAttempts = getIntClientProperty("MaxReconnectAttempts", 10, clientProperties);
int oldInitialReconnectDelay = getIntClientProperty("InitialReconnectDelay", 5000, clientProperties);
int oldReconnectDelay = getIntClientProperty("ReconnectDelay", 5000, clientProperties);
settings.setFailoverMaxReconnectAttempts(getIntClientProperty("FailoverMaxReconnectAttempts", oldMaxReconnectAttempts, clientProperties));
settings.setFailoverInitialReconnectDelay(getIntClientProperty("FailoverInitialReconnectDelay", oldInitialReconnectDelay, clientProperties));
settings.setFailoverReconnectDelay(getIntClientProperty("FailoverReconnectDelay", oldReconnectDelay, clientProperties));
settings.setAmqpIdleTimeout(getIntClientProperty("AmqpIdleTimeout", -1, clientProperties));
MessagingServiceFactory messagingServiceFactory =
MessagingServiceFactoryCreator.createFactoryFromCredentials(binding.getCredentials());
// create the broker connection
BrokerConnection connection = new BrokerConnection(name,
messagingServiceFactory.createConnectionFactory(MessagingServiceJmsConnectionFactory.class, settings));
return connection;
}
private int getIntClientProperty(String prop, int def, Map clientProperties) {
if (clientProperties == null) {
return def;
}
String val = getClientProperty(prop, clientProperties);
if (val != null) {
try {
return Integer.parseInt(val);
} catch (NumberFormatException e) {
logger.error("invalid client configuration value of '{}' property. The default value '{}' is used", prop, def);
}
}
return def;
}
private String getClientProperty(String prop, Map clientProperties) {
return clientProperties.entrySet().stream()
.filter(e -> e.getKey().equalsIgnoreCase(prop))
.map(e -> e.getValue())
.findFirst()
.orElse(null);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy