summaryrefslogtreecommitdiff
path: root/java/client/src
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2008-04-16 11:43:37 +0000
committerRobert Godfrey <rgodfrey@apache.org>2008-04-16 11:43:37 +0000
commit1fdfb841a9787d0f5bacee5489a963aaf522c332 (patch)
treef18b20a6617d78df4bd98f7b26b259ad5ae96117 /java/client/src
parent48a474cba1f1ecd98a60810c4f02b6bda1e27172 (diff)
downloadqpid-python-1fdfb841a9787d0f5bacee5489a963aaf522c332.tar.gz
QPID-933 : performance tweaks
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2.1@648672 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/client/src')
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/AMQSession.java52
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java13
2 files changed, 54 insertions, 11 deletions
diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQSession.java b/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
index d17572ad77..eb776ba786 100644
--- a/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
+++ b/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
@@ -182,6 +182,46 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
_fastAccessConsumers[i] = null;
}
}
+
+
+ public void acknowledgeDelivered()
+ {
+
+ for(int i = 0; i<16; i++)
+ {
+ final BasicMessageConsumer c = _fastAccessConsumers[i];
+ if(c != null)
+ {
+ c.acknowledgeDelivered();
+ }
+ }
+ if(!_slowAccessConsumers.isEmpty())
+ {
+ for (Iterator<BasicMessageConsumer> i = _slowAccessConsumers.values().iterator(); i.hasNext();)
+ {
+ i.next().acknowledgeDelivered();
+ }
+ }
+ }
+
+ public void acknowledge() throws JMSException
+ {
+ for(int i = 0; i<16; i++)
+ {
+ final BasicMessageConsumer c = _fastAccessConsumers[i];
+ if(c != null)
+ {
+ c.acknowledge();
+ }
+ }
+ if(!_slowAccessConsumers.isEmpty())
+ {
+ for (Iterator<BasicMessageConsumer> i = _slowAccessConsumers.values().iterator(); i.hasNext();)
+ {
+ i.next().acknowledge();
+ }
+ }
+ }
}
@@ -500,10 +540,7 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
throw new IllegalStateException("Session is already closed");
}
- for (BasicMessageConsumer consumer : _consumers.values())
- {
- consumer.acknowledge();
- }
+ _consumers.acknowledge();
}
/**
@@ -725,12 +762,9 @@ public class AMQSession extends Closeable implements Session, QueueSession, Topi
// We only need to find the highest value and ack that as commit is session level.
Long lastTag = -1L;
- for (Iterator<BasicMessageConsumer> i = _consumers.values().iterator(); i.hasNext();)
- {
- i.next().acknowledgeDelivered();
- }
+ _consumers.acknowledgeDelivered();
- if (_transacted)
+ if (_transacted && !_removedConsumers.isEmpty())
{
// Do the above, but for consumers which have been de-registered since the
// last commit
diff --git a/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java b/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java
index 87df7e1337..4de6a1d410 100644
--- a/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java
+++ b/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessageFactory.java
@@ -71,8 +71,17 @@ public abstract class AbstractJMSMessageFactory implements MessageFactory
while (it.hasNext())
{
ContentBody cb = (ContentBody) it.next();
- data.put(cb.payload);
- cb.payload.release();
+ final ByteBuffer payload = cb.payload;
+ if(payload.isDirect() || payload.isReadOnly())
+ {
+ data.put(payload);
+ }
+ else
+ {
+ data.put(payload.array(), payload.arrayOffset(), payload.limit());
+ }
+
+ payload.release();
}
data.flip();