免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11370 | 回复: 4
打印 上一主题 下一主题

通过外部的JAVA程序调用AS400的dataqueue求教(二) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-19 11:54 |只看该作者 |倒序浏览
本帖最后由 zh82186151 于 2013-08-23 10:21 编辑

public class MessageReceive
{
        private static Logger log = Logger.getLogger(MessageReceive.class);
        AS400 as400_;
        DataQueue dq;
        RecordFormat dataFormat;

        public MessageReceive(AS400 as400) {
                as400_ = as400;
                // 产品队列。
                log.info("try to create the connection with scs host");
                dq = new DataQueue(as400_, "/QSYS.LIB/WHPTF3G1GP.LIB/SKDTMP01.DTAQ");
                log.info("successfully create the connection with scs host");
        }

        public void consume() {
                try {
                        // 一旦队列中有数据,则立即出队,否则等待
                        DataQueueEntry DQData = dq.read();
                        while (true) {                               
                                if (DQData != null) {
                                        String msg = dq.read().getString();       
                                       
                                        log.info("收到的消息长度为:"+msg.length());
                                        log.info("收到的消息为:"+msg);
                                        log.info("读取下一个记录");
                                } else {
                                        log.info("现在没有消息,等待中;Nothing to process, will check again in 10 seconds");                                                                         }
                        }
                } catch (Exception e) {
                        log.info("===========Exception found =======================");
                        e.printStackTrace();
                }
        }

        public static void main(String[] args) {
                // 构造AS400对象,建立Java应用程序与IBM i服务器的连接。
                String hostname="10.21.33.127";
                String user="candy";//AS400主机账号名
                String name="123456";//AS400主机密码
               
                AS400 as400 = new AS400(hostname, user, name);
                MessageReceive consumer = new MessageReceive(as400);
                consumer.consume();
        }
}


跪求各位大神,以上写法在程序启动后能正确读取AS400里面的dataqueue数据。但是对于新进到AS400的dataqueue里面的数据,我这个程序就读不出来了。
是不是要刷新啥东西,茫然中。各位高手请指点小弟。拜谢!

论坛徽章:
0
2 [报告]
发表于 2013-08-22 22:02 |只看该作者

没有发出异常信息,因此不好精确定位错误。
根据你的描述,估计就是在DataQueueEntry DQData = dq.read(-1);时失败了。

论坛徽章:
0
3 [报告]
发表于 2013-08-22 22:03 |只看该作者
建议你改为手工控制延时时间,改为read()试试看?

论坛徽章:
0
4 [报告]
发表于 2013-08-23 10:31 |只看该作者
回复 2# xml1988

仍旧读取不到新进到dataqueue数据。


   

论坛徽章:
0
5 [报告]
发表于 2013-08-23 19:25 |只看该作者
建议你同时测试write和read,开两个线程或者启动两个程序,一边循环等待读取,一边循环等待写入,就像测试Socket一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP