org.jboss.ejb.client.EJBClientConfiguration Maven / Gradle / Ivy
Go to download
This artifact provides a single jar that contains all classes required to use remote Jakarta Enterprise Beans and Jakarta Messaging, including
all dependencies. It is intended for use by those not using maven, maven users should just import the Jakarta Enterprise Beans and
Jakarta Messaging BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up
with different versions on classes on the class path).
/*
* JBoss, Home of Professional Open Source.
* Copyright 2011, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.ejb.client;
import java.util.Iterator;
import javax.security.auth.callback.CallbackHandler;
import org.xnio.OptionMap;
/**
* {@link EJBClientConfiguration} is responsible for providing the configurations that will be used
* for creating EJB receivers and managing the EJB client context. Some of these configurations are related
* to remoting endpoints, connections which will be used to create {@link org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiver}s
* for the {@link org.jboss.ejb.client.EJBClientContext}
*
* @author Jaikiran Pai
*/
public interface EJBClientConfiguration {
/**
* Returns the endpoint name to be used for creating the remoting endpoint. This method must not
* return null
*
* @return
*/
String getEndpointName();
/**
* Returns the endpoint creation {@link OptionMap options} that will be used for creating the remoting
* endpoint. This method must not return null.
*
* @return
*/
OptionMap getEndpointCreationOptions();
/**
* Returns the {@link OptionMap options} that will be used for creating a remote connection provider.
* This method must not return null.
*
* @return
*/
OptionMap getRemoteConnectionProviderCreationOptions();
/**
* Returns the default {@link CallbackHandler} that will be used while creating remoting connections.
* Individual connection configurations, cluster configurations, cluster node configurations can override
* the {@link CallbackHandler} to be used while creating the connections
*
* This method must not return null.
*
* @return
*/
CallbackHandler getCallbackHandler();
/**
* Returns the connection configurations. If there are no such configurations, then this method will return
* an empty {@link Iterator}
*
* @return
*/
Iterator getConnectionConfigurations();
/**
* Returns a cluster configuration corresponding to the passed clusterName
.
* Returns null if no such cluster configuration exists.
*
* @param clusterName The name of the cluster
* @return
*/
ClusterConfiguration getClusterConfiguration(final String clusterName);
/**
* Returns the timeout, in milliseconds, that will be used for EJB invocations. A value of zero
* or a negative value will imply a "wait forever" semantic where the invocation will never timeout
* and the client will wait for the invocation result indefinitely.
*
* @return
*/
long getInvocationTimeout();
/**
* Returns the wait timeout, in milliseconds, that will be used when the reconnect tasks are submitted.
* The reconnect tasks are submitted in parallel and hence the value returned by this method need not be
* the sum of time each reconnect task takes. The EJB client context will wait for a maximum of this amount of time
* in milliseconds, before giving up on the reconnect attempt. If all reconnect tasks finish before this timeout,
* then the EJB client context doesn't wait for any longer.
*
* If this method returns zero or a negative value, then a default of 10 second timeout will be used.
*
* @return
*/
long getReconnectTasksTimeout();
/**
* Returns the {@link DeploymentNodeSelector} to be used for the {@link EJBClientContext} created
* out of this {@link EJBClientConfiguration}. If this method returns null, then it's upto the implementation
* to use some default {@link DeploymentNodeSelector}
*
* @return
*/
DeploymentNodeSelector getDeploymentNodeSelector();
/**
* Holds the common configurations that are required for connection creation
*/
interface CommonConnectionCreationConfiguration {
/**
* Returns the {@link OptionMap options} that will be used during connection creation. This method must
* not return null
*
* @return
*/
OptionMap getConnectionCreationOptions();
/**
* Returns the {@link CallbackHandler} that will be used during connection creation. This method must
* not return null
*
* @return
*/
CallbackHandler getCallbackHandler();
/**
* Returns the connection timeout in milliseconds, that will be used during connection creation
*
* @return
*/
long getConnectionTimeout();
/**
* Returns the {@link OptionMap options} that will be used during creation of a {@link org.jboss.remoting3.Channel}
* for the connection
*
* @return
*/
OptionMap getChannelCreationOptions();
/**
* If this method returns true, then the EJB client API will try and connect to the destination host "eagerly". when the {@link EJBClientContext}
* is being created out of the {@link EJBClientConfiguration} to which this connection configuration belongs.
*
* On the other hand, if this method returns false, then the EJB client API will try to connect to the destination host only if no other node/EJBReceiver within the EJB client context
* can handle a EJB invocation request. i.e. it tries to establish the connection lazily/on-demand.
*
* @return
*/
boolean isConnectEagerly();
}
/**
* Holds the connection specific configurations
*/
interface RemotingConnectionConfiguration extends CommonConnectionCreationConfiguration {
/**
* Returns the host name/IP address to be used during connection creation. This method must not
* return null
*
* @return
*/
String getHost();
/**
* Returns the port that will be used during connection creation
*
* @return
*/
int getPort();
/**
* The protocol to use. Can be remoting, http-remoting or https-remoting
*
*
* @return The protocol
*/
String getProtocol();
}
/**
* Holds cluster specific configurations
*/
interface ClusterConfiguration extends CommonConnectionCreationConfiguration {
/**
* Returns the cluster name. This method must not return null
*
* @return
*/
String getClusterName();
/**
* Returns the maximum number of nodes which are allowed to be connected at a given time, in this cluster
*
* @return
*/
long getMaximumAllowedConnectedNodes();
/**
* Returns the {@link ClusterNodeSelector} to be used for this cluster. This method can return
* null, in which case the cluster will use some default {@link ClusterNodeSelector}
*
* @return
*/
ClusterNodeSelector getClusterNodeSelector();
/**
* Returns the configuration corresponding to the nodeName
in this cluster. Returns null
* if no such configuration exists
*
* @param nodeName The name of the node in this cluster
* @return
*/
ClusterNodeConfiguration getNodeConfiguration(final String nodeName);
}
/**
* Holds the cluster node specific configuration
*/
interface ClusterNodeConfiguration extends CommonConnectionCreationConfiguration {
/**
* Returns the name of the node. This method must not return null
*
* @return
*/
String getNodeName();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy