|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
Erreor MQJMS2007 with big files |
« View previous topic :: View next topic » |
Author |
Message
|
nicomede |
Posted: Tue Sep 16, 2003 12:34 am Post subject: Erreor MQJMS2007 with big files |
|
|
Newbie
Joined: 09 Jul 2003 Posts: 7
|
Hello readers,
I'm having the following error when trying to send a big file (5 Mo) to MQ via a JMS prog :
javax.jms.JMSException: MQJMS2007: Impossible de transmettre un message a la file d'attente MQ.
at com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:530)
at com.ibm.mq.jms.MQQueueSender.sendInternal(MQQueueSender.java:791)
at com.ibm.mq.jms.MQQueueSender.send(MQQueueSender.java:225)
at com.ibm.mq.jms.MQQueueSender.send(MQQueueSender.java:258)
at com.altair.mq.MQSend.sendFromFile(MQSend.java:426)
at com.altair.mq.MQSend.run(MQSend.java:371)
at java.lang.Thread.run(Thread.java:479)
com.ibm.mq.MQException: MQJE001 : Code achÞvement 2, raison 2031
at com.ibm.mq.MQQueue.putMsg2(MQQueue.java:1349)
at com.ibm.mq.jms.MQQueueSender.sendInternal(MQQueueSender.java:771)
at com.ibm.mq.jms.MQQueueSender.send(MQQueueSender.java:225)
at com.ibm.mq.jms.MQQueueSender.send(MQQueueSender.java:258)
at com.altair.mq.MQSend.sendFromFile(MQSend.java:426)
at com.altair.mq.MQSend.run(MQSend.java:371)
at java.lang.Thread.run(Thread.java:479)
What can I do to resolve the PB ?
Thanks for your help.
N.D. |
|
Back to top |
|
 |
jefflowrey |
Posted: Tue Sep 16, 2003 6:14 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
Reason Code 2031 is MQRC_MSG_TOO_BIG_FOR_Q_MGR. This means that your queue manager has it's maximum message size property set smaller than the size of your message. It's probably set to the default 4MB size.
You will need to change this parameter on your queue manager, and on your queue and any other queue that will need to process this message. And on your channels and your transmit queues. |
|
Back to top |
|
 |
