weblogic.jms.common.InvalidClientIDException: Client id, BibleJMSClient, is in use
BibleJMSClient 是我定义的client id
运行AsyncQueueReceiver 进行接受可以收到,队列中的消息
但是不关闭AsyncQueueReceiver 运行发送程序 BibleQueueSender 出现上面的错误
package bible.jms;
import javax.jms.*;
import javax.naming.*;
import java.util.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class BibleQueueSender {
public BibleQueueSender() {
}
public static void main(String args[]) {
Context ctx= null;
Hashtable ht= new Hashtable();
QueueConnectionFactory qfactory=null;
QueueConnection qconn =null;
QueueSession qsession=null;
QueueSender qsender=null;
Queue q=null;
TextMessage textMsg=null;
String msg;
try {
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
ctx=new InitialContext(ht);
qfactory=(QueueConnectionFactory)ctx.lookup("BibleJMSFactory");
qconn =qfactory.createQueueConnection();
qsession=qconn.createQueueSession(false,javax.jms.QueueSession.AUTO_ACKNOWLEDGE);
q=(Queue) ctx.lookup("BibleJMSQueue");
qsender=qsession.createSender(q);
System.out.println("dddddddd...");
textMsg=qsession.createTextMessage();
for (int i=0;i<100;i++) {
msg="Message # " + i;
textMsg.clearBody();
textMsg.setIntProperty("serverity",i);
textMsg.setText(msg);
//System.out.println("Sending Message: "+ msg);
qsender.send(textMsg);
}
//textMsg.setText("stop");
//qsender.send(textMsg);
System.out.println("finished...");
}catch (Exception e){
e.printStackTrace();
}
finally {
try {
qsender.close();
qsession.close();
qconn.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
package bible.jms;
import javax.jms.*;
import javax.naming.*;
import java.util.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class AsyncQueueReceiver implements MessageListener {
private boolean finished =false;
private Context ctx= null;
private Hashtable ht= new Hashtable();
private QueueConnectionFactory qfactory=null;
private QueueConnection qconn =null;
private QueueSession qsession=null;
private QueueReceiver qreceiver=null;
private Queue q=null;
public void init() {
try {
ht= new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
ctx=new InitialContext(ht);
qfactory=(QueueConnectionFactory)ctx.lookup("BibleJMSFactory");
qconn =qfactory.createQueueConnection();
qsession=qconn.createQueueSession(false,javax.jms.QueueSession.AUTO_ACKNOWLEDGE);
q=(Queue) ctx.lookup("BibleJMSQueue");
qreceiver= qsession.createReceiver(q);
qreceiver.setMessageListener(this);
qconn.start();
} catch (Exception e){
e.printStackTrace();
}
}
public void close() throws JMSException
{
try {
qreceiver.close();
qsession.close();
qconn.close();
}catch (Exception e){
e.printStackTrace();
}
}
public AsyncQueueReceiver() {
}
public void onMessage(Message message) {
if (message instanceof TextMessage){
try {
TextMessage textMessage=(TextMessage)message;
String msg= textMessage.getText();
System.out.println("Received Message :"+ msg);
if (msg.equals("stop")) {
synchronized (this) {
finished=true;
this.notifyAll();
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) {
try {
AsyncQueueReceiver qr= new AsyncQueueReceiver();
qr.init();
System.out.println("aaaaaaaaa...");
synchronized (qr) {
while(!qr.finished) {
try {
qr.wait();
}
catch (InterruptedException ie){}
}
qr.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}