Bugs item #620514, was opened at 2002-10-08 18:18
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=620514&group_id=22866
Category: JBossMQ
Group: v3.0 Rabbit Hole
Status: Closed
Resolution: Fixed
Priority: 9
Submitted By: Steve Wolfangel (swolfangel)
Assigned to: Adrian Brock (ejort)
Summary: MQ OutOfMemoryException
Initial Comment:
I am getting the following exception when running
a test that continously publishes messages.
JMSTest.java is included.
org.jboss.mq.SpyJMSException: Cannot send a
message to the JMS server; - nested throwable:
(java.rmi
.ServerError: Error occurred in server thread; nested
exception is:
java.lang.OutOfMemoryError)
at org.jboss.mq.Connection.sendToServer
(Connection.java:1127)
at org.jboss.mq.SpySession.sendMessage
(SpySession.java:562)
at
org.jboss.mq.SpyTopicPublisher.internalPublish
(SpyTopicPublisher.java:120)
at org.jboss.mq.SpyTopicPublisher.publish
(SpyTopicPublisher.java:68)
at JMSTest.main(JMSTest.java:121)
+ nested throwable: java.rmi.ServerError: Error
occurred in server thread; nested exception is:
java.lang.OutOfMemoryError
java.lang.OutOfMemoryError
at
sun.rmi.transport.StreamRemoteCall.exceptionRecei
vedFromServer(StreamRemoteCall.java:245)
at
sun.rmi.transport.StreamRemoteCall.executeCall
(StreamRemoteCall.java:220)
at sun.rmi.server.UnicastRef.invoke
(UnicastRef.java:122)
at
org.jboss.mq.il.rmi.RMIServerIL_Stub.addMessage
(Unknown Source)
at org.jboss.mq.Connection.sendToServer
(Connection.java:1119)
at org.jboss.mq.SpySession.sendMessage
(SpySession.java:562)
at
org.jboss.mq.SpyTopicPublisher.internalPublish
(SpyTopicPublisher.java:120)
at org.jboss.mq.SpyTopicPublisher.publish
(SpyTopicPublisher.java:68)
at JMSTest.main(JMSTest.java:121)
17:20:58,683 INFO [Server] JBoss Release: JBoss-
3.0.3 CVSTag=JBoss_3_0_3
17:20:58,730 INFO [Server] Home Dir:
E:\cvs\jboss-3.0.3-src\build\output\jboss-3
.0.3
17:20:58,730 INFO [Server] Home URL:
file:/E:/cvs/jboss-3.0.3-src/build/output/j
boss-3.0.3/
17:20:58,730 INFO [Server] Library URL:
file:/E:/cvs/jboss-3.0.3-src/build/outpu
t/jboss-3.0.3/lib/
17:20:58,745 INFO [Server] Patch URL: null
17:20:58,745 INFO [Server] Server Name: default
17:20:58,745 INFO [Server] Server Home Dir:
E:\cvs\jboss-3.0.3-src\build\output\
jboss-3.0.3\server\default
17:20:58,745 INFO [Server] Server Home URL:
file:/E:/cvs/jboss-3.0.3-src/build/o
utput/jboss-3.0.3/server/default/
17:20:58,745 INFO [Server] Server Data Dir:
E:\cvs\jboss-3.0.3-src\build\output\
jboss-3.0.3\server\default\db
17:20:58,745 INFO [Server] Server Temp Dir:
E:\cvs\jboss-3.0.3-src\build\output\
jboss-3.0.3\server\default\tmp
17:20:58,745 INFO [Server] Server Config URL:
file:/E:/cvs/jboss-3.0.3-src/build
/output/jboss-3.0.3/server/default/conf/
17:20:58,745 INFO [Server] Server Library URL:
file:/E:/cvs/jboss-3.0.3-src/buil
d/output/jboss-3.0.3/server/default/lib/
17:20:58,745 INFO [Server] Root Deployemnt
Filename: jboss-service.xml
17:20:58,776 INFO [Server] Starting General
Purpose Architecture (GPA)...
17:20:59,198 INFO [ServerInfo] Java version:
1.3.1_01,Sun Microsystems Inc.
17:20:59,198 INFO [ServerInfo] Java VM: Java
HotSpot(TM) Client VM 1.3.1_01,Sun
Microsystems Inc.
17:20:59,198 INFO [ServerInfo] OS-System:
Windows NT 4.0,x86
----------------------------------------------------------------------
>Comment By: Steve Wolfangel (swolfangel)
Date: 2002-10-31 11:55
Message:
Logged In: YES
user_id=541224
Ok, do these new jar files exist or do I need to get the src
from cvs and build myself? Typically I just download the
src.tgz file and use that. I tried getting Rel_3_0_0_4 from cvs
but all the files looked really old. There is no JBoss_3_0_4
tag.
I am a little confused, I am relatively new to this process.
Thanks for your patience.
----------------------------------------------------------------------
Comment By: Adrian Brock (ejort)
Date: 2002-10-30 16:55
Message:
Logged In: YES
user_id=9459
Yes, the problem was due to the message being
dropped from the queue, but not removed from the message
cache.
You should be able replace jbossmq.jar and jbossmq-client.jar
in any previous 3.0 release with the 3.0.4 versions built from
cvs.
Regards,
Adrian
----------------------------------------------------------------------
Comment By: Steve Wolfangel (swolfangel)
Date: 2002-10-30 16:24
Message:
Logged In: YES
user_id=541224
Does this fix the problem where noLocal is set to true and
there is no selector or the selector does match?
Could you tell me what classes changed?
----------------------------------------------------------------------
Comment By: Adrian Brock (ejort)
Date: 2002-10-29 17:03
Message:
Logged In: YES
user_id=9459
Fixed for 3.0.4
1) The message is removed from the cache, and
perisistent storage when it does not match the
subscription's selector.
2) When the client drops the connection, or
fails to acknowledge a message, the unacknowledged
messages are nacked.
This fixes two problems:
a) The cached messages are removed when the suscription
ends and the queue isn't persistent.
b) The unacked messages are available again for persistent
queues without having to restart the server.
Regards,
Adrian
----------------------------------------------------------------------
Comment By: Steve Wolfangel (swolfangel)
Date: 2002-10-18 16:29
Message:
Logged In: YES
user_id=541224
Ok there seem to be 2 problems here.
1) When noLocal is set to true and the client subscribes
to a publishes to the same topic, the message never
gets removed from the messageCache. I changed some
code in JMSTopic to get around this problem. I added a
check in the addMessage method before adding the
message to the queue and the MessageCache. Not sure
if this is the correct approach but it seems to work.
(code at bottom)
2) If a subscriber connection is broken (not closed
gracefully) by ^C-ing then the messages can't be sent
to the subscriber, these messages are never removed
from the MessageCache.
Any help would be greatly appreciated.
JMSTopic.java
public void addMessage(SpyMessage message,
org.jboss.mq.pm.Tx txId) throws JMSException {
// if( message.getJMSDeliveryMode()
== DeliveryMode.PERSISTENT &&
// temporaryDestination!
=null ) {
// throw new JMSException
("Cannot write a persistent message to a temporary
destination!");
// }
//Number the message so that we can preserve
order of delivery.
long messageId = 0;
synchronized (this) {
messageId = messageIdCounter++;
synchronized (durQueues) {
Iterator iter = durQueues.keySet().iterator();
while (iter.hasNext()) {
DurableSubscriptionID id =
(DurableSubscriptionID) iter.next();
PersistentQueue q = (PersistentQueue)
durQueues.get(id);
SpyMessage clone = message.myClone();
clone.header.durableSubscriberID = id;
clone.header.messageId = messageId;
//new stuff
if (q.exclusiveSubscription.accepts
(clone.header)) {
MessageReference ref =
server.getMessageCache().add(clone);
q.addMessage(ref, txId);
}
}
}
synchronized (tempQueues) {
Iterator iter = tempQueues.values().iterator();
while (iter.hasNext()) {
BasicQueue q = (BasicQueue) iter.next();
SpyMessage clone = message.myClone();
clone.header.messageId = messageId;
// new stuff
if (q.exclusiveSubscription.accepts
(clone.header)) {
MessageReference ref =
server.getMessageCache().add(clone);
q.addMessage(ref, txId);
}
}
}
}
}
----------------------------------------------------------------------
Comment By: Roger Stevens (pinseeker)
Date: 2002-10-18 04:01
Message:
Logged In: YES
user_id=631489
In Subscription.java accepts method at line 71 the
following code appears
< if (noLocal ) {
if(
header.producerClientId.equals(connectionToken.getClientID()))
return false;
}
>
In Subscription.java ConnectionToken never gets initialised
and hence never returns false and hence messages are accepted.
----------------------------------------------------------------------
Comment By: Steve Wolfangel (swolfangel)
Date: 2002-10-17 15:18
Message:
Logged In: YES
user_id=541224
New information:
The cache problem occurs when the same client
subscribes and publishes to the same topic, regardless
of the noLocal flag.
----------------------------------------------------------------------
Comment By: Steve Wolfangel (swolfangel)
Date: 2002-10-17 14:37
Message:
Logged In: YES
user_id=541224
After much more testing it appears the problem has
something to do with the noLocal flag in the
createSubscriber() method.
When I set noLocal to true I see the MessageCache
continue to grow. When I set noLocal to false then the
MessageCache works as expected messages get added
and removed.
TopicSubscriber subscriber = session.createSubscriber
(topic, null, true); // cache continues to grow
TopicSubscriber subscriber = session.createSubscriber
(topic, null, false); // cache works correctly
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=620514&group_id=22866
-------------------------------------------------------
This sf.net email is sponsored by: Influence the future
of Java(TM) technology. Join the Java Community
Process(SM) (JCP(SM)) program now.
http://ads.sourceforge.net/cgi-bin/redirect.pl?sunm0004en
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development