You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2009/08/27 14:27:49 UTC

svn commit: r808396 - in /qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server: exchange/ transport/

Author: rgodfrey
Date: Thu Aug 27 12:27:48 2009
New Revision: 808396

URL: http://svn.apache.org/viewvc?rev=808396&view=rev
Log:
Exchange command updates

Modified:
    qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java
    qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java
    qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java
    qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java
    qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java

Modified: qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java?rev=808396&r1=808395&r2=808396&view=diff
==============================================================================
--- qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java (original)
+++ qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java Thu Aug 27 12:27:48 2009
@@ -59,6 +59,20 @@
         return _exchangeClassMap.values();
     }
 
+    public Exchange createExchange(String exchange, String type, boolean durable, boolean autoDelete)
+            throws AMQException
+    {
+        ExchangeType<? extends Exchange> exchType = _exchangeClassMap.get(type);
+        if (exchType == null)
+        {
+
+            throw new AMQUnknownExchangeType("Unknown exchange type: " + type,null);
+        }
+        Exchange e = exchType.newInstance(_host, (new AMQShortString(exchange)).intern(), durable, 0, autoDelete);
+        return e;
+
+    }
+
     public Exchange createExchange(AMQShortString exchange, AMQShortString type, boolean durable, boolean autoDelete,
                                    int ticket)
             throws AMQException
@@ -73,7 +87,6 @@
         return e;
     }
 
-    @Override
     public void initialise(VirtualHostConfiguration hostConfig)
     {
 

Modified: qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java?rev=808396&r1=808395&r2=808396&view=diff
==============================================================================
--- qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java (original)
+++ qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeRegistry.java Thu Aug 27 12:27:48 2009
@@ -108,6 +108,11 @@
         }
     }
 
+    public void unregisterExchange(String name, boolean inUse) throws AMQException
+    {
+        unregisterExchange(new AMQShortString(name), inUse);
+    }
+
     public Exchange getExchange(AMQShortString name)
     {
         if ((name == null) || name.length() == 0)

Modified: qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java?rev=808396&r1=808395&r2=808396&view=diff
==============================================================================
--- qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java (original)
+++ qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java Thu Aug 27 12:27:48 2009
@@ -38,4 +38,6 @@
     void initialise(VirtualHostConfiguration hostConfig);
 
     Collection<ExchangeType<? extends Exchange>> getRegisteredTypes();
+
+    Exchange createExchange(String exchange, String type, boolean durable, boolean autoDelete) throws AMQException;
 }

Modified: qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java?rev=808396&r1=808395&r2=808396&view=diff
==============================================================================
--- qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java (original)
+++ qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeRegistry.java Thu Aug 27 12:27:48 2009
@@ -50,4 +50,6 @@
     void initialise() throws AMQException;
 
     Exchange getExchange(String exchangeName);
+
+    void unregisterExchange(String exchange, boolean ifUnused)  throws ExchangeInUseException, AMQException;;
 }

Modified: qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java?rev=808396&r1=808395&r2=808396&view=diff
==============================================================================
--- qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java (original)
+++ qpid/branches/java-broker-0-10/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerSessionDelegate.java Thu Aug 27 12:27:48 2009
@@ -26,6 +26,8 @@
 import org.apache.qpid.server.virtualhost.VirtualHost;
 import org.apache.qpid.server.exchange.ExchangeRegistry;
 import org.apache.qpid.server.exchange.Exchange;
+import org.apache.qpid.server.exchange.ExchangeFactory;
+import org.apache.qpid.server.exchange.ExchangeInUseException;
 import org.apache.qpid.server.queue.QueueRegistry;
 import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.queue.AMQQueueFactory;
@@ -36,10 +38,12 @@
 import org.apache.qpid.server.AMQChannel;
 import org.apache.qpid.server.store.StoreContext;
 import org.apache.qpid.AMQException;
+import org.apache.qpid.AMQUnknownExchangeType;
 import org.apache.qpid.protocol.AMQConstant;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.framing.MethodRegistry;
 import org.apache.qpid.framing.QueueDeleteOkBody;
+import org.apache.qpid.framing.ExchangeDeleteOkBody;
 
 import java.util.ArrayList;
 import java.util.Map;
@@ -241,8 +245,10 @@
             {
                 exception(session, method, ExecutionErrorCode.NOT_FOUND, "not-found: exchange-name '"+exchangeName+"'");
 
-                // TODO - control flow
-                return;
+            }
+            else
+            {
+                // TODO - check exchange has same properties
             }
 
         }
@@ -258,12 +264,36 @@
 
                 exception(session, method, errorCode, description);
 
-                // TODO - Control Flow
-                return;
+
             }
+            else
+            {
+                ExchangeRegistry exchangeRegistry = getExchangeRegistry(session);
+                ExchangeFactory exchangeFactory = virtualHost.getExchangeFactory();
 
+                try
+                {
+
+                    exchange = exchangeFactory.createExchange(method.getExchange(),
+                                                              method.getType(),
+                                                              method.getDurable(),
+                                                              method.getAutoDelete());
+
+                    exchangeRegistry.registerExchange(exchange);
+                }
+                catch(AMQUnknownExchangeType e)
+                {
+                    exception(session, method, ExecutionErrorCode.NOT_FOUND, "Unknown Exchange Type: " + method.getType());
+                }
+                catch (AMQException e)
+                {
+                    //TODO
+                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                    throw new RuntimeException(e);
+                }
+
+            }
 
-            // TODO
         }
     }
 
@@ -307,7 +337,35 @@
     @Override
     public void exchangeDelete(Session session, ExchangeDelete method)
     {
-        super.exchangeDelete(session, method);
+        VirtualHost virtualHost = getVirtualHost(session);
+        ExchangeRegistry exchangeRegistry = virtualHost.getExchangeRegistry();
+
+        //Perform ACLs
+        if (!virtualHost.getAccessManager().authoriseDelete((ServerSession)session,
+                exchangeRegistry.getExchange(method.getExchange())))
+        {
+            exception(session,method, ExecutionErrorCode.NOT_ALLOWED, "Permission denied");
+
+        }
+        else
+        {
+
+            try
+            {
+                exchangeRegistry.unregisterExchange(method.getExchange(), method.getIfUnused());
+            }
+            catch (ExchangeInUseException e)
+            {
+                exception(session, method, ExecutionErrorCode.PRECONDITION_FAILED, "Exchange in use");
+            }
+            catch (AMQException e)
+            {
+                // TODO
+                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                throw new RuntimeException(e);
+            }
+        }
+
     }
 
     @Override



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org