| 方法的实现相当简单,限于文章的篇幅,这里就不再进行说明。请参见所附的示例代码,其中给出了完整实现。这里的要点在于,这个SimpleMatrix实例被传递给一个JMS客户端,该客户端只要调用doWork()即可利用其CPU来执行工作。对于这个例子,我不会实际从数据库中检索矩阵或者把矩阵保存到数据库中,但是在实际应用中,这是必须完成的工作。
Servlet工作创建程序 可以使用一个servlet来创建这些UnitOfWork实例。尽管Weblogic Server启动类可以执行同样的功能,但出于管理的目的,从安全的Web浏览器发送消息给servlet要更加容易。(另一种可选的实现是使用Web服务。)如果在servlet上安置了安全性,通过身份验证的用户可以在查询字符串中传递命令,以便开始交付工作单元给JMS请求队列或停止交付。我将给出一个servlet的主干例子,以说明其中的一些有用方法。
public class WorkServlet extends HttpServlet { ... private QueueSender qsender; private ObjectMessage msg; 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 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) msg; try { UnitOfWork unit = (UnitOfWork)om.getObject(); unit.print(); unit.store(); } catch(JMSException ex) { log("Message Driven Bean: Could not retrieve Unit of Work."); ex.printStackTrace(); } } }
[1] [2] [3] 下一页
这里有一个有趣的方法叫做onMessage()。这个方法的用途仅仅是从应答队列接收已完成的对象。接着,它将调用其print()和store()方法。我的目标是让服务器把它对这个工作单元的处理工作分发给其他计算机。我已经通过JMS客户端实现了这一点,并使用消息驱动bean把结果返回给服务器。 可扩展性方面的考虑 在这个框架的实际实现中,我们应该要解决几个问题,从而让例子变得可以扩展。
考虑使用一个大小可以调整的消息驱动bean池来处理响应。 如果请求队列没有外部使用者,应该创建一些消息驱动bean来使用服务器上的请求队列。这与本文的主旨不相符,但是可以防止队列溢出,或者在没有使用者的情况下请求队列利用不充分。 如果存在多种类型的工作单元,那么每种类型都应该有自己的请求和响应队列。 对于Weblogic Server,考虑使用JMS页面调度技术,以便防止当队列中存在过多没有及时使用的消息时,出现内存不足问题。 对于WebLogic Server,如果生产者(servlet)生产出过多没有使用的工作,考虑使用Weblogic JMS的调节功能。 对于Web 上一页 [1] [2] [3] [4] [5] 下一页
|