You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2010/07/14 06:35:15 UTC

svn commit: r963946 - in /camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp: XmppBinding.java XmppComponent.java XmppConsumer.java XmppGroupChatProducer.java XmppPrivateChatProducer.java

Author: davsclaus
Date: Wed Jul 14 04:35:15 2010
New Revision: 963946

URL: http://svn.apache.org/viewvc?rev=963946&view=rev
Log:
CAMEL-2922: Fixed issue with OutOfMemoryError due to bug in Smack. We must poll the recieved message in MultiUserChat.

Modified:
    camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java
    camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java
    camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java
    camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppGroupChatProducer.java
    camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppPrivateChatProducer.java

Modified: camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java?rev=963946&r1=963945&r2=963946&view=diff
==============================================================================
--- camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java (original)
+++ camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java Wed Jul 14 04:35:15 2010
@@ -73,9 +73,13 @@ public class XmppBinding {
                 } else {
                     try {
                         message.setProperty(name, value);
-                        LOG.debug("Added property name: " + name + " value: " + value.toString());
+                        if (LOG.isTraceEnabled()) {
+                            LOG.trace("Added property name: " + name + " value: " + value.toString());
+                        }
                     } catch (IllegalArgumentException iae) {
-                        LOG.debug("Not adding property " + name + " to XMPP message due to " + iae);
+                        if (LOG.isDebugEnabled()) {
+                            LOG.debug("Cannot add property " + name + " to XMPP message due: ", iae);
+                        }
                     }
                 }
             }

Modified: camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java?rev=963946&r1=963945&r2=963946&view=diff
==============================================================================
--- camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java (original)
+++ camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java Wed Jul 14 04:35:15 2010
@@ -38,11 +38,15 @@ public class XmppComponent extends Defau
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
 
         if (endpointCache.containsKey(uri)) {
-            LOG.debug("Using cached endpoint for URI " + uri);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Using cached endpoint for URI " + uri);
+            }
             return endpointCache.get(uri);
         }
 
-        LOG.debug("Creating new endpoint for URI " + uri);
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Creating new endpoint for URI " + uri);
+        }
         XmppEndpoint endpoint = new XmppEndpoint(uri, this);
 
         URI u = new URI(uri);
@@ -73,5 +77,6 @@ public class XmppComponent extends Defau
         for (Map.Entry<String, XmppEndpoint> entry : endpointCache.entrySet()) {
             entry.getValue().destroy();
         }
+        endpointCache.clear();
     }
 }

Modified: camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java?rev=963946&r1=963945&r2=963946&view=diff
==============================================================================
--- camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java (original)
+++ camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java Wed Jul 14 04:35:15 2010
@@ -72,7 +72,7 @@ public class XmppConsumer extends Defaul
                 LOG.debug("Opening private chat to " + privateChat.getParticipant());
             }
         } else {
-            // add the presence packet listener to the connection so we only get packets that concers us
+            // add the presence packet listener to the connection so we only get packets that concerns us
             // we must add the listener before creating the muc
             final ToContainsFilter toFilter = new ToContainsFilter(endpoint.getParticipant());
             final AndFilter packetFilter = new AndFilter(new PacketTypeFilter(Presence.class), toFilter);
@@ -129,6 +129,13 @@ public class XmppConsumer extends Defaul
             getProcessor().process(exchange);
         } catch (Exception e) {
             exchange.setException(e);
+        } finally {
+            // must remove message from muc to avoid messages stacking up and causing OutOfMemoryError
+            // pollMessage is a non blocking method
+            // (see http://issues.igniterealtime.org/browse/SMACK-129)
+            if (muc != null) {
+                muc.pollMessage();
+            }
         }
     }
 }

Modified: camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppGroupChatProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppGroupChatProducer.java?rev=963946&r1=963945&r2=963946&view=diff
==============================================================================
--- camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppGroupChatProducer.java (original)
+++ camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppGroupChatProducer.java Wed Jul 14 04:35:15 2010
@@ -64,7 +64,7 @@ public class XmppGroupChatProducer exten
             chat.sendMessage(message);
             // must invoke nextMessage to consume the response from the server
             // otherwise the client local queue will fill up (CAMEL-1467)
-            chat.nextMessage();
+            chat.pollMessage();
         } catch (XMPPException e) {
             throw new RuntimeExchangeException("Cannot send XMPP message: " + message, exchange, e);
         }

Modified: camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppPrivateChatProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppPrivateChatProducer.java?rev=963946&r1=963945&r2=963946&view=diff
==============================================================================
--- camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppPrivateChatProducer.java (original)
+++ camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppPrivateChatProducer.java Wed Jul 14 04:35:15 2010
@@ -43,7 +43,10 @@ public class XmppPrivateChatProducer ext
         this.endpoint = endpoint;
         this.participant = participant;
         ObjectHelper.notEmpty(participant, "participant");
-        LOG.debug("Creating XmppPrivateChatProducer to participant " + participant);
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Creating XmppPrivateChatProducer to participant " + participant);
+        }
     }
 
     public void process(Exchange exchange) {
@@ -65,14 +68,21 @@ public class XmppPrivateChatProducer ext
         }
 
         ChatManager chatManager = connection.getChatManager();
-        LOG.debug("Looking for existing chat instance with thread ID " + endpoint.getChatId());
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Looking for existing chat instance with thread ID " + endpoint.getChatId());
+        }
         Chat chat = chatManager.getThreadChat(endpoint.getChatId());
         if (chat == null) {
-            LOG.debug("Creating new chat instance with thread ID " + endpoint.getChatId());
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Creating new chat instance with thread ID " + endpoint.getChatId());
+            }
             chat = chatManager.createChat(getParticipant(), endpoint.getChatId(), new MessageListener() {
                 public void processMessage(Chat chat, Message message) {
                     // not here to do conversation
-                    LOG.debug("Received and discarding message from " + getParticipant() + " : " + message.getBody());
+                    if (LOG.isDebugEnabled()) {
+                        LOG.debug("Received and discarding message from " + getParticipant() + " : " + message.getBody());
+                    }
                 }
             });
         }