因为需要今天研究了一下Flex接收Java端推送的数据,以前做过相应的配置,但是今天在此操作时发现忘得一干二净。好记性不如烂笔头子,所以还只记下来的说。。。。
第一步:首先,创建一个Java web工程将BlazeDS相关包加到工程中接下来配置services-config.xml文件。
在services-config.xml中添加如下代码:
然后配置messaging-config.xml文件。
true
.
配置方法是在messaging-config.xml中添加如下代码:(代码中配置说明如果有疑问还请大家Google吧。。。哈哈)
0
10
5000
第二步:编写服务端代码。
好的配置信息完毕开始写代码。我们需要创建一个实体类用来同步Flex与Java数据类型。
Tick.java
package com.eunut.vo;
import java.math.BigDecimal;
public class Tick {
private String seqno;
public String getSeqno() {
return seqno;
}
public void setSeqno(String seqno) {
this.seqno = seqno;
}
}
因为是测试DEMO所以只写了一个属性
然后编写一个Servlet
package com.eunut.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.eunut.vo.Tick;
import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;
public class TickCacheServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private static FeedThread thread;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String cmd = req.getParameter("cmd");
if (cmd.equals("start")) {
start();
}
if (cmd.equals("stop")) {
stop();
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
}
public void destroy() {
super.destroy();
}
public void init() throws ServletException {
super.init();
}
public void start() {
if (thread == null) {
thread = new FeedThread();
thread.start();
}
System.out.println("start!!");
}
public void stop() {
thread.running = false;
thread = null;
}
public static class FeedThread extends Thread {
public boolean running = true;
public void run() {
MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
String clientID = UUIDUtils.createUUID();
int i = 0;
while (running) {
Tick tick = new Tick();
tick.setSeqno(String.valueOf(i));
System.out.println(i);
AsyncMessage msg = new AsyncMessage();
msg.setDestination("tick-data-feed");
msg.setHeader(AsyncMessage.SUBTOPIC_HEADER_NAME, "tick");
msg.setClientId(clientID);
msg.setMessageId(UUIDUtils.createUUID());
msg.setTimestamp(System.currentTimeMillis());
msg.setBody(tick);
msgBroker.routeMessageToService(msg, null);
i++;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
}
}
}
第三步:编写客户端代码。
客户端简单请见代码:
Tick.as
package com.eunut
{
[RemoteClass(alias="com.eunut.Tick")]
[Bindable]
public class Tick
{
public function Tick()
{
}
public var seqno:String;
}
}
主应用:
第四步:测试码。
首先运行客户端,点击按钮初始化消费者监听。
然后请求Servlet开启数据生产。方法是请求/TickCacheServlet?cmd=start
OK我们在客户端会看见标签上的数字会不断变大。
先写到这,回家。。。。