package org.wildfly.swarm.messaging.runtime; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Any; import javax.inject.Inject; import org.wildfly.swarm.config.runtime.AttributeDocumentation; import org.wildfly.swarm.messaging.MessagingFraction; import org.wildfly.swarm.spi.api.Customizer; import org.wildfly.swarm.spi.api.Defaultable; import org.wildfly.swarm.spi.api.annotations.Configurable; import org.wildfly.swarm.spi.runtime.annotations.Pre; import static org.wildfly.swarm.messaging.MessagingProperties.DEFAULT_REMOTE_HOST; import static org.wildfly.swarm.messaging.MessagingProperties.DEFAULT_REMOTE_MQ_NAME; import static org.wildfly.swarm.messaging.MessagingProperties.DEFAULT_REMOTE_PORT; import static org.wildfly.swarm.spi.api.Defaultable.ifAnyExplicitlySet; import static org.wildfly.swarm.spi.api.Defaultable.integer; import static org.wildfly.swarm.spi.api.Defaultable.string; /** * Installs a remote connection based upon properties or YAML configuration. * * @author Bob McWhirter */ @Pre @ApplicationScoped public class RemoteConnectionInstallingCustomizer implements Customizer { @AttributeDocumentation("Name of the remote connection") @Configurable("swarm.messaging.remote.name") final Defaultable<String> name = string(DEFAULT_REMOTE_MQ_NAME); @AttributeDocumentation("Host of the remote connection") @Configurable("swarm.messaging.remote.host") final Defaultable<String> host = string(DEFAULT_REMOTE_HOST); @AttributeDocumentation("Port of the remote connection") @Configurable("swarm.messaging.remote.port") final Defaultable<Integer> port = integer(DEFAULT_REMOTE_PORT); @AttributeDocumentation("JNDI name of the remote connection") @Configurable("swarm.messaging.remote.jndi-name") final Defaultable<String> jndiName = string(() -> "java:/jms/" + name.get()); @AttributeDocumentation("Flag to enable the remote connection") @Configurable("swarm.messaging.remote") final Defaultable<Boolean> enabled = ifAnyExplicitlySet(name, host, port, jndiName); @Inject @Any MessagingFraction fraction; @Override public void customize() { if (this.enabled.get()) { fraction.defaultServer((server) -> { server.remoteConnection(name.get(), (connection) -> { connection.jndiName(this.jndiName.get()); connection.host(this.host.get()); connection.port(this.port.get()); }); }); } } }