package org.wildfly.swarm.messaging; import org.wildfly.swarm.spi.api.Defaultable; 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.integer; import static org.wildfly.swarm.spi.api.Defaultable.string; /** * Details for a remote message-queue connection. * * <p>Supports outboard ActiveMQ/Artemis servers.</p> * * @author Bob McWhirter */ public class RemoteConnection { /** * Construct. * * @param name The name of the connection. Also used for {@link #jndiName}. */ public RemoteConnection(String name) { this.name.set(name); } /** * Retrieve the name of the connection. * * @return The name. */ public String name() { return this.name.get(); } /** * Set the host (or host expression). * * @param host The host literal or expression. * @return This connection. */ public RemoteConnection host(String host) { this.host.set(host); return this; } /** * Retrieve the host (or host expression). * * @return The host (or host expression). */ public String host() { return this.host.get(); } /** * Set the port (or port expression). * * @param port The port (or port expression). * @return This connectoin. */ public RemoteConnection port(int port) { this.port.set(port); return this; } /** * Retrieve the port (or port expression). * * @return The port (or port expression). */ public int port() { return this.port.get(); } /** * Set the JNDI name for the associated connection factory. * * <p>If unset, defaults to <code>java:/jms/<b>name</b></code></p>. * * @param jndiName The explicit JNDI name to bind the connection factory. * @return This connection. * @see #name() */ public RemoteConnection jndiName(String jndiName) { this.jndiName.set(jndiName); return this; } /** * Retrieve the JNDI name of the associated connection factory. * * @return The JNDI name of the associated connection factory. */ public String jndiName() { return this.jndiName.get(); } private final Defaultable<String> name = string(DEFAULT_REMOTE_MQ_NAME); private final Defaultable<String> host = string(DEFAULT_REMOTE_HOST); private final Defaultable<Integer> port = integer(DEFAULT_REMOTE_PORT); private final Defaultable<String> jndiName = string(() -> "java:/jms/" + name.get()); /** * Configuration functional interface for container-supplied objects. */ public interface Consumer extends java.util.function.Consumer<RemoteConnection> { } /** * Supplier functional interface for user-supplied object. */ public interface Supplier extends java.util.function.Supplier<RemoteConnection> { } }