You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by nm...@apache.org on 2008/01/06 19:18:22 UTC

svn commit: r609364 - in /activemq/activemq-cpp/trunk/src/main/activemq/cmsutil: CmsAccessor.cpp CmsAccessor.h CmsDestinationAccessor.cpp CmsDestinationAccessor.h CmsTemplate.cpp CmsTemplate.h

Author: nmittler
Date: Sun Jan  6 10:18:20 2008
New Revision: 609364

URL: http://svn.apache.org/viewvc?rev=609364&view=rev
Log:
AMQCPP-152 - Adding classes for support of CmsTemplate

Added:
    activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.cpp
    activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.h
Modified:
    activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.cpp
    activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.h
    activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.cpp
    activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.h

Modified: activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.cpp?rev=609364&r1=609363&r2=609364&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.cpp Sun Jan  6 10:18:20 2008
@@ -18,6 +18,7 @@
 #include "CmsAccessor.h"
 
 using namespace activemq::cmsutil;
+using namespace decaf::lang::exceptions;
 
 ////////////////////////////////////////////////////////////////////////////////
 CmsAccessor::CmsAccessor() {
@@ -29,7 +30,10 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-cms::Connection* CmsAccessor::createConnection() throw (cms::CMSException) {
+cms::Connection* CmsAccessor::createConnection() 
+throw (cms::CMSException,IllegalStateException) {
+    
+    checkConnectionFactory();
     
     // Create the connection.
     cms::Connection* c = getConnectionFactory()->createConnection();
@@ -42,7 +46,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 cms::Session* CmsAccessor::createSession(cms::Connection* con) 
-    throw (cms::CMSException) {
+throw (cms::CMSException,IllegalStateException) {
     
     // Create the session.
     cms::Session* s = con->createSession(getSessionAcknowledgeMode());
@@ -52,3 +56,13 @@
     
     return s;
 }
+
+////////////////////////////////////////////////////////////////////////////////
+void CmsAccessor::checkConnectionFactory() throw (IllegalStateException) {
+    if (getConnectionFactory() == NULL) {
+            throw IllegalStateException(
+                    __FILE__, __LINE__,
+                    "Property 'connectionFactory' is required");
+    }
+}
+

Modified: activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.h?rev=609364&r1=609363&r2=609364&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.h (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsAccessor.h Sun Jan  6 10:18:20 2008
@@ -19,6 +19,7 @@
 
 #include <cms/ConnectionFactory.h>
 #include <activemq/cmsutil/ResourceLifecycleManager.h>
+#include <decaf/lang/exceptions/IllegalStateException.h>
 
 namespace activemq {
 namespace cmsutil {
@@ -55,7 +56,8 @@
          * Initializes this object and prepares it for use.  This should be called
          * before any other methds are called.
          */
-        virtual void init() throw (cms::CMSException) {            
+        virtual void init() throw (cms::CMSException, decaf::lang::exceptions::IllegalStateException) {
+            checkConnectionFactory();
         }
         
         /**
@@ -122,7 +124,8 @@
          * @return the new CMS Connection
          * @throws cms::CMSException if thrown by CMS API methods
          */
-        virtual cms::Connection* createConnection() throw (cms::CMSException);
+        virtual cms::Connection* createConnection() 
+            throw (cms::CMSException, decaf::lang::exceptions::IllegalStateException);
     
         /**
          * Create a CMS Session for the given Connection.
@@ -131,7 +134,12 @@
          * @throws cms::CMSException if thrown by CMS API methods
          */
         virtual cms::Session* createSession(cms::Connection* con) 
-            throw (cms::CMSException);
+            throw (cms::CMSException, decaf::lang::exceptions::IllegalStateException);
+        
+        /**
+         * Verifies that the connection factory is valid.
+         */
+        virtual void checkConnectionFactory() throw (decaf::lang::exceptions::IllegalStateException);
     
     };
 

Modified: activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.cpp?rev=609364&r1=609363&r2=609364&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.cpp Sun Jan  6 10:18:20 2008
@@ -18,6 +18,7 @@
 #include "CmsDestinationAccessor.h"
 
 using namespace activemq::cmsutil;
+using namespace decaf::lang::exceptions;
 
 ////////////////////////////////////////////////////////////////////////////////
 CmsDestinationAccessor::CmsDestinationAccessor() {
@@ -35,23 +36,37 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 void CmsDestinationAccessor::init() throw (cms::CMSException) {
-    setDestinationResolver(destinationResolver);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void CmsDestinationAccessor::setDestinationResolver( DestinationResolver* destRes ) {
-    this->destinationResolver = destRes; 
-    destRes->setResourceLifecycleManager(getResourceLifecycleManager());
+    
+    // Invoke the base class.
+    CmsAccessor::init();
+    
+    // Make sure we have a destination resolver.
+    checkDestinationResolver();
+    
+    // Give the resolver our lifecycle manager.
+    destinationResolver->setResourceLifecycleManager(getResourceLifecycleManager());    
 }
   
 ////////////////////////////////////////////////////////////////////////////////
 cms::Destination* CmsDestinationAccessor::resolveDestinationName( 
     cms::Session* session, 
-    const std::string& destName ) throw (cms::CMSException) {
+    const std::string& destName ) 
+throw (cms::CMSException, IllegalStateException) {
+    
+    checkDestinationResolver();
     
     getDestinationResolver()->resolveDestinationName(session, 
             destName, 
             isPubSubDomain());
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void CmsDestinationAccessor::checkDestinationResolver() throw (IllegalStateException) {
+    if (getDestinationResolver() == NULL) {
+            throw IllegalStateException(
+                    __FILE__, __LINE__,
+                    "Property 'destinationResolver' is required");
+    }
 }
 
 

Modified: activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.h?rev=609364&r1=609363&r2=609364&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.h (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsDestinationAccessor.h Sun Jan  6 10:18:20 2008
@@ -78,7 +78,9 @@
             return destinationResolver;
         }
         
-        virtual void setDestinationResolver( DestinationResolver* destRes );
+        virtual void setDestinationResolver( DestinationResolver* destRes ) {
+            this->destinationResolver = destRes;     
+        }
         
     protected:
         
@@ -90,10 +92,18 @@
          *      the name of the destination.
          * @return the destination
          * @throws cms::CMSException if resolution failed.
+         * @throws decaf::lang::exceptions::IllegalStateException if the destiation
+         *      resolver property is NULL.
          */
         virtual cms::Destination* resolveDestinationName( 
                 cms::Session* session, 
-                const std::string& destName ) throw (cms::CMSException);
+                const std::string& destName ) 
+                throw (cms::CMSException, decaf::lang::exceptions::IllegalStateException);
+        
+        /**
+         * Verifies that the connection factory is valid.
+         */
+        virtual void checkDestinationResolver() throw (decaf::lang::exceptions::IllegalStateException);
     };
 
 }}

Added: activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.cpp?rev=609364&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.cpp (added)
+++ activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.cpp Sun Jan  6 10:18:20 2008
@@ -0,0 +1,60 @@
+/*
+ * 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 regarding copyright ownership.
+ * The ASF 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.
+ */
+
+#include "CmsTemplate.h"
+
+using namespace activemq::cmsutil;
+using namespace decaf::lang::exceptions;
+
+////////////////////////////////////////////////////////////////////////////////
+CmsTemplate::CmsTemplate() {
+    initDefaults();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+CmsTemplate::CmsTemplate(cms::ConnectionFactory* connectionFactory) {
+    initDefaults();
+    setConnectionFactory(connectionFactory);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+CmsTemplate::~CmsTemplate() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void CmsTemplate::initDefaults() {
+    defaultDestination = NULL;
+    defaultDestinationName = "";
+    messageIdEnabled = true;
+    messageTimestampEnabled = true;
+    pubSubNoLocal = false;
+    receiveTimeout = RECEIVE_TIMEOUT_INDEFINITE_WAIT;
+    explicitQosEnabled = false;
+    deliveryMode = cms::DeliveryMode::PERSISTENT;
+    priority = DEFAULT_PRIORITY;
+    timeToLive = DEFAULT_TIME_TO_LIVE;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void CmsTemplate::checkDefaultDestination() throw (IllegalStateException) {
+    if (this->defaultDestination == NULL) {
+        throw IllegalStateException(
+                __FILE__, __LINE__,
+                "No defaultDestination or defaultDestinationName specified. Check configuration of CmsTemplate.");
+    }
+}
+

Added: activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.h?rev=609364&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.h (added)
+++ activemq/activemq-cpp/trunk/src/main/activemq/cmsutil/CmsTemplate.h Sun Jan  6 10:18:20 2008
@@ -0,0 +1,237 @@
+/*
+ * 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 regarding copyright ownership.
+ * The ASF 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.
+ */
+
+#ifndef ACTIVEMQ_CMSUTIL_CMSTEMPLATE_H_
+#define ACTIVEMQ_CMSUTIL_CMSTEMPLATE_H_
+
+#include <activemq/cms/CmsDestinationAccessor.h>
+#include <decaf/lang/exceptions/IllegalStateException.h>
+#include <cms/ConnectionFactory.h>
+#include <cms/DeliveryMode.h>
+#include <string>
+
+namespace activemq {
+namespace cmsutil {
+
+    class CmsTemplate : public CmsDestinationAccessor
+    {
+    public:
+        
+        /**
+         * Timeout value indicating that a receive operation should
+         * check if a message is immediately available without blocking.
+         */
+        static const long long RECEIVE_TIMEOUT_NO_WAIT = -1;
+
+        /**
+         * Timeout value indicating a blocking receive without timeout.
+         */
+        static const long long RECEIVE_TIMEOUT_INDEFINITE_WAIT = 0;
+        
+        /**
+         * Default message priority.
+         */
+        static const int DEFAULT_PRIORITY = 4;
+        
+        /**
+         * My default, messages should live forever.
+         */
+        static const long long DEFAULT_TIME_TO_LIVE = 0;
+        
+    private:                
+        
+        cms::Destination* defaultDestination;
+        
+        std::string defaultDestinationName;
+        
+        bool messageIdEnabled;
+        
+        bool messageTimestampEnabled;
+        
+        bool pubSubNoLocal;
+        
+        long long receiveTimeout;
+        
+        bool explicitQosEnabled;
+        
+        int deliveryMode;
+        
+        int priority;
+        
+        long long timeToLive;
+        
+    public:
+        
+    	CmsTemplate();
+    	CmsTemplate(cms::ConnectionFactory* connectionFactory);
+    	    
+    	virtual ~CmsTemplate();
+    	
+    	virtual void setDefaultDestination(cms::Destination* defaultDestination) {
+    	    this->defaultDestination = defaultDestination;
+    	}
+    	
+    	virtual const cms::Destination* getDefaultDestination() const {
+    	    return this->defaultDestination;
+    	}    	    	
+    	
+    	virtual void setDefaultDestinationName(const std::string& defaultDestinationName) {
+    	    this->defaultDestinationName = defaultDestinationName;
+    	}
+    	
+    	virtual const std::string getDefaultDestinationName() const {
+            return this->defaultDestinationName;
+        }            	
+    	
+    	virtual void setMessageIdEnabled(bool messageIdEnabled) {
+    	    this->messageIdEnabled = messageIdEnabled;
+    	}
+    	
+    	virtual bool isMessageIdEnabled() const {
+            return this->messageIdEnabled;
+        }                
+        
+        virtual void setMessageTimestampEnabled(bool messageTimestampEnabled) {
+            this->messageTimestampEnabled = messageTimestampEnabled;
+        }
+        
+        virtual bool isMessageTimestampEnabled() const {
+            return this->messageTimestampEnabled;
+        }                
+
+        virtual void setPubSubNoLocal(bool pubSubNoLocal) {
+            this->pubSubNoLocal = pubSubNoLocal;
+        }
+
+        virtual bool isPubSubNoLocal() const {
+            return this->pubSubNoLocal;
+        }
+        
+        virtual void setReceiveTimeout(long long receiveTimeout) {
+            this->receiveTimeout = receiveTimeout;
+        }
+
+        virtual long long getReceiveTimeout() const {
+            return this->receiveTimeout;
+        }
+        
+        /**
+         * Set if the QOS values (deliveryMode, priority, timeToLive)
+         * should be used for sending a message.
+         * 
+         * @see #setDeliveryMode
+         * @see #setPriority
+         * @see #setTimeToLive
+         */
+        virtual void setExplicitQosEnabled(bool explicitQosEnabled) {
+            this->explicitQosEnabled = explicitQosEnabled;
+        }
+
+        /**
+         * If "true", then the values of deliveryMode, priority, and timeToLive
+         * will be used when sending a message. Otherwise, the default values,
+         * that may be set administratively, will be used.
+         * 
+         * @return true if overriding default values of QOS parameters
+         * (deliveryMode, priority, and timeToLive)
+         * 
+         * @see #setDeliveryMode
+         * @see #setPriority
+         * @see #setTimeToLive
+         */
+        virtual bool isExplicitQosEnabled() const {
+            return this->explicitQosEnabled;
+        }
+        
+        /**
+         * Set whether message delivery should be persistent or non-persistent,
+         * specified as boolean value ("true" or "false"). This will set the delivery
+         * mode accordingly, to either "PERSISTENT" or "NON_PERSISTENT".
+         * <p>Default it "true" aka delivery mode "PERSISTENT".
+         * 
+         * @see #setDeliveryMode(int)
+         */
+        virtual void setDeliveryPersistent(bool deliveryPersistent) {
+            this->deliveryMode = (deliveryPersistent ? cms::DeliveryMode.PERSISTENT : cms::DeliveryMode.NON_PERSISTENT);
+        }
+
+        /**
+         * Set the delivery mode to use when sending a message.
+         * Default is the Message default: "PERSISTENT".
+         * <p>Since a default value may be defined administratively,
+         * this is only used when "isExplicitQosEnabled" equals "true".
+         * @param deliveryMode the delivery mode to use
+         * @see #isExplicitQosEnabled
+         */
+        virtual void setDeliveryMode(int deliveryMode) {
+            this.deliveryMode = deliveryMode;
+        }
+        
+        /**
+         * Return the delivery mode to use when sending a message.
+         */
+        virtual int getDeliveryMode() const {
+            return this->deliveryMode;
+        }
+        
+        /**
+         * Set the priority of a message when sending.
+         * <p>Since a default value may be defined administratively,
+         * this is only used when "isExplicitQosEnabled" equals "true".
+         * 
+         * @see #isExplicitQosEnabled
+         */
+        public void setPriority(int priority) {
+            this->priority = priority;
+        }
+            
+        /**
+         * Return the priority of a message when sending.
+         */
+        virtual int getPriority() const {
+            return this->priority;
+        }
+
+        /**
+         * Set the time-to-live of the message when sending.
+         * <p>Since a default value may be defined administratively,
+         * this is only used when "isExplicitQosEnabled" equals "true".
+         * @param timeToLive the message's lifetime (in milliseconds)
+         * 
+         * @see #isExplicitQosEnabled
+         */
+        virtual void setTimeToLive(long long timeToLive) {
+            this->timeToLive = timeToLive;
+        }
+
+        /**
+         * Return the time-to-live of the message when sending.
+         */
+        virtual long long getTimeToLive() const {
+            return this->timeToLive;
+        }
+    	
+    private:
+        
+        void initDefaults();
+        
+        void checkDefaultDestination() throw (decaf::lang::exceptions::IllegalStateException);
+    };
+
+}}
+
+#endif /*ACTIVEMQ_CMSUTIL_CMSTEMPLATE_H_*/