I awoke one morning and found something wrong T.T

Dear members...

I develop something in the env. of Sun Java System Message Queue. yes.. all is perfect.. to yesterday.

When I awake this morning , and run "imqbrokerd.exe" and.. run My simple application,

I find something wrong..

here is messge (imqbrokerd.exe with -verbose)

C:\_WEIRD\JMSServer\MessageQueue3\bin>imqbrokerd.exe -verbose

Starting iMQ Broker

imqhome=C:\_WEIRD\JMSServer\MessageQueue3

imqvarhome=C:\_WEIRD\JMSServer\MessageQueue3\var

jrehome=C:\Program Files\Java\jre1.5.0

Java VM Arguments:

argv[0]=-cp

argv[1]=C:\_WEIRD\JMSServer\MessageQueue3\lib\imqbroker.jar;C:\_WEIRD\JMSServer \

MessageQueue3\lib\imqutil.jar;C:\_WEIRD\JMSServer\MessageQueue3\lib\jsse.jar;C: \

_WEIRD\JMSServer\MessageQueue3\lib\jnet.jar;C:\_WEIRD\JMSServer\MessageQueue3\l i

b\jcert.jar;C:\_WEIRD\JMSServer\MessageQueue3\lib\ext

argv[2]=-Dimq.home=C:\_WEIRD\JMSServer\MessageQueue3

argv[3]=-Dimq.varhome=C:\_WEIRD\JMSServer\MessageQueue3\var

argv[4]=-Xms16m

argv[5]=-Xmx192m

Broker Arguments

iMQ Broker: Starting "C:\Program Files\Java\jre1.5.0\bin\java" "-cp" "C:\_WEIRD\

JMSServer\MessageQueue3\lib\imqbroker.jar;C:\_WEIRD\JMSServer\MessageQueue3\lib \

imqutil.jar;C:\_WEIRD\JMSServer\MessageQueue3\lib\jsse.jar;C:\_WEIRD\JMSServer\ M

essageQueue3\lib\jnet.jar;C:\_WEIRD\JMSServer\MessageQueue3\lib\jcert.jar;C:\_W E

IRD\JMSServer\MessageQueue3\lib\ext" "-Dimq.home=C:\_WEIRD\JMSServer\MessageQueu

e3" "-Dimq.varhome=C:\_WEIRD\JMSServer\MessageQueue3\var" "-Xms16m" "-Xmx192m" c

om.sun.messaging.jmq.jmsserver.Broker

[29/11월/2004:10:24:32 KST]

=============================================================================== =

Sun Java(tm) System Message Queue

Sun Microsystems, Inc.

Version: 3.5 SP2 (Build 48-G)

Compile: Fri 08/27/2004

Copyright ? 2004 Sun Microsystems, Inc. All rights reserved.

Use is subject to license terms.

This product includes code licensed from RSA Data Security.

=============================================================================== =

Java Runtime: 1.5.0 Sun Microsystems Inc. C:\Program Files\Java\jre1.5.0

[29/11월/2004:10:24:32 KST]IMQ_HOME=C:\_WEIRD\JMSServer\MessageQueue3

[29/11월/2004:10:24:32 KST] IMQ_VARHOME=C:\_WEIRD\JMSServer\MessageQueue3\var

[29/11월/2004:10:24:32 KST] Windows 2000 5.0 x86 pc01 (2 cpu) Administrator

[29/11월/2004:10:24:32 KST] Java Heap Size: max=195136k, current=16320k

[29/11월/2004:10:24:32 KST] Arguments:

[29/11월/2004:10:24:32 KST] [B1060]: Loading persistent data...

[29/11월/2004:10:24:32 KST] Using built-in file-based persistent store: C:\_WEIR

D\JMSServer\MessageQueue3\var\instances\imqbroker\

[29/11월/2004:10:24:33 KST] [B1039]: Broker "imqbroker@pc01:7676" ready.

[29/11월/2004:10:24:48 KST] ERROR [B3100]: Unexpected Broker Internal Error : [r

eceived unexpected exception ] :

java.lang.IllegalAccessError: tried to access field com.sun.messaging.jmq.io.Sys

MessageID.sequence from class com.sun.messaging.jmq.io.Packet

at com.sun.messaging.jmq.io.Packet.getSequence(Packet.java:394)

at com.sun.messaging.jmq.jmsserver.data.handlers.HelloHandler.handle(Hel

loHandler.java:261)

at com.sun.messaging.jmq.jmsserver.data.PacketRouter.handleMessage(Packe

tRouter.java:146)

at com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection.readData(IM

QConnection.java:1747)

at com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection.process(IMQ

Connection.java:791)

at com.sun.messaging.jmq.jmsserver.service.imq.OperationRunnable.process

(OperationRunnable.java:135)

at com.sun.messaging.jmq.jmsserver.util.pool.BasicRunnable.run(BasicRunn

able.java:455)

at java.lang.Thread.run(Unknown Source)

[29/11월/2004:10:24:48 KST] ERROR [B3100]: Unexpected Broker Internal Error : [r

eceived unexpected exception ] :

java.lang.IllegalAccessError: tried to access field com.sun.messaging.jmq.io.Sys

MessageID.port from class com.sun.messaging.jmq.io.Packet

