2017-01-19 16 views
1

Я могу понять, как подключиться к AS400 через jt400 с JNDI ресурсов просто отлично:AS400 система с JNDI

Connection conn = null; 
    Statement stmt = null; 
    try { 
     Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 
     conn = ((DataSource) ctx.lookup("jdbc/AS400")).getConnection(); 
     System.out.println(conn.getClientInfo()); 

     stmt = conn.createStatement(); 
     //SQL data fetch using the connection 
     ResultSet rs = stmt.executeQuery("SELECT * FROM LIBRARY.TABLE"); 
     while (rs.next()) { 
      System.out.println(rs.getString("COLUMN1")); 
     } 
     conn.close(); 
     conn = null; 
    } 
    catch(Exception e){System.out.println(e);} 

Однако другая часть приложения использует DataQueues (из той же jt400 библиотеки):

String queue = "/QSYS.LIB/" + libraryName +".LIB/" + queueName +".DTAQ"; 

    try{ 
     system = new AS400(server, user, pass); 
     DataQueue dq = new DataQueue(system, queue); 

     // Convert the Data Strings to IBM format 
     byte[] byteData = message.getBytes("IBM285"); 

     dq.write(byteData); 
     System.out.println("Wrote to DataQueue"); 

    }catch(Exception e){ 
     e.printStackTrace(); 
     System.err.println(e); 
    }finally{ 
     // Make sure to disconnect 
     if(system != null){ 
      try{ 
       system.disconnectAllServices(); 
       System.out.println("Disconnected from DataQueue."); 
      }catch(Exception e){ 
       System.err.println(e); 
      } 
     } 
    } 

Внутри этого рабочего кода для DataQueues ссылок server, user, pass, что не является идеальным.

Я хотел бы использовать соединение AS400 JNDI, которое я уже настроил, но каждый пример, который я вижу о подключении Java к DataQueues, ссылается на пример, подобный этому.

The documentation все, кажется, указывают на объекты AS400 системы, которые жестко закодированные ссылки на имясервера, пользователю пройти и т.д.

Есть ли лучший способ использовать DataQueue() с ссылкой JNDI?

+1

Ум, здесь есть две вещи: с одной стороны у вас есть источник данных, открытый через JNDI (то есть доступ к БД), с другой стороны, доступ к объектам AS400 через API «jtopen» (т.е. доступ к системным объектам), это два разных вещи –

+0

Итак, ответ нет (AFAIK) –

+0

Они оба используют драйвер jt400, как раз на данный момент, двумя разными способами. –

ответ

0

Как принято в комментариях выше, DataQueue вообще не является частью соединения JDBC, его нельзя использовать для настройки соединения для использования для чтения и записи в DataQueue. Так как это так, он не может также использовать методы соединения, которые использует JDBC, хотя библиотека jt400 подключается к JDBC. Файл свойств или другие серверные решения требуются, если в DataQueue/Java examples online (все 1 из них) не указано жестко закодированное соединение.