2017-07-04 2 views
0

Sur la base de la question thefollowing:Accès IBM MQ via un agent Domino - JMSException

Connecting to a Websphere MQ in Java with SSL/Keystore

Je mis en place un agent Domino pour accéder à IBM MQ. Cependant, je reçois le message:

javax.jms.JMSException: MQJMS2005: Échec de la création MQQueueManager pour 'ibmmq.mycorp.se:QMANAGER'

J'utilise le code suivant:

import lotus.domino.*; 

import javax.jms.*; 
import javax.net.ssl.KeyManagerFactory; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSocketFactory; 
import javax.net.ssl.TrustManagerFactory; 

import com.ibm.mq.jms.JMSC; 
import com.ibm.mq.jms.MQQueueConnectionFactory; 

import java.io.InputStream; 
import java.security.KeyStore; 


public class JavaAgent extends AgentBase { 

    /* 
    * not working. factory incorrect set? 
    */ 

    private static final boolean debug = true; 
    private static final boolean debugDefault = true; 


    String msg; 

    public void NotesMain() { 

     lotus.domino.Session s = getSession(); 
     OpenLogItem oli = new OpenLogItem(s); 

     try {   
      msg = "Agent started"; 
      toLogDebug(msg); 

      Environment env = setEnvVariables(); 

      InputStream res = this.getClass().getResourceAsStream("key.jks"); 
      char[] pw = {'p','a','s','s','w','o','r','d'}; 

      KeyStore ks; 
      ks = KeyStore.getInstance("JKS"); 
      ks.load(res, pw); 

      msg = "after keystore loaded"; 
      toLogDebug(msg); 

      // Create a keystore object for the truststore 
      KeyStore trustStore = KeyStore.getInstance("JKS"); 

      InputStream res2 = this.getClass().getResourceAsStream("key.jks"); 


      // Open our file and read the truststore (no password) 
      trustStore.load(res2, null); 

      KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
      TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 

      keyManagerFactory.init(ks, pw); 
      trustManagerFactory.init(trustStore); 

      msg = "After Managers .init."; 
      toLogDebug(msg);     

      SSLContext sslContext = SSLContext.getInstance("SSL_TLS"); 

      msg = "SSLContext provider: " + sslContext.getProvider().toString(); 
      toLogDebug(msg);  

      sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); 

      msg = "After sslContext.init."; 
      toLogDebug(msg); 

      SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); 

      msg = "After getSocketFactory()"; 
      toLogDebug(msg); 

      // Create default MQ connection factory 
      MQQueueConnectionFactory factory = new MQQueueConnectionFactory(); 

      msg = "After MQQueueConnectionFactory()"; 
      toLogDebug(msg); 

