我可以弄清楚如何通过jt400连接到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的每个示例都引用了一个类似于此的示例。
documentation似乎都指向AS400系统对象,它们是对servername,user,pass等的硬编码引用。
有更好的方法可以将DataQueue()
与JNDI参考一起使用吗?
答案 0 :(得分:0)
如上面的注释中所假设的,DataQueue根本不是JDBC连接的一部分,它不能用于配置连接以用于读取和写入DataQueue。由于是这种情况,即使jt400库与JDBC连接,它也不能共享JDBC使用的连接方法。除非在DataQueue / Java examples online(所有其中1个)中指定了硬编码连接,否则需要属性文件或其他基于服务器的解决方案。