使用 Apache Geronimo 和 JMS 构建事件驱动的框架
2010-04-23 00:00:00 来源:WEB开发网注意: EventConsumer 类的完整源代码可以从本文末尾的 下载 部分通过下载获得。
在 Geronimo 中部署和运行事件框架
事件框架使用部署在 Geronimo 中的 Web 应用程序来测试每个事件类型。除了事件框架外,Web 应用程序还包括一个用于输入事件消息的 HTML 表单和一个用于接收 HTTP 请求并将内容分派到事件通道的 servlet。
HTML 表单(如 图 5 所示)只允许将三种类型的事件消息发送到分派 servlet。
图 5. Web 应用程序的开始屏幕
事件分派 servlet 实例化事件通道对象和三个示例事件接收者。事件接收者然后订阅给定的事件,servlet 将事件发布给事件通道对象。清单 6 显示了该 servlet。
清单 6. 分派 servlet 的实现
public class SenderServlet extends HttpServlet
{
private EventChannel eventChannel = null;
private EventReceiver allTravelEventReceiver = null;
private EventReceiver flightEventReceiver = null;
private EventReceiver lodgingEventReceiver = null;
public void init()
throws ServletException
{
super.init();
eventChannel = new EventChannel();
eventChannel.start();
// create event receivers
allTravelEventReceiver =
new EventReceiver("allTravelEventReceiver");
flightEventReceiver =
new EventReceiver("flightEventReceiver");
lodgingEventReceiver =
new EventReceiver("lodgingEventReceiver");
// subscribe to all Travel events
eventChannel.subscribe(allTravelEventReceiver,
TravelEvent.class);
// subscribe to Flight events
eventChannel.subscribe(flightEventReceiver,
FlightEvent.class);
// subscribe to Lodging events
eventChannel.subscribe(lodgingEventReceiver,
LodgingEvent.class);
}
public void destroy()
{
super.destroy();
// unsubscribe all event receivers and stop the event channel
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException
{
// respond with input form
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException
{
String txtMsg = req.getParameter("txtMsg");
if (txtMsg != null && txtMsg.length() > 0)
{
String flightDelayed = req.getParameter("FlightDelayed");
String rateIncreased = req.getParameter("RateIncreased");
String seatAvailable = req.getParameter("SeatAvailable");
if (flightDelayed != null)
{
// send a Flight event
eventChannel.publish(new FlightDelayed(txtMsg));
}
else if (rateIncreased != null)
{
// send a Lodging event
eventChannel.publish(new RateIncreased(txtMsg));
}
else if (seatAvailable != null)
{
// send a Flight event
eventChannel.publish(new SeatAvailable(txtMsg));
}
}
doGet(req, res);
}
}
- ››使用linux中的quota教程
- ››apache设置域名绑定 以及绑定不起作用的排查
- ››使用jxl生成带动态折线图的excel
- ››apache rewrite将指定URL转向指定的几个服务器
- ››使用mysql mysqldump进行数据库迁移
- ››使用jquery是新tab形式
- ››使用QUnit进行Javascript单元测试
- ››使用UITextFieldDelegate来隐藏键盘
- ››使用公式提取Excel中的日期后发现格式不对
- ››使用SQL Azure 的BI 解决方案
- ››使用PLSQL Developer工具导出sql文件
- ››使用双缓冲技术实现Android画板应用
更多精彩
赞助商链接