You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gr...@apache.org on 2010/10/13 17:06:27 UTC
svn commit: r1022127 [4/15] - in
/qpid/branches/grkvlt-network-20101013/qpid/java: ./
broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/
broker-plugins/access-control/src/test/java/org/apache/qpid/server/securit...
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java Wed Oct 13 15:05:29 2010
@@ -20,7 +20,6 @@
*/
package org.apache.qpid.server.registry;
-import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@@ -41,7 +40,6 @@ import org.apache.qpid.server.configurat
import org.apache.qpid.server.logging.CompositeStartupMessageLogger;
import org.apache.qpid.server.logging.Log4jMessageLogger;
import org.apache.qpid.server.logging.RootMessageLogger;
-import org.apache.qpid.server.logging.AbstractRootMessageLogger;
import org.apache.qpid.server.logging.SystemOutMessageLogger;
import org.apache.qpid.server.logging.actors.BrokerActor;
import org.apache.qpid.server.logging.actors.CurrentActor;
@@ -54,28 +52,26 @@ import org.apache.qpid.server.security.a
import org.apache.qpid.server.security.auth.database.PrincipalDatabaseManager;
import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
-import org.apache.qpid.server.transport.QpidAcceptor;
import org.apache.qpid.server.virtualhost.VirtualHost;
import org.apache.qpid.server.virtualhost.VirtualHostImpl;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
+import org.apache.qpid.transport.network.NetworkTransport;
/**
* An abstract application registry that provides access to configuration information and handles the
* construction and caching of configurable objects.
- * <p/>
+ *
* Subclasses should handle the construction of the "registered objects" such as the exchange registry.
*/
public abstract class ApplicationRegistry implements IApplicationRegistry
{
protected static final Logger _logger = Logger.getLogger(ApplicationRegistry.class);
- private static Map<Integer, IApplicationRegistry> _instanceMap = new HashMap<Integer, IApplicationRegistry>();
-
+ protected static IApplicationRegistry _instance = null;
+
protected final ServerConfiguration _configuration;
- public static final int DEFAULT_INSTANCE = 1;
-
- protected final Map<InetSocketAddress, QpidAcceptor> _acceptors = new HashMap<InetSocketAddress, QpidAcceptor>();
+ protected final Map<Integer, NetworkTransport> _transports = new HashMap<Integer, NetworkTransport>();
protected ManagedObjectRegistry _managedObjectRegistry;
@@ -108,46 +104,45 @@ public abstract class ApplicationRegistr
static
{
Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownService()));
+ Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ public void uncaughtException(Thread t, Throwable e)
+ {
+ _logger.error(String.format("Caught exception trying to escape %s: %s", t.getName(), e.getMessage()), e);
+ }
+ });
}
private static class ShutdownService implements Runnable
{
public void run()
{
- removeAll();
+ remove();
}
}
public static void initialise(IApplicationRegistry instance) throws Exception
{
- initialise(instance, DEFAULT_INSTANCE);
- }
-
- @SuppressWarnings("finally")
- public static void initialise(IApplicationRegistry instance, int instanceID) throws Exception
- {
if (instance != null)
{
- _logger.info("Initialising Application Registry(" + instance + "):" + instanceID);
- _instanceMap.put(instanceID, instance);
+ _logger.info("Initialising Application Registry(" + instance + ")");
+ _instance = instance;
final ConfigStore store = ConfigStore.newInstance();
store.setRoot(new SystemConfigImpl(store));
- instance.setConfigStore(store);
+ _instance.setConfigStore(store);
- BrokerConfig broker = new BrokerConfigAdapter(instance);
+ BrokerConfig broker = new BrokerConfigAdapter(_instance);
SystemConfig system = (SystemConfig) store.getRoot();
system.addBroker(broker);
- instance.setBroker(broker);
+ _instance.setBroker(broker);
try
{
- instance.initialise(instanceID);
+ _instance.initialise();
}
catch (Exception e)
{
- _instanceMap.remove(instanceID);
try
{
system.removeBroker(broker);
@@ -157,10 +152,20 @@ public abstract class ApplicationRegistr
throw e;
}
}
+
+ // We have already loaded the BrokerMessages class by this point so we
+ // need to refresh the locale setting incase we had a different value in
+ // the configuration.
+ BrokerMessages.reload();
+
+ // instance.initialise() sets its own actor so we now need to set the actor
+ // for the remainder of the startup
+ CurrentActor.set(new BrokerActor(instance.getRootMessageLogger()));
+ CurrentActor.setDefault(new BrokerActor(instance.getRootMessageLogger()));
}
else
{
- remove(instanceID);
+ remove();
}
}
@@ -176,57 +181,31 @@ public abstract class ApplicationRegistr
public static boolean isConfigured()
{
- return isConfigured(DEFAULT_INSTANCE);
- }
-
- public static boolean isConfigured(int instanceID)
- {
- return _instanceMap.containsKey(instanceID);
+ return _instance != null;
}
- /** Method to cleanly shutdown the default registry running in this JVM */
+ /** Method to cleanly shutdown the registry running in this JVM */
public static void remove()
{
- remove(DEFAULT_INSTANCE);
- }
-
- /**
- * Method to cleanly shutdown specified registry running in this JVM
- *
- * @param instanceID the instance to shutdown
- */
- public static void remove(int instanceID)
- {
try
{
- IApplicationRegistry instance = _instanceMap.get(instanceID);
- if (instance != null)
+ if (_instance != null)
{
if (_logger.isInfoEnabled())
{
- _logger.info("Shutting down ApplicationRegistry(" + instanceID + "):" + instance);
+ _logger.info("Shutting down ApplicationRegistry(" + _instance + ")");
}
- instance.close();
- instance.getBroker().getSystem().removeBroker(instance.getBroker());
+
+ _instance.close();
+ _instance.getBroker().getSystem().removeBroker(_instance.getBroker());
+ _instance.shutdown();
+
+ _instance = null;
}
}
catch (Exception e)
{
- _logger.error("Error shutting down Application Registry(" + instanceID + "): " + e, e);
- }
- finally
- {
- _instanceMap.remove(instanceID);
- }
- }
-
- /** Method to cleanly shutdown all registries currently running in this JVM */
- public static void removeAll()
- {
- Object[] keys = _instanceMap.keySet().toArray();
- for (Object k : keys)
- {
- remove((Integer) k);
+ _logger.error("Error shutting down Application Registry(" + _instance + "): " + e.getMessage(), e);
}
}
@@ -251,11 +230,11 @@ public abstract class ApplicationRegistr
_configuration.initialise();
}
- public void initialise(int instanceID) throws Exception
+ public void initialise() throws Exception
{
//Create the RootLogger to be used during broker operation
_rootMessageLogger = new Log4jMessageLogger(_configuration);
- _registryName = String.valueOf(instanceID);
+ _registryName = _brokerId.toString();
//Create the composite (log4j+SystemOut MessageLogger to be used during startup
RootMessageLogger[] messageLoggers = {new SystemOutMessageLogger(), _rootMessageLogger};
@@ -323,23 +302,13 @@ public abstract class ApplicationRegistr
public static IApplicationRegistry getInstance()
{
- return getInstance(DEFAULT_INSTANCE);
- }
-
- public static IApplicationRegistry getInstance(int instanceID)
- {
synchronized (IApplicationRegistry.class)
{
- IApplicationRegistry instance = _instanceMap.get(instanceID);
-
- if (instance == null)
- {
- throw new IllegalStateException("Application Registry (" + instanceID + ") not created");
- }
- else
+ if (!isConfigured())
{
- return instance;
+ throw new IllegalStateException("Application Registry not configured");
}
+ return _instance;
}
}
@@ -362,6 +331,13 @@ public abstract class ApplicationRegistr
}
}
+ public void shutdown()
+ {
+ if (CurrentActor.get() != null)
+ {
+ CurrentActor.remove();
+ }
+ }
public void close()
{
@@ -376,39 +352,34 @@ public abstract class ApplicationRegistr
//Shutdown virtualhosts
close(_virtualHostRegistry);
-// close(_accessManager);
-//
-// close(_databaseManager);
-
- close(_authenticationManager);
-
close(_managedObjectRegistry);
close(_qmfService);
close(_pluginManager);
+
+ //Shutdown Authentication manager
+ close(_authenticationManager);
CurrentActor.get().message(BrokerMessages.STOPPED());
}
private void unbind()
{
- synchronized (_acceptors)
+ synchronized (_transports)
{
- for (InetSocketAddress bindAddress : _acceptors.keySet())
+ for (Integer port: _transports.keySet())
{
- QpidAcceptor acceptor = _acceptors.get(bindAddress);
-
+ NetworkTransport transport = _transports.get(port);
try
{
- acceptor.getNetworkDriver().close();
+ transport.close();
}
catch (Throwable e)
{
_logger.error("Unable to close network driver due to:" + e.getMessage());
}
-
- CurrentActor.get().message(BrokerMessages.SHUTTING_DOWN(acceptor.toString(), bindAddress.getPort()));
+ CurrentActor.get().message(BrokerMessages.SHUTTING_DOWN(transport.getAddress().toString(), port));
}
}
}
@@ -418,11 +389,11 @@ public abstract class ApplicationRegistr
return _configuration;
}
- public void addAcceptor(InetSocketAddress bindAddress, QpidAcceptor acceptor)
+ public void registerTransport(int port, NetworkTransport transport)
{
- synchronized (_acceptors)
+ synchronized (_transports)
{
- _acceptors.put(bindAddress, acceptor);
+ _transports.put(port, transport);
}
}
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java Wed Oct 13 15:05:29 2010
@@ -20,24 +20,23 @@
*/
package org.apache.qpid.server.registry;
-import java.net.InetSocketAddress;
import java.util.UUID;
import org.apache.qpid.qmf.QMFService;
import org.apache.qpid.server.configuration.BrokerConfig;
import org.apache.qpid.server.configuration.ConfigStore;
+import org.apache.qpid.server.configuration.ConfigurationManager;
import org.apache.qpid.server.configuration.ServerConfiguration;
import org.apache.qpid.server.configuration.VirtualHostConfiguration;
-import org.apache.qpid.server.configuration.ConfigurationManager;
import org.apache.qpid.server.logging.RootMessageLogger;
import org.apache.qpid.server.management.ManagedObjectRegistry;
import org.apache.qpid.server.plugins.PluginManager;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.security.auth.database.PrincipalDatabaseManager;
import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
-import org.apache.qpid.server.transport.QpidAcceptor;
import org.apache.qpid.server.virtualhost.VirtualHost;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
+import org.apache.qpid.transport.network.NetworkTransport;
public interface IApplicationRegistry
{
@@ -47,13 +46,15 @@ public interface IApplicationRegistry
* initialise in the constructor will lead to failures since the registry reference will not have been set.
* @param instanceID the instanceID that we can use to identify this AR.
*/
- void initialise(int instanceID) throws Exception;
+ void initialise() throws Exception;
/**
- * Shutdown this Registry
+ * Close this Registry
*/
void close();
+ void shutdown();
+
/**
* Get the low level configuration. For use cases where the configured object approach is not required
* you can get the complete configuration information.
@@ -78,11 +79,9 @@ public interface IApplicationRegistry
RootMessageLogger getRootMessageLogger();
/**
- * Register any acceptors for this registry
- * @param bindAddress The address that the acceptor has been bound with
- * @param acceptor The acceptor in use
+ * Register any network transports for this registry
*/
- void addAcceptor(InetSocketAddress bindAddress, QpidAcceptor acceptor);
+ void registerTransport(int port, NetworkTransport transport);
public UUID getBrokerId();
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractPlugin.java Wed Oct 13 15:05:29 2010
@@ -40,8 +40,6 @@ public abstract class AbstractPlugin imp
{
return Result.ABSTAIN;
}
-
- public abstract Result access(ObjectType object, Object instance);
public abstract Result authorise(Operation operation, ObjectType object, ObjectProperties properties);
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractProxyPlugin.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractProxyPlugin.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractProxyPlugin.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/AbstractProxyPlugin.java Wed Oct 13 15:05:29 2010
@@ -82,23 +82,6 @@ public abstract class AbstractProxyPlugi
{
return getDefault();
}
-
- public Result accessVirtualhost(Object instance)
- {
- return getDefault();
- }
-
- @Override
- public Result access(ObjectType objectType, Object instance)
- {
- switch (objectType)
- {
- case VIRTUALHOST:
- return accessVirtualhost(instance);
- }
-
- return getDefault();
- }
@Override
public Result authorise(Operation operation, ObjectType objectType, ObjectProperties properties)
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java Wed Oct 13 15:05:29 2010
@@ -41,6 +41,7 @@ import org.apache.qpid.server.protocol.A
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.security.access.ObjectProperties;
import org.apache.qpid.server.security.access.Operation;
+import org.apache.qpid.server.security.access.ObjectProperties.Property;
import org.apache.qpid.server.security.auth.sasl.UsernamePrincipal;
/**
@@ -276,8 +277,8 @@ public class SecurityManager
Result allowed(SecurityPlugin plugin)
{
ObjectProperties properties = new ObjectProperties();
- properties.put(ObjectProperties.Property.PACKAGE, packageName);
- properties.put(ObjectProperties.Property.CLASS, className);
+ properties.put(Property.PACKAGE, packageName);
+ properties.put(Property.CLASS, className);
return plugin.authorise(ACCESS, OBJECT, properties);
}
});
@@ -294,20 +295,22 @@ public class SecurityManager
if (componentName != null)
{
// Only set the property if there is a component name
- properties.put(ObjectProperties.Property.COMPONENT, componentName);
+ properties.put(Property.COMPONENT, componentName);
}
return plugin.authorise(operation, METHOD, properties);
}
});
}
- public boolean accessVirtualhost(final String vhostname, final SocketAddress remoteAddress)
+ public boolean accessVirtualhost(final String vhostname, final String remoteAddress)
{
return checkAllPlugins(new AccessCheck()
{
Result allowed(SecurityPlugin plugin)
{
- return plugin.access(VIRTUALHOST, remoteAddress);
+ ObjectProperties properties = new ObjectProperties();
+ properties.put(Property.REMOTE_ADDRESS, remoteAddress);
+ return plugin.authorise(ACCESS, VIRTUALHOST, properties);
}
});
}
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityPlugin.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityPlugin.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityPlugin.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityPlugin.java Wed Oct 13 15:05:29 2010
@@ -24,21 +24,16 @@ import org.apache.qpid.server.security.a
import org.apache.qpid.server.security.access.Operation;
/**
- * The two methods, {@link #access(ObjectType, Object)} and {@link #authorise(Operation, ObjectType, ObjectProperties)},
- * return the {@link Result} of the security decision, which may be to {@link Result#ABSTAIN} if no decision is made
- * by this plugin.
+ * The method {@link #authorise(Operation, ObjectType, ObjectProperties)}, returns
+ * the {@link Result} of the security decision, which may be to {@link Result#ABSTAIN}
+ * if no decision is made by this plugin.
*/
public interface SecurityPlugin extends Plugin
{
/**
- * Default result for {@link #access(ObjectType, Object)} or {@link #authorise(Operation, ObjectType, ObjectProperties)}.
+ * Default result for {@link #authorise(Operation, ObjectType, ObjectProperties)}.
*/
Result getDefault();
-
- /**
- * Authorise access granted to an object instance.
- */
- Result access(ObjectType objectType, Object instance);
/**
* Authorise an operation on an object defined by a set of properties.
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/ObjectProperties.java Wed Oct 13 15:05:29 2010
@@ -64,7 +64,8 @@ public class ObjectProperties extends Ha
AUTO_DELETE,
COMPONENT,
PACKAGE,
- CLASS;
+ CLASS,
+ REMOTE_ADDRESS;
public static Property parse(String text)
{
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/BasicPlugin.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/BasicPlugin.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/BasicPlugin.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/access/plugins/BasicPlugin.java Wed Oct 13 15:05:29 2010
@@ -33,11 +33,6 @@ import org.apache.qpid.server.security.a
*/
public abstract class BasicPlugin extends AbstractPlugin
{
- public Result access(ObjectType objectType, Object instance)
- {
- return getDefault();
- }
-
public Result authorise(Operation operation, ObjectType objectType, ObjectProperties properties)
{
return getDefault();
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java Wed Oct 13 15:05:29 2010
@@ -22,6 +22,7 @@ package org.apache.qpid.server.security.
import org.apache.qpid.server.security.auth.sasl.AuthenticationProviderInitialiser;
import org.apache.qpid.server.security.auth.sasl.UsernamePrincipal;
+import org.apache.qpid.server.security.auth.sasl.amqplain.AmqPlainInitialiser;
import org.apache.qpid.server.security.auth.sasl.crammd5.CRAMMD5Initialiser;
import org.apache.qpid.server.security.auth.sasl.plain.PlainInitialiser;
@@ -52,13 +53,19 @@ public class PropertiesPrincipalDatabase
* Create Authenticators for Properties Principal Database.
*/
+ // Accept AMQPlain incomming and compare it to the file.
+ AmqPlainInitialiser amqplain = new AmqPlainInitialiser();
+ amqplain.initialise(this);
+
// Accept MD5 incomming and use plain comparison with the file
PlainInitialiser cram = new PlainInitialiser();
cram.initialise(this);
+
// Accept Plain incomming and hash it for comparison to the file.
CRAMMD5Initialiser plain = new CRAMMD5Initialiser();
plain.initialise(this, CRAMMD5Initialiser.HashDirection.INCOMMING);
+ _saslServers.put(amqplain.getMechanismName(), amqplain);
_saslServers.put(plain.getMechanismName(), cram);
_saslServers.put(cram.getMechanismName(), plain);
}
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HashedServerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HashedServerFactory.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HashedServerFactory.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HashedServerFactory.java Wed Oct 13 15:05:29 2010
@@ -30,7 +30,7 @@ import javax.security.sasl.SaslServerFac
public class CRAMMD5HashedServerFactory implements SaslServerFactory
{
- public SaslServer createSaslServer(String mechanism, String protocol, String serverName, Map<String, ?> props,
+ public SaslServer createSaslServer(String mechanism, String protocol, String serverName, Map props,
CallbackHandler cbh) throws SaslException
{
if (mechanism.equals(CRAMMD5HashedSaslServer.MECHANISM))
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexServerFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexServerFactory.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexServerFactory.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexServerFactory.java Wed Oct 13 15:05:29 2010
@@ -30,7 +30,7 @@ import javax.security.sasl.SaslServerFac
public class CRAMMD5HexServerFactory implements SaslServerFactory
{
- public SaslServer createSaslServer(String mechanism, String protocol, String serverName, Map<String, ?> props,
+ public SaslServer createSaslServer(String mechanism, String protocol, String serverName, Map props,
CallbackHandler cbh) throws SaslException
{
if (mechanism.equals(CRAMMD5HexSaslServer.MECHANISM))
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/subscription/Subscription_0_10.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/subscription/Subscription_0_10.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/subscription/Subscription_0_10.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/subscription/Subscription_0_10.java Wed Oct 13 15:05:29 2010
@@ -96,7 +96,6 @@ public class Subscription_0_10 implement
private FlowCreditManager_0_10 _creditManager;
-
private StateListener _stateListener = new StateListener()
{
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java Wed Oct 13 15:05:29 2010
@@ -23,6 +23,9 @@ package org.apache.qpid.server.transport
import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.*;
import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
import org.apache.qpid.AMQException;
import org.apache.qpid.protocol.AMQConstant;
@@ -33,22 +36,38 @@ import org.apache.qpid.server.logging.ac
import org.apache.qpid.server.logging.messages.ConnectionMessages;
import org.apache.qpid.server.protocol.AMQConnectionModel;
import org.apache.qpid.server.protocol.AMQSessionModel;
+import org.apache.qpid.server.protocol.BrokerReceiver;
import org.apache.qpid.server.virtualhost.VirtualHost;
import org.apache.qpid.transport.Connection;
+import org.apache.qpid.transport.ConnectionCloseCode;
import org.apache.qpid.transport.ExecutionErrorCode;
import org.apache.qpid.transport.ExecutionException;
import org.apache.qpid.transport.Method;
+import org.apache.qpid.transport.Session;
public class ServerConnection extends Connection implements AMQConnectionModel, LogSubject
{
private ConnectionConfig _config;
private Runnable _onOpenTask;
- public ServerConnection()
+ private long _connectionId;
+
+ public long getConnectionId()
+ {
+ return _connectionId;
+ }
+
+ public ServerConnection(long connectionId)
{
+ _connectionId = connectionId;
CurrentActor.set(GenericActor.getInstance(this));
}
+ public UUID getId()
+ {
+ return _config.getId();
+ }
+
@Override
protected void invoke(Method method)
{
@@ -97,6 +116,7 @@ public class ServerConnection extends Co
public void setVirtualHost(VirtualHost virtualHost)
{
_virtualHost = virtualHost;
+ _virtualHost.getConnectionRegistry().registerConnection(this);
}
public void setConnectionConfig(final ConnectionConfig config)
@@ -132,8 +152,14 @@ public class ServerConnection extends Co
((ServerSession)session).close();
}
+
+ public LogSubject getLogSubject()
+ {
+ return (LogSubject) this;
+ }
- public String toLogString() {
+ public String toLogString()
+ {
boolean hasVirtualHost = (null != this.getVirtualHost());
boolean hasPrincipal = (null != getAuthorizationID());
@@ -167,4 +193,30 @@ public class ServerConnection extends Co
}
}
+ @Override
+ public void close(AMQConstant cause, String message) throws AMQException
+ {
+ ConnectionCloseCode replyCode = ConnectionCloseCode.NORMAL;
+ try
+ {
+ replyCode = ConnectionCloseCode.get(cause.getCode());
+ }
+ catch (IllegalArgumentException iae)
+ {
+ // Ignore
+ }
+ close(replyCode, message);
+ getVirtualHost().getConnectionRegistry().deregisterConnection(this);
+ }
+
+ @Override
+ public List<AMQSessionModel> getSessionModels()
+ {
+ List<AMQSessionModel> sessions = new ArrayList<AMQSessionModel>();
+ for (Session ssn : getChannels())
+ {
+ sessions.add((AMQSessionModel) ssn);
+ }
+ return sessions;
+ }
}
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java Wed Oct 13 15:05:29 2010
@@ -20,18 +20,30 @@
*/
package org.apache.qpid.server.transport;
-import org.apache.qpid.transport.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import javax.security.sasl.SaslException;
+import javax.security.sasl.SaslServer;
+
import org.apache.qpid.server.logging.actors.CurrentActor;
import org.apache.qpid.server.logging.actors.GenericActor;
-import org.apache.qpid.common.ClientProperties;
-import org.apache.qpid.protocol.ProtocolEngine;
-import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.registry.IApplicationRegistry;
+import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.virtualhost.VirtualHost;
-
-import javax.security.sasl.SaslServer;
-import javax.security.sasl.SaslException;
-import java.util.*;
+import org.apache.qpid.transport.Binary;
+import org.apache.qpid.transport.Connection;
+import org.apache.qpid.transport.ConnectionClose;
+import org.apache.qpid.transport.ConnectionCloseCode;
+import org.apache.qpid.transport.ConnectionOpen;
+import org.apache.qpid.transport.ConnectionOpenOk;
+import org.apache.qpid.transport.ServerDelegate;
+import org.apache.qpid.transport.SessionAttach;
+import org.apache.qpid.transport.SessionDelegate;
public class ServerConnectionDelegate extends ServerDelegate
{
@@ -106,7 +118,7 @@ public class ServerConnectionDelegate ex
{
sconn.setVirtualHost(vhost);
- if (!vhost.getSecurityManager().accessVirtualhost(vhostName, ((ProtocolEngine) sconn.getConfig()).getRemoteAddress()))
+ if (!vhost.getSecurityManager().accessVirtualhost(vhostName, sconn.getConfig().getAddress()))
{
sconn.invoke(new ConnectionClose(ConnectionCloseCode.CONNECTION_FORCED, "Permission denied '"+vhostName+"'"));
sconn.setState(Connection.State.CLOSING);
@@ -123,6 +135,7 @@ public class ServerConnectionDelegate ex
sconn.invoke(new ConnectionClose(ConnectionCloseCode.INVALID_PATH, "Unknown virtualhost '"+vhostName+"'"));
sconn.setState(Connection.State.CLOSING);
}
+
}
@Override
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSession.java Wed Oct 13 15:05:29 2010
@@ -20,13 +20,26 @@
*/
package org.apache.qpid.server.transport;
-import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.CHANNEL_FORMAT;
-import static org.apache.qpid.util.Serial.gt;
+import static org.apache.qpid.server.logging.subjects.LogSubjectFormat.*;
+import static org.apache.qpid.util.Serial.*;
-import com.sun.security.auth.UserPrincipal;
+import java.lang.ref.WeakReference;
+import java.security.Principal;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.qpid.AMQException;
-import org.apache.qpid.protocol.ProtocolEngine;
+import org.apache.qpid.protocol.AMQConstant;
import org.apache.qpid.server.configuration.ConfigStore;
import org.apache.qpid.server.configuration.ConfiguredObject;
import org.apache.qpid.server.configuration.ConnectionConfig;
@@ -37,6 +50,9 @@ import org.apache.qpid.server.logging.ac
import org.apache.qpid.server.logging.actors.GenericActor;
import org.apache.qpid.server.logging.messages.ChannelMessages;
import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.protocol.AMQConnectionModel;
+import org.apache.qpid.server.protocol.AMQSessionModel;
+import org.apache.qpid.server.protocol.ProtocolEngine_0_10;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.BaseQueue;
import org.apache.qpid.server.queue.QueueEntry;
@@ -47,8 +63,6 @@ import org.apache.qpid.server.txn.AutoCo
import org.apache.qpid.server.txn.LocalTransaction;
import org.apache.qpid.server.txn.ServerTransaction;
import org.apache.qpid.server.virtualhost.VirtualHost;
-import org.apache.qpid.server.protocol.AMQSessionModel;
-import org.apache.qpid.server.protocol.AMQConnectionModel;
import org.apache.qpid.transport.Binary;
import org.apache.qpid.transport.Connection;
import org.apache.qpid.transport.MessageTransfer;
@@ -57,25 +71,15 @@ import org.apache.qpid.transport.Range;
import org.apache.qpid.transport.RangeSet;
import org.apache.qpid.transport.Session;
import org.apache.qpid.transport.SessionDelegate;
-import org.apache.qpid.transport.Session.State;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import java.lang.ref.WeakReference;
-import java.security.Principal;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicLong;
+import com.sun.security.auth.UserPrincipal;
public class ServerSession extends Session implements PrincipalHolder, SessionConfig, AMQSessionModel, LogSubject
{
+ private static final Logger _logger = LoggerFactory.getLogger(ServerSession.class);
+
private static final String NULL_DESTINTATION = UUID.randomUUID().toString();
private final UUID _id;
@@ -110,6 +114,7 @@ public class ServerSession extends Sessi
private final AtomicLong _txnCommits = new AtomicLong(0);
private final AtomicLong _txnRejects = new AtomicLong(0);
private final AtomicLong _txnCount = new AtomicLong(0);
+ private final AtomicLong _txnUpdateTime = new AtomicLong(0);
private Principal _principal;
@@ -140,7 +145,7 @@ public class ServerSession extends Sessi
_connectionConfig = connConfig;
_transaction = new AutoCommitTransaction(this.getMessageStore());
_principal = new UserPrincipal(connection.getAuthorizationID());
- _reference = new WeakReference(this);
+ _reference = new WeakReference<Session>(this);
_id = getConfigStore().createId();
getConfigStore().addConfiguredObject(this);
}
@@ -188,6 +193,7 @@ public class ServerSession extends Sessi
});
incrementOutstandingTxnsIfNecessary();
+ updateTransactionalActivity();
}
@@ -376,6 +382,7 @@ public class ServerSession extends Sessi
entry.release();
}
});
+ updateTransactionalActivity();
}
public Collection<Subscription_0_10> getSubscriptions()
@@ -424,6 +431,11 @@ public class ServerSession extends Sessi
// theory
return !(_transaction instanceof AutoCommitTransaction);
}
+
+ public boolean inTransaction()
+ {
+ return isTransactional() && _txnUpdateTime.get() > 0 && _transaction.getTransactionStartTime() > 0;
+ }
public void selectTx()
{
@@ -470,6 +482,17 @@ public class ServerSession extends Sessi
}
}
+ /**
+ * Update last transaction activity timestamp
+ */
+ public void updateTransactionalActivity()
+ {
+ if (isTransactional())
+ {
+ _txnUpdateTime.set(System.currentTimeMillis());
+ }
+ }
+
public Long getTxnStarts()
{
return _txnStarts.get();
@@ -600,18 +623,48 @@ public class ServerSession extends Sessi
return (LogSubject) this;
}
+ public void checkTransactionStatus(long openWarn, long openClose, long idleWarn, long idleClose) throws AMQException
+ {
+ if (inTransaction())
+ {
+ long currentTime = System.currentTimeMillis();
+ long openTime = currentTime - _transaction.getTransactionStartTime();
+ long idleTime = currentTime - _txnUpdateTime.get();
+
+ // Log a warning on idle or open transactions
+ if (idleWarn > 0L && idleTime > idleWarn)
+ {
+ CurrentActor.get().message(getLogSubject(), ChannelMessages.IDLE_TXN(openTime));
+ _logger.warn("IDLE TRANSACTION ALERT " + getLogSubject().toString() + " " + idleTime + " ms");
+ }
+ else if (openWarn > 0L && openTime > openWarn)
+ {
+ CurrentActor.get().message(getLogSubject(), ChannelMessages.OPEN_TXN(openTime));
+ _logger.warn("OPEN TRANSACTION ALERT " + getLogSubject().toString() + " " + openTime + " ms");
+ }
+
+ // Close connection for idle or open transactions that have timed out
+ if (idleClose > 0L && idleTime > idleClose)
+ {
+ getConnectionModel().closeSession(this, AMQConstant.RESOURCE_ERROR, "Idle transaction timed out");
+ }
+ else if (openClose > 0L && openTime > openClose)
+ {
+ getConnectionModel().closeSession(this, AMQConstant.RESOURCE_ERROR, "Open transaction timed out");
+ }
+ }
+ }
+
@Override
public String toLogString()
{
return " [" +
MessageFormat.format(CHANNEL_FORMAT,
- getConnection().getConnectionId(),
+ ((ServerConnection) getConnection()).getConnectionId(),
getClientID(),
- ((ProtocolEngine) _connectionConfig).getRemoteAddress().toString(),
+ ((ProtocolEngine_0_10) getConnectionConfig()).getAddress(),
getVirtualHost().getName(),
getChannel())
+ "] ";
-
}
-
}
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java Wed Oct 13 15:05:29 2010
@@ -234,7 +234,7 @@ public class ServerSessionDelegate exten
FlowCreditManager_0_10 creditManager = new WindowCreditManager(0L,0L);
FilterManager filterManager = null;
- try
+ try
{
filterManager = FilterManagerFactory.createManager(method.getArguments());
}
@@ -371,7 +371,6 @@ public class ServerSessionDelegate exten
}
ssn.processed(xfr);
-
}
@Override
@@ -383,6 +382,8 @@ public class ServerSessionDelegate exten
if(sub == null)
{
+ // FIXME this causes problems during failover if a queue browser is open and is then closed (with unbrowsed messages)
+ // See QueueBrowser*Test methods testFailoverWithQueueBrowser and testFailoverAsQueueBrowserCreated
exception(session, method, ExecutionErrorCode.NOT_FOUND, "not-found: destination '"+destination+"'");
}
else
@@ -482,8 +483,8 @@ public class ServerSessionDelegate exten
exchange = exchangeFactory.createExchange(method.getExchange(),
method.getType(),
method.getDurable(),
- method.getAutoDelete());
-
+ method.getAutoDelete(),
+ method.getArguments());
String alternateExchangeName = method.getAlternateExchange();
if(alternateExchangeName != null && alternateExchangeName.length() != 0)
{
@@ -496,7 +497,6 @@ public class ServerSessionDelegate exten
DurableConfigurationStore store = virtualHost.getDurableConfigurationStore();
store.createExchange(exchange);
}
-
exchangeRegistry.registerExchange(exchange);
}
catch(AMQUnknownExchangeType e)
@@ -645,6 +645,7 @@ public class ServerSessionDelegate exten
result.setDurable(exchange.isDurable());
result.setType(exchange.getTypeShortString().toString());
result.setNotFound(false);
+ result.setArguments(exchange.getArguments());
}
else
{
@@ -893,11 +894,9 @@ public class ServerSessionDelegate exten
synchronized (queueRegistry)
{
-
if (((queue = queueRegistry.getQueue(queueName)) == null))
{
-
- if (method.getPassive())
+ if (method.hasPassive() && method.getPassive())
{
String description = "Queue: " + queueName + " not found on VirtualHost(" + virtualHost + ").";
ExecutionErrorCode errorCode = ExecutionErrorCode.NOT_FOUND;
@@ -910,21 +909,25 @@ public class ServerSessionDelegate exten
{
try
{
- queue = createQueue(queueName, method, virtualHost, (ServerSession)session);
- if(method.getExclusive())
+ final ServerSession s = (ServerSession) session;
+ final AMQQueue q = createQueue(queueName, method, virtualHost, s);
+
+ if (method.hasExclusive() && method.getExclusive())
{
- queue.setExclusive(true);
+ q.setExclusive(true);
+ q.setExclusiveOwningSession(s);
+ q.setPrincipalHolder(s);
}
else if(method.getAutoDelete())
{
- queue.setDeleteOnNoConsumers(true);
+ q.setDeleteOnNoConsumers(true);
}
final String alternateExchangeName = method.getAlternateExchange();
if(alternateExchangeName != null && alternateExchangeName.length() != 0)
{
Exchange alternate = getExchange(session, alternateExchangeName);
- queue.setAlternateExchange(alternate);
+ q.setAlternateExchange(alternate);
}
if(method.hasArguments() && method.getArguments() != null)
@@ -934,13 +937,13 @@ public class ServerSessionDelegate exten
Object no_local = method.getArguments().get("no-local");
if(no_local instanceof Boolean && ((Boolean)no_local))
{
- queue.setNoLocal(true);
+ q.setNoLocal(true);
}
}
}
- if (queue.isDurable() && !queue.isAutoDelete())
+ if (q.isDurable() && !q.isAutoDelete())
{
if(method.hasArguments() && method.getArguments() != null)
{
@@ -950,80 +953,73 @@ public class ServerSessionDelegate exten
{
ftArgs.put(new AMQShortString(entry.getKey()), entry.getValue());
}
- store.createQueue(queue, ftArgs);
+ store.createQueue(q, ftArgs);
}
else
{
- store.createQueue(queue);
+ store.createQueue(q);
}
}
- queueRegistry.registerQueue(queue);
+ queueRegistry.registerQueue(q);
boolean autoRegister = ApplicationRegistry.getInstance().getConfiguration().getQueueAutoRegister();
if (autoRegister)
{
-
ExchangeRegistry exchangeRegistry = getExchangeRegistry(session);
Exchange defaultExchange = exchangeRegistry.getDefaultExchange();
- virtualHost.getBindingFactory().addBinding(queueName, queue, defaultExchange, null);
-
+ virtualHost.getBindingFactory().addBinding(queueName, q, defaultExchange, null);
}
- if(method.hasAutoDelete()
- && method.getAutoDelete()
- && method.hasExclusive()
- && method.getExclusive())
+ if (method.hasAutoDelete() && method.getAutoDelete() &&
+ method.hasExclusive() && method.getExclusive())
{
- final AMQQueue q = queue;
final ServerSession.Task deleteQueueTask = new ServerSession.Task()
+ {
+ public void doTask(ServerSession session)
{
- public void doTask(ServerSession session)
+ try
{
- try
- {
- q.delete();
- }
- catch (AMQException e)
- {
- exception(session, method, e, "Cannot delete '" + method.getQueue());
- }
+ q.delete();
}
- };
- final ServerSession s = (ServerSession) session;
- s.addSessionCloseTask(deleteQueueTask);
- queue.addQueueDeleteTask(new AMQQueue.Task()
- {
- public void doTask(AMQQueue queue) throws AMQException
+ catch (AMQException e)
{
- s.removeSessionCloseTask(deleteQueueTask);
+ exception(session, method, e, "Cannot delete '" + method.getQueue());
}
- });
- }
- else if(method.getExclusive())
- {
- final AMQQueue q = queue;
- final ServerSession.Task removeExclusive = new ServerSession.Task()
- {
-
- public void doTask(ServerSession session)
- {
- q.setPrincipalHolder(null);
- q.setExclusiveOwningSession(null);
}
};
- final ServerSession s = (ServerSession) session;
- s.addSessionCloseTask(removeExclusive);
- queue.addQueueDeleteTask(new AMQQueue.Task()
+ s.addSessionCloseTask(deleteQueueTask);
+ q.addQueueDeleteTask(new AMQQueue.Task()
{
-
public void doTask(AMQQueue queue) throws AMQException
{
- s.removeSessionCloseTask(removeExclusive);
+ s.removeSessionCloseTask(deleteQueueTask);
}
});
}
+ else if (method.hasExclusive() && method.getExclusive())
+ {
+ if (!method.getDurable())
+ {
+ final ServerSession.Task removeExclusive = new ServerSession.Task()
+ {
+ public void doTask(ServerSession session)
+ {
+ q.setPrincipalHolder(null);
+ q.setExclusiveOwningSession(null);
+ }
+ };
+ s.addSessionCloseTask(removeExclusive);
+ q.addQueueDeleteTask(new AMQQueue.Task()
+ {
+ public void doTask(AMQQueue queue) throws AMQException
+ {
+ s.removeSessionCloseTask(removeExclusive);
+ }
+ });
+ }
+ }
}
catch (AMQException e)
{
@@ -1033,14 +1029,14 @@ public class ServerSessionDelegate exten
}
else if (method.getExclusive() && (queue.getPrincipalHolder() != null && !queue.getPrincipalHolder().equals(session)))
{
- String description = "Cannot declare queue('" + queueName + "'),"
- + " as exclusive queue with same name "
- + "declared on another session";
- ExecutionErrorCode errorCode = ExecutionErrorCode.RESOURCE_LOCKED;
-
- exception(session, method, errorCode, description);
-
- return;
+ String description = "Cannot declare queue('" + queueName + "'),"
+ + " as exclusive queue with same name "
+ + "declared on another session";
+ ExecutionErrorCode errorCode = ExecutionErrorCode.RESOURCE_LOCKED;
+
+ exception(session, method, errorCode, description);
+
+ return;
}
}
}
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/AutoCommitTransaction.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/AutoCommitTransaction.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/AutoCommitTransaction.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/AutoCommitTransaction.java Wed Oct 13 15:05:29 2010
@@ -40,7 +40,11 @@ public class AutoCommitTransaction imple
{
_transactionLog = transactionLog;
}
-
+
+ public long getTransactionStartTime()
+ {
+ return 0L;
+ }
public void addPostCommitAction(Action postCommitAction)
{
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java Wed Oct 13 15:05:29 2010
@@ -20,30 +20,43 @@ package org.apache.qpid.server.txn;
*
*/
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
-import org.apache.qpid.server.queue.AMQQueue;
-import org.apache.qpid.server.queue.QueueEntry;
-import org.apache.qpid.server.queue.BaseQueue;
+import org.apache.qpid.AMQException;
import org.apache.qpid.server.message.EnqueableMessage;
import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.queue.AMQQueue;
+import org.apache.qpid.server.queue.BaseQueue;
+import org.apache.qpid.server.queue.QueueEntry;
import org.apache.qpid.server.store.TransactionLog;
-import org.apache.qpid.AMQException;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class LocalTransaction implements ServerTransaction
{
+ private static final Logger _log = LoggerFactory.getLogger(LocalTransaction.class);
private final List<Action> _postCommitActions = new ArrayList<Action>();
private volatile TransactionLog.Transaction _transaction;
private TransactionLog _transactionLog;
+ private long _txnStartTime = 0L;
public LocalTransaction(TransactionLog transactionLog)
{
_transactionLog = transactionLog;
}
+
+ public boolean inTransaction()
+ {
+ return _transaction != null;
+ }
+
+ public long getTransactionStartTime()
+ {
+ return _txnStartTime;
+ }
public void addPostCommitAction(Action postCommitAction)
{
@@ -56,7 +69,6 @@ public class LocalTransaction implements
{
try
{
-
beginTranIfNecessary();
_transaction.dequeueMessage(queue, message.getMessageNumber());
@@ -73,7 +85,6 @@ public class LocalTransaction implements
{
try
{
-
for(QueueEntry entry : queueEntries)
{
ServerMessage message = entry.getMessage();
@@ -91,7 +102,6 @@ public class LocalTransaction implements
tidyUpOnError(e);
}
_postCommitActions.add(postCommitAction);
-
}
private void tidyUpOnError(Exception e)
@@ -113,8 +123,7 @@ public class LocalTransaction implements
{
// TODO could try to chain the information to the original error
}
- _transaction = null;
- _postCommitActions.clear();
+ resetDetails();
}
throw new RuntimeException(e);
@@ -150,13 +159,14 @@ public class LocalTransaction implements
}
}
_postCommitActions.add(postCommitAction);
-
-
}
public void enqueue(List<? extends BaseQueue> queues, EnqueableMessage message, Action postCommitAction)
{
-
+ if (_txnStartTime == 0L)
+ {
+ _txnStartTime = System.currentTimeMillis();
+ }
if(message.isPersistent())
{
@@ -170,11 +180,8 @@ public class LocalTransaction implements
break;
}
}
-
-
}
-
try
{
for(BaseQueue queue : queues)
@@ -192,8 +199,6 @@ public class LocalTransaction implements
}
}
_postCommitActions.add(postCommitAction);
-
-
}
public void commit()
@@ -202,7 +207,6 @@ public class LocalTransaction implements
{
if(_transaction != null)
{
-
_transaction.commitTran();
}
@@ -222,18 +226,14 @@ public class LocalTransaction implements
}
finally
{
- _transaction = null;
- _postCommitActions.clear();
+ resetDetails();
}
-
}
public void rollback()
{
-
try
{
-
if(_transaction != null)
{
@@ -257,9 +257,15 @@ public class LocalTransaction implements
}
finally
{
- _transaction = null;
- _postCommitActions.clear();
+ resetDetails();
}
}
}
+
+ private void resetDetails()
+ {
+ _transaction = null;
+ _postCommitActions.clear();
+ _txnStartTime = 0L;
+ }
}
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/ServerTransaction.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/ServerTransaction.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/ServerTransaction.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/txn/ServerTransaction.java Wed Oct 13 15:05:29 2010
@@ -31,9 +31,13 @@ public interface ServerTransaction
{
void addPostCommitAction(Action postCommitAction);
-
-
-
+
+ /**
+ * Return the time the current transaction started.
+ *
+ * @return the time this transaction started or 0 if not in a transaction
+ */
+ long getTransactionStartTime();
public static interface Action
{
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java Wed Oct 13 15:05:29 2010
@@ -20,28 +20,25 @@
*/
package org.apache.qpid.server.virtualhost;
+import java.util.UUID;
+
import org.apache.qpid.common.Closeable;
+import org.apache.qpid.server.binding.BindingFactory;
+import org.apache.qpid.server.configuration.ConfigStore;
+import org.apache.qpid.server.configuration.VirtualHostConfig;
+import org.apache.qpid.server.configuration.VirtualHostConfiguration;
import org.apache.qpid.server.connection.IConnectionRegistry;
+import org.apache.qpid.server.exchange.ExchangeFactory;
+import org.apache.qpid.server.exchange.ExchangeRegistry;
import org.apache.qpid.server.federation.BrokerLink;
-import org.apache.qpid.server.configuration.VirtualHostConfiguration;
-import org.apache.qpid.server.configuration.VirtualHostConfig;
-import org.apache.qpid.server.configuration.ConfigStore;
+import org.apache.qpid.server.management.ManagedObject;
import org.apache.qpid.server.queue.QueueRegistry;
-import org.apache.qpid.server.exchange.ExchangeRegistry;
-import org.apache.qpid.server.exchange.ExchangeFactory;
-import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.server.store.TransactionLog;
-import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.registry.IApplicationRegistry;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
-import org.apache.qpid.server.management.ManagedObject;
-import org.apache.qpid.server.registry.IApplicationRegistry;
-import org.apache.qpid.server.binding.BindingFactory;
-
-import java.util.List;
-import java.util.UUID;
-import java.util.TimerTask;
-import java.util.concurrent.FutureTask;
+import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.server.store.MessageStore;
+import org.apache.qpid.server.store.TransactionLog;
public interface VirtualHost extends DurableConfigurationStore.Source, VirtualHostConfig, Closeable
{
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostConfigRecoveryHandler.java Wed Oct 13 15:05:29 2010
@@ -46,6 +46,7 @@ import org.apache.log4j.Logger;
import java.nio.ByteBuffer;
+import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
@@ -133,7 +134,7 @@ public class VirtualHostConfigRecoveryHa
exchange = _virtualHost.getExchangeRegistry().getExchange(exchangeNameSS);
if (exchange == null)
{
- exchange = _virtualHost.getExchangeFactory().createExchange(exchangeNameSS, new AMQShortString(type), true, autoDelete, 0);
+ exchange = _virtualHost.getExchangeFactory().createExchange(exchangeNameSS, new AMQShortString(type), true, autoDelete, Collections.EMPTY_MAP, 0);
_virtualHost.getExchangeRegistry().registerExchange(exchange);
}
}
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java Wed Oct 13 15:05:29 2010
@@ -24,7 +24,6 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.TimerTask;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -36,7 +35,6 @@ import org.apache.commons.configuration.
import org.apache.commons.configuration.ConfigurationException;
import org.apache.log4j.Logger;
import org.apache.qpid.AMQException;
-import org.apache.qpid.AMQInternalException;
import org.apache.qpid.AMQStoreException;
import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.framing.FieldTable;
@@ -63,6 +61,8 @@ import org.apache.qpid.server.logging.me
import org.apache.qpid.server.logging.subjects.MessageStoreLogSubject;
import org.apache.qpid.server.management.AMQManagedObject;
import org.apache.qpid.server.management.ManagedObject;
+import org.apache.qpid.server.protocol.AMQConnectionModel;
+import org.apache.qpid.server.protocol.AMQSessionModel;
import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.AMQQueueFactory;
import org.apache.qpid.server.queue.DefaultQueueRegistry;
@@ -281,19 +281,30 @@ public class VirtualHostImpl implements
// house keeping task from running.
}
}
+ for (AMQConnectionModel connection : getConnectionRegistry().getConnections())
+ {
+ _logger.debug("Checking for long running open transactions on connection " + connection);
+ for (AMQSessionModel session : connection.getSessionModels())
+ {
+ _logger.debug("Checking for long running open transactions on session " + session);
+ try
+ {
+ session.checkTransactionStatus(_configuration.getTransactionTimeoutOpenWarn(),
+ _configuration.getTransactionTimeoutOpenClose(),
+ _configuration.getTransactionTimeoutIdleWarn(),
+ _configuration.getTransactionTimeoutIdleClose());
+ }
+ catch (Exception e)
+ {
+ _logger.error("Exception in housekeeping for connection: " + connection.toString(), e);
+ }
+ }
+ }
}
}
scheduleHouseKeepingTask(period, new ExpiredMessagesTask(this));
- class ForceChannelClosuresTask extends TimerTask
- {
- public void run()
- {
- _connectionRegistry.expireClosedChannels();
- }
- }
-
Map<String, VirtualHostPluginFactory> plugins =
ApplicationRegistry.getInstance().getPluginManager().getVirtualHostPlugins();
@@ -433,7 +444,7 @@ public class VirtualHostImpl implements
boolean durable = exchangeConfiguration.getDurable();
boolean autodelete = exchangeConfiguration.getAutoDelete();
- Exchange newExchange = _exchangeFactory.createExchange(exchangeName, type, durable, autodelete, 0);
+ Exchange newExchange = _exchangeFactory.createExchange(exchangeName, type, durable, autodelete, Collections.EMPTY_MAP, 0);
_exchangeRegistry.registerExchange(newExchange);
if (newExchange.isDurable())
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/policies/TopicDeletePolicy.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/policies/TopicDeletePolicy.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/policies/TopicDeletePolicy.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/plugins/policies/TopicDeletePolicy.java Wed Oct 13 15:05:29 2010
@@ -88,9 +88,7 @@ public class TopicDeletePolicy implement
{
CurrentActor.get().message(owner.getLogSubject(),TopicDeletePolicyMessages.DISCONNECTING());
// Close the consumer . this will cause autoDelete Queues to be purged
- owner.getConnectionModel().
- closeSession(owner, AMQConstant.RESOURCE_ERROR,
- "Consuming to slow.");
+ owner.getConnectionModel().closeSession(owner, AMQConstant.RESOURCE_ERROR, "Consuming too slow.");
// Actively delete non autoDelete queues if deletePersistent is set
if (!q.isAutoDelete() && (_configuration != null && _configuration.deletePersistent()))
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/log4j/xml/QpidLog4JConfiguratorTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/log4j/xml/QpidLog4JConfiguratorTest.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/log4j/xml/QpidLog4JConfiguratorTest.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/log4j/xml/QpidLog4JConfiguratorTest.java Wed Oct 13 15:05:29 2010
@@ -27,10 +27,9 @@ import java.io.FileWriter;
import java.io.IOException;
import org.apache.log4j.xml.QpidLog4JConfigurator.IllegalLoggerLevelException;
+import org.apache.qpid.test.utils.QpidTestCase;
-import junit.framework.TestCase;
-
-public class QpidLog4JConfiguratorTest extends TestCase
+public class QpidLog4JConfiguratorTest extends QpidTestCase
{
private static final String NEWLINE = System.getProperty("line.separator");
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/ExtractResendAndRequeueTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/ExtractResendAndRequeueTest.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/ExtractResendAndRequeueTest.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/ExtractResendAndRequeueTest.java Wed Oct 13 15:05:29 2010
@@ -20,24 +20,24 @@
*/
package org.apache.qpid.server;
-import junit.framework.TestCase;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.apache.qpid.AMQException;
import org.apache.qpid.server.ack.UnacknowledgedMessageMapImpl;
-import org.apache.qpid.server.queue.QueueEntry;
-import org.apache.qpid.server.queue.SimpleQueueEntryList;
-import org.apache.qpid.server.queue.MockAMQMessage;
+import org.apache.qpid.server.message.AMQMessage;
import org.apache.qpid.server.queue.AMQQueue;
+import org.apache.qpid.server.queue.MockAMQMessage;
import org.apache.qpid.server.queue.MockAMQQueue;
-import org.apache.qpid.server.message.AMQMessage;
+import org.apache.qpid.server.queue.QueueEntry;
import org.apache.qpid.server.queue.QueueEntryIterator;
-import org.apache.qpid.server.subscription.Subscription;
-import org.apache.qpid.server.subscription.MockSubscription;
+import org.apache.qpid.server.queue.SimpleQueueEntryList;
import org.apache.qpid.server.store.MemoryMessageStore;
import org.apache.qpid.server.store.MessageStore;
-import org.apache.qpid.AMQException;
-
-import java.util.Map;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
+import org.apache.qpid.server.subscription.MockSubscription;
+import org.apache.qpid.server.subscription.Subscription;
+import org.apache.qpid.test.utils.QpidTestCase;
/**
* QPID-1385 : Race condition between added to unacked map and resending due to a rollback.
@@ -56,7 +56,7 @@ import java.util.LinkedList;
* delivery thread will be in progress while the rollback method is called. Hopefully this will cause the
* deliveryTag to be lost
*/
-public class ExtractResendAndRequeueTest extends TestCase
+public class ExtractResendAndRequeueTest extends QpidTestCase
{
UnacknowledgedMessageMapImpl _unacknowledgedMessageMap;
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/RunBrokerWithCommand.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/RunBrokerWithCommand.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/RunBrokerWithCommand.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/RunBrokerWithCommand.java Wed Oct 13 15:05:29 2010
@@ -27,6 +27,7 @@ import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
+import java.util.Arrays;
public class RunBrokerWithCommand
{
@@ -35,11 +36,8 @@ public class RunBrokerWithCommand
//Start the broker
try
{
- String[] fudge = args.clone();
-
- // Override the first value which is the command we are going to run later.
- fudge[0] = "-v";
- new Main(fudge).startup();
+ String[] copy = Arrays.copyOfRange(args, 1, args.length);
+ Main.main(copy);
}
catch (Exception e)
{
Modified: qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/SelectorParserTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/SelectorParserTest.java?rev=1022127&r1=1022126&r2=1022127&view=diff
==============================================================================
--- qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/SelectorParserTest.java (original)
+++ qpid/branches/grkvlt-network-20101013/qpid/java/broker/src/test/java/org/apache/qpid/server/SelectorParserTest.java Wed Oct 13 15:05:29 2010
@@ -1,9 +1,4 @@
-package org.apache.qpid.server;
-
-import junit.framework.TestCase;
-import org.apache.qpid.server.filter.JMSSelectorFilter;
-import org.apache.qpid.AMQException;/*
- *
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -20,10 +15,14 @@ import org.apache.qpid.AMQException;/*
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
+package org.apache.qpid.server;
+
+import org.apache.qpid.AMQException;
+import org.apache.qpid.server.filter.JMSSelectorFilter;
+import org.apache.qpid.test.utils.QpidTestCase;
-public class SelectorParserTest extends TestCase
+public class SelectorParserTest extends QpidTestCase
{
public void testSelectorWithHyphen()
{
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org