接着昨天的事情,继续往下走。
昨天已经成功的把数据源都增加进来了。今天就准备开始上数据了,
测试的客户端使用的是 funambol自带的那个 demo。
拷贝一份 SyncServerServlet 的定义到 web.xml 当中,增加一个 servlet mapping
<servlet>
<servlet-name>SyncServerServlet</servlet-name>
<display-name>SyncServerServlet</display-name>
<servlet-class>com.funambol.transport.http.server.Sync4jServlet</servlet-class>
<init-param>
<param-name>sync-holder-class</param-name>
<param-value>com.funambol.transport.http.server.LocalSyncHolder</param-value>
</init-param>
<init-param>
<param-name>log-messages</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>dirlog-messages</param-name>
<param-value>.</param-value>
</init-param>
<!-- Session timeout in seconds -->
<init-param>
<param-name>session-timeout</param-name>
<param-value>900</param-value> <!-- 15 minutes -->
</init-param>
<init-param>
<param-name>enable-compression</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>preferred-encoding</param-name>
<param-value>gzip</param-value>
</init-param>
<init-param>
<param-name>supported-encoding</param-name>
<param-value>gzip,deflate</param-value>
</init-param>
<!--
=======================================================================
The allowed values for compression-level are the following:
- DEFAULT_COMPRESSION -1
- NO_COMPRESSION 0
- BEST_SPEED 1
- BEST_COMPRESSION 9
=======================================================================
-->
<init-param>
<param-name>compression-level</param-name>
<param-value>-1</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SyncServerServlet</servlet-name>
<url-pattern>/sync/*</url-pattern>
</servlet-mapping>
然后把 ds-server\default\sql\hypersonic\ 当中的 create_engine.ddl 和 init_engine.sql 都先执行一遍。
我用的是 h2 ,不过还是很顺利的就执行完了。创建了 funambol 所需要的缺省数据。
运行客户端,把 url 修改成 http://localhost:8080/sync/ 用户名使用缺省的 guest/guest
随便增加了几个联系人,然后点击 同步 按钮。
接下来,返回511错误信息。查看 logs/ds-server/ds-server.log
发现是没有定义scal 和 scard 所对应的Source。而独立运行的 funambol 是没有这个问题的。
config是全部拷贝过来的,因此区别应该是在数据库那里。
于是看 funambol 自己的数据库里面,果然有对 scard的 syncsource定义,于是插入两条这样的数据:
INSERT INTO FNBL_CLIENT_MAPPING VALUES(1,'scard','1272530711883','0','0')
INSERT INTO FNBL_SYNC_SOURCE VALUES('scard','foundation/foundation/contact-foundation/SIFContactSource.xml','scard','contact-foundation')
同时,修改 SIFContactSource.xml 当中 class 的定义,指向我自己做的一个class。
原以为这样就OK了。没想到,居然报错。错误信息就是 RoutingDataSource 没办法 得到 jdbc connection。
回想起昨天 shingo7 提到的,
shingo7 写道
源代码中的RoutingDataSourceConfiguration是通过下面的方法得到的
Java 代码
DataSourceConfiguration dataSourceConfiguration =
DataSourceConfigurationHelper.getJDBCDataSourceConfiguration(name.toString());
于是明白了,不能象我昨天的blog里面写的那么简单,而是要把 fnbluser 的定义搞成和这个一样的。
看了一下在 java 代码中是如何获取到 RoutingDataSourceConfiguration的,于是把 jetty-web.xml
修改了一下,关于 fnbluser 的定义,修改成:
<Call id="dsConf" class="com.funambol.server.db.DataSourceConfigurationHelper" name="getDBConfiguration">
</Call>
<Call id="routingDsConfi" class="com.funambol.server.db.DataSourceConfigurationHelper" name="mergeConfiguration">
<Arg><New class="com.funambol.server.db.RoutingDataSourceConfiguration"/></Arg>
<Arg><Ref id="dsConf"/></Arg>
</Call>
<New id="fnbluser" class="org.mortbay.jetty.plus.naming.Resource">
<Arg></Arg>
<Arg>jdbc/fnbluser</Arg>
<Arg>
<New class="com.funambol.server.db.RoutingDataSource">
<Arg>
<Ref id="routingDsConfi"/>
</Arg>
</New>
</Arg>
</New>
又一次以为OK了,运行还是出错。只好进入debug状态,发现在 DataSourceConfiguration 这个类当中,获取
configPath() 这个方法,返回的居然是 null/config。原来是一个环境变量没有设置的原因。于是把设置一个环境变量
-Dfunambol.home=. 再运行,就 OK了。
当然,这里OK的意思是,我自己写的 SyncSource确实被调用到了。离真正的同步,还有一段路要走。
分享到:
相关推荐
本文将深入探讨Funambol的编译过程,以及与之相关的技术要点。 首先,我们要了解Funambol的基本架构。Funambol是一个基于Java的平台,它的核心功能是实现数据的双向同步,包括联系人、日历、任务等个人信息管理...
8. **API与扩展**:Funambol提供API,允许开发人员创建自定义插件或扩展,增强服务器的功能,如集成第三方服务、实现特定的管理策略等。 9. **监控与报告**:管理员可以通过Funambol DM Server监控设备状态,获取...
Funambol DS是一种基于SyncML协议的云同步服务,它主要用于客户端和云端的数据同步,包括通讯录、日历、视频和文件等内容。本文主要探讨了Funambol DS在通讯录同步方面的实现机制。 首先,Funambol DS和DM(Device ...
Funambol是一款开源同步平台,专门设计用于移动设备与服务器之间的数据同步,尤其注重于个人信息管理(PIM)数据,如日历、联系人、任务和邮件。它基于云技术,提供了一个双向同步解决方案,使得用户可以在不同设备...
- **持久化存储架构**:版本1.1中增加了对持久化存储的支持,这是数据同步服务的核心需求之一。 - **安全架构**:版本1.2中加入了安全相关的架构设计,确保了数据传输的安全性。 - **同步过程**:版本1.3中新增了...
Funambol客户端与服务器同步工具,Funambol provides apps for smartphones, tablets and computers such as iPhone, Android, BlackBerry, Symbian, Windows Mobile (Windows Phone coming soon), Windows PC and ...
改造funambol_dm_server源码为eclipse工程, 方便测试研究, 内附SQL脚本, 可作为OTA相关项目的研究参照, funambol_dm_server完全遵照SYNCML协议, 对SYNCML的深入研究比较有帮助. 包内是个EAR工程, 包含EJB和WEB两部分...
Funambol Sync Client for Android is a client to synchronize PIM Data of Android devices with any SyncML aware server. For the moment, it is an experimental project to explore the possibility of the...
funambol-dm-server 移动设备管理服务器端源代码
Funambol架构允许开发者扩展其核心功能,以满足特定应用需求,如添加新的同步数据类型或者自定义同步策略。 总结来说,Funambol通过SyncML协议实现高效、可靠的云数据同步,其架构设计考虑了灵活性、可扩展性和安全...
### Funambol Mobile开源同步解决方案 #### 一、概述 《Funambol Mobile:开源同步你的电子邮件和其他数据至移动设备》是一本由Packt Publishing在2009年12月出版的技术书籍,作者为Stefano Fornari。本书主要介绍...
基于Funambol的J2ME客户端设计文档,深入探讨了移动应用开发与管理的核心概念、技术及实践。本文档不仅提供了详细的理论基础,还涵盖了Funambol作为开源移动应用平台的关键角色,以及SyncML标准在其中的应用。 ### ...
Funambol是一个开源的同步平台,它主要用于移动设备与服务器之间的数据同步,如日历、联系人、任务等。在Android平台上,Funambol提供了Android Sync Client,它是一个客户端应用程序,使得用户能够方便地将手机上的...
学习OMA协议很好的源码参考。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
Funambol是一款开源的同步服务器软件,主要用于移动设备与服务器之间的数据同步,如日历、联系人、邮件等。在Android开发环境中,Eclipse是最常用的集成开发环境(IDE)。本篇将详细介绍如何在Eclipse中配置Funambol...