zhouyq |
Posted: Sun Oct 02, 2005 6:18 am Post subject: same problem with error MQJMS2007 |
|
|
Newbie
Joined: 02 Oct 2005 Posts: 6
|
When I put msg larger than 2.9M, My program will report
Error like this
javax.jms.JMSException: MQJMS2007: (chinese part here, means can't put message to queue)
at com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:530)
at com.ibm.mq.jms.MQQueueSender.sendInternal(MQQueueSender.java:791)
at com.ibm.mq.jms.MQQueueSender.send(MQQueueSender.java:225)
at com.ibm.mq.jms.MQQueueSender.send(MQQueueSender.java:258)
at com.njusoft.ibmmq.MQTranslator.doMQSendBytesMessage(MQTranslator.java:231)
at traffic.archives.transport.ArchSender.doSendOrSaveEODocument2MQ(ArchSender.java:1120)
at traffic.archives.servlets.ArchivesSend.doPost(ArchivesSend.java:377)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at traffic.archives.usermanage.web.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:105)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:211)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:805)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:696)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
at java.lang.Thread.run(Thread.java:534)
And the config for msg size in queue, queue mgr, channel is already 4M.
My program is like this:
package com.abc.ibmmq;
import java.io.*;
import java.util.*;
import com.ibm.mq.jms.*;
import javax.jms.*;
public class MQTranslator {
/*定义附加信息的名称*/
public static final String XMLCONTENTBODY="xmlcontentbody";
public static final String CONTENTSIZE="size";
public static final String DocumentType="documenttype";
public static final String SENDDEPTSGUIDARRAYSTR="senddepts"; //发送的单位GUID的字符串 比如“danwei danwei2 danwei3 ..."
public static final String SENDDOCUMENT_TITLE="documenttitle"; //发送的文件的标题
public static final String SRCSENDDEPTID="srcdeptid"; //发送单位的Guid
public static final String SRCSENDDEPTNAME="srcdeptname"; //发送单位的名称
public static final String MSGGUID="msgid"; //消息的ID
/*JMS定义要使用的对象*/
private static boolean transacted = false;
private static int acknowledgeMode = Session.AUTO_ACKNOWLEDGE;
private static String qmgrName = null;
private static String queueName = null;
private static QueueConnectionFactory queueConnectionFactory = null;
private static QueueConnection queueConnection = null;
private static QueueSession queueSession = null;
private static Queue queue = null;
private static QueueReceiver queueReceiver = null;
private static QueueBrowser queueBrowser = null;
private static QueueSender queueSender = null;
private static BytesMessage byteMessage = null;
/**
* 取得指定的队列管理器和队列名称中消息的个数
* @param strQmgrName String 队列管理器名称
* @param strQueueName String 队列名称
* @return int 返回的个数,如果返回-1则表示出现错误 >=0表示正确的返回数
*/
public synchronized static int doGetMQReceiveCount(String strQmgrName,String strQueueName)
{
qmgrName = strQmgrName;
queueName = strQueueName;
transacted=false; /*缺省事务*/
int intReturn=0;
try
{
queueConnectionFactory = (QueueConnectionFactory) new MQQueueConnectionFactory ();
((MQQueueConnectionFactory) queueConnectionFactory).setQueueManager (qmgrName);
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession (transacted, acknowledgeMode);
queue = queueSession.createQueue (queueName);
queueBrowser = queueSession.createBrowser(queue);
queueConnection.start();
Enumeration enum=queueBrowser.getEnumeration();
while(enum.hasMoreElements())
{
enum.nextElement();
intReturn++;
}
}
catch(Exception e)
{
System.out.println("读取消息个数出现错误,错误信息:"+e.getMessage());
intReturn=-1;
}
finally
{
try {
if (queueBrowser != null)
queueBrowser.close();
}
catch (JMSException e) {
e.printStackTrace();
}
try
{
if (queueSession != null)
queueSession.close();
}
catch (JMSException e) {
e.printStackTrace();
}
try
{
if (queueConnection != null)
queueConnection.close();
}
catch (JMSException e) {
e.printStackTrace();
}
}
return intReturn;
}
/**
* 队列消息接收程序
* @param strQmgrName String 队列管理器名称
* @param strQueueName String 队列名称
* @param intMaxLength int 最大接收的数量 如果队列中的数量小于该数量,则全部接收,反之则接收该数量
* @return ArrayList 返回的是ArrayList的对象 可以通过ArrayList的size()来获取返回的实际的数量
*/
public synchronized static ArrayList doMQReceiveBytesMessage(String strQmgrName,String strQueueName,int intMaxLength)
{
ArrayList arrlist = new ArrayList();
qmgrName = strQmgrName;
queueName = strQueueName;
transacted=true; /*缺省事务*/
try
{
queueConnectionFactory = (QueueConnectionFactory) new MQQueueConnectionFactory ();
((MQQueueConnectionFactory) queueConnectionFactory).setQueueManager (qmgrName);
queueConnection = queueConnectionFactory.createQueueConnection ();
queueSession = queueConnection.createQueueSession (transacted, acknowledgeMode);
queue = queueSession.createQueue (queueName);
queueReceiver = queueSession.createReceiver (queue);
queueConnection.start ();
for (int i = 1;i<intMaxLength+1 ; i ++)
{
Message message = queueReceiver.receive (1000 * 1); // 暂停的时间间隔 单位 毫秒
if (message == null)
break;
if (message instanceof BytesMessage)
{
int size = ((BytesMessage) message).getIntProperty(CONTENTSIZE);
byte[] bt = new byte[size];
((BytesMessage) message).readBytes(bt);
Enumeration emu=message.getPropertyNames();
Hashtable ht=new Hashtable();
ht.put(XMLCONTENTBODY,bt);
while(emu.hasMoreElements())
{
String strTemp=(String)emu.nextElement();
Object tmpObj = message.getObjectProperty(strTemp);
ht.put(strTemp,tmpObj);
}
arrlist.add(ht);
}
queueSession.commit ();
}
}catch(JMSException jmsee)
{
System.out.println("出现错误:"+jmsee.getMessage());
try
{
queueSession.rollback();
}catch(Exception e)
{
e.printStackTrace();
}
}finally
{
try {
if (queueReceiver != null)
queueReceiver.close();
}
catch (JMSException e) {
e.printStackTrace();
}
try
{
if (queueSession != null)
queueSession.close();
}
catch (JMSException e) {
e.printStackTrace();
}
try
{
if (queueConnection != null)
queueConnection.close();
}
catch (JMSException e) {
e.printStackTrace();
}
}
return arrlist;
}
/**
* 发送Bytes类型的消息
* @param strQmgrName String 队列管理器名称
* @param strQueueName String 队列名称
* @param btTextMessage String 消息主体
* @param htAnnInfo Hashtable 附加信息对象
* @return boolean 返回值
*/
public synchronized static boolean doMQSendBytesMessage(String strQmgrName,String strQueueName,byte[] btTextMessage,Hashtable htAnnInfo)
{
boolean blSendOk=false;
qmgrName = strQmgrName;
queueName = strQueueName;
transacted = true;
acknowledgeMode = Session.CLIENT_ACKNOWLEDGE;
try
{
queueConnectionFactory = (QueueConnectionFactory) new MQQueueConnectionFactory ();
((MQQueueConnectionFactory) queueConnectionFactory).setQueueManager (qmgrName);
queueConnection = queueConnectionFactory.createQueueConnection ();
queueSession = queueConnection.createQueueSession (transacted, acknowledgeMode);
queue = queueSession.createQueue (queueName);
queueSender = queueSession.createSender (queue);
//textMessage = queueSession.createTextMessage ();
byteMessage = queueSession.createBytesMessage();
//textMessage.setText (strTextMessage);
byteMessage.writeBytes(btTextMessage);
//queueSender.send (textMessage);
byteMessage.setIntProperty(CONTENTSIZE,btTextMessage.length);
/*将一些属性值写入消息*/
if(htAnnInfo!=null)
{
Enumeration emu=htAnnInfo.keys();
while (emu.hasMoreElements()) {
String strTemp = (String) emu.nextElement();
String strTempValue = (String) htAnnInfo.get(strTemp);
byteMessage.setStringProperty(strTemp, strTempValue);
}
}
queueSender.send(byteMessage);
queueSession.commit();
blSendOk=true;
}
catch(JMSException jmsee)
{
System.out.println("出现错误:"+jmsee.getMessage());
blSendOk=false;
try
{
queueSession.rollback();
}
catch (Exception e) {
e.printStackTrace();
}
}finally
{
try {
if (queueSender != null)
queueSender.close();
}
catch (JMSException e) {
e.printStackTrace();
}
try
{
if (queueSession != null)
queueSession.close();
}
catch (JMSException e) {
e.printStackTrace();
}
try
{
if (queueConnection != null)
queueConnection.close();
}
catch (JMSException e) {
e.printStackTrace();
}
}
return blSendOk;
}
public static void main(String args[]) throws Exception
{
System.out.println("当前消息数量:"+doGetMQReceiveCount("sshtest","QJTTLocal"));
for(int i=0;i<10;i++)
{
java.io.FileInputStream fis=new java.io.FileInputStream(new File("c:/recxml/OfficeDocument.xml"));
byte filebyte[]=new byte[fis.available()];
fis.read(filebyte);
fis.close();
Hashtable ht=new Hashtable();
ht.put(DocumentType,"0");
String strSendDepts="danwei1 danwei2 danwei3 danwei4 danwei5 danwei6";
System.out.println("长度:"+strSendDepts.length()+": "+strSendDepts);
ht.put(SENDDEPTSGUIDARRAYSTR,strSendDepts);
doMQSendBytesMessage("sshtest","QJTTLocal",filebyte,ht);
}
int j=0;
while(doGetMQReceiveCount("sshtest","QJTTLocal")>9)
{
ArrayList arr = doMQReceiveBytesMessage("sshtest", "QJTTLocal", 1);
System.out.println(arr.size());
for (int i = 0; i < arr.size(); i++) {
j++;
FileOutputStream fos = new FileOutputStream("e:/out" + j + ".xml");
Hashtable ht1=(Hashtable)arr.get(i);
System.out.println(ht1.get(CONTENTSIZE));
String strTemp=(String)ht1.get(SENDDEPTSGUIDARRAYSTR);
System.out.println("长度:"+strTemp.length()+":"+strTemp);
String strArr[]= com.njusoft.util.Utility.split(strTemp," ");
for(int m=0;m<strArr.length;m++)
{
System.out.println(m+" : "+strArr[m]);
}
fos.write((byte[])ht1.get(XMLCONTENTBODY));
fos.close();
}
}
}
} |
|
Back to top |
|
 |
JT |
Posted: Sun Oct 02, 2005 9:17 am Post subject: |
|
|
Padawan
Joined: 27 Mar 2003 Posts: 1564 Location: Hartford, CT.
|
Quote: |
javax.jms.JMSException: MQJMS2007: (chinese part here, means can't put message to queue) |
.......but did it include a Reason Code ?
Were there any other messages, possibly a MQJMS2008 ? |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|