Broker ERROR message code B[4031}

We use SunOne MQ JMS server for the at least two years and we never had any serious problems with it before till a couple of days ago when one of our server machines continuously failed to start JMS server.

The logged error messages have codes:

[B4031] and [B30000].I have never seen such messages in the logs before. My attempts to find any related info in Sun documentation were unsuccessful.

Did somebody experienced something similar and could hint me on this issue? The logs messages are below.

Thank you, Val.

******************************************************

Java Runtime: 1.4.0_02 Sun Microsystems Inc. C:\h\COTS\SUN1AS\jdk\jre

[15/May//2004:13:14:42 CDT]

IMQ_HOME=C:\h\COTS\SUN1AS\imq

[15/May/2004:13:14:42 CDT]

IMQ_VARHOME=C:\h\COTS\SUN1AS\imq\var

[15/May/2004:13:14:42 CDT] Windows 2000 5.0 x86 aissvr5 (2 cpu) SYSTEM

[15/May/2004:13:14:42 CDT] Java Heap Size: max=196608k, current=8128k

[15/May/2004:13:14:42 CDT] Arguments: -ntservice -ntservice -adminkeyfile C:\h\COTS\SUN1AS\imq\var\imq1.tmp

[15/May/2004:13:14:44 CDT] [B1004]: Starting the portmapper service using tcp [ 7676, 50 ] with min threads 1 and max threads of 1

[15/May/2004:13:14:44 CDT] [B1060]: Loading persistent data...

[15/May/2004:13:14:46 CDT] ERROR [B4031]: Failed to load destinations from store:

java.io.StreamCorruptedException

[15/May/2004:13:14:46 CDT] ERROR [B3000]: Could not open persistent message store:

com.sun.messaging.jmq.jmsserver.util.BrokerException: Failed to load destinations from store:

java.io.StreamCorruptedException

[15/May/2004:13:37:07 CDT]

[1701 byte] By [Val_K.] at [2007-11-25 17:03:54]
# 1

What version are you running? And are you using the default

file based store, or JDBC?

This looks as though the table containing the destination

definitions has been corrupted. Try running imqbrokerd with the

"-loglevel DEBUG" option. This should display the

stack trace for the exception. - please post that here.

If you can tolerate loosing your data you can run

"imqbrokerd -reset store" but you will loose all your destinations

and messages. If you can't tolerate message loss there is

likely a manual procedure you can do to preserve the

messages ( once we know what version of MQ you are running).

jfdp at 2007-7-3 0:16:35 > top of Java-index,Application & Integration Servers,Sun Java System Message Queue...
# 2

Thanks for your reply.

We are running Version: 3.0.1 (Build 52-a) on that server. All administered objects (configuration factories and destinations) stored on the external LDAP server.

Actually, I have resolved the above problem by erasing all data for imqbroker/filestore/destinations file. The only my concern right now is how to avoid this problem in the future. Is any way to turn off that internal JMS filstore during configuration if we are going to use an external LDAP store for example?

I can not find answer on that question in SunOne MQ docs.To me there is no reason for JMS to crash whole server on the corrupted destination file if nobody is going to use it .

Thanks again, Val

Val_K. at 2007-7-3 0:16:35 > top of Java-index,Application & Integration Servers,Sun Java System Message Queue...
# 3

imqbrokerd stores the definititions of the physical destinations in the filestore directory. The only other option is to use the JDBC based persistent store in which case this information is kept in a relational database. Note that the definition of the physical destination on the broker is independent of the destination administered object (which you can think of as a handle to the physical destination).

I don't recall seeing this problem reported by other customers. Are the physical destinations being administratively created (using imqcmd or imqadmin)? Or are you relying on the broker to auto-create them? Autocreation would update the destination file more often as the destinations dynamically come and go. Things may be more stable if the destinations are administratively stable.

jfdp at 2007-7-3 0:16:35 > top of Java-index,Application & Integration Servers,Sun Java System Message Queue...
# 4

Dear jfdb more info for you :

As you advised I ran imqbrokerd with loglevel DEBUG on different "healthy" machine with the imqbroker/filstore/destination file replaced by the copy of the corrupted file I saved.

The output is below .If you are interested to see that corruptred file I can send you a copy by e-mail.

Val.

******************************************************

[19/May/2004:13:38:24 GMT-05:00] ERROR [B4031]: Failed to load destinations from store:

java.io.StreamCorruptedException

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1301)

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)

at com.sun.messaging.jmq.util.PHashMap.<init>(PHashMap.java:91)

at com.sun.messaging.jmq.jmsserver.persist.file.DestinationList.<init>(Desti nationList.java:81)

at com.sun.messaging.jmq.jmsserver.persist.file.FileStore.<init>(FileStore.j ava:209)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessor Impl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructor AccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:274)

at java.lang.Class.newInstance0(Class.java:306)

at java.lang.Class.newInstance(Class.java:259)

at com.sun.messaging.jmq.jmsserver.persist.StoreManager.getStore(StoreManager.java :103)

at com.sun.messaging.jmq.jmsserver.Globals.getStore(Globals.java:480)

at com.sun.messaging.jmq.jmsserver.Broker.<init>(Broker.java:427)

at com.sun.messaging.jmq.jmsserver.Broker.main(Broker.java:1229)

[19/May/2004:13:38:24 GMT-05:00] ERROR [B3000]: Could not open persistent message store:

java.io.StreamCorruptedException

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1301)

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)

at com.sun.messaging.jmq.util.PHashMap.<init>(PHashMap.java:91)

at com.sun.messaging.jmq.jmsserver.persist.file.DestinationList.<init>(Desti nationList.java:81)

at com.sun.messaging.jmq.jmsserver.persist.file.FileStore.<init>(FileStore.j ava:209)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessor Impl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructor AccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:274)

at java.lang.Class.newInstance0(Class.java:306)

at java.lang.Class.newInstance(Class.java:259)

at com.sun.messaging.jmq.jmsserver.persist.StoreManager.getStore(StoreManager.java :103)

at com.sun.messaging.jmq.jmsserver.Globals.getStore(Globals.java:480)

at com.sun.messaging.jmq.jmsserver.Broker.<init>(Broker.java:427)

at com.sun.messaging.jmq.jmsserver.Broker.main(Broker.java:1229)

Val_K. at 2007-7-3 0:16:35 > top of Java-index,Application & Integration Servers,Sun Java System Message Queue...
# 5
Val,Could you send the file to imq-feedback@sun.com? Thanks!
jfdp at 2007-7-3 0:16:36 > top of Java-index,Application & Integration Servers,Sun Java System Message Queue...
# 6

Dear jfdb :

I saw your second response only after I prepared that additional info for you. So this is actually reply on your last response.

Thank you for your explanation regarding the physical destinations. I knew but definetely forgot that we keep only "handles" in our LDAP store.

We do not use DB and unfortunately, we do not have a luxury to create our destinations administratively

due to some specifics of our client. So, all destinations created dynamically from our Java application using Sun's API methods com.sun.messaging.Topic.addTopic (String lookupName, String name) and com.sun.messaging.Queue.addQueue(String lookupName, String name). But as I told you we have never seen such messages before for more than two years.

Thanks again, Val

Val_K. at 2007-7-3 0:16:36 > top of Java-index,Application & Integration Servers,Sun Java System Message Queue...