我在使用v8.0.0.4使用com.ibm.mq.jar实例化MQConnectionFactory()对象时遇到以下错误。虽然在com.ibm.mq.jar v6.0.0.1中工作正常但是正常。
维护ThreadPool大小: - false |最大ThreadPool大小: - -1 | ThreadPool非活动超时: - 0 |不可用 - : - com.ibm.msg.client.commonservices.CSIException:JMSCS0002
显示java.lang.NullPointerException 在com.ibm.msg.client.jms.internal.JmsFactoryFactoryImpl.getInstance(JmsFactoryFactoryImpl.java:170) at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.setProviderFactory(JmsConnectionFactoryImpl.java:167) 在com.ibm.mq.jms.MQConnectionFactory。(MQConnectionFactory.java:271) 在com.ibm.mq.jms.MQQueueConnectionFactory。(MQQueueConnectionFactory.java:72) 在com.SendMessage.putToQueue(SendMessage.java:66) 在com.SendMessage.main(SendMessage.java:123)
//Sending the certs
System.setProperty("javax.net.ssl.trustStore","C:\\trustStore.jks");
System.setProperty("javax.net.ssl.keyStore","C:\\keyStore.jks");
System.setProperty("com.ibm.mq.cfg.useIBMCipherMappings","false");
//Check for JCE Unlimited Strength Jurisdiction Policy files
int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES");
System.out.println(maxKeyLen);
host = s;
channel = s1;
port = j;
requestQ = s2;
factory = new MQQueueConnectionFactory();
factory.setTransportType(mqClient);
factory.setQueueManager(qmgr);
factory.setHostName(host);
factory.setChannel(channel);
factory.setPort(port);
//Use this for SSL ciphersuites
factory.setSSLCipherSuite("TLS_RSA_WITH_AES_256_CBC_SHA");
connection = factory.createQueueConnection();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
int i = 1;
sQueue = new MQQueue();
sQueue.setBaseQueueName(requestQ);
sQueue.setPersistence(-1);
sQueue.setExpiry(0L);
sQueue.setTargetClient(i);
sQueue.setPriority(5);
outTextMessage = session.createTextMessage();
outTextMessage.setText(s3);
sender = session.createSender(sQueue);
sender.send(outTextMessage);
msgId = outTextMessage.getJMSMessageID();
System.out.println(msgId);
sender.close();
session.close();
connection.close();
答案 0 :(得分:0)
host = s;
channel = s1;
port = j;
requestQ = s2;
在我看来,这是一种奇怪而糟糕的编码。你没有给我所有的代码,而是一个片段,但我可以猜测它来自一个名为putToQueue()的方法。因此,您应该将调用的名称命名为正确的名称,而不是进行无用的编码。
sQueue.setExpiry(0L);
你明白这意味着什么吗?这说消息在零毫秒到期!!!!换句话说,消息基本上会在您将其放入队列的那一刻到期。有点无意义。如果您想要无限制,则删除该行或使用“-1L”(即CMQC.MQEI_UNLIMITED)。
sQueue.setPersistence(-1);
同样,你不理解价值的含义。 “-1”表示对主题使用父持久值。您应该使用0表示非持久性(CMQC.MQPER_NOT_PERSISTENT)或1表示持久性(CMQC.MQPER_PERSISTENT)。
connection = factory.createQueueConnection();
OMG。您是否至少可以“假装”了解安全性并在createQueueConnection()方法调用上设置UserID和Password。
最后,你的start()方法在哪里?
即
connection = factory.createQueueConnection(userId, password);
connection.start();