      // Customize the factory 
      factory.setSSLSocketFactory(sslSocketFactory); 
      // Use javac SSLTest.java -Xlint:deprecation 
      factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP); 
      factory.setQueueManager(env.getQueManager()); 
      factory.setHostName(env.getHost()); 
      factory.setChannel(env.getChannel()); 
      factory.setPort(env.getPort()); 
      factory.setSSLFipsRequired(false); 
      factory.setSSLCipherSuite("TLS_RSA_WITH_AES_256_CBC_SHA256"); 

      msg = "After factory set"; 
      toLogDebug(msg); 

      QueueConnection connection = null; 
      connection = factory.createQueueConnection("",""); //empty user, pass to avoid MQJMS2013 messages 

      msg = "after createQueueConnection(\"\",\"\")"; 
      toLogDebug(msg); 

      connection.start(); 
      msg = "JMS SSL client connection started!"; 
      toLogDebug(msg); 
      connection.close(); 

      msg = "Agent done!"; 
      toLogDebug(msg); 
     } catch (JMSException ex) { 
      oli.logError(ex); 
      } catch (Exception ex){ 
      oli.logError(ex); 
      } 
    } 

    public Environment setEnvVariables(){ 

     Environment env = null; 

     lotus.domino.Session s = getSession(); 
     try{ 
      Database adminDb = s.getCurrentDatabase(); 
      if (adminDb.isOpen()){ 
       View adminVw = adminDb.getView("settings"); 
       if (null != adminVw){ 
        adminVw.setAutoUpdate(false); 
        Document adminDoc = adminVw.getFirstDocument(); 
        if (null != adminDoc){ 

         env = new Environment(); 
         if (adminDoc.hasItem("mqhost")){        
          env.setHost(adminDoc.getItemValueString("mqhost")); 
         } 
         if (adminDoc.hasItem("mqport")){ 
          env.setPort(Integer.parseInt(adminDoc.getItemValueString("mqport"))); 
         } 
         if (adminDoc.hasItem("mqchannel")){ 
          env.setChannel(adminDoc.getItemValueString("mqchannel")); 
         } 
         if (adminDoc.hasItem("mqquemanager")){ 
          env.setQueManager(adminDoc.getItemValueString("mqquemanager")); 
         }     

        } 
       } 

      } 
     }catch(Exception e){ 
      // 
     } 

     return env; 

    } 

    public void toLogDebug(String msg){ 
     if (debug){ 
      lotus.domino.Session session = getSession(); 
      OpenLogItem oli = new OpenLogItem(session); 
      oli.logEvent(msg, OpenLogItem.SEVERITY_LOW, null); 
     } 
    } 

    public void toLogDefault(String msg){ 
     if (debugDefault){ 
      lotus.domino.Session session = getSession(); 
      OpenLogItem oli = new OpenLogItem(session); 
      oli.logEvent(msg, OpenLogItem.SEVERITY_HIGH, null); 
     } 
    } 

    public class Environment{ 

     String host; 
     int port; 
     String channel; 
     String queManager; 

     lotus.domino.Session s = getSession(); 
     OpenLogItem oli = new OpenLogItem(s); 

     public Environment(){ 
      oli.logEvent("Environment constructor", OpenLogItem.SEVERITY_LOW, null); 
     } 

     public String getHost() { 
      return host; 
     } 

     public void setHost(String host) { 
      this.host = host; 
     } 

     public int getPort() { 
      return port; 
     } 

     public void setPort(int port) { 
      this.port = port; 
     } 

     public String getChannel() { 
      return channel; 
     } 

     public void setChannel(String channel) { 
      this.channel = channel; 
     } 

     public String getQueManager() { 
      return queManager; 
     } 

     public void setQueManager(String queManager) { 
      this.queManager = queManager; 
     }  
    } 


} 

Je stocke mes variables d'environnement dans un document de mot clé Notes. Est-ce que quelqu'un a une idée pourquoi ce code se brise à:

connection = factory.createQueueConnection("",""); 

?

Le fichier clé est inclus comme une ressource avec l'agent et m'a été fournie.

Répondre

0

Est-ce que quelqu'un a une idée de pourquoi ce code casse à:

connection = factory.createQueueConnection("",""); 

C'est la ligne de code qui provoque en fait le client de se connecter au gestionnaire de file d'attente. Utilisez-vous IBM JRE ou Oracle JRE? Quel est le message d'erreur dans le journal des erreurs du gestionnaire de files d'attente?

Vous fournissez un nom d'utilisateur et mot de passe vide. Très mauvaise idée. En outre, les règles CHLAUTH du gestionnaire de files d'attente doivent bloquer un UserId vide.

+0

Salut Roger, Je définis mon agent à l'utilisateur un ID utilisateur fourni, mot de passe, le keystore est également configuré pour cet utilisateur. Néanmoins, je reste coincé à la partie où je crée une queconnexion pour la MQQueueconnectionfactory. Existe-t-il de toute façon une recherche sur la partie de la configuration d'usine qui pourrait causer un problème? –

+0

Voici mon message d'erreur: javax.jms.JMSException: MQJMS2005: impossible de créer MQQueueManager pour 'ibmmq.mycorp.se:QMANAGER' à l'adresse com.ibm.mq.jms.services.ConfigEnvironment.newException (ConfigEnvironment.java:586) à com.ibm.mq.jms.MQConnection.createQM (MQConnection.java:2110) à –

+0

com.ibm.mq.jms.MQConnection.createQMNonXA (MQConnection.java:1532) à com.ibm.mq. jms.MQQueueConnection. (MQQueueConnection.java:150) à com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection (MQQueueConnectionFactory.java:185) à JavaAgent.NotesMain (Source inconnue) à lotus.domino.AgentBase.runNotes (Source inconnue) à lotus.domino.NotesThread.run (Source inconnue) –