Author: gaohoward
Date: 2011-06-02 01:47:03 -0400 (Thu, 02 Jun 2011)
New Revision: 10764
Added:
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/utils/ClassloadingUtil.java
Modified:
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/api/core/client/ServerLocator.java
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/core/client/impl/ServerLocatorImpl.java
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/client/HornetQConnectionFactory.java
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/JMSServerManager.java
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/config/ConnectionFactoryConfiguration.java
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/impl/JMSServerManagerImpl.java
Log:
HORNETQ-681
Modified:
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/api/core/client/ServerLocator.java
===================================================================
---
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/api/core/client/ServerLocator.java 2011-06-02
02:52:22 UTC (rev 10763)
+++
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/api/core/client/ServerLocator.java 2011-06-02
05:47:03 UTC (rev 10764)
@@ -31,19 +31,19 @@
* This method will disable any checks when a GarbageCollection happens
* leaving connections open. The JMS Layer will make specific usage of this
* method, since the ConnectionFactory.finalize should release this.
- *
+ *
* Warning: You may leave resources unattended if you call this method and
* don't take care of cleaning the resources yourself.
*/
void disableFinalizeCheck();
-
+
/**
* Create a ClientSessionFactory using whatever load balancing policy is in force
* @return The ClientSessionFactory
* @throws Exception
*/
ClientSessionFactory createSessionFactory() throws Exception;
-
+
/**
* Create a ClientSessionFactory to a specific server. The server must already be
known about by this ServerLocator.
* This method allows the user to make a connection to a specific server bypassing any
load balancing policy in force
@@ -52,39 +52,39 @@
* @throws Exception if a failure happened in creating the ClientSessionFactory or the
ServerLocator does not know about the passed in transportConfiguration
*/
ClientSessionFactory createSessionFactory(final TransportConfiguration
transportConfiguration) throws Exception;
-
+
/**
* Returns the period used to check if a client has failed to receive pings from the
server.
- *
+ *
* Period is in milliseconds, default value is {@link
HornetQClient#DEFAULT_CLIENT_FAILURE_CHECK_PERIOD}.
- *
+ *
* @return the period used to check if a client has failed to receive pings from the
server
*/
long getClientFailureCheckPeriod();
/**
* Sets the period (in milliseconds) used to check if a client has failed to receive
pings from the server.
- *
+ *
* Value must be -1 (to disable) or greater than 0.
- *
+ *
* @param clientFailureCheckPeriod the period to check failure
*/
void setClientFailureCheckPeriod(long clientFailureCheckPeriod);
/**
* When <code>true</code>, consumers created through this factory will
create temporary files to cache large messages.
- *
+ *
* There is 1 temporary file created for each large message.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_CACHE_LARGE_MESSAGE_CLIENT}.
- *
+ *
* @return <code>true</code> if consumers created through this factory
will cache large messages in temporary files, <code>false</code> else
*/
boolean isCacheLargeMessagesClient();
/**
* Sets whether large messages received by consumers created through this factory will
be cached in temporary files or not.
- *
+ *
* @param cached <code>true</code> to cache large messages in temporary
files, <code>false</code> else
*/
void setCacheLargeMessagesClient(boolean cached);
@@ -92,73 +92,73 @@
/**
* Returns the connection <em>time-to-live</em>.
* This TTL determines how long the server will keep a connection alive in the absence
of any data arriving from the client.
- *
+ *
* Value is in milliseconds, default value is {@link
HornetQClient#DEFAULT_CONNECTION_TTL}.
- *
+ *
* @return the connection time-to-live in milliseconds
*/
long getConnectionTTL();
/**
* Sets this factory's connections <em>time-to-live</em>.
- *
+ *
* Value must be -1 (to disable) or greater or equals to 0.
- *
+ *
* @param connectionTTL period in milliseconds
*/
void setConnectionTTL(long connectionTTL);
/**
* Returns the blocking calls timeout.
- *
+ *
* If client's blocking calls to the server take more than this timeout, the call
will throw a {@link HornetQException} with the code {@link
HornetQException#CONNECTION_TIMEDOUT}.
* Value is in milliseconds, default value is {@link
HornetQClient#DEFAULT_CALL_TIMEOUT}.
- *
+ *
* @return the blocking calls timeout
*/
long getCallTimeout();
/**
* Sets the blocking call timeout.
- *
+ *
* Value must be greater or equals to 0
- *
+ *
* @param callTimeout blocking call timeout in milliseconds
*/
void setCallTimeout(long callTimeout);
/**
* Returns the large message size threshold.
- *
+ *
* Messages whose size is if greater than this value will be handled as
<em>large messages</em>.
- *
+ *
* Value is in bytes, default value is {@link
HornetQClient#DEFAULT_MIN_LARGE_MESSAGE_SIZE}.
- *
+ *
* @return the message size threshold to treat messages as large messages.
*/
int getMinLargeMessageSize();
/**
* Sets the large message size threshold.
- *
+ *
* Value must be greater than 0.
- *
+ *
* @param minLargeMessageSize large message size threshold in bytes
*/
void setMinLargeMessageSize(int minLargeMessageSize);
/**
* Returns the window size for flow control of the consumers created through this
factory.
- *
+ *
* Value is in bytes, default value is {@link
HornetQClient#DEFAULT_CONSUMER_WINDOW_SIZE}.
- *
+ *
* @return the window size used for consumer flow control
*/
int getConsumerWindowSize();
/**
* Sets the window size for flow control of the consumers created through this
factory.
- *
+ *
* Value must be -1 (to disable flow control), 0 (to not buffer any messages) or
greater than 0 (to set the maximum size of the buffer)
*
* @param consumerWindowSize window size (in bytes) used for consumer flow control
@@ -167,37 +167,37 @@
/**
* Returns the maximum rate of message consumption for consumers created through this
factory.
- *
+ *
* This value controls the rate at which a consumer can consume messages. A consumer
will never consume messages at a rate faster than the rate specified.
- *
+ *
* Value is -1 (to disable) or a positive integer corresponding to the maximum desired
message consumption rate specified in units of messages per second.
* Default value is {@link HornetQClient#DEFAULT_CONSUMER_MAX_RATE}.
- *
+ *
* @return the consumer max rate
*/
int getConsumerMaxRate();
/**
* Sets the maximum rate of message consumption for consumers created through this
factory.
- *
+ *
* Value must -1 (to disable) or a positive integer corresponding to the maximum
desired message consumption rate specified in units of messages per second.
- *
+ *
* @param consumerMaxRate maximum rate of message consumption (in messages per
seconds)
*/
void setConsumerMaxRate(int consumerMaxRate);
/**
* Returns the size for the confirmation window of clients using this factory.
- *
+ *
* Value is in bytes or -1 (to disable the window). Default value is {@link
HornetQClient#DEFAULT_CONFIRMATION_WINDOW_SIZE}.
- *
+ *
* @return the size for the confirmation window of clients using this factory
*/
int getConfirmationWindowSize();
/**
* Sets the size for the confirmation window buffer of clients using this factory.
- *
+ *
* Value must be -1 (to disable the window) or greater than 0.
* @param confirmationWindowSize size of the confirmation window (in bytes)
@@ -206,40 +206,40 @@
/**
* Returns the window size for flow control of the producers created through this
factory.
- *
+ *
* Value must be -1 (to disable flow control) or greater than 0 to determine the
maximum amount of bytes at any give time (to prevent overloading the connection).
* Default value is {@link HornetQClient#DEFAULT_PRODUCER_WINDOW_SIZE}.
- *
+ *
* @return the window size for flow control of the producers created through this
factory.
*/
int getProducerWindowSize();
/**
* Returns the window size for flow control of the producers created through this
factory.
- *
+ *
* Value must be -1 (to disable flow control) or greater than 0.
- *
+ *
* @param producerWindowSize window size (in bytest) for flow control of the producers
created through this factory.
*/
void setProducerWindowSize(int producerWindowSize);
/**
* Returns the maximum rate of message production for producers created through this
factory.
- *
+ *
* This value controls the rate at which a producer can produce messages. A producer
will never produce messages at a rate faster than the rate specified.
- *
+ *
* Value is -1 (to disable) or a positive integer corresponding to the maximum desired
message production rate specified in units of messages per second.
* Default value is {@link HornetQClient#DEFAULT_PRODUCER_MAX_RATE}.
- *
+ *
* @return maximum rate of message production (in messages per seconds)
*/
int getProducerMaxRate();
/**
* Sets the maximum rate of message production for producers created through this
factory.
- *
+ *
* Value must -1 (to disable) or a positive integer corresponding to the maximum
desired message production rate specified in units of messages per second.
- *
+ *
* @param producerMaxRate maximum rate of message production (in messages per
seconds)
*/
void setProducerMaxRate(int producerMaxRate);
@@ -247,9 +247,9 @@
/**
* Returns whether consumers created through this factory will block while
* sending message acknowledgments or do it asynchronously.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_BLOCK_ON_ACKNOWLEDGE}.
- *
+ *
* @return whether consumers will block while sending message
* acknowledgments or do it asynchronously
*/
@@ -258,7 +258,7 @@
/**
* Sets whether consumers created through this factory will block while
* sending message acknowledgments or do it asynchronously.
- *
+ *
* @param blockOnAcknowledge
* <code>true</code> to block when sending message
* acknowledgments or <code>false</code> to send them
@@ -271,7 +271,7 @@
* <br>
* If the session is configured to send durable message asynchronously, the client can
set a SendAcknowledgementHandler on the ClientSession
* to be notified once the message has been handled by the server.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_BLOCK_ON_DURABLE_SEND}.
*
* @return whether producers will block while sending persistent messages or do it
asynchronously
@@ -280,7 +280,7 @@
/**
* Sets whether producers created through this factory will block while sending
<em>durable</em> messages or do it asynchronously.
- *
+ *
* @param blockOnDurableSend <code>true</code> to block when sending
durable messages or <code>false</code> to send them asynchronously
*/
void setBlockOnDurableSend(boolean blockOnDurableSend);
@@ -290,7 +290,7 @@
* <br>
* If the session is configured to send non-durable message asynchronously, the client
can set a SendAcknowledgementHandler on the ClientSession
* to be notified once the message has been handled by the server.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_BLOCK_ON_NON_DURABLE_SEND}.
*
* @return whether producers will block while sending non-durable messages or do it
asynchronously
@@ -299,7 +299,7 @@
/**
* Sets whether producers created through this factory will block while sending
<em>non-durable</em> messages or do it asynchronously.
- *
+ *
* @param blockOnNonDurableSend <code>true</code> to block when sending
non-durable messages or <code>false</code> to send them asynchronously
*/
void setBlockOnNonDurableSend(boolean blockOnNonDurableSend);
@@ -307,11 +307,11 @@
/**
* Returns whether producers created through this factory will automatically
* assign a group ID to the messages they sent.
- *
+ *
* if <code>true</code>, a random unique group ID is created and set on
each message for the property
* {@link org.hornetq.api.core.Message#HDR_GROUP_ID}.
* Default value is {@link HornetQClient#DEFAULT_AUTO_GROUP}.
- *
+ *
* @return whether producers will automatically assign a group ID to their messages
*/
boolean isAutoGroup();
@@ -319,23 +319,23 @@
/**
* Sets whether producers created through this factory will automatically
* assign a group ID to the messages they sent.
- *
+ *
* @param autoGroup <code>true</code> to automatically assign a group ID
to each messages sent through this factory, <code>false</code> else
*/
void setAutoGroup(boolean autoGroup);
/**
* Returns the group ID that will be eventually set on each message for the property
{@link org.hornetq.api.core.Message#HDR_GROUP_ID}.
- *
+ *
* Default value is is <code>null</code> and no group ID will be set on
the messages.
- *
+ *
* @return the group ID that will be eventually set on each message
*/
String getGroupID();
-
+
/**
* Sets the group ID that will be set on each message sent through this factory.
- *
+ *
* @param groupID the group ID to use
*/
void setGroupID(String groupID);
@@ -351,7 +351,7 @@
* Sets to <code>true</code> to pre-acknowledge consumed messages on the
* server before they are sent to consumers, else set to <code>false</code>
* to let clients acknowledge the message they consume.
- *
+ *
* @param preAcknowledge
* <code>true</code> to enable pre-acknowledgment,
* <code>false</code> else
@@ -360,18 +360,18 @@
/**
* Returns the acknowledgments batch size.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_ACK_BATCH_SIZE}.
- *
+ *
* @return the acknowledgments batch size
*/
int getAckBatchSize();
/**
* Sets the acknowledgments batch size.
- *
+ *
* Value must be equal or greater than 0.
- *
+ *
* @param ackBatchSize
* acknowledgments batch size
*/
@@ -392,9 +392,9 @@
/**
* Returns whether this factory will use global thread pools (shared among all the
factories in the same JVM)
* or its own pools.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_USE_GLOBAL_POOLS}.
- *
+ *
* @return <code>true</code> if this factory uses global thread pools,
<code>false</code> else
*/
boolean isUseGlobalPools();
@@ -402,117 +402,117 @@
/**
* Sets whether this factory will use global thread pools (shared among all the
factories in the same JVM)
* or its own pools.
- *
+ *
* @param useGlobalPools <code>true</code> to let this factory uses global
thread pools, <code>false</code> else
*/
void setUseGlobalPools(boolean useGlobalPools);
/**
* Returns the maximum size of the scheduled thread pool.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_SCHEDULED_THREAD_POOL_MAX_SIZE}.
- *
+ *
* @return the maximum size of the scheduled thread pool.
*/
int getScheduledThreadPoolMaxSize();
/**
* Sets the maximum size of the scheduled thread pool.
- *
+ *
* This setting is relevant only if this factory does not use global pools.
* Value must be greater than 0.
- *
+ *
* @param scheduledThreadPoolMaxSize maximum size of the scheduled thread pool.
*/
void setScheduledThreadPoolMaxSize(int scheduledThreadPoolMaxSize);
/**
* Returns the maximum size of the thread pool.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_THREAD_POOL_MAX_SIZE}.
- *
+ *
* @return the maximum size of the thread pool.
*/
int getThreadPoolMaxSize();
/**
* Sets the maximum size of the thread pool.
- *
+ *
* This setting is relevant only if this factory does not use global pools.
* Value must be -1 (for unlimited thread pool) or greater than 0.
- *
+ *
* @param threadPoolMaxSize maximum size of the thread pool.
*/
void setThreadPoolMaxSize(int threadPoolMaxSize);
/**
- * Returns the time to retry connections created by this factory after failure.
- *
+ * Returns the time to retry connections created by this factory after failure.
+ *
* Value is in milliseconds, default is {@link HornetQClient#DEFAULT_RETRY_INTERVAL}.
- *
+ *
* @return the time to retry connections created by this factory after failure
*/
long getRetryInterval();
/**
* Sets the time to retry connections created by this factory after failure.
- *
+ *
* Value must be greater than 0.
- *
- * @param retryInterval time (in milliseconds) to retry connections created by this
factory after failure
+ *
+ * @param retryInterval time (in milliseconds) to retry connections created by this
factory after failure
*/
void setRetryInterval(long retryInterval);
/**
* Returns the multiplier to apply to successive retry intervals.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_RETRY_INTERVAL_MULTIPLIER}.
- *
+ *
* @return the multiplier to apply to successive retry intervals
*/
double getRetryIntervalMultiplier();
/**
* Sets the multiplier to apply to successive retry intervals.
- *
+ *
* Value must be positive.
- *
+ *
* @param retryIntervalMultiplier multiplier to apply to successive retry intervals
*/
void setRetryIntervalMultiplier(double retryIntervalMultiplier);
/**
* Returns the maximum retry interval (in the case a retry interval multiplier has
been specified).
- *
+ *
* Value is in milliseconds, default value is {@link
HornetQClient#DEFAULT_MAX_RETRY_INTERVAL}.
- *
+ *
* @return the maximum retry interval
*/
long getMaxRetryInterval();
/**
* Sets the maximum retry interval.
- *
+ *
* Value must be greater than 0.
- *
+ *
* @param maxRetryInterval maximum retry interval to apply in the case a retry
interval multiplier has been specified
*/
void setMaxRetryInterval(long maxRetryInterval);
/**
* Returns the maximum number of attempts to retry connection in case of failure.
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_RECONNECT_ATTEMPTS}.
- *
+ *
* @return the maximum number of attempts to retry connection in case of failure.
*/
int getReconnectAttempts();
/**
* Sets the maximum number of attempts to retry connection in case of failure.
- *
+ *
* Value must be -1 (to retry infinitely), 0 (to never retry connection) or greater
than 0.
- *
+ *
* @param reconnectAttempts maximum number of attempts to retry connection in case of
failure
*/
void setReconnectAttempts(int reconnectAttempts);
@@ -523,66 +523,66 @@
/**
* Returns true if the client will automatically attempt to connect to the backup
server if the initial
* connection to the live server fails
- *
+ *
* Default value is {@link HornetQClient#DEFAULT_FAILOVER_ON_INITIAL_CONNECTION}.
*/
boolean isFailoverOnInitialConnection();
-
+
/**
* Sets the value for FailoverOnInitialReconnection
- *
+ *
* @param failover
*/
void setFailoverOnInitialConnection(boolean failover);
/**
* Returns the class name of the connection load balancing policy.
- *
+ *
* Default value is
"org.hornetq.api.core.client.loadbalance.RoundRobinConnectionLoadBalancingPolicy".
- *
+ *
* @return the class name of the connection load balancing policy
*/
String getConnectionLoadBalancingPolicyClassName();
/**
* Sets the class name of the connection load balancing policy.
- *
+ *
* Value must be the name of a class implementing {@link
ConnectionLoadBalancingPolicy}.
- *
+ *
* @param loadBalancingPolicyClassName class name of the connection load balancing
policy
*/
void setConnectionLoadBalancingPolicyClassName(String loadBalancingPolicyClassName);
/**
* Returns the initial size of messages created through this factory.
- *
+ *
* Value is in bytes, default value is {@link
HornetQClient#DEFAULT_INITIAL_MESSAGE_PACKET_SIZE}.
- *
+ *
* @return the initial size of messages created through this factory
*/
int getInitialMessagePacketSize();
/**
* Sets the initial size of messages created through this factory.
- *
+ *
* Value must be greater than 0.
- *
+ *
* @param size initial size of messages created through this factory.
*/
void setInitialMessagePacketSize(int size);
-
+
/**
* Adds an interceptor which will be executed <em>after packets are received
from the server</em>.
- *
+ *
* @param interceptor an Interceptor
*/
void addInterceptor(Interceptor interceptor);
/**
* Removes an interceptor.
- *
+ *
* @param interceptor interceptor to remove
- *
+ *
* @return <code>true</code> if the interceptor is removed from this
factory, <code>false</code> else
*/
boolean removeInterceptor(Interceptor interceptor);
@@ -593,12 +593,16 @@
void close();
boolean isHA();
-
+
boolean isCompressLargeMessage();
-
+
void setCompressLargeMessage(boolean compress);
void addClusterTopologyListener(ClusterTopologyListener listener);
void removeClusterTopologyListener(ClusterTopologyListener listener);
+
+ void setUseTCCL(boolean useTCCL);
+
+ boolean isUseTCCL();
}
Modified:
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/core/client/impl/ServerLocatorImpl.java
===================================================================
---
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/core/client/impl/ServerLocatorImpl.java 2011-06-02
02:52:22 UTC (rev 10763)
+++
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/core/client/impl/ServerLocatorImpl.java 2011-06-02
05:47:03 UTC (rev 10764)
@@ -18,8 +18,19 @@
import java.net.InetAddress;
import java.security.AccessController;
import java.security.PrivilegedAction;
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
import org.hornetq.api.core.DiscoveryGroupConfiguration;
import org.hornetq.api.core.HornetQException;
@@ -35,6 +46,7 @@
import org.hornetq.core.cluster.DiscoveryListener;
import org.hornetq.core.cluster.impl.DiscoveryGroupImpl;
import org.hornetq.core.logging.Logger;
+import org.hornetq.utils.ClassloadingUtil;
import org.hornetq.utils.HornetQThreadFactory;
import org.hornetq.utils.UUIDGenerator;
@@ -57,13 +69,13 @@
private final Set<ClusterTopologyListener> topologyListeners = new
HashSet<ClusterTopologyListener>();
- private Set<ClientSessionFactory> factories = new
HashSet<ClientSessionFactory>();
+ private final Set<ClientSessionFactory> factories = new
HashSet<ClientSessionFactory>();
private TransportConfiguration[] initialConnectors;
- private DiscoveryGroupConfiguration discoveryGroupConfiguration;
+ private final DiscoveryGroupConfiguration discoveryGroupConfiguration;
- private StaticConnector staticConnector = new StaticConnector();
+ private final StaticConnector staticConnector = new StaticConnector();
private Topology topology = new Topology();
@@ -157,15 +169,17 @@
private boolean backup;
+ private boolean useTCCL = true;
+
private final Exception e = new Exception();
-
+
// To be called when there are ServerLocator being finalized.
// To be used on test assertions
public static Runnable finalizeCallback = null;
-
+
public static synchronized void clearThreadPools()
{
-
+
if (globalThreadPool != null)
{
globalThreadPool.shutdown();
@@ -184,7 +198,7 @@
globalThreadPool = null;
}
}
-
+
if (globalScheduledThreadPool != null)
{
globalScheduledThreadPool.shutdown();
@@ -283,25 +297,9 @@
throw new IllegalStateException("Please specify a load balancing policy
class name on the session factory");
}
- AccessController.doPrivileged(new PrivilegedAction<Object>()
- {
- public Object run()
- {
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- try
- {
- Class<?> clazz =
loader.loadClass(connectionLoadBalancingPolicyClassName);
- loadBalancingPolicy = (ConnectionLoadBalancingPolicy)clazz.newInstance();
- return null;
- }
- catch (Exception e)
- {
- throw new IllegalArgumentException("Unable to instantiate load
balancing policy \"" + connectionLoadBalancingPolicyClassName +
- "\"",
- e);
- }
- }
- });
+ loadBalancingPolicy =
+
(ConnectionLoadBalancingPolicy)ClassloadingUtil.safeInitNewInstance(connectionLoadBalancingPolicyClassName,
+
useTCCL);
}
private synchronized void initialise() throws Exception
@@ -348,13 +346,13 @@
final TransportConfiguration[] transportConfigs)
{
e.fillInStackTrace();
- this.ha = useHA;
+ ha = useHA;
this.discoveryGroupConfiguration = discoveryGroupConfiguration;
- this.initialConnectors = transportConfigs;
+ initialConnectors = transportConfigs;
- this.nodeID = UUIDGenerator.getInstance().generateStringUUID();
+ nodeID = UUIDGenerator.getInstance().generateStringUUID();
clientFailureCheckPeriod = HornetQClient.DEFAULT_CLIENT_FAILURE_CHECK_PERIOD;
@@ -458,7 +456,7 @@
}
}
- public void start(Executor executor) throws Exception
+ public void start(final Executor executor) throws Exception
{
initialise();
@@ -922,7 +920,7 @@
this.reconnectAttempts = reconnectAttempts;
}
- public void setInitialConnectAttempts(int initialConnectAttempts)
+ public void setInitialConnectAttempts(final int initialConnectAttempts)
{
checkWrite();
this.initialConnectAttempts = initialConnectAttempts;
@@ -935,13 +933,13 @@
public synchronized boolean isFailoverOnInitialConnection()
{
- return this.failoverOnInitialConnection;
+ return failoverOnInitialConnection;
}
public synchronized void setFailoverOnInitialConnection(final boolean failover)
{
checkWrite();
- this.failoverOnInitialConnection = failover;
+ failoverOnInitialConnection = failover;
}
public synchronized String getConnectionLoadBalancingPolicyClassName()
@@ -957,7 +955,7 @@
public TransportConfiguration[] getStaticTransportConfigurations()
{
- return this.initialConnectors;
+ return initialConnectors;
}
public DiscoveryGroupConfiguration getDiscoveryGroupConfiguration()
@@ -1008,9 +1006,9 @@
/* (non-Javadoc)
* @see org.hornetq.api.core.client.ServerLocator#setCompressLargeMessage(boolean)
*/
- public void setCompressLargeMessage(boolean compress)
+ public void setCompressLargeMessage(final boolean compress)
{
- this.compressLargeMessage = compress;
+ compressLargeMessage = compress;
}
private void checkWrite()
@@ -1021,7 +1019,7 @@
}
}
- public void setNodeID(String nodeID)
+ public void setNodeID(final String nodeID)
{
this.nodeID = nodeID;
}
@@ -1031,7 +1029,7 @@
return nodeID;
}
- public void setClusterConnection(boolean clusterConnection)
+ public void setClusterConnection(final boolean clusterConnection)
{
this.clusterConnection = clusterConnection;
}
@@ -1046,9 +1044,9 @@
return clusterTransportConfiguration;
}
- public void setClusterTransportConfiguration(TransportConfiguration tc)
+ public void setClusterTransportConfiguration(final TransportConfiguration tc)
{
- this.clusterTransportConfiguration = tc;
+ clusterTransportConfiguration = tc;
}
public boolean isBackup()
@@ -1056,11 +1054,21 @@
return backup;
}
- public void setBackup(boolean backup)
+ public void setBackup(final boolean backup)
{
this.backup = backup;
}
+ public void setUseTCCL(final boolean useTCCL)
+ {
+ this.useTCCL = useTCCL;
+ }
+
+ public boolean isUseTCCL()
+ {
+ return useTCCL;
+ }
+
@Override
protected void finalize() throws Throwable
{
@@ -1236,13 +1244,13 @@
{
List<DiscoveryEntry> newConnectors = discoveryGroup.getDiscoveryEntries();
- this.initialConnectors =
(TransportConfiguration[])Array.newInstance(TransportConfiguration.class,
+ initialConnectors =
(TransportConfiguration[])Array.newInstance(TransportConfiguration.class,
newConnectors.size());
int count = 0;
for (DiscoveryEntry entry : newConnectors)
{
- this.initialConnectors[count++] = entry.getConnector();
+ initialConnectors[count++] = entry.getConnector();
}
if (ha && clusterConnection && !receivedTopology &&
initialConnectors.length > 0)
@@ -1294,7 +1302,7 @@
topologyListeners.remove(listener);
}
- public synchronized void addFactory(ClientSessionFactoryInternal factory)
+ public synchronized void addFactory(final ClientSessionFactoryInternal factory)
{
if (factory != null)
{
@@ -1344,14 +1352,14 @@
try
{
-
+
List<Future<ClientSessionFactory>> futuresList = new
ArrayList<Future<ClientSessionFactory>>();
-
+
for (Connector conn : connectors)
{
futuresList.add(threadPool.submit(conn));
}
-
+
for (int i = 0, futuresSize = futuresList.size(); i < futuresSize; i++)
{
Future<ClientSessionFactory> future = futuresList.get(i);
@@ -1359,7 +1367,9 @@
{
csf = future.get();
if (csf != null)
+ {
break;
+ }
}
catch (Exception e)
{
@@ -1423,7 +1433,7 @@
System.identityHashCode(this));
log.warn("The ServerLocator you didn't close was created
here:", e);
-
+
if (ServerLocatorImpl.finalizeCallback != null)
{
ServerLocatorImpl.finalizeCallback.run();
@@ -1437,7 +1447,7 @@
class Connector implements Callable<ClientSessionFactory>
{
- private TransportConfiguration initialConnector;
+ private final TransportConfiguration initialConnector;
private volatile ClientSessionFactoryInternal factory;
@@ -1447,7 +1457,7 @@
private Exception e;
- public Connector(TransportConfiguration initialConnector,
ClientSessionFactoryInternal factory)
+ public Connector(final TransportConfiguration initialConnector, final
ClientSessionFactoryInternal factory)
{
this.initialConnector = initialConnector;
this.factory = factory;
Added:
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/utils/ClassloadingUtil.java
===================================================================
---
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/utils/ClassloadingUtil.java
(rev 0)
+++
branches/HORNETQ-681/hornetq-core/src/main/java/org/hornetq/utils/ClassloadingUtil.java 2011-06-02
05:47:03 UTC (rev 10764)
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package org.hornetq.utils;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+/**
+ * A ClassloadingUtil
+ *
+ * @author <a href="mailto:hgao@redhat.com">Howard Gao</a>
+ */
+public final class ClassloadingUtil
+{
+ public static Object safeInitNewInstance(final String className, final boolean
useTccl)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<Object>()
+ {
+ public Object run()
+ {
+ ClassLoader loader = null;
+ if (useTccl)
+ {
+ loader = Thread.currentThread().getContextClassLoader();
+ }
+ else
+ {
+ loader = ClassloadingUtil.class.getClassLoader();
+ }
+ try
+ {
+ Class<?> clazz = loader.loadClass(className);
+ return clazz.newInstance();
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("Error instantiating connector
factory \"" + className + "\"", e);
+ }
+ }
+ });
+ }
+
+}
Modified:
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/client/HornetQConnectionFactory.java
===================================================================
---
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/client/HornetQConnectionFactory.java 2011-06-02
02:52:22 UTC (rev 10763)
+++
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/client/HornetQConnectionFactory.java 2011-06-02
05:47:03 UTC (rev 10764)
@@ -38,7 +38,7 @@
/**
* HornetQ implementation of a JMS ConnectionFactory.
- *
+ *
* @author <a href="mailto:ovidiu@feodorov.com">Ovidiu
Feodorov</a>
* @author <a href="mailto:tim.fox@jboss.com">Tim Fox</a>
* @version <tt>$Revision$</tt> $Id$
@@ -65,18 +65,21 @@
private boolean readOnly;
+ private boolean useTCCL = true;
+
// Constructors
---------------------------------------------------------------------------------
public HornetQConnectionFactory()
{
serverLocator = null;
}
-
+
public HornetQConnectionFactory(final ServerLocator serverLocator)
{
this.serverLocator = serverLocator;
-
+
serverLocator.disableFinalizeCheck();
+ serverLocator.setUseTCCL(useTCCL);
}
public HornetQConnectionFactory(final boolean ha, final DiscoveryGroupConfiguration
groupConfiguration)
@@ -89,8 +92,9 @@
{
serverLocator = HornetQClient.createServerLocatorWithoutHA(groupConfiguration);
}
-
+
serverLocator.disableFinalizeCheck();
+ serverLocator.setUseTCCL(useTCCL);
}
public HornetQConnectionFactory(final boolean ha, final TransportConfiguration...
initialConnectors)
@@ -103,8 +107,9 @@
{
serverLocator = HornetQClient.createServerLocatorWithoutHA(initialConnectors);
}
-
+
serverLocator.disableFinalizeCheck();
+ serverLocator.setUseTCCL(useTCCL);
}
// ConnectionFactory implementation
-------------------------------------------------------------
@@ -128,7 +133,7 @@
public QueueConnection createQueueConnection(final String username, final String
password) throws JMSException
{
- return (QueueConnection)createConnectionInternal(username, password, false,
HornetQConnection.TYPE_QUEUE_CONNECTION);
+ return createConnectionInternal(username, password, false,
HornetQConnection.TYPE_QUEUE_CONNECTION);
}
// TopicConnectionFactory implementation
--------------------------------------------------------
@@ -140,7 +145,7 @@
public TopicConnection createTopicConnection(final String username, final String
password) throws JMSException
{
- return (TopicConnection)createConnectionInternal(username, password, false,
HornetQConnection.TYPE_TOPIC_CONNECTION);
+ return createConnectionInternal(username, password, false,
HornetQConnection.TYPE_TOPIC_CONNECTION);
}
// XAConnectionFactory implementation
-----------------------------------------------------------
@@ -473,7 +478,7 @@
checkWrite();
return serverLocator.getInitialConnectAttempts();
}
-
+
public synchronized boolean isFailoverOnInitialConnection()
{
return serverLocator.isFailoverOnInitialConnection();
@@ -538,22 +543,22 @@
{
return serverLocator.getGroupID();
}
-
+
public boolean isCompressLargeMessage()
{
return serverLocator.isCompressLargeMessage();
}
-
- public void setCompressLargeMessage(boolean compress)
+
+ public void setCompressLargeMessage(final boolean compress)
{
serverLocator.setCompressLargeMessage(compress);
}
-
+
public void close()
{
serverLocator.close();
}
-
+
public ServerLocator getServerLocator()
{
return serverLocator;
@@ -564,7 +569,7 @@
return JMSFactoryType.CF.intValue();
}
/**
- *
+ *
* @deprecated use {@link ServerLocator#createSessionFactory()}
* @return
*/
@@ -582,7 +587,12 @@
throw ex;
}
}
-
+
+ public void setUseTCCL(final boolean useTCCL)
+ {
+ this.useTCCL = useTCCL;
+ }
+
// Package protected
----------------------------------------------------------------------------
// Protected
------------------------------------------------------------------------------------
@@ -595,7 +605,7 @@
readOnly = true;
ClientSessionFactory factory;
-
+
try
{
factory = serverLocator.createSessionFactory();
@@ -603,15 +613,15 @@
catch (Exception e)
{
JMSException jmse = new JMSException("Failed to create session
factory");
-
+
jmse.initCause(e);
jmse.setLinkedException(e);
-
+
throw jmse;
}
HornetQConnection connection = null;
-
+
if (isXA)
{
if (type == HornetQConnection.TYPE_GENERIC_CONNECTION)
@@ -676,7 +686,7 @@
dupsOKBatchSize,
transactionBatchSize,
factory);
- }
+ }
}
connection.setReference(this);
try
@@ -708,6 +718,7 @@
}
}
+ @Override
public void finalize() throws Throwable
{
try
Modified:
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/JMSServerManager.java
===================================================================
---
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/JMSServerManager.java 2011-06-02
02:52:22 UTC (rev 10763)
+++
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/JMSServerManager.java 2011-06-02
05:47:03 UTC (rev 10764)
@@ -18,7 +18,6 @@
import javax.naming.Context;
-import org.hornetq.api.core.TransportConfiguration;
import org.hornetq.api.jms.JMSFactoryType;
import org.hornetq.core.security.Role;
import org.hornetq.core.server.HornetQComponent;
@@ -30,7 +29,7 @@
/**
* The JMS Management interface.
- *
+ *
* @author <a href="ataylor(a)redhat.com">Andy Taylor</a>
* @author <a href="jmesnil(a)redhat.com">Jeff Mesnil</a>
* @author <a href="mailto:tim.fox@jboss.com">Tim Fox</a>
@@ -41,14 +40,14 @@
/**
* Has the Server been started.
- *
+ *
* @return true if the server us running
*/
boolean isStarted();
/**
* Creates a JMS Queue.
- *
+ *
* @param queueName
* The name of the queue to create
* @param selectorString
@@ -59,7 +58,7 @@
* if problems were encountered creating the queue.
*/
boolean createQueue(boolean storeConfig, String queueName, String selectorString,
boolean durable, String ...bindings) throws Exception;
-
+
boolean addTopicToJndi(final String topicName, final String binding) throws
Exception;
boolean addQueueToJndi(final String queueName, final String binding) throws
Exception;
@@ -68,7 +67,7 @@
/**
* Creates a JMS Topic
- *
+ *
* @param topicName
* the name of the topic
* @param binding
@@ -83,7 +82,7 @@
/**
* Remove the topic from JNDI or BindingRegistry.
* Calling this method does <em>not</em> destroy the destination.
- *
+ *
* @param name
* the name of the destination to remove from JNDI or BindingRegistry
* @return true if removed
@@ -95,7 +94,7 @@
/**
* Remove the topic from JNDI or BindingRegistry.
* Calling this method does <em>not</em> destroy the destination.
- *
+ *
* @param name
* the name of the destination to remove from JNDI or BindingRegistry
* @return true if removed
@@ -107,7 +106,7 @@
/**
* Remove the queue from JNDI or BindingRegistry.
* Calling this method does <em>not</em> destroy the destination.
- *
+ *
* @param name
* the name of the destination to remove from JNDI or BindingRegistry
* @return true if removed
@@ -119,7 +118,7 @@
/**
* Remove the queue from JNDI or BindingRegistry.
* Calling this method does <em>not</em> destroy the destination.
- *
+ *
* @param name
* the name of the destination to remove from JNDI or BindingRegistry
* @return true if removed
@@ -134,7 +133,7 @@
/**
* destroys a queue and removes it from JNDI or BindingRegistry
- *
+ *
* @param name
* the name of the queue to destroy
* @return true if destroyed
@@ -142,16 +141,16 @@
* if a problem occurred destroying the queue
*/
boolean destroyQueue(String name) throws Exception;
-
+
String[] getJNDIOnQueue(String queue);
-
+
String[] getJNDIOnTopic(String topic);
-
+
String[] getJNDIOnConnectionFactory(String factoryName);
/**
* destroys a topic and removes it from JNDI or BindingRegistry
- *
+ *
* @param name
* the name of the topic to destroy
* @return true if the topic was destroyed
@@ -159,8 +158,8 @@
* if a problem occurred destroying the topic
*/
boolean destroyTopic(String name) throws Exception;
-
- /** Call this method to have a CF rebound to JNDI and stored on the Journal
+
+ /** Call this method to have a CF rebound to JNDI and stored on the Journal
* @throws Exception */
HornetQConnectionFactory recreateCF(String name, ConnectionFactoryConfiguration cf)
throws Exception;
@@ -168,14 +167,14 @@
void createConnectionFactory(String name,
boolean ha,
- JMSFactoryType cfType,
+ JMSFactoryType cfType,
List<String> connectorNames,
String ... bindings) throws Exception;
void createConnectionFactory(String name,
boolean ha,
- JMSFactoryType cfType,
- List<String> connectorNames,
+ JMSFactoryType cfType,
+ List<String> connectorNames,
String clientID,
long clientFailureCheckPeriod,
long connectionTTL,
@@ -209,7 +208,7 @@
void createConnectionFactory(String name,
boolean ha,
- JMSFactoryType cfType,
+ JMSFactoryType cfType,
String discoveryGroupName,
String clientID,
long clientFailureCheckPeriod,
@@ -230,7 +229,7 @@
boolean preAcknowledge,
String loadBalancingPolicyClassName,
int transactionBatchSize,
- int dupsOKBatchSize,
+ int dupsOKBatchSize,
boolean useGlobalPools,
int scheduledThreadPoolMaxSize,
int threadPoolMaxSize,
@@ -241,12 +240,12 @@
boolean failoverOnInitialConnection,
String groupId,
String ... bindings) throws Exception;
-
+
void createConnectionFactory(boolean storeConfig, ConnectionFactoryConfiguration
cfConfig, String... bindings) throws Exception;
/**
* destroys a connection factory.
- *
+ *
* @param name
* the name of the connection factory to destroy
* @return true if the connection factory was destroyed
@@ -266,9 +265,9 @@
String[] listSessions(String connectionID) throws Exception;
String listPreparedTransactionDetailsAsJSON() throws Exception;
-
+
String listPreparedTransactionDetailsAsHTML() throws Exception;
-
+
void setContext(final Context context);
HornetQServer getHornetQServer();
@@ -289,4 +288,6 @@
* @param registry
*/
void setRegistry(BindingRegistry registry);
+
+ void setLoadedByAS7(boolean isAS7);
}
Modified:
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/config/ConnectionFactoryConfiguration.java
===================================================================
---
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/config/ConnectionFactoryConfiguration.java 2011-06-02
02:52:22 UTC (rev 10763)
+++
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/config/ConnectionFactoryConfiguration.java 2011-06-02
05:47:03 UTC (rev 10764)
@@ -27,25 +27,25 @@
*/
public interface ConnectionFactoryConfiguration extends EncodingSupport
{
-
+
boolean isPersisted();
-
+
String getName();
String[] getBindings();
void setBindings(String[] bindings);
-
+
String getDiscoveryGroupName();
-
+
void setDiscoveryGroupName(String discoveryGroupName);
-
+
List<String> getConnectorNames();
void setConnectorNames(List<String> connectorNames);
-
+
boolean isHA();
-
+
void setHA(boolean ha);
String getClientID();
@@ -71,11 +71,11 @@
int getMinLargeMessageSize();
void setMinLargeMessageSize(int minLargeMessageSize);
-
+
boolean isCompressLargeMessages();
-
- void setCompressLargeMessages(boolean compress);
+ void setCompressLargeMessages(boolean compress);
+
int getConsumerWindowSize();
void setConsumerWindowSize(int consumerWindowSize);
@@ -165,6 +165,10 @@
void setGroupID(String groupID);
void setFactoryType(JMSFactoryType factType);
-
+
JMSFactoryType getFactoryType();
+
+ void setUseTCCL(boolean useTCCL);
+
+ boolean isUseTCCL();
}
Modified:
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
===================================================================
---
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java 2011-06-02
02:52:22 UTC (rev 10763)
+++
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java 2011-06-02
05:47:03 UTC (rev 10764)
@@ -26,9 +26,9 @@
/**
* This class contains the configuration properties of a connection factory.
- *
+ *
* It is also persisted on the journal at the time of management is used to created a
connection factory and set to store.
- *
+ *
* Every property on this class has to be also set through encoders through
EncodingSupport implementation at this class.
*
* @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
@@ -42,13 +42,13 @@
// Attributes ----------------------------------------------------
private String name;
-
+
private boolean persisted;
private String[] bindings;
private List<String> connectorNames;
-
+
private String discoveryGroupName;
private String clientID = null;
@@ -64,7 +64,7 @@
private boolean cacheLargeMessagesClient =
HornetQClient.DEFAULT_CACHE_LARGE_MESSAGE_CLIENT;
private int minLargeMessageSize = HornetQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE;
-
+
private boolean compressLargeMessage = HornetQClient.DEFAULT_COMPRESS_LARGE_MESSAGES;
private int consumerWindowSize = HornetQClient.DEFAULT_CONSUMER_WINDOW_SIZE;
@@ -115,6 +115,8 @@
private JMSFactoryType factoryType = JMSFactoryType.CF;
+ private boolean useTCCL = true;
+
// Static --------------------------------------------------------
// Constructors --------------------------------------------------
@@ -157,7 +159,7 @@
{
return name;
}
-
+
public boolean isPersisted()
{
return persisted;
@@ -174,7 +176,7 @@
/**
* @param discoveryGroupName the discoveryGroupName to set
*/
- public void setDiscoveryGroupName(String discoveryGroupName)
+ public void setDiscoveryGroupName(final String discoveryGroupName)
{
this.discoveryGroupName = discoveryGroupName;
}
@@ -266,7 +268,7 @@
public void setCompressLargeMessages(final boolean compress)
{
- this.compressLargeMessage = compress;
+ compressLargeMessage = compress;
}
public int getConsumerWindowSize()
@@ -507,11 +509,11 @@
public void decode(final HornetQBuffer buffer)
{
persisted = true;
-
+
name = buffer.readSimpleString().toString();
discoveryGroupName = BufferHelper.readNullableSimpleStringAsString(buffer);
-
+
int nConnectors = buffer.readInt();
if (nConnectors > 0)
@@ -521,11 +523,11 @@
for (int i = 0; i < nConnectors; i++)
{
SimpleString str = buffer.readSimpleString();
-
+
connectorNames.add(str.toString());
}
}
-
+
ha = buffer.readBoolean();
clientID = BufferHelper.readNullableSimpleStringAsString(buffer);
@@ -583,7 +585,7 @@
reconnectAttempts = buffer.readInt();
failoverOnInitialConnection = buffer.readBoolean();
-
+
compressLargeMessage = buffer.readBoolean();
groupID = BufferHelper.readNullableSimpleStringAsString(buffer);
@@ -597,12 +599,12 @@
public void encode(final HornetQBuffer buffer)
{
persisted = true;
-
+
BufferHelper.writeAsSimpleString(buffer, name);
BufferHelper.writeAsNullableSimpleString(buffer, discoveryGroupName);
-
- if (this.connectorNames == null)
+
+ if (connectorNames == null)
{
buffer.writeInt(0);
}
@@ -615,7 +617,7 @@
BufferHelper.writeAsSimpleString(buffer, tc);
}
}
-
+
buffer.writeBoolean(ha);
BufferHelper.writeAsNullableSimpleString(buffer, clientID);
@@ -673,7 +675,7 @@
buffer.writeInt(reconnectAttempts);
buffer.writeBoolean(failoverOnInitialConnection);
-
+
buffer.writeBoolean(compressLargeMessage);
BufferHelper.writeAsNullableSimpleString(buffer, groupID);
@@ -689,20 +691,20 @@
int size = BufferHelper.sizeOfSimpleString(name) +
BufferHelper.sizeOfNullableSimpleString(discoveryGroupName);
-
+
size += DataConstants.SIZE_INT;
- if (this.connectorNames != null)
+ if (connectorNames != null)
{
for (String tc : connectorNames)
{
- size += BufferHelper.sizeOfSimpleString(tc);
+ size += BufferHelper.sizeOfSimpleString(tc);
}
}
-
+
size += BufferHelper.sizeOfNullableSimpleString(clientID) +
-
- DataConstants.SIZE_BOOLEAN +
+
+ DataConstants.SIZE_BOOLEAN +
// ha
DataConstants.SIZE_LONG +
@@ -784,8 +786,8 @@
DataConstants.SIZE_BOOLEAN +
// failoverOnInitialConnection
-
- DataConstants.SIZE_BOOLEAN +
+
+ DataConstants.SIZE_BOOLEAN +
// compress-large-message
BufferHelper.sizeOfNullableSimpleString(groupID) +
@@ -805,6 +807,18 @@
return factoryType;
}
+ @Override
+ public void setUseTCCL(final boolean useTCCL)
+ {
+ this.useTCCL = useTCCL;
+ }
+
+ @Override
+ public boolean isUseTCCL()
+ {
+ return useTCCL;
+ }
+
// Public --------------------------------------------------------
// Package protected ---------------------------------------------
Modified:
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/impl/JMSServerManagerImpl.java
===================================================================
---
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/impl/JMSServerManagerImpl.java 2011-06-02
02:52:22 UTC (rev 10763)
+++
branches/HORNETQ-681/hornetq-jms/src/main/java/org/hornetq/jms/server/impl/JMSServerManagerImpl.java 2011-06-02
05:47:03 UTC (rev 10764)
@@ -107,9 +107,9 @@
*/
private Context context;
- private Map<String, HornetQQueue> queues = new HashMap<String,
HornetQQueue>();
+ private final Map<String, HornetQQueue> queues = new HashMap<String,
HornetQQueue>();
- private Map<String, HornetQTopic> topics = new HashMap<String,
HornetQTopic>();
+ private final Map<String, HornetQTopic> topics = new HashMap<String,
HornetQTopic>();
private final Map<String, HornetQConnectionFactory> connectionFactories = new
HashMap<String, HornetQConnectionFactory>();
@@ -144,11 +144,13 @@
private JMSStorageManager storage;
+ private boolean isLoadedByAS7 = false;
+
public JMSServerManagerImpl(final HornetQServer server) throws Exception
{
this.server = server;
- this.coreConfig = server.getConfiguration();
+ coreConfig = server.getConfiguration();
configFileName = null;
}
@@ -157,7 +159,7 @@
{
this.server = server;
- this.coreConfig = server.getConfiguration();
+ coreConfig = server.getConfiguration();
this.configFileName = configFileName;
}
@@ -166,14 +168,14 @@
{
this.server = server;
- this.coreConfig = server.getConfiguration();
+ coreConfig = server.getConfiguration();
configFileName = null;
config = configuration;
}
- public JMSServerManagerImpl(HornetQServer server, String configFilename,
JMSStorageManager storageManager)
+ public JMSServerManagerImpl(final HornetQServer server, final String configFilename,
final JMSStorageManager storageManager)
{
this.server = server;
@@ -250,7 +252,9 @@
if (registry == null)
{
if (!contextSet)
+ {
context = new InitialContext();
+ }
registry = new JndiBindingRegistry(context);
}
@@ -342,7 +346,7 @@
return registry;
}
- public void setRegistry(BindingRegistry registry)
+ public void setRegistry(final BindingRegistry registry)
{
this.registry = registry;
}
@@ -405,11 +409,13 @@
runAfterActive(new RunnableException()
{
+ @Override
public String toString()
{
return "createQueue for " + queueName;
}
+ @Override
public void runException() throws Exception
{
if (internalCreateQueue(queueName, selectorString, durable))
@@ -459,11 +465,13 @@
runAfterActive(new RunnableException()
{
+ @Override
public String toString()
{
return "createTopic for " + topicName;
}
+ @Override
public void runException() throws Exception
{
if (internalCreateTopic(topicName))
@@ -525,17 +533,17 @@
return added;
}
- public String[] getJNDIOnQueue(String queue)
+ public String[] getJNDIOnQueue(final String queue)
{
return getJNDIList(queueJNDI, queue);
}
- public String[] getJNDIOnTopic(String topic)
+ public String[] getJNDIOnTopic(final String topic)
{
return getJNDIList(topicJNDI, topic);
}
- public String[] getJNDIOnConnectionFactory(String factoryName)
+ public String[] getJNDIOnConnectionFactory(final String factoryName)
{
return getJNDIList(connectionFactoryJNDI, factoryName);
}
@@ -589,7 +597,7 @@
* @see org.hornetq.jms.server.JMSServerManager#removeQueueFromJNDI(java.lang.String,
java.lang.String)
*/
- public boolean removeQueueFromJNDI(String name, String jndi) throws Exception
+ public boolean removeQueueFromJNDI(final String name, final String jndi) throws
Exception
{
checkInitialised();
@@ -607,7 +615,7 @@
* @see org.hornetq.jms.server.JMSServerManager#removeQueueFromJNDI(java.lang.String,
java.lang.String)
*/
- public boolean removeQueueFromJNDI(String name) throws Exception
+ public boolean removeQueueFromJNDI(final String name) throws Exception
{
checkInitialised();
@@ -626,7 +634,7 @@
* @see org.hornetq.jms.server.JMSServerManager#removeTopicFromJNDI(java.lang.String,
java.lang.String)
*/
- public boolean removeTopicFromJNDI(String name, String jndi) throws Exception
+ public boolean removeTopicFromJNDI(final String name, final String jndi) throws
Exception
{
checkInitialised();
@@ -645,7 +653,7 @@
* @see org.hornetq.jms.server.JMSServerManager#removeTopicFromJNDI(java.lang.String,
java.lang.String)
*/
- public boolean removeTopicFromJNDI(String name) throws Exception
+ public boolean removeTopicFromJNDI(final String name) throws Exception
{
checkInitialised();
@@ -663,7 +671,7 @@
* @see
org.hornetq.jms.server.JMSServerManager#removeConnectionFactoryFromJNDI(java.lang.String,
java.lang.String)
*/
- public boolean removeConnectionFactoryFromJNDI(String name, String jndi) throws
Exception
+ public boolean removeConnectionFactoryFromJNDI(final String name, final String jndi)
throws Exception
{
checkInitialised();
@@ -678,7 +686,7 @@
* @see
org.hornetq.jms.server.JMSServerManager#removeConnectionFactoryFromJNDI(java.lang.String,
java.lang.String)
*/
- public boolean removeConnectionFactoryFromJNDI(String name) throws Exception
+ public boolean removeConnectionFactoryFromJNDI(final String name) throws Exception
{
checkInitialised();
@@ -749,7 +757,7 @@
final boolean ha,
final JMSFactoryType cfType,
final List<String>
connectorNames,
- String... jndiBindings) throws
Exception
+ final String... jndiBindings) throws
Exception
{
checkInitialised();
HornetQConnectionFactory cf = connectionFactories.get(name);
@@ -763,7 +771,7 @@
public synchronized void createConnectionFactory(final String name,
final boolean ha,
- JMSFactoryType cfType,
+ final JMSFactoryType cfType,
final List<String>
connectorNames,
final String clientID,
final long clientFailureCheckPeriod,
@@ -794,7 +802,7 @@
final int reconnectAttempts,
final boolean
failoverOnInitialConnection,
final String groupId,
- String... jndiBindings) throws
Exception
+ final String... jndiBindings) throws
Exception
{
checkInitialised();
HornetQConnectionFactory cf = connectionFactories.get(name);
@@ -925,7 +933,7 @@
}
}
- public synchronized HornetQConnectionFactory recreateCF(String name,
ConnectionFactoryConfiguration cf) throws Exception
+ public synchronized HornetQConnectionFactory recreateCF(final String name, final
ConnectionFactoryConfiguration cf) throws Exception
{
List<String> jndi = connectionFactoryJNDI.get(name);
@@ -935,7 +943,7 @@
}
String[] usedJNDI = jndi.toArray(new String[jndi.size()]);
-
+
HornetQConnectionFactory realCF = internalCreateCFPOJO(cf);
if (cf.isPersisted())
@@ -946,7 +954,7 @@
for (String jndiElement : usedJNDI)
{
- this.bindToJndi(jndiElement, realCF);
+ bindToJndi(jndiElement, realCF);
}
return realCF;
@@ -959,13 +967,16 @@
runAfterActive(new RunnableException()
{
+ @Override
public String toString()
{
return "createConnectionFactory for " + cfConfig.getName();
}
+ @Override
public void runException() throws Exception
{
+ cfConfig.setUseTCCL(!isLoadedByAS7);
HornetQConnectionFactory cf = internalCreateCF(storeConfig, cfConfig);
@@ -998,9 +1009,9 @@
}
// used on tests only
- public void replaceStorageManager(JMSStorageManager newStorage)
+ public void replaceStorageManager(final JMSStorageManager newStorage)
{
- this.storage = newStorage;
+ storage = newStorage;
}
private String[] getJNDIList(final Map<String, List<String>> map, final
String name)
@@ -1201,6 +1212,7 @@
cf.setFailoverOnInitialConnection(cfConfig.isFailoverOnInitialConnection());
cf.setCompressLargeMessage(cfConfig.isCompressLargeMessages());
cf.setGroupID(cfConfig.getGroupID());
+ cf.setUseTCCL(cfConfig.isUseTCCL());
return cf;
}
@@ -1392,7 +1404,7 @@
}
}
- private void addToBindings(Map<String, List<String>> map, String name,
String... jndi)
+ private void addToBindings(final Map<String, List<String>> map, final
String name, final String... jndi)
{
List<String> list = map.get(name);
if (list == null)
@@ -1452,7 +1464,7 @@
/**
* @param param
*/
- private void unbindJNDI(Map<String, List<String>> param)
+ private void unbindJNDI(final Map<String, List<String>> param)
{
if (context != null)
{
@@ -1478,7 +1490,7 @@
*/
private void initJournal() throws Exception
{
- this.coreConfig = server.getConfiguration();
+ coreConfig = server.getConfiguration();
createJournal();
@@ -1628,7 +1640,7 @@
}
}
- private boolean runAfterActive(RunnableException runnable) throws Exception
+ private boolean runAfterActive(final RunnableException runnable) throws Exception
{
if (active)
{
@@ -1660,4 +1672,10 @@
public abstract void runException() throws Exception;
}
+ @Override
+ public void setLoadedByAS7(final boolean isAS7)
+ {
+ isLoadedByAS7 = isAS7;
+ }
+
}