at com.sun.messaging.jmq.io.Packet.setPort(Packet.java:721)

at com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection.writeData(I

MQConnection.java:1852)

at com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection.process(IMQ

Connection.java:778)

at com.sun.messaging.jmq.jmsserver.service.imq.OperationRunnable.process

(OperationRunnable.java:135)

at com.sun.messaging.jmq.jmsserver.util.pool.BasicRunnable.run(BasicRunn

able.java:455)

at java.lang.Thread.run(Unknown Source)

[29/11월/2004:10:29:24 KST] ERROR [B3100]: Unexpected Broker Internal Error : [r

eceived unexpected exception ] :

java.lang.IllegalAccessError: tried to access field com.sun.messaging.jmq.io.Sys

MessageID.port from class com.sun.messaging.jmq.io.Packet

at com.sun.messaging.jmq.io.Packet.setPort(Packet.java:721)

at com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection.writeData(I

MQConnection.java:1852)

at com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection.process(IMQ

Connection.java:778)

at com.sun.messaging.jmq.jmsserver.service.imq.OperationRunnable.process

(OperationRunnable.java:135)

at com.sun.messaging.jmq.jmsserver.util.pool.BasicRunnable.run(BasicRunn

able.java:455)

at java.lang.Thread.run(Unknown Source)

[29/11월/2004:10:29:24 KST] ERROR [B3100]: Unexpected Broker Internal Error : [r

eceived unexpected exception ] :

java.lang.IllegalAccessError: tried to access field com.sun.messaging.jmq.io.Sys

MessageID.sequence from class com.sun.messaging.jmq.io.Packet

at com.sun.messaging.jmq.io.Packet.getSequence(Packet.java:394)

at com.sun.messaging.jmq.jmsserver.data.handlers.HelloHandler.handle(Hel

loHandler.java:261)

at com.sun.messaging.jmq.jmsserver.data.PacketRouter.handleMessage(Packe

tRouter.java:146)

at com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection.readData(IM

QConnection.java:1747)

at com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection.process(IMQ

Connection.java:791)

at com.sun.messaging.jmq.jmsserver.service.imq.OperationRunnable.process

(OperationRunnable.java:135)

at com.sun.messaging.jmq.jmsserver.util.pool.BasicRunnable.run(BasicRunn

able.java:455)

at java.lang.Thread.run(Unknown Source)

and this is my simple progam..

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Hashtable;

import javax.jms.ObjectMessage;

import javax.jms.Session;

import javax.jms.TopicConnection;

import javax.jms.TopicPublisher;

import javax.jms.TopicSession;

import javax.naming.Context;

import com.sun.messaging.Topic;

import com.sun.messaging.TopicConnectionFactory;

public class TPublisher3 {

public static void main(String[] args) {

new TPublisher3().publish();

}

public void publish() {

BufferedReader reader = new BufferedReader(new InputStreamReader(

System.in));

Hashtable env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY,

"com.sun.jndi.fscontext.RefFSContextFactory");

try {

TopicConnectionFactory factory = new TopicConnectionFactory();

Topic topic = new Topic();

factory.setProperty("imqAddressList", "mq://localhost:7676/jms");

factory.setProperty("imqConnectionURL", "");

TopicConnection connection = factory.createTopicConnection("admin", "admin");

TopicSession session = connection.createTopicSession(false,

Session.AUTO_ACKNOWLEDGE);

TopicPublisher publisher = session.createPublisher(topic);

System.out.println(factory.getCurrentConfiguration());

String messageText = null;

while (true) {

System.out.println("Enter message to send or 'quit':");

messageText = reader.readLine();

if ("quit".equals(messageText))

break;

ObjectMessage message = session.createObjectMessage(messageText);

publisher.publish(message);

}

//Exit

reader.close();

connection.close();

} catch (Exception e) {

e.printStackTrace();

System.exit(1);

}

}

}

there is only one "Sun Java System Message Queue" in my system.

Thanks in advance.

BMK.

[8722 byte] By [blueist] at [2007-11-25 18:18:51]
# 1

Have you copied or moved any imq related jar files

since the previous start of the broker ?

- specifically imq.jar

Have you made changes to your class path since the

last restart of the broker ?

I've seen this exception stack trace once before.

In that case, it was triggered by copying jar files

into the /usr/java/jre/lib/ext directory.

This problem occurs because there are a couple of

class files which are duplicated in two different jar

files ...

Here is what happened in that situation:

1. the vm starts up and loaed imq.jar from the ext

directory which contains SysMessageID

2. imqbrokerd then loads the user classes imqbroker.jar

and imqutil.jar from a different location.

These class files contain the Packet class (which

uses SysMessageID)

The ext directory is loaded by a different class loader ..

this means that Packet (loaded from imqbroker.jar) can

not legally access SysMessageID (and an exception is

thrown).

To fix this issue, remove the extra copy of the jar file from

the class path (or ext directory) or change the class path

(imq.jar was not designed to be a standard extension)

I belive that there is a bug filed against the product that

two different jar files should not contain the same

class ... but I havent located the bugid yet

I'll post the bug once I find it

Linda_Schneider at 2007-7-3 18:13:08 > top of Java-index,Application & Integration Servers,Sun Java System Message Queue...