- 浏览: 1068498 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
首先我们采用的技术是dwr2.0和jms api,JMS服务器采用的是openJms.下载地址:在http://openjms.sourceforge.net/downloads.html下载openJms,解压后在系统环境变量中加入OPENJMS_HOME=安装路径,在 \openjms-0.7.6.1\bin 里,有openJms的运行脚本,执行 startup 启动,弹出一个新的窗口,服务就运行在新窗口内,shutdown 为停止命令;里面有一个admin.bat用来启动查看你的queue数量和topic数量,以及增加删除的界面.导入包:jms包和dwr2.0的包
1.Queue方式的消息
Queue服务端测试代码:
package com.server;
import java.util.Date;
import java.util.Hashtable;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Server {
public static void main(String[] args) {
try {
//取得JNDI上下文和连接
Date date = new Date();
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
//openJms默认的端口是1099
properties.put(Context.PROVIDER_URL,
"rmi://localhost:1099/");
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup(
"JmsQueueConnectionFactory");
//获得JMS信息连接队列
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
//产生队列Session,设置事务为false,自动应答消息接收
QueueSession queueSession =
queueConnection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE);
//获得默认内建在JMS里的队列之一:queue1
Queue queue = (Queue) context.lookup("queue2");
//产生JMS队列发送器
QueueSender queueSender =
queueSession.createSender(queue);
//发送数据到JMS
TextMessage message = queueSession.createTextMessage();
message.setText("Hello, I'm openJms.");
message.setText("有消息了哦");
queueSender.send(message);
System.out.println("信息写入JMS服务器队列");
//以下做清除工作,代码略
// ... ...
} catch (Exception e) {
e.printStackTrace();
}
}
}
Queue客户端的测试代码
package com.client;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* @author Liang.xf 2004-12-24
* For openJms 演示, Message接收
* www.javayou.com
*/
public class Client implements MessageListener{
public Client()throws JMSException, NamingException
{
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL,
"rmi://localhost:1099/");
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup(
"JmsQueueConnectionFactory");
//获得JMS信息连接队列
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
QueueSession queueSession =
queueConnection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE);
//获得默认内建在JMS里的队列之一:queue1
Queue queue = (Queue) context.lookup("queue2");
//产生JMS队列接收器
QueueReceiver queueReceiver =
queueSession.createReceiver(queue);
queueReceiver.setMessageListener(this);
System.out.println(
"HelloReceQueue receiver to queue");
queueConnection.start();
}
public static void main(String[] args) {
try {
/*try {
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL,
"rmi://localhost:1099/");
Context context = new InitialContext(properties);
//获得JMS信息连接队列工厂
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) context.lookup(
"JmsQueueConnectionFactory");
//获得JMS信息连接队列
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
//启动接收队列线程
queueConnection.start();
//产生队列Session,设置事务为false,自动应答消息接收
QueueSession queueSession =
queueConnection.createQueueSession(
false,
Session.AUTO_ACKNOWLEDGE);
//获得默认内建在JMS里的队列之一:queue1
Queue queue = (Queue) context.lookup("queue1");
//这个queue1的名字必须和服务器端所发布的名字一样.
//产生JMS队列接收器
QueueReceiver queueReceiver =
queueSession.createReceiver(queue);
//通过同步的方法接收消息
Message message = queueReceiver.receive();
String messageText = null;
if (message instanceof TextMessage)
messageText = ((TextMessage) message).
getText();
System.out.println(messageText);
//以下做清除工作,代码略
// ... ...
} catch (Exception e) {
e.printStackTrace();
}*/
new Client();
} catch (Exception e) {
e.printStackTrace();
}
}
public void onMessage(Message m) {
try {
String msg = ((TextMessage)m).getText();
System.out.println("HelloReceQueue got message: " + msg);
} catch(JMSException ex) {
System.err.println("Could not get text message: " + ex);
ex.printStackTrace();
}
}
}
2.Topic消息
Topic服务端
package com.server;
import java.util.Hashtable;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class FalsePersistSub {
public static void main(String[] args) {
try {
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
//openJms默认的端口是1099
properties.put(Context.PROVIDER_URL, "rmi://localhost:1099/");
Context context = new InitialContext(properties);
//获得JMS Topic连接队列工厂
TopicConnectionFactory factory =
(TopicConnectionFactory) context.lookup(
"JmsTopicConnectionFactory");
//创建一个Topic连接,并启动
TopicConnection topicConnection = factory.createTopicConnection();
topicConnection.start();
//创建一个Topic会话,并设置自动应答
TopicSession topicSession =
topicConnection.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
//lookup 得到 topic1
Topic topic = (Topic) context.lookup("topic1");
//用Topic会话生成Topic发布器
TopicPublisher topicPublisher = topicSession.createPublisher(topic);
topicPublisher.setDeliveryMode(DeliveryMode.PERSISTENT);
//发布消息到Topic
System.out.println("消息发布到Topic");
TextMessage message = topicSession.createTextMessage
("BOSS新功能");
topicPublisher.publish(message);
//资源清除,代码略 ... ...
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
Topic客户端
package com.client;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class FalsePersistSubClient implements MessageListener{
TopicConnection topicConnection;
TopicSession topicSession ;
public FalsePersistSubClient()throws JMSException, NamingException
{
System.out.println("定购消息接收启动:");
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL, "rmi://localhost:1099/");
System.out.println("aaa:");
Context context = new InitialContext(properties);
//获得Topic工厂和Connection
TopicConnectionFactory factory =
(TopicConnectionFactory) context.lookup(
"JmsTopicConnectionFactory");
topicConnection = factory.createTopicConnection();
//创建Topic的会话,用于接收信息
topicSession =
topicConnection.createTopicSession(
false,
Session.AUTO_ACKNOWLEDGE);
//lookup topic1
Topic topic = (Topic) context.lookup("topic1");
//创建Topic subscriber
TopicSubscriber topicSubscriber =
topicSession.createSubscriber(topic);
topicSubscriber.setMessageListener(this);
topicConnection.start();
}
public static void main(String[] args) {
try {
new FalsePersistSubClient();
/* try {
System.out.println("定购消息接收启动:");
//取得JNDI上下文和连接
Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL, "rmi://localhost:1099/");
System.out.println("aaa:");
Context context = new InitialContext(properties);
//获得Topic工厂和Connection
TopicConnectionFactory factory =
(TopicConnectionFactory) context.lookup(
"JmsTopicConnectionFactory");
TopicConnection topicConnection = factory.createTopicConnection();
topicConnection.start();
//创建Topic的会话,用于接收信息
TopicSession topicSession =
topicConnection.createTopicSession(
false,
Session.AUTO_ACKNOWLEDGE);
//lookup topic1
Topic topic = (Topic) context.lookup("topic1");
//创建Topic subscriber
TopicSubscriber topicSubscriber =
topicSession.createSubscriber(topic);
//收满10条订阅消息则退出
for (int i=0; i<10; i++) {
//同步消息接收,使用receive方法,堵塞等待,直到接收消息
TextMessage message = (TextMessage) topicSubscriber.receive();
System.out.println("接收订阅消息["+i+"]: " + message.getText());
}
//资源清除,代码略 ... ...
System.out.println("订阅接收结束.");
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}*/
} catch (Exception e) {
e.printStackTrace();
}
}
public void onMessage(Message m) {
try {
String msg = ((TextMessage) m).getText();
System.out.println("HelloSubscriber got message: " + msg);
if("end".equals(msg))
{
System.out.print("要关闭了");
close();
}
} catch (JMSException ex) {
System.err.println("Could not get text message: " + ex);
ex.printStackTrace();
try {
close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void close() throws JMSException {
System.out.println("关闭代码");
topicSession.close();
topicConnection.close();
}
}
发表评论
-
java spring整合websocket教程
2018-03-30 14:30 685在javaweb项目开发中,我们经常可能需要websocke ... -
myeclipse 项目之间类进行引用
2014-11-19 15:54 962相关解决方案: eclipse的Web项目引用方式:(其实相 ... -
myeclipse8 每次启动内存都不够用的解决方案
2014-11-11 15:34 765最近可能由于公司项目大了,启动MyEclipse后经常提示 ... -
web项目集成log4j
2014-11-06 12:39 722Log4j基本使用方法 Log4j由三个重要的组件构成:日 ... -
使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
2011-10-25 14:09 1527RESTful Web 服务简介 REST 在 2000 年 ... -
确定操作系统位计数(64位还是32位(X86))
2011-09-30 08:36 1244在此部分查找计算机 ... -
解决“无法删除 指定的文件名无效或太长”的问题
2011-09-16 14:07 2523解决“无法删除 指定的文件名无效或太长”的问题 ... -
网站应用通过139邮箱发送短信做到日志提醒功能
2011-09-15 09:36 1822首先在139注册一个邮箱,然后再邮箱设置中设置收到邮件通过短信 ... -
javamail发送邮件遇到的问题
2011-09-15 09:32 1204今天在用myeclipse写mial功能的时候,想调试一下程序 ... -
http协议的学习笔记
2011-03-01 10:56 1688HTTP请求行 格式:请求 ... -
Logback用户手册中文版.pdf
2011-02-14 16:57 2022Logback用户手册中文版.pdf -
JAVA编写的预警系统
2011-02-10 11:00 6335预警系统 <!-- start content --& ... -
Mediawiki 简明架设指南
2011-02-10 10:03 4641在 Debian/Linux 下 1. 安装程序 sh ... -
xsl 常用.jsp
2011-02-10 09:28 1622现在用的都是有规分律数据, 特殊的数据用XSL. DOM4J ... -
SVN 入门指南
2011-01-14 11:17 1000SVN 入门指南 -
FreeMaker中文手册
2011-01-14 11:15 1038FreeMaker中文手册 -
查看某个网段具体哪些IP没有被使用的命令
2010-11-29 09:01 2901通过运行cmd然后在DOS命令下运行下面程序,表示查看192. ... -
xsl 取数据的时候,当用for-each循环取得数据,怎么取第一行的数据
2010-11-08 11:35 2353需求,打印表格的时候,用for-each 来取得数据,当取到第 ... -
项目过程中,对于绝对路径和相对路径的总结
2010-09-11 09:20 12431.基本概念的理解 绝对路径:绝对路径就是你的主页上的文 ... -
mysql经典语句
2010-09-09 18:18 1254show databases;show tables from ...
相关推荐
将JMS与DWR相结合,可以在服务器端接收到新的消息时,通过DWR将这些消息实时地推送到客户端,确保数据的即时更新。 在实现过程中,首先需要设计不同的模块,并通过JMS消息服务订阅和发布消息。每个模块都可以作为一...
【标题】:“jsp j2ee dwr ajax dwr登陆”这一主题涉及的是在Web开发中使用Java Server Pages (JSP)、Java 2 Platform, Enterprise Edition...DWR)以及Asynchronous JavaScript and XML (AJAX)来实现用户登录验证的功能...
DWR(Direct Web Remoting)则是一种JavaScript到Java的远程调用技术,允许在客户端浏览器和服务器之间进行实时的、异步的数据交换。 首先,让我们深入了解一下SSH框架: 1. **Spring**:这是一个全面的Java应用...
DWR(Direct Web Remoting)是一个开源Java库,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行直接的远程方法调用(RPC)。这使得开发者能够像操作本地对象一样操作远程服务,极大地简化了富互联网应用...
本文将深入探讨GlassFish的特点,以及如何利用它来开发和部署Web应用程序,尤其是结合DWR(Direct Web Remoting)技术,实现Java与JavaScript之间的高效通信。 GlassFish,由Oracle公司维护,是Java EE平台的实现,...
DWR的引入可能使得用户能够直接在客户端与服务器进行交互,无需刷新页面即可获取或更新数据。这个例子可能包含了如何配置这三个框架的XML配置文件,以及如何编写相应的Action、DAO、Service和DWR配置文件。此外,...
- 客户端发送 `SYN` 请求。 - 服务器回应 `SYN+ACK`。 - 客户端发送 `ACK` 确认。 **2. SSL 原理** - **非对称加密**:客户端使用服务器的公钥加密数据。 - **对称加密**:客户端和服务器使用相同的密钥加密和解密...
- **客户端脚本**:使用JavaScript编写AJAX请求,调用DWR暴露的服务器端方法,并处理返回的验证结果。 - **界面设计**:HTML/CSS/JS组合构建登录界面,AJAX请求的结果会影响界面的显示状态,如错误提示或成功登录后...
29. DWR:Direct Web Remoting,允许JavaScript直接调用Java服务器端的方法,实现富客户端应用。 30. DTD:文档类型定义,定义了XML文档的结构和约束。 这些概念和工具构成了Java开发和IT行业的基石,理解和掌握...
6. **JMS(Java Message Service)**:支持异步消息传递,提供可靠的消息队列和发布/订阅模型。 7. **JavaMail**:提供邮件服务的API,支持多种邮件协议。 8. **Web服务(WebService)**:基于XML和SOAP的跨平台通信...
- **数字图像水印项目**:结合小波分解理论和MATLAB,实现数字图像水印的嵌入和提取,涉及图像处理和算法设计。 3. **技术栈**: - **开发环境**:MyEclipse、Tomcat、MySQL等。 - **框架和库**:Struts2.0、...
- **网络编程**:深化对Socket、ServerSocket的理解,实现客户端与服务器间的通信。 - **反射注解**:深入研究Class类,熟练使用注解增强代码功能。 ### Java WEB开发 #### 重点内容: - **Servlet开发**:掌握...
3. **企业级应用**:对EJB3.0技术(包括SessionBean、MDB、JPA、RMI、JTA)有了解,并理解EJB3.0的客户端视图和依赖注入,熟悉JNDI和JMS。此外,还具有使用JBoss BPM工作流引擎的经验,以及基于RBAC的授权认证知识。...
11. **Ajax和JavaScript**:Ajax允许在不刷新整个页面的情况下更新部分网页内容,JavaScript是用于网页客户端的脚本语言,DWR(Direct Web Remoting)是一个Ajax框架,简化了服务器端调用。 12. **Struts1、...
- **网络编程**:掌握Socket编程,实现客户端和服务器间的通信。 **5. JDBC编程(重点)** - **JDBC原理**:理解JDBC的角色和工作流程。 - **JDBC连接库**:了解不同数据库驱动,如MySQL、Oracle等的使用。 - *...