技术标签: python java linux 队列 eclipse
为了充分利用本教程,您需要:
在本教程中,您将逐步学习如何安装和配置WebSphere MQ和Rational Application Developer来开发JMS应用程序。 提供了示例应用程序以及使用已安装的产品运行这些应用程序的说明。
本教程适用于需要了解如何使用WebSphere MQ和Rational Application Developer编写和测试JMS程序的Java程序员。 假定您具有Java的中级知识和JMS的入门知识。
本教程中的说明适用于Windows环境,尽管精通其他操作系统的读者也可以将其改编为在其操作系统中使用。
可通过以下链接找到本教程中使用的产品的系统要求:
企业消息系统,有时也称为面向消息的中间件 (MOM),长期以来一直是应用程序集成的重要工具。 它们提供了一种灵活的,松散耦合的方式,可在应用程序之间交换信息。 MOM充当中介,使用存储和转发机制在应用程序之间传递数据(消息)。 应用程序不直接相互通信,而是与MOM通信,后者根据需要路由消息。 在当今的计算环境中,MOM着重于服务和面向服务的体系结构(SOA),作为这种体系结构的连接层起着至关重要的作用。 IBM WebSphere MQ是历史悠久的企业消息传递系统,并且是该市场的领导者。
过去,每个MOM供应商通常都提供一个专有的应用程序编程接口(API),以与其产品一起使用。 例如,当第三方供应商想要使用消息传递将其应用程序与企业资源计划(ERP),供应链管理(SCM)或其他应用程序集成时,他们必须在其应用程序中编写单独且不同的消息传递组件,以及用于ERP或SCM或其他系统的单独且不同的适配器,以利用其客户已安装的MOM。 随着MOM供应商数量的增加,这引起了开发和维护的麻烦。
Java消息服务(JMS)提供了一种标准的,可移植的方式,供Java程序员访问MOM产品。 JMS可移植性的关键是将API定义为一组接口。 MOM供应商提供了为他们的特定产品实现这些接口的提供程序。 此外,可通过Java命名和目录接口(JNDI)访问JMS资源,从而提供更多的可移植性和抽象性。 Java程序员使用JMS从JNDI检索称为被管理对象的JMS资源,并通过标准JMS接口访问它们,从而使他们不必了解底层消息系统的详细信息。 WebSphere MQ具有内置的JMS提供程序。
IBM Rational Application Developer(应用程序开发者)是IBM针对Java 2平台企业版(J2EE)开发的最新集成开发环境(IDE)。 尽管Application Developer支持其他供应商的运行时环境,但它是在Eclipse平台上构建的,并且经过优化以开发可在WebSphere平台上运行的应用程序。 Application Developer随附的WebSphere Application Server V6集成测试环境提供了内置的JMS提供程序,即服务集成总线(SIB)。 您可以使用此SIB来测试JMS应用程序,而无需安装单独的企业消息传递系统。
让我们来看看一些动手的东西! 在本节中,您将逐步完成安装本教程所需的软件的步骤。
C:\WSMQ
。 (请参见图2。 ) SupportPacs构成了一个资料库,是WebSphere MQ产品系列的补充。 对于本教程,我们将使用SupportPac MS0N-现有JMS Admin工具的GUI版本。 该SupportPac提供了用于管理JMS管理对象的图形用户界面。 该SupportPac需要另外两个SupportPacs才能正常工作。
SupportPacs由包含JAR文件和文档的.zip文件组成。 您将需要这些JAR文件来设置JMS管理的对象并在以后运行示例程序。
C:\RAD
(请参见图3 )。 C:\RAD\eclipse\jre\bin\java.exe
作为Java运行时文件的位置。 (参见图4。 ) 现在,您已经安装了所有软件。 在下一节中,您将安装示例代码。
C:\workspace
。 (参见图5。 ) 在继续之前,让我们详细看一下代码。 -已导入的类的三ConnectionPanel
, QSenderUI
和QReceiverUI
。 使用标准的抽象窗口工具包(AWT)工具为程序提供用户界面。 (因为这些类中没有JMS代码,所以我们不需要花任何时间来研究它们。)
带有JMS代码的第一类是QSender
。 QSenderUI
使用QSenderUI
来将消息发送到队列。 此类中的三个方法包含JMS代码: setConnection()
, setQueue()
和sendMessage()
。 setConnection()
,如清单1所示。
public void setConnection(String connectionName)
throws JMSException, NamingException, Throwable {
try {
close();
QueueConnectionFactory factory =
(QueueConnectionFactory) getInitContext().lookup(connectionName);
connection = factory.createQueueConnection();
session =
connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
} catch (Throwable e) {
setExceptionMessage(e);
throw e;
}
}
此方法将JNDI名称空间中可用的QueueConnectionFactory
的名称作为输入。 此类的方法close()
的调用可确保关闭所有QueueSender
, QueueSession
和QueueConnection
对象。 然后,通过JNDI进行查找,以检索名称作为connectionName
参数传入的QueueConnectionFactory
。 一旦QueueConnectionFactory
已被检索,它被用来创建一个QueueConnection
,其又用于创建QueueSession
。
请注意,在此方法以及所有其他方法(包含我们将要查看的JMS代码)中,所有代码都是基于JMS接口的-到处都没有特定于WebSphere MQ的代码。
接下来,检查清单2所示的setQueue()
。 当在用户界面中输入Queue
的JNDI名称时, QSenderUI
将调用此方法。
public void setQueue(String queueName)
throws JMSException, NamingException, Throwable {
try {
if (connection != null)
connection.stop();
if (sender != null)
sender.close();
Queue queue = (Queue) getInitContext().lookup(queueName);
sender = session.createSender(queue);
sender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
sender.setPriority(4);
sender.setTimeToLive(0);
connection.start();
} catch (Throwable e) {
setExceptionMessage(e);
throw e;
}
}
首先,如果需要,停止QueueConnection
并关闭QueueSender
。 然后,使用queueName
参数从JNDI中检索Queue
对象。 接下来,创建一个QueueSender
以将消息发送到Queue
,并设置QueueSender
属性。 最后,启动QueueConnection
,以允许访问消息传递系统。
我们在QSender
介绍的最后一个方法是sendMessage()
,如清单3所示。 通过QueueSender
对象将消息发送到Queue
时,将调用此方法。
public void sendMessage(String text) throws JMSException, Throwable {
if (sender != null) {
try {
TextMessage message = session.createTextMessage(text);
sender.send(message);
} catch (Throwable e) {
setExceptionMessage(e);
throw e;
}
}
}
QueueSession
对象用于使用text
参数创建TextMessage
,然后QueueSender
对象用于发送消息。
现在,看看QReceiver
类。 它还包含setConnection()
和setQueue()
方法。 因为setConnection()
方法是相同的,在QSender
,我会在这里跳过。 下面是setQueue()
方法,如清单4所示。
public void setQueue(String queueName)
throws JMSException, NamingException, Throwable {
try {
if (connection != null)
connection.stop();
if (receiver != null)
receiver.close();
Queue queue = (Queue) getInitContext().lookup(queueName);
receiver = session.createReceiver(queue);
receiver.setMessageListener(this);
connection.start();
} catch (Throwable e) {
setExceptionMessage(e);
throw e;
}
}
在明显的差异setQueue()
这里方法和setQueue()
在方法QSender
是一个QueueReceiver
创建,而不是一个QueueSender
。 但是还有一件事要看。 注意setMessageListener()
调用。 QReceiver
类是javax.jms.MessageListener
接口的实现。 通过在QueueReceiver
设置MessageListener
,将在队列中接收到的消息异步传递到MessageListener
对象。 这允许MessageListener
在消息到达时对其进行处理,并且接收者不必在Queue
查询新消息。
MessageListener
接口定义了一种方法onMessage()
。 因为QReceiver
类实现了该接口,所以它具有onMessage()
方法,如清单5所示。
public void onMessage(Message message) {
String msgText = null;
try {
msgText = ((TextMessage) message).getText();
} catch (Throwable e) {
setExceptionMessage(e);
msgText = getExceptionMessage();
} finally {
setMessage(msgText);
}
}
每当消息到达正在侦听的Queue
时,JMS都会调用此方法。 在此,消息的文本用于设置QReceiver
对象的message
属性。
QSender
和QReceiver
类的其他方法相当不言自明,并负责JNDI访问,绑定属性和异常处理。
在运行示例程序之前,您需要配置运行时环境以提供WebSphere MQ队列管理器和JMS管理的对象。
Ender
。 SYSTEM.DEAD.LETTER.QUEUE
(大小写很重要)。 您将使用SupportPac MS0N提供的JMS Admin GUI创建JMS管理的对象。 结合使用此工具和SupportPac ME01提供的JNDI支持,可以让您直接在WebSphere MQ中创建JMS管理的对象,而WebSphere MQ提供JNDI工具,而无需单独的JNDI服务器。 您可以从Application Developer中运行JMS Admin GUI。
首先,您需要设置一个Java项目,其中包括JMS Admin GUI JAR文件。
JMSAdminGUI
。 现在,您可以运行该工具并创建JMS管理的对象。
sun.boot.library.path
系统变量设置为指向适当的文件夹。 -Dsun.boot.library.path=C:\RAD\eclipse\jre\bin;C:\WSMQ\Java\lib
。 确保在开头包含连字符,并全部输入,且不包含空格或回车符。 WMQ
,然后单击创建 。 Ender
。 EnderQ
,然后单击“ 确定” 。 现在,您可以运行示例程序了。 与JMS Admin GUI一样,您需要设置VM参数和类路径以确保正确配置程序
-Djava.naming.factory.initial=com.ibm.mq.jms.context.WMQInitialContextFactory
-Djava.naming.provider.url=Ender
-Dsun.boot.library.path=C:\RAD\eclipse\jre\bin;C:\WSMQ\Java\lib
Ender
,然后按Enter或单击“ 设置” 。 EnderQ
,然后按Enter或单击“ 设置” 。 要为QSenderUI创建配置,您可以复制QReceiverUI配置,然后更改配置名称和主类。
QSenderUI
。 com.ibm.qbda.mq.p2p.QSenderUI
。 Ender
,然后按Enter或单击“ 设置” 。 EnderQ
并按Enter或单击Set 。 如简介中所述,Application Developer附带的WebSphere Application Server V6集成测试环境提供了内置的JMS提供程序。 在本部分中,您将配置队列和JMS管理的对象,以便可以在测试环境中运行示例程序的版本。
BeanBus
。 BeanQ
。 BeanQCF
。 jms/BeanQCF
。 MyBeanQ
。 jms/MyBeanQ
。 在编写桌面应用程序以连接到应用程序服务器时,最好将该应用程序打包为企业应用程序的应用程序客户端模块。 这样可以确保连接到服务器所需的所有资源均可用。
在本节中,您将导入将示例程序重新打包为应用程序客户端的项目。 完成此操作后,您可以运行程序以使用测试环境的内置消息传递。
如果查看应用程序客户端项目,您将看到每个项目都有一个带有main()
方法的Main
类。 EQSender中Main
类的main()
方法调用QSenderUI.main()
。 同样,EQReceiver中Main
类的main()
方法调用QReceiverUI.main()
。
EQReceiver
。 jms/BeanQCF
,然后按Enter或单击“ 设置” 。 jms/MyBeanQ
,然后按Enter或单击Set 。 EQSender
。 jms/BeanQCF
,然后按Enter或单击Set 。 jms/MyBeanQ
,然后按Enter或单击Set 。 现在,您已经下载并安装了用于开发,配置和测试JMS程序的IBM最新工具:WebSphere MQ和Rational Application Developer。 您还运行了一些示例程序来演示这些工具如何协同工作以为JMS开发提供完整的环境。
在下一个教程中,您将研究JMS发布-订阅程序。 您还将查看其他一些WebSphere MQ配置,这些配置可以使您的程序更加灵活。
翻译自: https://www.ibm.com/developerworks/websphere/tutorials/i-mqrad1/i-mqrad1.html
文章浏览阅读1.5w次,点赞10次,收藏129次。文章目录目录模型评估评价指标1.分类评价指标acc、recall、F1、混淆矩阵、分类综合报告1.准确率方式一:accuracy_score方式二:metrics2.召回率3.F1分数4.混淆矩阵5.分类报告6.kappa scoreROC1.ROC计算2.ROC曲线3.具体实例2.回归评价指标3.聚类评价指标1.Adjusted Rand index 调整兰德系数2.Mutual Informa..._model.score
文章浏览阅读344次。因工作需要,在Apache上使用,重新学习配置mod_jk1. 分别安装Apache和Tomcat:2. 编辑httpd-vhosts.conf: LoadModule jk_module modules/mod_jk.so #加载mod_jk模块 JkWorkersFile conf/workers.properties #添加worker信息 JkLogFil_apache mod_jk 虚拟
文章浏览阅读335次。待老夫kotlin大成,扩展:MotionLayout 与 CoordinatorLayout,DrawerLayout,ViewPager 的 交互众所周知,MotionLayout 的 动画是有完成度的 即Progress ,他在0-1之间变化,一.CoordinatorLayout 与AppBarLayout 交互时,其实就是监听 offsetliner 这个 偏移量的变化 同样..._android onoffsetchanged
文章浏览阅读8.3k次,点赞3次,收藏19次。【转】多核处理器的工作原理及优缺点《处理器关于多核概念与区别 多核处理器工作原理及优缺点》原文传送门 摘要:目前关于处理器的单核、双核和多核已经得到了普遍的运用,今天我们主要说说关于多核处理器的一些相关概念,它的工作与那里以及优缺点而展开的分析。1、多核处理器 多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核),此时处理器能支持系统总线上的多个处理器,由总..._多核处理器怎么工作
文章浏览阅读306次。1. eclipse配置lombok 拷贝lombok.jar到eclipse.ini同级文件夹下,编辑eclipse.ini文件,添加: -javaagent:lombok.jar2. myeclipse配置lombok myeclipse像eclipse配置后,定义对象后,直接访问方法,可能会出现飘红的报错。 如果出现报错,可按照以下方式解决。 ..._eclispe每次运行个新项目都需要重新配置lombok吗
文章浏览阅读1.2w次,点赞31次,收藏126次。#注意:笔者在2021/11/11当天调试过这个代码是可用的,由于pdfminer版本的更新,网络上大多数的语法没有更新,我也是找了好久的文章才修正了我的代码,仅供学习参考。1、把pdf文件移动到本代码文件的同一个目录下,笔者是在pycharm里面运行的项目,下图中的x1文件夹存储了我需要转换成文本文件的所有pdf文件。然后要在此目录下创建一个存放转换后的txt文件的文件夹,如图中的txt文件夹。2、编写代码 (1)导入所需库# coding:utf-8import ..._python批量读取文字并批量保存
文章浏览阅读1.4k次。http://blog.csdn.net/pipisorry/article/details/52902234Scala 访问修饰符Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。如果没有指定访问修饰符符,默认情况下,Scala对象的访问级别都是 public。Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层_scala ===运算符
文章浏览阅读2.6k次,点赞7次,收藏19次。ER图导出为PDF或图片格式_数据库怎么导出er图
文章浏览阅读655次。CREATE OR REPLACE TRIGGER Trg_ReimFactBEFORE UPDATEON BP_OrderFOR EACH ROWDECLAREPRAGMA AUTONOMOUS_TRANSACTION;--自制事务fc varchar2(255);BEGINIF ( :NEW.orderstate = 2AND :NEW.TransState = 1 ) THENBEG..._oracle触发器更新同一张表
文章浏览阅读513次。目录概念debouncethrottle实现debouncethrottle应用场景debouncethrottle场景举例debouncethrottle概念debounce字面理解是“防抖”,何谓“防抖”,就是连续操作结束后再执行,以网页滚动为例,debounce要等到用户停止滚动后才执行,将连续多次执行合并为一次执行。throttle字面理解是“节流”,何谓“节流”,就是确保一段时..._throttle和debounce应用在哪些场景
文章浏览阅读526次。regex() $regex 正则表达式用于模式匹配,基本上是用于文档中的发现字符串 (下面有例子)注意:若未加 @Field("名称") ,则识别mongdb集合中的key名为实体类属性名。也可以对数组进行索引,如果被索引的列是数组时,MongoDB会索引这个数组中的每一个元素。也可以对整个Document进行索引,排序是预定义的按插入BSON数据的先后升序排列。save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。_java 操作mongodb
文章浏览阅读1k次。今天push代码到github仓库时出现这个报错TACKCHEN-MB0:tc-image tackchen$ git pushremote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.remote: Please see https://github.blog/2020-12-15-token-authentication_git push remote: support for password authentication was removed on august 1