У меня есть приложение на основе JMS, в котором я работаю на Websphere 6.0, и перехожу на Websphere 7. Оба сервера Websphere поддерживаются сервером Websphere MQ 6.0.При попытке развернуть тестовый сервлет на сервере Websphere 7 появляется следующее исключение:
javax.jms.JMSSecurityException: MQJMS2008: не удалось открыть очередь MQ
Websphere6.0: RHEL 5.3
Websphere 7.0.0.15: RHEL 5.3
Websphere MQ 6.0: Windows Server 2003
Код проверки сервлета:
public class JMSTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
String MQConnectionFactory, MQQueue;
public JMSTestServlet() {
super();
// TODO Auto-generated constructor stub
System.out.println("JMSTestServlet: loading");
URL urlProps = getClass().getClassLoader().getResource("META-INF/startup.properties");
Properties props = new Properties();
try
{
System.out.println("JMSTestServlet: loading properties");
props.load( urlProps.openStream() );
MQConnectionFactory = props.getProperty("MQConnectionFactory");
MQQueue = props.getProperty("MQQueue");
System.out.println("JMSTestServlet: loading properties ... done!");
sendMessage("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void sendMessage(String messageString) {
QueueConnectionFactory fact;
QueueConnection qConn = null;
try {
System.out.println("JMSTestServlet: creating context");
Context ctx = new InitialContext();
fact = (QueueConnectionFactory)ctx.lookup(MQConnectionFactory);
Destination destination = (Destination)ctx.lookup(MQQueue);
System.out.println("JMSTestServlet: creating QueueConnection");
qConn = fact.createQueueConnection();
QueueSession qSess = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer prod = qSess.createProducer(destination);
System.out.println("JMSTestServlet: sending Message");
TextMessage message = qSess.createTextMessage();
message.setText(messageString);
prod.send(message);
System.out.println("JMSTestServlet: done sendMessage()");
} catch ( JMSException ex ) {
ex.toString();
ex.printStackTrace();
ex.getLinkedException().toString();
ex.getLinkedException().printStackTrace();
} catch ( NamingException ex ) {
System.out.println("JMSTestServlet: naming exception " + ex.toString());
ex.printStackTrace();
} catch ( Exception ex ) {
System.out.println("JNDI API lookup failed: " + ex.toString());
ex.printStackTrace();
} finally {
System.out.println("JMSTestServlet: cleaning up sendMessage()");
try
{
if ( qConn != null ) qConn.close();
} catch (JMSException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String messageString = request.getParameter("message");
sendMessage(messageString);
} finally {
}
}
Свойствафайл:
MQConnectionFactory=jms/QUEUECONNFACTORY
MQQueue=jms/QUEUE
При развертывании в Websphere 6 я получаю сообщения в своих удаленных очередях.При развертывании в Websphere 7 я получаю:
[4/13/11 14:53:55:622 EDT] 0000005c ConnectionEve A J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource JMS$QUEUECONNFACTORY$JMSManagedConnection@15. The exception is: javax.jms.JMSSecurityException: MQJMS2008: failed to open MQ queue 'QUEUE'.
[4/13/11 14:53:55:622 EDT] 0000005c ConnectionEve W J2CA0206W: A connection error occurred. To help determine the problem, enable the Diagnose Connection Usage option on the Connection Factory or Data Source.
[4/13/11 14:53:55:623 EDT] 0000005c ConnectionEve A J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource jms/QUEUECONNFACTORY. The exception is: javax.jms.JMSSecurityException: MQJMS2008: failed to open MQ queue 'QUEUE'.
[4/13/11 14:53:55:625 EDT] 0000005c SystemErr R javax.jms.JMSSecurityException: MQJMS2008: failed to open MQ queue 'QUEUE'.
Я почти уверен, что настроил очереди и фабрики соединений на обоих серверах Websphere одинаково.Я в растерянности относительно того, как решить эту проблему, и Google не поможет.
Обновление 2011-04-15: Я извлек следующую ошибку из журналов:
com.ibm.mq.MQException: MQJE001: ЗавершениеКод «2», причина «2035»
Я читал об этом в нескольких местах, и я действительно не вижу, где есть разница между WAS 6 и WAS 7, чтобы этовопрос.
Я использую websphere на обоих хостах Linux от имени пользователя root.У меня есть учетная запись root, созданная на компьютере Windows с полными разрешениями для установки MQ:
setmqaut -t qmgr -m QM_webspheremq -p root + all