- 浏览: 7249714 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在Androidpn的底层主要采用的mina和openfire两大框架,其中mina主要为底层数据传输的Socket框架。下面简单说明mina的框架。
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。Mina 主要有1.x 和2.x 两个分支,这里我们讲解最新版本2.0,如果你使用的是Mina 1.x,那么可能会有一些功能并不适用。学习本文档,需要你已掌握JAVA IO、JAVA NIO、JAVASocket、JAVA 线程及并发库(java.util.concurrent.*)的知识。Mina 同时提供了网络通信的Server 端、Client 端的封装,无论是哪端,Mina 在整个网通通信结构中都处于如下的位置:
可见Mina 的API 将真正的网络通信与我们的应用程序隔离开来,你只需要关心你要发送、接收的数据以及你的业务逻辑即可。同样的,无论是哪端,Mina 的执行流程如下所示:
(1.) IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。
(2.) IoProcessor:这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService 上的过滤器,并在过滤器链之后调用IoHandler。
(3.) IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode是最为重要的、也是你在使用Mina 时最主要关注的地方。
(4.) IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。
Mina自带的过滤器(部分)
由上面的Mina的执行的过程可以知道针对使用Mina的第三方来说主要的业务主要在IoHandler中。
androidpn-server的spring配置。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"> <!-- =============================================================== --> <!-- Resources --> <!-- =============================================================== --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <!-- =============================================================== --> <!-- Data Source --> <!-- =============================================================== --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbcDriverClassName}" /> <property name="url" value="${jdbcUrl}" /> <property name="username" value="${jdbcUsername}" /> <property name="password" value="${jdbcPassword}" /> <property name="maxActive" value="${jdbcMaxActive}" /> <property name="maxIdle" value="${jdbcMaxIdle}" /> <property name="maxWait" value="${jdbcMaxWait}" /> <property name="defaultAutoCommit" value="true" /> </bean> <!-- =============================================================== --> <!-- Hibernate --> <!-- =============================================================== --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:hibernate.cfg.xml" /> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- =============================================================== --> <!-- Data Access Objects --> <!-- =============================================================== --> <bean id="userDao" class="org.androidpn.server.dao.hibernate.UserDaoHibernate"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- =============================================================== --> <!-- Services --> <!-- =============================================================== --> <bean id="userService" class="org.androidpn.server.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao" /> </bean> <!-- =============================================================== --> <!-- SSL --> <!-- =============================================================== --> <!-- <bean id="tlsContextFactory" class="org.androidpn.server.ssl2.ResourceBasedTLSContextFactory"> <constructor-arg value="classpath:bogus_mina_tls.cert" /> <property name="password" value="boguspw" /> <property name="trustManagerFactory"> <bean class="org.androidpn.server.ssl2.BogusTrustManagerFactory" /> </property> </bean> --> <!-- =============================================================== --> <!-- MINA --> <!-- =============================================================== --> <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.net.SocketAddress"> <bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" /> </entry> </map> </property> </bean> <bean id="xmppHandler" class="org.androidpn.server.xmpp.net.XmppIoHandler" /> <bean id="filterChainBuilder" class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder"> <property name="filters"> <map> <entry key="executor"> <bean class="org.apache.mina.filter.executor.ExecutorFilter" /> </entry> <entry key="codec"> <bean class="org.apache.mina.filter.codec.ProtocolCodecFilter"> <constructor-arg> <bean class="org.androidpn.server.xmpp.codec.XmppCodecFactory" /> </constructor-arg> </bean> </entry> <!-- <entry key="logging"> <bean class="org.apache.mina.filter.logging.LoggingFilter" /> </entry> --> </map> </property> </bean> <bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioSocketAcceptor" init-method="bind" destroy-method="unbind"> <property name="defaultLocalAddress" value=":5222" /> <property name="handler" ref="xmppHandler" /> <property name="filterChainBuilder" ref="filterChainBuilder" /> <property name="reuseAddress" value="true" /> </bean> </beans>
通过Mina的原理我们研究androidpn的运行流程不能看出,如下:
androidpn-server执行过程如下:
1.spring初始化并启动过程,调用NioSocketAcceptor。
2。NioSocketAcceptor开始执行调用IoProcessor.
3.IoProcessor开始调用FilterChain。FilterChain调用相关的IoFilter的。其中ProtocolCodecFilter的过滤器调用了org.androidpn.server.xmpp.codec.XmppCodecFactory进行编码。
4.XmppIoHandler实现自IoHanlder并调用通过openfire 的XMLLightweightParser解析相关的业务逻辑。
5.根据解析的信息调用xmpp并处理相关信息。
评论
XmppIoHandler的sessionOpened方法无法完成实例化StanzaHandler handler = new StanzaHandler(serverName, connection);其中serverName和connection都有值
具体的错误信息也很奇怪
java.lang.NullPointerException
at org.androidpn.server.xmpp.net.XmppIoHandler.messageReceived(XmppIoHandler.java:184)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:713)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:375)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:229)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:71)
at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:780)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:772)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:714)
at java.lang.Thread.run(Thread.java:662)
明明说XmppIoHandler类 184行的org.androidpn.server.xmpp.net.XmppIoHandler.messageReceived方法报null,你仔细监控这段代码。。
XmppIoHandler的sessionOpened方法无法完成实例化StanzaHandler handler = new StanzaHandler(serverName, connection);其中serverName和connection都有值
具体的错误信息也很奇怪
java.lang.NullPointerException
at org.androidpn.server.xmpp.net.XmppIoHandler.messageReceived(XmppIoHandler.java:184)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:713)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:375)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:229)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:71)
at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:780)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:772)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:714)
at java.lang.Thread.run(Thread.java:662)
发表评论
-
[转]年度最实用50款免费Android应用推荐
2012-11-08 16:39 3258据国外媒体报道,有人说Android应用市场比iPhone应用 ... -
MQTT的学习研究(十七)Mosquitto简要教程(安装&使用)
2012-10-23 16:34 19747Mosquitto是一个实现了MQTT3.1协议的代理服务器, ... -
MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署
2012-10-23 16:28 38755在mqtt的官方网站,有许多mqtt, 其中: Mos ... -
GIS的学习(四十五)【转】Integration of the MBTiles format on Android
2012-10-22 17:13 2876转载自 http:/ ... -
MQTT的学习研究(十五) MQTT 和android整合文章
2012-10-22 17:06 5176详细参考: How to Implement Pu ... -
MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现
2012-10-19 14:08 11850在moquette-mqtt中提供了回调callback ... -
MQTT的学习研究(十三) IBM MQTTV3 简单发布订阅实例
2012-10-19 13:51 12713使用IBM MQTTv3实现相关的发布订阅功能 MQTTv3 ... -
MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现
2012-10-19 13:38 7672基于Future 模式的 ... -
MQTT的学习研究(十一) IBM MQTT 简单发布订阅实例
2012-10-19 13:30 6276package com.etrip.push; impo ... -
MQTT的学习研究(十)【转】mosquitto——一个开源的mqtt代理
2012-10-19 13:21 13370MQTT(MQ Teleme ... -
MQTT的学习研究(九)基于HTTP GET MQTT 抓取消息服务端使用
2012-10-18 15:25 4989官方参看文档: HTTP GET 接收主题请求协议和响应协议 ... -
MQTT的学习研究(八)基于HTTP DELETE MQTT 订阅消息服务端使用
2012-10-18 15:20 4217参看官方文档 HTTP DELETE 订阅主题 ... -
MQTT的学习研究(七)基于HTTP POST MQTT 发布消息服务端使用
2012-10-18 15:11 7731参阅官方文档 http:// ... -
MQTT的学习研究(六) MQTT moquette 的 Blocking API 订阅消息客户端使用
2012-10-17 16:56 21866参阅官方文档: http://publib.boulder. ... -
MQTT的学习研究(五) MQTT moquette 的 Blocking API 发布消息服务端使用
2012-10-17 16:52 30643参看官方文档: http://publib.bould ... -
MQTT的学习研究(四)moquette-mqtt 的使用之mqtt Blocking API客户端订阅并接收主题信息
2012-10-16 15:51 14547在上面两篇关于mqtt的broker的启动和mqtt的服 ... -
MQTT的学习研究(三)moquette-mqtt 的使用之mqtt服务发布主题信息
2012-10-16 15:48 19739接着上一篇的moquette-mqtt 的使用之 ... -
MQTT的学习研究(二)moquette-mqtt 的使用之mqtt broker的启动
2012-10-16 15:42 36713在MQTT 官网 (http://mqtt.o ... -
MQTT的学习研究(一)MQTT学习网站
2012-10-16 15:21 11184MQTT的官方推荐网站: http://mqtt.org/s ... -
GIS的学习(四十四)osmdroid sdcard检查
2012-10-15 16:12 2274在许多应用中使用到sdcard的检查,在osmdro ...
相关推荐
首先, 我们需要下载androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip。 下载地址:http://sourceforge.net/projects/Androidpn/ 解压两个包,Eclipse导入client,配置好目标平台,打开raw/...
androidpn-server-0.5.0-bin.zip解压后,打卡bin目录下run.bat运行,之后在浏览器中输入http://127.0.0.1:7070/ 将androidpn-client-0.5.0解压后导入Eclipse,修改/raw/androidpn.properties中的xmppHost=xxx.xxx.x...
androidpn-client-0.5.0和androidpn-server-0.5.0-bin
androidpn-server-0.5.0-bin.zip、androidpn-client-0.5.0.zip、androidpn-demoapp-0.5.0.zip全给你们了,不用再去网站翻了
使用Apndroid Push Notification 实现android信息推送,AndroidPn项目是使用XMPP协议实现信息推送的一个开源项目。内涵服务端和客户端源码
该程序包修改至开源项目androidpn-server-0.0.5,携带jre7(此为windows版本,如要运行在linix,需更换为linix jre7),无需java配置运行环境,实现离线推送功能,支持推送消息有效期设置,服务端能够自主判断消息...
这个是androidpn的服务端.........................................
androidpn-server-bin-tomcat,看题目估计就知道的。 关于推送端的 服务器端的JAVA代码。
内含:配置方法一份、androidpn-server-0.5.0-bin.zip、androidpn-demoapp-0.5.0-bin.zip、androidpn-client-0.5.0-bin.zip。三个压缩包都是从官网下载http://sourceforge.net/projects/androidpn/,未做任何修改。...
androidPn Tomcat 版 ,用于推送的 android
androidpn-server-0.6.0.jar
androidpn服务端与客户端代码,自己测试过,真机可以,但是模拟器却不行
androidpn-tomcat服务端和客户端,需要连接mysql数据库。
运行androidpn-server-0.5.0\bin\run.bat启动服务器,从浏览器访问http://127.0.0.1:7070/index.do (androidPN Server有个轻量级的web服务器,在7070端口监听请求,接受用户输入的文本消息) 运行客户端,客户端会向...
Androidpn客户端 和服务端源码下载,实现了消息推送。具体使用方法可百度。
基于XMPP协议、使用Androidpn服务器,Asmack编程的即时通讯IM客户端源代码;主要功能实现向客户端推送消息!
这是一个消息推送客户端,安装在自己的手机上,可以实现与andriodpn-sever的连接,接受推送的消息
androidpn0.5.0,包括androidpn-server-0.5.0-bin.zip、androidpn-demoapp-0.5.0.zip、androidpn-client-0.5.0.zip
androidpn xmpp 消息推送 供研究学习使用 项目相关的jar包 androidpn-client-0.5.0,androidpn-server-0.5.0-binmandroidpn-server-0.5.0-src