jms 有没有知道怎么用房屋做2次房屋做抵押贷款计算器的

新发现一个品牌,貌似还不错,JMS有知道的吗?|穿搭-onlylady论坛
后使用快捷导航没有帐号?
查看: 3532|回复: 5
最后登录注册时间阅读权限170精华0积分8394帖子
最近逛商场,看到一个新开店的品牌叫MJstyle,听起来满洋气的,JMS有知道的吗?
17:52:23 上传
看他们家门店的人还挺多的,衣服感觉和HM还有ZARA挺像的,不过价格更亲民。。。。
由于卤煮每天上班没什么事,顺手上网搜索了下他们家的LOOKBOOK,瞬间有种爱上了的感觉
17:52:23 上传
这种高大上的气场,就是卤煮追求的感觉啊!!!忍不住和大家分享下~~
17:52:24 上传
里面还有,也很让人心水的说,不过相比衣服,卤煮更喜欢啊怎么破!!!!
看人家穿衣服,怎么这么帅呢,瞬间在心里OS肯定穿衣显瘦,脱衣有肉………(捂脸(っ//////////c)
17:52:30 上传
再来一张!
卤煮打算下次去的时候一定要败几件,至于为什么这次没有直接买,是因为卤煮信用卡已经透支了这事,卤煮会告诉你们吗?!!!!
最后登录注册时间阅读权限150精华0积分2004帖子
闭月羞花, 积分 2004, 距离下一级还需 1996 积分
看起来不错啊,不知道北京有没有,有空可以去逛逛~
最后登录昵称失去妳拥世界注册时间阅读权限150精华0积分2285帖子
闭月羞花, 积分 2285, 距离下一级还需 1715 积分
同喜欢男模(っ//////////c)。。。就是不知道男朋友穿上会是什么样子!!哎
最后登录注册时间阅读权限150精华0积分2245帖子
闭月羞花, 积分 2245, 距离下一级还需 1755 积分
知道上海日月光有这家,上次没进去逛,下次去走一个。
最后登录昵称岁岁好风景注册时间阅读权限130精华0积分1822帖子
沉鱼落雁, 积分 1822, 距离下一级还需 178 积分
以前还真没听过,是新品牌吗?
最后登录昵称以义走社会注册时间阅读权限150精华0积分2150帖子
闭月羞花, 积分 2150, 距离下一级还需 1850 积分
是国外的品牌吗?
夏日防晒大作战!
看《加勒比海盗5》仿妆杰克船长
清爽卸妆零负担最IN话题
一周回复最多帖
最新热门帖
最新精华帖Jms即java消息服务javamessage service,所谓的面向消息编程,主要应用在企业内部各个系统之间做接口,以异步方式传递消息数据。
Jms有2种传送模式,先来看第一种,即点对点传送模式
首先是参与整个过程的系统,总共有3个,分别是发送方系统、jms服务器、接收方系统,原理很简单,基本步骤如下:
1、& 发送方将jms消息发送到jms服务器;
2、& Jms服务器有一个消息队列,所谓队列就是先进先出;jms服务器接收到消息后,把消息放到消息队列中;
3、& 接收方主动的去jms服务器的消息队列中查询消息;
以上步骤中,有几个关键点,理解了这几个关键点,就理解原理了。关键点如下:
1、& 发送方把消息发送到jms服务器后,就不再关心消息什么时候到接收方,也不知道接收方是谁。所以这是一个异步的传输方式,发送方发送完消息后,就可以继续做自己的事情,不等待消息被接收方接收。
2、& 接收方是自己主动的去jms服务器上找消息,当接收方把消息从jms服务器读取出来后,会给jms服务器一个回复;这个回复仅给jms服务器,目的是告诉jms服务器消息已经被成功读取,可以把队列中的消息删除掉了。
3、& 队列中的消息,每次都是队首的消息被接收方消费掉,且仅仅可以消费一次;一旦被接收方消费,消息即删除。
4、& 因为消息仅能被消费一次,所以存在一个问题是消息的校验;比如有2个接收方在读取同一个消息队列,当第1个接收方把消息读取后,发现消息的内容不是自己想要的,应该是发送给第2个接收方的,但是为时已晚,因为消息仅能被消费一次,此条消息在jms服务器队列中已经被删除。
5、& 为解决上面的问题,可以利用消息过滤机制;接收方设置了自己的过滤机制后,被过滤的消息对接收方而言是不可见的。
Jms的第二种传送模式是发布/订阅模式,所谓的广播
还是由发送方系统、jms服务器、接收方系统3个系统参与,基本过程如下
1、& 发送方在jms服务器上发布一个主题(主题可以理解成一个消息队列,不过在这个模式下叫做主题更贴切)
2、& 接收方在jms服务器上订阅这个主题
3、& 发送方将消息发送到jms服务器对应的主题上
4、& Jms主动将消息转发给所有订阅主题的接收方
这种模式有一点点的限制,就在于,主题必须先与订阅;相比点对点的方式,队列是虚拟的,发送方不需要先注册队列,接收方也不需要注册队列,异步性解耦更好。
然后看看发布订阅模式的关键点:
1、& 发送发把消息发送到jms服务器,同样不关心接收方什么时候接收到消息;但是,发送方此时是可以知道谁会接收到消息的,因为接收方都订阅了嘛,当然就知道了
2、& Jms服务器接收到消息后,是主动的转发给所有的接收方
3、& 接收方同样可以设置消息过滤
Jms消息持久化
假设这么一种情况,发送方将1000条数据发送到jms服务器,已经发送成功,但是接收方还没有接收数据,突然,jms服务器down机了,当jms服务器重新启动后发现,消息队列里的数据都没有了,这是难以接受的情况。
Jms之所以适合做企业内系统间数据接口,不仅仅因为异步性,还因为可靠的传输。
Jms消息分持久性消息和临时消息,简单讲,临时消息,就是jms服务器接收到消息后,将消息保存在内存中,这种情况下如果jms服务器down了,消息数据也会丢失。
若设置jms消息的持久化属性,那么jms服务器接收到消息后,会将消息数据保存在持久介质中,例如mysql数据库,这样当jms服务器down机也不会丢失数据。
关于腾讯qq与jms
这2者是没有什么联系的,不过学习jms后总是会想到qq或者突然觉得jms很适合用来做聊天软件,并且大部分的教材中都会用jms写一个简单的chat例子。但是jms真的适合用来做聊天软件吗?
学习了jms的原理后就很好分析这个问题,当然你还需要一点p2p的知识,本文就不对p2p做阐述。
首先,通信软件支持2个人用消息聊天,这很容易想到jms中的点对点消息传送模式,而且设置消息的持久化属性后,即使对方离线,在下一次上线时,也可以接收到离线消息。对于文件传输,jms中也支持二进制消息,可以实现文件传输和离线文件传输。
这一切看上去很美好,但是jms的点对点有致命的2个弱点
1、& 不是真正的p2p概念,jms的点对点依然需要jms服务器做转发
2、& 接收方需要主动查询消息队列
想想看会出现什么情况,如果你有100个好友,你们通过jms的点对点来通信,那么,即使你的100个好友没有给你发消息,你依然需要定时的到jms服务器上的100个与好友对应的消息队列中检查是否有消息,这样对服务器的压力是巨大的,因为你那100个好友也在不断的向jms服务器发出查询。
若用jms传输文件,会对jms服务器内存造成巨大压力,因为jms服务器会先保存一份,直到接收方消费后才删除。
或许你会想到发布订阅模式,因为这种模式下,jms服务器是主动将数据发送给接收方的。不过,通信软件还需要支持临时群的建立,发送方不需要经过对方同意,只要对方是自己的好友,就可以临时组建对话群,开始群聊。
这与发布订阅模式相违背,因为这种模式下,接收方需要主动订阅主题。
阅读(...) 评论()民间借贷知识来自于造价通云知平台上百万用户的经验与心得交流。
造价通即可以了解到相关民间借贷最新的精华知识、热门知识、相关问答、行业资讯及精品资料下载。同时,造价通还为您提供材价查询、测算、、等建设行业领域优质服务。手机版访问:
&&&&2017年,工程招投标领域新政密集出台或正式实施,对于广大招投标业者来说,着实有些应接不暇,这些政策将切切实实影响工程招投标的具体工作。2018年,为方便大家更快速地投入工作,小编将近期的重要政策进行盘点,与大家分享!
&&&&为进一步规范我省建筑市场秩序,推进建筑市场信用体系建设,根据《青海省建筑市场信用管理办法》,经青海省监管和信用管理系统自动综合评分,我省正式发布2017年度建筑施工总承包企业信用评价成果。
&&&&日前,记者从2018年全区建筑市场监管工作会议上了解到,今年我区将深入开展住宅工程质量满意度四年提升专项行动,推进质量标准化建设和工程质量缺陷保险试点,严格执行质量终身责任制度,强化重大民生工程和重要建筑原材料的质量管理,力争全区住宅工程质量满意度达到80%以上。
&&&&一家公司的数字化改造应该从清晰的趋势和障碍出发,更好地规划出一条通往其所寻求业务成果的路线。考虑到这一点,以下是我们关注的三大数据趋势,以及在数字时代可能出现在企业和成功之间的三大困境。
&&&&为全面贯彻落实党的十九大精神,按照相关文件要求和住建部城市排水防涝补短板工作推进电视电话会议部署,进一步做好城市排水防涝工作,确保2018年城市安全度汛,现将有关事项通知如下。
&&&&日前,山东省住房和城乡建设厅印发《2018年全省标准定额工作要点》,请结合本市、本单位的实际情况安排好今年的标准定额工作。
&&&&日前,海南省住房和城乡建设厅印发关于发布2017版《海南省市政工程综合定额》的通知(琼建定〔2018〕29号
),具体内容如下所示。
&&&&日前,内蒙古自治区建设工程标准定额总站印发一则关于《内蒙古自治区建设工程计价依据(2017版)》材料价格发布与使用规定的通知,具体内容如下所示。
&&&&大数据永远改变着人们生活方式的景观。为了各种目的使用大数据有很多好处。以下分享一些关于这些好处的性质的信息,人们将更多地了解如何让大数据对组织产生如此巨大的影响力,无论是出售iSelect-NBN计划还是出售其他产品。因此,人们将毫不犹豫地介绍使用大数据的主要好处。
&&&&根据住房城乡建设部关于开展《城市地下综合管廊运行维护及安全技术标准》研究编制工作的函的要求,现征求由中冶京诚工程技术有限公司牵头起草的行业标准《城市地下综合管廊运行维护及安全技术标准(征求意见稿)》意见,请于4月5日前将意见和建议反馈中冶京诚工程技术有限公司。
民间借贷相关专题
分类检索:
(C) 2006- WWW.ZJTCN.COM
增值电信业务经营许可证B2-下次自动登录
现在的位置:
& 综合 & 正文
使用JMS客户端利用空闲的计算机资源
时间:作者:浏览次数:
1922 本文关键字:, , , , , , , ,
  在企业中,许多计算机由于在其上执行工作的性质而未得到充分利用,或者因为过了上班时间而干脆得不到使用。在许多情况下,应用服务器耗光了宝贵的CPU(尤其是在执行CPU密集型的数学运算时),而网络上的其他计算机则闲置一旁。本文提出了一种框架,用于把Java消息服务(Java Messaging Service,JMS)客户端放置在这些未充分利用的计算机上,以分担一些通常应由服务器执行的工作。该客户端可以监听某个要执行的工作单元的请求队列,然后在应答队列中做出响应。此外,本文还给出了一个BEA WebLogic Integration 8.1架构的例子,它通过把一个工作流以及相关的Java控件用作替代框架,把工作分发到远程客户端上,从而把工作单元可靠地分发给JMS请求队列。
  本文提出了一种J2EE框架,用于解决把工作分配给未充分利用的计算机资源这个难题。具体来说,可以把JMS客户端放置在这些未充分利用的计算机上,从而分担一些通常应由服务器执行的工作。该客户端可以监听某个要执行的工作单元的请求队列,然后在应答队列上做出响应。可以使用一组消息驱动bean获取应答队列上的响应消息,以便进行进一步的处理。此外,还可以使用一种servlet实现来管理性地启动用于创建(要发送给JMS客户端的)工作单元的整个子流程,并使用它来终止这个子流程。
  我使用常见的BEA WebLogic Server作为把离散的工作单元分配给分布式JMS客户端的例子。在另一个更为复杂的例子中,BEA WebLogic Integration (WLI)工作流也执行类似的分发任务,但是通过对请求队列进行监控,它在灵活性、Java控件的可重用性和可伸缩性等方面要更好一些。
使用的例子
  业内有相当多的例子可以演示如何使用JMS框架来充分利用计算机进行并行处理。例如:
一个银行应用程序可以实现抵押贷款,并以不同的比率和年份执行几类利息计算,从而为信贷官员提供与每个申请者相关的、可能影响借贷类型的数据。所有不同种类的计算可以按照申请者分配给可用的计算机来执行,然后把结果返回给应用服务器储存起来。
一个记帐系统可以从数据库读取记录,然后重新计算记录中的数字,以求做到更加精确。对于每条记录,它可能需要连接到业务用户的本地系统中以获得辅助数据,这可能需要几秒钟。如果顺序执行,当涉及到的记录上千时,这种方法不仅很慢,而且可能进一步延长服务器线程等待从各地返回响应的时间。通过把这些工作分发给JMS客户端,不仅可以并行完成处理,而且还可以节省服务器线程。
一个天气预报系统或线性优化系统可能需要操纵或执行矩阵乘法。随着矩阵的大小和数量逐步增加,服务器CPU的负担也随之加重。如果这种情况经常发生,那么通过把矩阵操作和乘法分发给其他计算机上的JMS客户端,服务器的CPU就可以节省下来用于其他工作。
使用常规的WebLogic Server来分发工作单元
  借鉴最后一个例子,我将构建一个简单的例子,用于执行矩阵乘法,同时说明如何使用JMS框架把计算工作分发给企业中的计算机资源。JMS客户端将收到一个工作单元实例,之后,它将会调用其doWork()方法。在这个简单的例子中,doWork()方法将把2个3×3的矩阵相乘,然后把结果保存到一个结果矩阵中。 接着,JMS客户端使用工作单元实例的一个副本(工作是在这上面执行的)对应答队列做出响应。一个消息驱动bean将接受已完成的工作。图1说明了我将要讨论的各个组件:
图 1.该WebLogic Server实现中的各个组件
  这种方法以常规方式使用了JMS系统。在下面的内容中,我将引入一些代码,并考虑几个扩展问题。
工作单元类
  JMS请求队列上的每个类都将实现一个UnitOfWork接口,该接口有一个特别有趣的方法,叫做doWork():
public interface UnitOfWork extends java.io.Serializable {
// This method executes itself on the client machine
public void doWork();
// This method prints the current contents of performed work
public void print();
// This method stores the instance into a backing store
public void store();
  在我们这个简洁而直观的例子中,我使用一个SimpleMatri类实现了UnitOfWork接口:
public class SimpleMatrix implements UnitOfWork {
private Integer m1[][];
private Integer m2[][];
private Integer result[][];
private Integer rows = new Integer(3);
private Integer cols = new Integer(3);
// May initialize m1 and m2 by locating records from a database
public SimpleMatrix() {
// This method actually multiplies m1 x m2 and stores in result
public void doWork() {
// This method stores result into a backing store
public void store() {
// This method prints the current contents of result
public void print() {
  方法的实现相当简单,限于文章的篇幅,这里就不再进行说明。请参见所附的示例代码,其中给出了完整实现。这里的要点在于,这个SimpleMatrix实例被传递给一个JMS客户端,该客户端只要调用doWork()即可利用其CPU来执行工作。对于这个例子,我不会实际从数据库中检索矩阵或者把矩阵保存到数据库中,但是在实际应用中,这是必须完成的工作。
Servlet工作创建程序
  可以使用一个servlet来创建这些UnitOfWork实例。尽管WebLogic Server启动类可以执行同样的功能,但出于管理的目的,从安全的Web浏览器发送消息给servlet要更加容易。(另一种可选的实现是使用Web服务。)如果在servlet上安置了安全性,通过身份验证的用户可以在查询字符串中传递命令,以便开始交付工作单元给JMS请求队列或停止交付。我将给出一个servlet的主干例子,以说明其中的一些有用方法。
public class WorkServlet extends HttpServlet {
private QueueS
private ObjectM
private int numMessages = 5;
// This places the unit of work on the request queue
public synchronized boolean sendMessages(int numberOfMessages,
PrintWriter o) {
for(int i=0; i&numberOfM i++) {
SimpleMatrix simple = new SimpleMatrix();
// Send message to the request queue
msg.setObject(simple);
msg.setJMSReplyTo(QueueResponder);
qsender.send(msg);
if (o != null)
o.println("Sent a Message to queue.");
} catch (Exception e) {
System.out.println("WorkServlet:sendMessages:Cannot" +
"send message, exception raised");
e.printStackTrace();
// This may place a few units of work onto the queue on startup
public void init(ServletConfig config) throws ServletException {
// Responds to a Query String action with keywords
// Action = SEND : place unit of work object onto queue
// Action = CONNECT : connect to JMS server
// Action = DISCONNECT : disconnect from JMS server
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doPost( request, response );
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
if (request.getParameter("Action").equals("SEND")
sendMessages(numberMessages, response.getWriter());
  JMS客户端类的任务仅仅是接受请求队列上的消息,调用对象上的doWork()方法在这台计算机上执行工作,然后把结果返回给应答队列,消息驱动bean从应答队列中获取结果,以便进行进一步的处理和保存。可以检查它是否是文本消息,然后告诉客户端停止处理,从而允许发送控件消息给客户端。当然,在实际应用中,消息可能包含客户端的名称,这样就不会造成所有的客户端都停止处理。
  使用UnitOfWork接口的优点在于,JMS客户端只要编写一次,就可以用于以后实现该接口的任何类。这使得JMS客户端具有很大的通用性,可以不加修改地应用到许多不同的场景中。只需把编译后的UnitOfWork接口以及它所有的实现类都包含在客户端的类路径中。
  在这个简化模型中,客户端需要等待消息到达以启动处理。在实际情况中,客户端的方法等待的条件可以是一天中的某个时刻,比如下午5点,或者是计算机的CPU负载低于某个阈值。需要把此类逻辑添加到客户端,使之与计算机的使用安排更加一致。
消息驱动bean接收程序
  消息驱动bean实例将监听应答队列,看看有没有已完成的工作对象单元。下面给出一个例子的主干部分:
public class MessageWorkBean implements MessageDrivenBean,
MessageListener {
// This method will receive a unit of work object to store
public void onMessage(Message msg) {
ObjectMessage om = (ObjectMessage)
UnitOfWork unit = (UnitOfWork)om.getObject();
unit.print();
unit.store();
catch(JMSException ex) {
log("Message Driven Bean: Could not retrieve Unit of Work.");
ex.printStackTrace();
  这里有一个有趣的方法叫做onMessage()。这个方法的用途仅仅是从应答队列接收已完成的对象。接着,它将调用其print()和store()方法。我的目标是让服务器把它对这个工作单元的处理工作分发给其他计算机。我已经通过JMS客户端实现了这一点,并使用消息驱动bean把结果返回给服务器。
可扩展性方面的考虑
  在这个框架的实际实现中,我们应该要解决几个问题,从而让例子变得可以扩展。
考虑使用一个大小可以调整的消息驱动bean池来处理响应。
如果请求队列没有外部使用者,应该创建一些消息驱动bean来使用服务器上的请求队列。这与本文的主旨不相符,但是可以防止队列溢出,或者在没有使用者的情况下请求队列利用不充分。
如果存在多种类型的工作单元,那么每种类型都应该有自己的请求和响应队列。
对于WebLogic Server,考虑使用JMS页面调度技术,以便防止当队列中存在过多没有及时使用的消息时,出现内存不足问题。
对于WebLogic Server,如果生产者(servlet)生产出过多没有使用的工作,考虑使用WebLogic JMS的调节功能。
对于WebLogic Server,考虑对队列使用分布式目的地,因为这可以把队列分布到多台服务器上。在这种情况下,应该集群化servlet本身,并对其进行协调,以避免创建重复的工作请求单元。
  还应该考虑本文结尾处的参考资料。此外,对其他服务器也适用的考虑事项是把客户端部分交付给各台计算机的方式。一种方式是自愿,即每台计算机的所有者都下载一个可以在客户端计算机上配置和运行的安装程序。另一种方式是使用商业软件分发包,它可以自动下载客户端的最新版本,并把它安装在客户端计算机上。
使用WebLogic Integration工作流来分发工作
  前面给出了一种把工作单元分发给客户端的直观方法,即使用servlet和消息驱动bean。尽管该方法实现起来相当容易,但是它不能解决的问题还很多,比如如何以自支持的方式启动过程,定时把请求交付给请求队列。当然,我们不希望让管理员编写一个shell脚本来不停地调用该servlet。此外,还应该以一种应用程序可以预先控制的方式限制所使用的请求数量。考虑到这一点,下面给出一个更加复杂的例子,用于把工作单元分发给远程JMS客户端并对其做出响应,从而利用未充分使用的计算机。
  该方法使用了两个在BEA WebLogic Workshop中开发的WebLogic Integration (WLI)工作流,即Java流程定义(Java Process Definition,JPD)文件,它是BPEL/J (Business Process Engineering Language for Java)的前身。BPEL/J是在JSR 207中定义的。第一个工作流响应某些Web服务请求而启动,并执行初始化以通过一个JMS控件订阅JMS请求队列。该工作流使用一个Timer控件不停地进行循环,并定时唤醒一个while循环,从而在请求队列上放置更多的工作单元。该工作流还将使用一个定制Java控件(在本文相关代码中给出)来浏览请求队列,以便决定是否需要在队列上放置更多请求来防止队列出现过载。最后,工作流还将等待来自Web服务的停止消息,然后停止处理。第二个工作流执行的任务与前面例子中的消息驱动bean相同,因为它将对响应队列中的消息做出响应,以便从出队的响应队列调用print()和store()方法。这是一个生存期很短的工作流,而WebLogic Integration将按照要求产生足够的实例。
浏览JMS队列
  WebLogic Integration被用作一种为远程流程构造和汇编服务的机制。有现成的组件程序集,即Java控件,它使得开发人员可以轻松地构建复合应用程序而不需要进行大量的开发。尽管WebLogic Integration提供了开箱即用的JMS控件,用于在使用JMS时抽象化内部细节,在某些情况下,由于要细粒度地访问底层方法,最好还是创建一个可重用的定制控件。在这个示例框架中,我需要浏览工作请求队列,以统计在队列中等待的工作项的数量,然后决定能否在队列中放入更多工作项,而不会引起队列过载。为此,我们编写了一个定制Java控件,JMSBrowse,它有一个这样的方法:
public interface JMSBrowse extends Control {
int numberOfElementsInQueue(String qFactory, String qName);
   这个控件的实现使用了JMS QueueBrowser类来查看一个带有给定的JMS连接工厂的给定JMS队列。它返回队列中等待处理的实例个数。本文所附的代码中提供了完整实现。
启动和停止工作流的Web服务
  为了启动和停止负责把工作单元分发给请求队列的WebLogic Integration流程,我们创建了一个Java Web Service (JWS),它服从JSR 181,带有两个方法。
public classControlWebService implements
com.bea.jws.WebService {
@common:control
private Controls.JMSStopControlMessage JMSStopC
* @common:control
private Controls.JMSControlMessage JMSC
static final long serialVersionUID = 1L;
* @common:operation
public void startFlow() {
JMSControl.subscribe();
JMSControl.sendTextMessage("start");
JMSControl.unsubscribe();
* @common:operation
public void stopFlow() {
JMSStopControl.subscribe();
JMSStopControl.sendTextMessage("stop");
JMSStopControl.unsubscribe();
   该Web服务不是直接调用工作流,而是把一条消息放在JMS队列中,然后调用Worker.Message把消息发送给分发JPD。这解除了Web服务实现与工作流之间的耦合,以保持其模块性。在WebLogic Integration中,有一个概念叫做事件生成器,可以使用WebLogic Integration Administration Console对它进行配置您可以把事件生成器配置为从JMS Worker.Message中取出消息,然后将其交付给一个Message Broker通道(逻辑概念)。分发工作流监听/UnitOfWork/StartWorkflow通道,该通道被绑定在与JMS Worker.Message队列相关联的JMS事件生成器上。只要有一个String “start”消息交付到此通道上,工作流就会开始工作。类似地,开始之后,分发工作流就会在它的一个Event Choice节点中监听Message Broker通道(/UnitOfWork/StopWorkflow),以便从Worker.StopMessage JMS队列接收”stop”消息。然后,事件生成器再次把Worker.StopMessage队列上的JMS消息关联到/UnitOfWork/StopWorkflow通道,以便交付消息。
  这实际上创建了一种与启动和停止分发工作流的实现解耦合的面向服务方法。通过Web服务客户端,或者使用所提供的WebLogic Integration Workshop Test Browser,可以轻松对Web服务进行测试。
  分发工作流
  图2说明了负责分发工作单元的DistributeFlow.jpd、我们的简单矩阵对象以及请求队列的相关部分:
图2. 用于分发工作单元的工作流(单击图像查看大图)
  while循环不断地循环,直到一条stop消息改变布尔变量的值,才跳出循环并结束工作流。Event Choice等待两个Control Receive回调的其中一个。第一个回调是通过刚刚描述的Web服务从一个Message Broker通道接收一条Stop消息。第二个回调对一个Timer控件做出响应,我们已经通过该控件的属性面板对它进行了设置,每5秒钟发生一次。这将使处理继续,而下一个行为将调用定制Java控件来浏览Worker.Request队列,以获得等待处理的请求的个数。接下来,决策节点检查请求的个数是否已经超出请求的最大个数(此处的最大个数被设置为5,其值保存在一个变量中)。如果尚未超出,就会调用一个执行节点,然后使用JMS控件在请求队列中放入5个矩阵对象,如下所示:
public void perform() throws Exception {
for(int i = 0 ; i & maxInQ i++) {
matrix = new SimpleMatrix();
jmsControl.sendObjectMessage(matrix);
响应工作流的JMS客户端
  响应工作流的JMS客户端与前面在WebLogic Server部分中描述的JMS客户端几乎一模一样。惟一的区别在于,现在客户端使用一条字节消息(而不是对象消息)对响应队列做出响应。客户端把SimpleMatrix对象转换为一个字节数组,并将其传递给响应队列。这样做的理由是,与绑定到响应队列的事件生成器相关联的Message Broker通道只能够监听数据流,即String、XML Bean或字节数组。相关代码被设计用于对WebLogic Integration请求消息和普通的WebLogic Server请求消息做出响应。
  接收一个已完成的工作单元的工作流如图3所示:
图3.接收程序的工作流
  这里的重要行为是perform节点,它用于把字节数组转换为一个对象并调用print()和store()方法。
public void perform() throws Exception {
ByteArrayInputStream arrayInputStream = new
ByteArrayInputStream(rawData.byteValue());
ObjectInputStream objectInputStream = new
ObjectInputStream(arrayInputStream);
UnitOfWork unit = (UnitOfWork) objectInputStream.readObject();
unit.print();
unit.store();
objectInputStream.close();
使用WebLogic Integration工作流
  您已经了解到,使用工作流、Java控件和Message Broker通道可以提供一种更加完善的方式,把工作分发给未完全利用的计算机。只要在流程流中添加更多的行为节点,就可以让处理过程变得像您所期望的那样面面俱到。例如,该工作流可以有一个审计控件,用于在把所有发送到内部日志文件的请求放到队列中之前对其进行审计。该工作流可以把请求重定向到其他JMS队列,只要修改JMS控件的属性值即可。为了实现可扩展性,甚至可以让远程Web服务启动多个工作流实例。最后,基于业务安排,Timer控件的时间间隔可以更小。
  使用Message Broker通道和事件生成器的另一个好处在于,WebLogic Integration Administration Console可以监控事件生成器的响应消息的数量,以便实现进一步的控制。通过控制台,您可以挂起和恢复事件生成器及通道,从而对生产事件做出响应。 这种灵活性使得WebLogic Integration工作流成为一种极具吸引力的方法。
  您可以下载本文中所用到的源代码:。
  使用远程JMS客户端来分发工作的优点在于,它有效地利用了网络计算机来进行某种类型的批处理工作,同时减轻了原来服务器的负担。这种方法的一个著名例子是Search for Extraterrestrial Intelligence (SETI@home)系统,它利用全世界的PC来执行工作单元。本文使用了一种JMS客户端的框架,还讨论了如何部署这类解决方案以实现可扩展性,力求让这种方法通用化。本文还讨论了用于把工作分发给远程客户端的多种方法,并提供了一种面向服务的方法作为首选。
——产品文档
——产品文档
——产品文档
,作者Nimish Doshi(中文版,dev2dev,2005年4月)
是BEA面向独立软件开发商合作伙伴的系统工程团队的成员,曾与许多BEA合作伙伴打过交道,帮助他们更好地了解和利用控件。
【上篇】【下篇】}

我要回帖

更多关于 房屋如何办理抵押贷款 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信