实验一二三已经实现了对象消息的传递和数据库的重做。本实验测试在JavaWeb环境下对本地数据库进行修改,对修改过程进行封装、通过ActiveMQ传递以及在异构数据库上重做的过程。整个流程如图所示:
上述图中,本地数据库通过JavaWeb程序对数据库进行进行CURD操作,他的操作过程通过MQAPP序列化之后传递给ActiveMQ服务器,另一端访问JavaWeb程序,得到当前程序修改的信息,访问ActiveMQ服务器获得消息,同时通过CURD对异构数据库进行重做。整个平台的流程和实验二不同在于引入了ApacheTomcat服务器作为WEB服务器,来进行在线操作和调用消息接口。
新建一个Javaweb项目,导入需要的lib文件,导入之前开发的src源代码。新建JSP文件index.jsp作为修改和发送消息的页面。新建jsp页面receive.jsp作为消息接受和重做数据库的接口。Index.jsp代码引入了user类和view类用来对数据对象进行操作。这段代码显示了数据库中的所有信息,点击修改后可以对数据库进行修改,修改后的结果同步到数据库中同时发送消息到ActiveMQ服务器中。
<%@ page language="java" import="java.util.*"pageEncoding="ISO-8859-1"%> <%@ page import="common.user"%> <%@ page import="server.curd.bean.view"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN"> <html> <head> </head> <body> result:<br/> <% user u = newuser(); view v = newview(); out.println(v.viewAll()); String id =request.getParameter("id"); String name= request.getParameter("name"); Stringpassword = request.getParameter("password"); if (id !=null && (name == null || password == null)) { u =v.viewOne(id); } else if(name != null && password != null) { u.update(id,name,password); response.sendRedirect("index.jsp"); } //out.println(u.toString()); %> <formaction="?action=update" method="GET"> <inputtype="text" name="id" value="<%=id%>" /> <inputtype="text" name="name"value="<%=u.getName()%>" /> <inputtype="text" name="password"value="<%=u.getPassword()%>" /> <inputtype="submit" /> </form> </body> </html>
Receive.jsp页面引入消息接受类,接受所有的消息显示到界面上,由用户决定同步到本地那一条数据,或者全部同步。Receive.jsp代码如下:
<%@ page language="java" import="java.util.*"pageEncoding="ISO-8859-1"%> <%@ page import="client.activemq.QueueReceive"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN"> <html> <head> </head> <body> result:<br/> <% QueueReceiveqr = new QueueReceive(); out.println("messagecount:" + qr.receive()+"<br/>"); out.println(qr.viewMessage()); //out.println(qr.doAllReports()); qr = null; %> </body> </html>
通过Tomcat传递消息机制理论上是可行的,但是不知道为什么,消息传递出去后,tomcat服务器就死机了。可能是内存溢出或者和ActiveMQ的冲突。这个问题还没有解决,等下再研究下。
参考
1. QX项目实战-9.ActiveMQ编程实例
2. QX项目实战-10.基础架构实验一:传递消息、序列化对象和数据库封装
3. QX项目实战-11.基础架构试验二:反序列化对象、重写数据库
4. QX项目实战-12.基础架构试验三:异构数据库同步