db4o Developer Community

db4o open source object database, native to Java and .NET
Welcome to db4o Developer Community Sign in | Join
in Search
More Search Options

db4o in Chinese

  • db4o 活动:4月12日,北京Android开发者会议

    db4o 活动通知

    4月12日,北京Android开发者会议,db4o将会参与,同时贡献2个topic,以及会进行现场招聘。

    活动主题:Before The Rain(雨前)

    活动主题背后的故事:这个美妙的主题名称由ThoughtWorks的徐X同学独家贡献,Matrix社区的cleverpig同学发现了这张含蓄的国画《雨前》。《雨前》是王道中于1986年的作品。《雨前》以线结构画面,线条灵活而富于感情,设色以荷叶的大片空白,渲染淡墨为基调,几株红荷和一对鸳鸯显得分外的醒目。整幅作品俏丽而不俗,大有“红装素裹”之韵致。在暴雨来临之前,一对伴侣正设法躲进浓密的荷叶中避雨,庞大的荷叶使鸳鸯愈显小巧,可爱,再通过装饰性的水雾和全图倾斜的气势,使观者更增加了对自然生态的眷顾和留恋。王道中,1931年生,北京市人。1954年毕业于中央美术学院。曾任黑龙江省书画院艺术委员会主任,齐鲁画院名誉院长,当代王笔书画学会理事, 中国美术家协会会员。

    话题范畴:

    一如既往的Open(开放性)话题,范围不受限:开发技术、敏捷经验、创业故事等。

    特别关注:

    世界领先的OO数据库厂商db4o公司 BeijingOpenParty活动赞助商之一)也将参加本次活动,并将贡献有关移动平台的精彩Topic。如果你对移动开发感兴趣的话,可以参加到他们的topic中,当然他们更希望大家能提出有关移动开发(Android、J2me、JFX、Flash Mobile Platform等)、移动浏览、移动市场研究、移动存储等方面的见解。

    邀请组织:

    BJUGInfoQ中文站BPUGBLUGSun中文社区RIA meeting敏捷中国Mozilla中文社区

    活动时间:

    2008年4月12日13:30-18:00

    活动主办方:

    本次活动由Matrix、BJUG、InfoQ中文站和AgileChina联合主办

    场地提供方:

    ThoughtWorks

    活动地点:

    北京市东直门国华投资大厦11层ThoughtWorks Office,地铁环线西南 出口直行50米即到。查看地图

    报名方式:

    请发邮件至 cleverpig@matrix.org.cn 或者 china@db4o.com ,以便我们提前统计参与人数,请同时注明您愿意分享和讨论的主题。有关本次活动的最新信息,我们将在Beijing Open Party进行报道,敬请关注。

  • db4o中文文档项目团队发布《db4o7.0社区中英双语版》

    圣诞过后的一周后,由cleverpig负责的db4o中文文档项目团队(“4in1”122815时发布了他们经过了将近2个月的努力完成《db4o7.0社区中英双语版》。在此对满江社区的曹晓刚老师为本项目提供的confluence表示由衷的感谢!此版本目前已经通过了文档项目团队内部的review,现发布于db4o社区向广大db4o开发者争取意见,大家可以通过mail或者网db4o版块留下自宝贵的意见和建议,当然也欢迎有兴趣者的加入!

    访问db4o7.0社区中英双语版!

    http://wiki.redsaga.com/confluence/pages/viewpage.action?pageId=2137

    为什么选择db4o7.0作为翻译版本?

    20071113,圣马刁市(美国加州)db4objects (www.db4o.com): 面向Java.NET的领先开源对象数据库,发布了db4o最新7.0开发版本(beta)。此版本提供了重要的新特性:透明激活 (Transparent Activation),它将使从前读取复杂数据对象的工作变得非常容易,只需要编写一行代码,但却在性能上超越了前辈们(比如Hibernate、关系 或非关系数据库)。目前,此版本对于Javadb4o集合(collections)支持本地透明激活,.NET版本已经被列入了十二月的开发计划,并 将在明年第一季度全面支持所有集合类型。

    "这次db4o数据库主要加强点是在开发过程中,简化了对复杂对象图表的处理。"db4o项目技术委员会的领导者Rodrigo de Olivera谈到。"正如人们不喜欢手动档的繁琐,转而选择自动挡轿车一样,透明激活技术提供了与db4o协助的完美无缝方式,而无需了解下层数据状况。你能够将精力放在应用功能上,db4o将确保你的对象模型时刻准备着行动。"

    7.0 版本,db4o自动检查对象图标的激活深度,从而只从磁盘装载绝对最小量的数据、同时消耗更少的内存并提升性能。与例如Hibernate这样的高度抽象 数据架构、其它的对象关系解决方案或者非本地对象数据库的不同的是,db4o内嵌了Java.NET引擎,它能够在本地对透明激活特性进行优化,从而将 其性能提升比原来快44倍。由于开发者不再需要手工定义那些正被操作、保存或者读取的对象的激活深度,因此使开发时间锐减。

    "我们的应用使用了大量复杂的对象图表," 位于亚特兰大的领先语音识别软件提供商Joseph Duda of Nexidia说。"透明激活技术将大大降低应用的内存空间,并且减少了启动次数和运行时图表装载的开销。"

    透明激活的实现与db4o版本的不断增强都是由时刻活跃在db4o社区、世界上最大的、近三万Java.NET开发者群体驱动着的。感谢这伟大的 协助和开 源开发模式,db4objects把对象数据库放回到了"软件开发世界的地图"之上,并使db4o成为了每个创新Java或者.NET系统架构的首选,尤 其是在嵌入式或者移动软件应用领域。

    翻译过程中的一些专用词汇: 

    • Query-By-Example:样本查询(缩写为QBE)。
    • Evaluation:评估。用在SODA中的一种API,它通过对结果集进行某种方式的评估而得出更加精确的结果集合。
    • Native Queries:原生查询(缩写为NQ)。
    • Native:这里翻译成"原生",是因为 Native表示了查询语法是"亲语言"的,即与Java或者.NET语法没有太大不同。依据来自db4o社区管理者------German的解释: "native in this context means that the query is not much different than the language (e.g. Java or .NET) (native to the language mean not alien to the language). It means "very close" to the language thus native. SQL strings are non native because they don't follow the sintaxis of the language (Java or .NET)."
    • Descend:在上下文中翻译为"深层访问"。也就是进入到对象 树的更深层次来访问对象的分支(比如属性或者字段)。来自db4o社区的解释:"descend in that context means to go deeper in the object tree, to dig into an object branch (such as a field or property).With SODA you use descend to go to a specific field/property in the object and pass a constraint value on that field."
    • object ID:对象标识。
    • Unique Universal IDs:这里不用翻译,就是UUID,做过数据库开发的朋友们都知道它。
    • Out of the box:这里可以翻译为"拿来就用、即开即用"。原意为"开箱即用"也用作"off the shelf"(现货供应)的同义词,其含义是指能够满足一定需求的、已经作好了的软件、硬件或两者的结合形式。如不采用,就需要投入专门的人力物力来开 发。out-of-the-box在计算机术语里可以指"从盒子里拿出来直接可以使用的,也就是即开即用"的意思。
    • db4o team:统一一下称为db4o团队。
    • Programmatic:程序化。即通过编程的方式实现某种目的。
    • predicate:这里翻译为"断言"。依据是William R. CookCarl Rosenberger编写的《Native Queries for Persistent Objects A Design White Paper 》。

    关于db4o中文文档项目和团队:

    http://wiki.redsaga.com/confluence/display/db4o/Home

    http://code.google.com/p/chinesedb4o/

    db4o中文文档项目团队的工作计划:

    http://wiki.redsaga.com/confluence/pages/viewpage.action?pageId=2112

     

  • 使用db4o实现超强的Android地图应用

     原作者:German Viscuso    译者:Rosen

    简介

    本项目基于DavanumSrinivas开发的BrowseMapBrowseMap是一个为Android开发的Google Maps浏览器,能提供:

    • 在Android上浏览Google Maps
    • 地图的放大和缩小
    • 跟随鼠标移动(在真实设备上应该是触摸屏)
    • 交通和卫星视图之间转换
    • 定位
    (这些地图应用程序基础功能实际上已经在Android上实现了)

    但由于增加了db4o对象持久化引擎,MapMe在这些基础功能之上提供了不少新特性: 
    • 把重要的位置信息作为书签保存到db4o(包括缩放级别、卫星交通视图的所有地图持久化内容)
    • 浏览书签列表
    • 编辑书签
    • 从书签中导航到地图上某个位置
    • 根据当前GPS所报告的位置居中显示地图

    屏幕截图

    想看应用程序是如何运作的,你可以观看在YouTube上的MapMe视频、从一个外部服务器下载高分辨率视频(30 Mb)或下面的屏幕截图:

    db4o总部(卫星+交通视图)



    MapMe主菜单:



    建立书签/导航点(navpoint):



    保存的书签/导航点(navpoint)列表:



    MapMe如何利用db4o?

    如果你查看源代码(下面有下载),你会发现DB helper类处理了所有的持久化操作(数据库的开启、存储、查询、计数),而这一切都不超过80行代码!

    而且这一切都很简单,不会损失性能。好吧,现在就让我们来看一下项目中用到的持久化方法。

    开启数据库

    开启数据库的确很简单,并且在必要的时候还能自动生成数据库文件。一旦打开,db4o将锁定数据库文件。

    public  ObjectContainer db(){

          
    try  {

                
    if (oc  ==   null   ||  oc.ext().isClosed())

                      oc 
    =  Db4o.openFile(dbConfig(), db4oDBFullPath(context));

                
    return  oc;

          } 
    catch  (Exception e) {

                Log.e(Db4oHelper.
    class .getName(), e.toString());

                
    return   null ;

          }

    }

     

    private  String db4oDBFullPath(Context ctx) {

          
    return  ctx.getDataDir()  +   " / "   +   " browsemap.db4o " ;

    }

    注意我们所存放的数据库文件路径是和上下文数据目录相关的。

    配置数据库

    这里我们提供一个配置对象,以便在打开数据库的时候把它传递进去(代码如下)。

    private Configuration dbConfig(){

          Configuration c 
    = Db4o.newConfiguration();

          c.objectClass(MapBookmark.
    class).objectField("name").indexed(true);

          c.objectClass(MapBookmark.
    class).updateDepth(2);

          c.objectClass(MapBookmark.
    class).minimumActivationDepth(3);

          c.objectClass(MapBookmark.
    class).cascadeOnDelete(true);

          
    return c;

    注意,为MapBookmark对象建立的索引字段是“name”,并设置激活和更新级别。

    保存书签

    在这里我们调用一系列的操作,无论对象是否存在于数据库,对象都会被更新或插入。

    public void setBookmark(

                            String name,

                            String description,

                            
    int latitude,

                            
    int longitude,

                            
    int zoomLevel,

                            
    boolean satellite,

                            
    boolean traffic){

         

          MapBookmark bkm 
    = getBookmark(name);

          
    if(bkm == null)

                bkm 
    = new MapBookmark(name);

          bkm.setDescription(description);

          bkm.setLatitude(latitude);

          bkm.setLongitude(longitude);

          bkm.setZoomLevel(zoomLevel);

          bkm.setSatellite(satellite);

          bkm.setTraffic(traffic);

          db().set(bkm);

          db().commit();

    }

    由此可见,在保存到数据库之前,我们已经设置好所有字段。

    根据name查询书签

    我们通过Query by Example(QBE)传入一个原型来取回符合name条件的书签。

    public MapBookmark getBookmark(String name){

          MapBookmark proto 
    = new MapBookmark(name);

          ObjectSet result 
    = db().get(proto);

          
    if(result.hasNext()){

                
    return (MapBookmark)result.next();

          }

          
    return null;

    }

    QBE利用反射来检查原型对象的字段。

    查询所有书签

    这里,我们把SODA查询结果拷贝到ArrayList中。但要注意,当使用Native Queries时你不必这样做(在这种情况下将直接返回List<MapBookmark>)。

    public List<MapBookmark> getBookmarkList(){

          ArrayList
    <MapBookmark> ret = new ArrayList<MapBookmark>();

            ObjectSet result 
    = getBookmarks();

            
    while (result.hasNext())

                ret.add((MapBookmark)result.next());

            
    return ret;

    }

       

    private ObjectSet getBookmarks(){

          Query query 
    = db().query();

          query.constrain(MapBookmark.
    class);

          query.descend(
    "name").orderAscending();

          
    return query.execute();

    }

    删除书签

    public void deleteBookmark(String name) {

          MapBookmark bkm 
    = getBookmark(name);

          
    if(bkm != null){

                db().delete(bkm);

                db().commit();

          }

    如果在db4o参考系统中存在符合条件的对象,你便可以轻松地调用delete()操作删除它。

    书签计数

    public int bookamrkCount(){

          
    return getBookmarks().size();

    }

       

    private ObjectSet getBookmarks(){

          Query query 
    = db().query();

          query.constrain(MapBookmark.
    class);

          query.descend(
    "name").orderAscending();

          
    return query.execute();

    }


    要通过查询来进行对象计数,你只要获得查询结果的数量即可。

    待完成

    • 基于书签的查询功能(通过db4o查询)
    • 支持手势识别(gesture recognition)(链接
    • 当前位置声音提示(Tweet current location)(链接
    • 在屏幕上动态跟踪GPS定位并把GPS路线存储到数据库上(以便今后查看)
    • 把定位信息发送给联系人(短消息、e-mail等)
    下载

    MapMe.Zip
    YouTube上的MapMe视频
    高分辨率视频(30 Mb)
  • db4objects宣布db4o数据库已经为Android作好准备

    db4objects宣布db4o数据库已经为Android作好准备

    db4o提供了Google Mobile计划所缺少要素:一个移动、高效、跨应用的数据存储

    2007年11月5日,圣玛刁(美国加州) db4objects (www.db4o.com ): 面向Java和.NET的领先开源对象数据库,宣布db4o无缝地运行在Android平台上,后者是由具有Google背景的开放电话手机联盟 (Open Handset Alliance)近期推出的移动设备开发软件。尽管Java开发者正乐忠于Android完整的面向对象平台时,却因Android与关系数据库绑定而 感到失望,因为这意味这又回到了需要在对象和数据表之间的进行大量笨重的工作。db4o通过提供快速、安全、原生的Java对象数据库填补这一空白,使存 储对象和在应用之间共享数据变得轻松而简单。

    Google通过开放电话手机联盟推出Android,而引发了无线世界的一次变革。与大家所预期的大肆宣传gPhone正相反,Google创建 这一永久改变无线世界的开源软件平台。Android正在跨越从硬件到软件,使得Verizon的CEO McAdam在12月3日的商务周刊中写到他已经看到了工业进入了"转折点"。

    Android软件开发包由应用框架、开发环境、工具、调试器和开发者用来创建强大应用所不可或缺的应用组成。 Java是此框架的主要语言,而Android框架为面向对象编程提供了清晰的途径。Java开发者现在就可以编写丰富而令人兴奋的应用,并将它们运行在 基于Android系统的电话上。

    因此,Android沿用了关系数据库的确使人吃惊,这是唯一和面向对象不协调的元素。幸运的是,db4objects已经提出了解决方案。 db4o能够无缝地运行在Android之上,对任何复杂对象进行本地存储和读取。在下载Android SDK几分钟后,db4objects的工程师就已经在Android上运行了db4o,并已通过了3500个测试实例的考验。目前,db4o的设备级软 件质量已经通过部署在高速列车、飞机、复印机等关键性任务领域而获得了证明,当然它也能够被每个Androis开发者灵活使用。

    db4objects的社区主管German Viscuso演示了db4o提供的高效性:将PasswordSafe 移植到运行db4o的Android平台上。"这太可怕了,"PasswordSafe(使用SQLite关系数据库)的作者Steven Osborn如此惊呼,"db4o代码如此之优雅。"。另一个示例应用展示了db4o对Android平台的超强适应力:MapMe ,它在Android平台上显示2D地图,并利用db4o存储和查询Google Maps上的全球导航点。

    这里还有一些使用如db4o这样的面向对象数据库的收益:包括轻松的代码维护、能够基于更加复杂的数据模式创造多样的革新应用。与rigid中预定 义SQL表的方式截然不同,db4o允许动态、自由形式的数据,这些数据能够在任何时候被修改或改进。另外,db4o提供了高效的数据复制工具dRS (db4o Replication System),这是Android软件的缺少另一个元素。因此,开发者能够编写将用户数据备份到后台数据服务器或者家庭PC的软件应用。而同时消费者可 以在手机上随时启动游戏、暂停游戏,然后晚上回到家中继续游戏。商业用途包括外勤人员自动化、RFID数据获取、本地缓存地理数据的复杂导航系统。

    获取更多关于db4o的产品信息,请阅读db4object首席软件框架师Carl Rosenberger的博客《为什么Android掀起了mobile飓风? 》或访问db4o Android网站 。

  • 为什么Android掀起了mobile飓风?

    为什么Android掀起了mobile飓风?

    作者:Carl Rosenberger   译者:cleverpig

    自从Android面向移动设备的软件SDK发布,已经有几周时间了。对我这个db4o对象数据库的创始人来讲,它已经成为了在我们产品和公司生命中最兴奋的事。

    Android 将重振早已支离破碎的移动开发平台,并使面向全球用户、基于定位应用的移动开发成为了可能。我认为这才是移动飓风的掀起之时。为什么这么讲?我想下面会给出答案。

    鸟瞰飓风

    从整体的视角纵观,移动操作系统的世界呈现群雄并起之势。而其中的主要"赢家"就是那些拥有私有技术的手机厂商和运营商。但是,甚至连 Symbian、Microsoft、Apple这样的业界巨擎都没有占有明显优势:只不过是每年6000万、2000万、1000万的手机部署量。

    由于没有标准的操作系统,因此运营商尝试着用AJAX在浏览器上编写应用,以使其应用变得更加通用。但将AJAX应用于手机的确存在着一些劣势:

    • 在小屏幕上的用户体验不会好到哪里。
    • 应用只能在连接网络的条件下工作。
    • 没有本地存储和缓存结构化数据的解决方案。
    • 由于传输延迟和带宽限制,复杂的交换应用不可能被实施。
    • 设备的本地处理能力没有发挥。
    • 可扩展的服务端应用开发面临严峻挑战。
    • AJAX的应用部署是复杂、昂贵并且迟缓的。
    • 没有标准支持浏览器访问本地设备服务:比如GPS、摄像头、通讯录、通话列表、麦克风或耳机。

    设想一下,如果你有了一个绝对超酷的移动应用创意,并打算将它进行全球部署,那么你选择哪种技术?如果你并不急于发布的话,那么就应该使用Android。下面是我认为Android之所以称王的几点理由。

    定位服务

    Google这是因为提供定位相关的服务而闻名于世。而Android的SDK已经具备了两个非常有用的package:com.google.android.maps和android.location。你可以使用它们在GoogleMaps上面创建自己的超酷应用。LocationManager提供了"ProximityAlert"(接近性提示)的功能,它能够在你进入某个指定 位置范围时唤醒手机并完成某些任务。

    资金和广告资源

    Google在这方面可称得上相当老练、资深了。

    开源

    Android采用Apache License,就像免费啤酒一样提供给每个人免费下载、使用。每个人都能利用Android组件并将它们用到自己的科技产品中。有哪家愿意花费时间和金 钱来重新发明轮子,而拒绝重用Android组件呢?如果得到了来自Google工程师的开发支持,那些归各家公司私有的技术分支注定将汇聚到 Android产品线中来。

    强大的生态系统

    有了Linux、Java和Eclipse IDE这些强有力的伙伴,Google将成为最强大的开源"生态系统"。

    应用

    Google已经发起了1000万美元奖金的开发者挑战赛,来促进应用快速成长。 

    技术

    Android的第一个SDK完全是那些聪明绝顶的Java工程师在足够自由和时间的保证下从草图开始创建摩天大楼的"基石"。

    Dalvik Java VM采用简练、高效的bytecode格式运行,它能够在低资源消耗和没有应用相互干扰的情况下并行执行多个应用。这些特性已经在Sun公司的Java RFE(Request For Enhancement)上出现多年了,而却被Google轻松地实现了。

    Google使用Apache的Harmony类库是一个明智的举动。这样Google便脱离了Sun而走上全面开源Java之路。而且Harmony在某些方面的速度也快于Sun的VM。

    Android随SDK而发布的Eclipse集成工具是个令人吃惊的好工具,任何使用Eclipse的开发者都能在几分钟内编写完第一个可运行的 Android应用。它在Eclipse中的DDMS视图提供了对模拟器的控制和检测,它是我所见过的最好的模拟器管理控制台。通过它,你可以看到所有运 行着的活动、堆使用率和线程工作状况,而且控制系统还将每个线程消耗的时间作自动叠加。

    Android指南告诉了开发者"为什么在移动设备上高效地控制应用是多么重要":高效意味着更长的电池寿命、更轻的电池重量和更低的设备开销。

    我认为Android应用框架概念看上去都很不错,其中一些出色的关键点:

    • 活动领域(Activity) - 应用的屏幕
    • 行为意图(Intent) - 一个行为请求
    • 行为意图接收者(Intent Receiver) - 对请求作出反应的应用代码
    • 服务(Services) - 可分享的不可见应用组件

    数据库支持

    "内容提供者" 意味着能够提供类似数据库的功能。目前,这是db4o非常感兴趣的,让我们看Android中提供的数据库操作API:

    public abstract Cursor query(
    ContentURI uri,
    String[] projection,
    String selection,
    String[] selectionArgs,
    String groupBy,
    String having,
    String sortOrder)
    insert(ContentURI uri, ContentValues values)
    update(
    ContentURI uri,
    ContentValues values,
    String selection,
    String[] selectionArgs)
    delete(ContentURI uri, String selection, String[] selectionArgs)

     
    怎么是这样的?非常抱歉,这不是Java(也不是原生语法),也不是面向对象的,更不是SQL。

    在不久后,我们将会对db4o和以上的接口进行全面比较,以其展示给大家:优雅的对象持久化应该是什么样子的。如果你一点也不了解db4o,那么这里是db4o的下载开发指南

    目前的Android数据库API还缺少基于定位服务的关键元素:开发者如何创建对"邻近的停车场" 或者"位于在1公里内的好友"等与定位服务相关的查询?非常明显,地理信息的标准查询是数据库API中很必要的部分。

    我的第一个Android应用

    当然,我尝试编写了第一个简单的Android应用...

    我并不喜欢用XML编写GUI的方式,因此我想一定会有Eclipse可用的可视化编辑器出现。Apple在iPhone中为用户提供了"bar" 来提高用户体验,也许Google正在希望社区能够创建一些更好的东西,因为"重新思考传统的用户接口"已经被写在了Android开发挑战赛网站上,成 为了评选的一大原则。

    作为我的第一个Android应用,我简单地将一个对象保存到db4o并出奇地高兴,因为支持JDK1.1的db4o很出色地完成了这个简单的任务。

    因此,让我们看看当使用支持JDK1.2的db4o会遇到什么问题?哦,在Eclipse中调试模拟器的感觉可真是超好、超快。在将应用部署到模拟 器或者步进式调试代码时没有任何的时间延迟。这太棒了!发生了什么问题? 明显地,java.nio.channels.FileLock#release()方法跑出了IO异常。嘿,我发现了我的第一个Android bug。在删除了这句惹事生非的#release()语句后,JDK1.2版本代码通过了我的小测试,并运行良好。接着,让我们将持久化对象中的字段修改 为private,来看看AccessibleObject#setAccessible()是否能够允许我们访问这个private字段。太酷了,它通 过了测试,我们拥有了一个运行在Android系统上的、功能完整的db4o,可见Android系统上的Java足够支持我们所做的每件事!

    Android,让我们成为朋友吧!

    综上所述, 上面编写的代码看上去非常酷、而且稳定。Android对GUI和数据库的支持并不尽善尽美,但它们却都能被db4o这样的第三方软件提供商来改善。

    Mobile顶级应用

    如果我没有在db4o工作的话,那么我将会马上去创建我所梦想的基于定位的应用 :

    驾乘分享

    一个人独占一辆汽车是没有必要的。我们能够做得比在交通堵塞中度过人生中十分之一的"清醒"时光更好,而且更好地保护我们的环境。

    基于定位的系统能够发现总是同时走相同路线的两个人,这将使将他们组织在一起拼车成为了可能。通过安装巨大的数据库,你甚至在从A地至Z地的过程中 无需开车。你只需要在手机上输入你所计划的路线,系统将自动发现那些走这条路线的人,并且按需更换搭乘的车辆也将成为服务的一部分。

    就像我们制定环境保护法一样,我们还可以利用法规强制在汽车上安装"驾乘分享"系统(只是强制安装,而不强迫使用)。这样,通过节省了汽油、减少排出的废气而获得的经济收益将是巨大的。甚至政府还可能为这样的一个系统买单?

    如果你认为安全性是个问题的话: 那么女性驾驶者可以搭载女性乘客啊。

    当今,已经有一些基于兴趣而开发的驾乘分享系统,但还没有能够力拔头筹的系统:它必需具备实时、自动化、并易用的特性。 想象一下你的手机将通过语音告诉你:"请停在下一个超市旁,你的邻居Sue需要搭车到Santa Monica。作为回报,她为你提供一个冰点,并将告诉你一些关于上周你不在家时你的孩子的所作所为。"。这简直是酷死了。

    随时随地会面

    通常,你都要每天穿梭于老朋友之间, 但也许经常和他们只相距半公里或者十几分钟的路程。而如果这时你收到手机发来的好友提示,并能联系到好友和他一起喝杯咖啡,难道这不很好吗?而移动定位系统能为你作这样的安排。

    假如你身处外地,并没有朋友一起吃晚饭。那么去问问你的手机可以找到谁吧?也许你十年未见的同学正生活在这个城市,并拥有城镇中最好的酒吧!。。。你只需要做的就是走上几分钟,去找他一起喝上几杯。

    假如你在纽约有和某人的会议约定,而你正准备乘飞机到那里。目前你在费城开另外一个会议,而此时那个在纽约将会面的人也在此地。这将是你节省一天路程的好机会!?

    感谢全世界

    Android这个标准的移动操作系统将使上面所谈的两种应用变得易于编写。而这种变革不仅发生在美国,而是全世界。 

    只为手机而作?

    当然Android看上去是为手机而编写。但没有理由使这个开源、自由的软件被用于其它应用领域和设备上。

    我觉得Android能够说服设备生产商: Java能够在相同的开发时间内编写比C更快的应用。

    Web 3.0

    在Android发布之前,来自商务方面长达10000英尺的报告已经非常明显地提出:Web3.0将基于定位服务,Google将成为大赢家。

    Android不是敷衍的发布版本,那将使Steve Ballmer感到愤怒的。它已经成为了优秀的工程,一个面向未来的一流基石!Android正在改变世界!

  • Android与db4o的完美结合-Password Manager

    项目简介

    这里提供的Password Manager项目是Steven Osborn编写的PasswordSafe(在Apache License下发行)的改写版,目前已经实现了在Android平台下的基本密码管理功能。项目源代码中使用db4o代替了SQLite,这样不但使持久化处理更为直观,而且使开发过程更快速、整个应用更加高效。

    在这个项目中,你可以获得以下资源:

        * db4o与SQLite之间在基本持久化操作上的比较
        * 完整的Android示例应用代码
        * 应用运行时的视频演示

    基本功能

    本应用基本功能是安全地保存网站登录信息,例如URL、用户名、密码,它使用128位AES加密算法。使用者必需提供正确的密码才能访问应用,而密码被用于加密/解密应用数据。

    这里提供了采用db4o技术的Password Manager在Android模拟器下运行的在线视频:
    http://www.youtube.com/watch?v=UFSD44AcBwM

    如 果你下载了源代码(请见本页末尾的详细说明),那么你会看到原来PasswordSafe中的DBHepler类(实现SQLite下的持久化)已经被替 换为Db4oHelper类(实现db4o的持久化)。现在,就让我为你展示db4o和SQLite在持久化处理上的不同之处吧。

    SQL初始化开销

    这是你需要在SQLite下初始化密码管理器SQL代码(表名、表创建命令等):
    image
    而下面是等价的db4o代码:
    image
    正如你所看到的,在db4o中无需预定义schema(你可以将db4o对象模式当作schema使用,并且在这种对象模型下进行重构是非常优雅的,甚至在一些简单的情况下是自动化的)。

    数据库打开和创建机制

    在SQLite中,你需要调用两种不同的方法,一种是创建数据库,另一种是打开数据库:
    image
    而在db4o中,你只需要调用openFile(),它将根据数据库是否存在来创建或者打开数据库:
    image
    也许这里的差别看起来无关紧要,但更简短的代码才是更清晰的代码!

    更新和插入数据

    使用关系数据库SQLite时,你需要根据具体情况传送插入或更新命令(完全正确地构造反射数据表字段的SQL字符串确并非易事):
    image
    这里是等价的db4o代码:
    image
    你 是否发现了不同?db4o实际上是一种单行代码(one-line-of-code)的存储数据库。db4o自动检查对象是新的还是已存在的,并根据对象 状态进行更新或者插入(我们只需要调用set操作)。值得注意的是,在上面的代码中我们手工提供了对象的新id,而db4o是可以将其配置为自增字段的。

    查询所有记录

    在SQLite中,我们不得不进行人工的对象关系映射:
    image
    而在db4o中,我们完全可以忘掉关系映射:
    image
    请注意:在上面简短的查询中,我们通过db4o的SODA查询了全部PassEntry对象,并将结果按照"id"字段进行排序(在上面的SQLite示例中没有排序)。

    它不能再简单了!

    通过字段查询单一记录

    通过Id查询记录的SQLite版本:
    image
    下面是db4o版本,它使用了db4o三种查询系统之一------Exmaple(也称为QBE)代替前面的SODA进行查询:
    image
    可以看出这是多么短小、清晰的代码啊!

    结论

    我希望你已经通过以上短小的文档了解到了db4o的优点。你希望在应用中将持久化提升到一个新的高度吗?请现在就下载db4oJava版本或者.NET版本吧!它是免费的!

    相关资源

        * db4o指南
        * 安装向导
        * 开发者资源

    TODO

        * 使用XTEA替换自定义加密算法(XTEA能够提供数据库级别加密和IO加密,而不是字段级加密)
        * 提供检索功能(为了按名称进行过滤)

    Steve的PasswordSafe项目发布在Google Code上,那里有更多的TODO:
    http://code.google.com/p/android-passwordsafe/issues/

    Bugs

        * 在密码记录编辑器中尝试编辑website输入框中的URL时会发生错误。

    源代码下载

        Db4oAndroidPswMgr.Zip

  • db4objects发布领先的开源对象数据库7.0版本

    2007年11月13日,圣马刁市(美国加州),db4objects (www.db4o.com):面向Java和.NET的领先开源对象数据库,发布了db4o最新7.0开发版本(beta)。此版本提供了重要的新特性:透明激活(Transparent Activation),它将使从前读取复杂数据对象的工作变得非常容易,只需要编写一行代码,但却在性能上超越了前辈们(比如Hibernate、关系或非关系数据库)。目前,此版本对于Java和db4o集合(collections)支持本地透明激活,.NET版本已经被列入了十二月的开发计划,并将在明年第一季度全面支持所有集合类型。

    “这次db4o数据库主要加强点是在开发过程中,简化了对复杂对象图表的处理。”db4o项目技术委员会的领导者Rodrigo de Olivera谈到。“正如人们不喜欢手动档的繁琐,转而选择自动挡轿车一样,透明激活技术提供了与db4o协助的完美无缝方式,而无需了解下层数据状况。你能够将精力放在应用功能上,db4o将确保你的对象模型时刻准备着行动。”

    在7.0版本,db4o自动检查对象图标的激活深度,从而只从磁盘装载绝对最小量的数据、同时消耗更少的内存并提升性能。与例如Hibernate这样的高度抽象数据架构、其它的对象关系解决方案或者非本地对象数据库的不同的是,db4o内嵌了Java和.NET引擎,它能够在本地对透明激活特性进行优化,从而将其性能提升比原来快44倍。由于开发者不再需要手工定义那些正被操作、保存或者读取的对象的激活深度,因此使开发时间锐减。

    “我们的应用使用了大量复杂的对象图表,” 位于亚特兰大的领先语音识别软件提供商Joseph Duda of Nexidia说。“透明激活技术将大大降低应用的内存空间,并且减少了启动次数和运行时图表装载的开销。”

    透明激活的实现与db4o版本的不断增强都是由时刻活跃在db4o社区、世界上最大的、近三万Java和.NET开发者群体驱动着的。感谢这伟大的协助和开源开发模式,db4objects把对象数据库放回到了“软件开发世界的地图”之上,并使db4o成为了每个创新Java或者.NET系统架构的首选,尤其是在嵌入式或者移动软件应用领域。

    db4o的注册用户能够从db4o开发站点下载最新版本:http://developer.db4o.com/files/folders/db4o_70/default.aspx
    .NET版本已经被列入了十二月的开发计划,并有望在2008年第一季度发布。

    db4o大中华区首席代表处
    Harry Li
    地址:深圳市福田区金田北路诺德中心24A
    邮编: 518000
    联系电话: +86-13528805195
    邮件:china@db4o.com

  • db4o 在北京和武汉举办用户会议,欢迎报名参加

    db4objects, Java 及.NET 开放源码面向对象数据库的领导者, 为了积极响应大家的意见, db4objects将于9月29日晚19:00-21:00在北京,以及9月30日下午14:00-17:00 在武汉举办User Group. 在User Group上, 你将会和db4o的CEO, 以及db4o的本地合作伙伴进行面对面交流, 同时, 你将会和Matrix的众多会员就敏捷开发, 面向对象数据库等技术进行面对面交流.

    本次db4o中国巡回举办的User Group的时间和地点为:

    北京:
    时间: 9月29日 星期六 晚上19:00- 21:00
    地点: 北京西苑饭店--北京三里河路一号,近紫竹院和动物园,交通方便(地图:http://www.xiyuanhotel.com.cn/chinese/showmap.html)
    议程:
    晚上 18:30 登记入场

    会议主题:

    db4o和敏捷开发(db4o CEO Christof)
    db4o V6.4 的嵌入式性能改进(Andrew, db4o核心开发)
    JavaFX-不仅是图形化脚本(Cleverpig, Matrix负责人)

    武汉
    时间: 9月30日 星期日 下午15:00- 17:00
    地点: 武汉光谷华美达大酒店,武汉市武昌区珞瑜路726号.
    议程: 
    下午 14:30 登记入场

    会议主题:

    db4o和敏捷开发(db4o CEO Christof)
    db4o V6.4 的嵌入式性能改进(Andrew, db4o核心开发)
    db4o在汽车导航系统中的应用(Liinfeng, KOTEI CTO)


    语言 : 普通话、英语

    入场费全免, 但由于名额有限. 有兴趣参加者请将参与的场次、姓名、所属机构、职位, 联系电话及参加人数电邮至 china@db4o.com 登记预留座位.

    敬上,

    db4o大中华区首席代表处
    Harry Li
    地址:深圳市福田区金田北路诺德中心24A
    邮编: 518000
    联系电话: +86-13528805195
    邮件:china@db4o.com

  • db4o 10月通讯




    本月
    K U D O

    "db4objects
    真正让你的业务模型持久化了, 这是别的方式所无法替代得
    . "
    -- Dirk Louwers (The Netherlands), September, 2007 (
    http://developer.db4o.com/members/dlouwers.aspx?pnr=0034000000KSZVwAAP)


    A R T I C L E S


    -- db4o V6.4
    大幅提升了嵌入式客户端/服务器模式的性能--

    性能问题,一直以来都是我们从用户调查中获取的最关注的问题。在db4o V6.4 发布之际,我们很高兴宣布:新版本大幅提升了嵌入式客户端/服务器模式的性能. 嵌入式客户端/服务器模式主要指以下模式:几个客户端程序同时产生了事务,而对应却只有一个ObjectContianer 服务器的情况
    .

    db4o V6.4
    通过直接在客户端服务器之间传递对象,而无marshalling 以及 unmarshalling 这些对象来改进性能. db4o V6.4 对每一个事务都会保留一个local reference system, 同时确保在查询的过程中使用的是正确reference system. 所有的事务之间将会共享Metadata. 现在db4o的嵌入式客户端/服务器模式能够处理以下情况: 一个ObjectContainer 同时处理多个事务 db4o开发小组使用了这样一个名字来诠释它:
    Multi-Transactional-ObjectContainer (MTOC).

    大幅改进了嵌入式客户端/服务器模式性能的db4o V6.4 现在能够在db4o的官方网站进行下载使用了: (http://developer.db4o.com/files/folders/db4o_64/default.aspx?pnr=0034000000KSZVwAAP). 感兴趣的用户野可以参考一下Carl的开发blog (http://developer.db4o.com/blogs/product_news/archive/2007/09/15/embedded-client-server-performance-improvements.aspx?pnr=0034000000KSZVwAAP). 嵌入式客户端/服务器模式也在以下文章中提到: (http://developer.db4o.com/Resources/view.aspx/Reference/Client-Server/Embedded?pnr=0034000000KSZVwAAP) – 如果你之前也在使用嵌入式客户端/服务器模式,那么升级后你无需修改任何代码,因为APIs还是一致的
    .


    -- db4objects
    承办ODBMS 全球会议
    --

    ICOODB (
    http://odbmsjournal.org/icoodb/index.html)
    是全球第一个专注于面向对象数据库的全球国际性会议. db4objectsCEO Christof Wittig (http://developer.db4o.com/blogs/christof/archive/2007/09/18/international-conference-on-object-databases-in-berlin-march-2008.aspx?pnr=0034000000KSZVwAAP) 以及首席架构师Carl Rosenberger (www.odbms.org/about_contributors_rosenberger.html) 将会在会议上演讲,同时会在此会议上做演讲的还有Robert Greene (www.odbms.org/about_contributors_greene.html), Mike Card (www.odbms.org/about_contributors_card.html) 以及 Ralph Westphal (www.ralfw.de/default.html).

    ICOODB (
    www.icoodb.org)
    目前由一个独立的委员会负责管理和组织, 这个委员会由ODBMS.ORG 的专家 Prof. Dr. Stefan Edlich (www.odbms.org/about_contributors_edlich.html) (TFH Berlin) 以及Dr. James Paterson (www.odbms.org/about_contributors_paterson.html) (Glasgow Caledonian University) ICOODB 2008将会在20083月得1314日在德国柏林的University of Applied Sciences (TFH) 举行. 你能够在ODBMS.org获取关于本次会议的相关信息 (www.odbms.org/about_news_20070918.html).

    同时,db4o的全球用户会议也将会在ICOODB 2008举行的前一天,也就是2008312举行。


    -- db4objects
    赞助社区有贡献用户免费参加ICOODB 会议旅程--

    官方选举出来了3db4o most Valued Professionals (dVP) 2008 (www.db4o.com/community/professionals/dVP/directory2008.aspx?pnr=0034000000KSZVwAAP)作为最终的胜利者. db4objects 将会赞助他们参加明年在德国柏林举行的
    ICOODB 2008 (http://odbmsjournal.org/icoodb/index.html).

    3名获胜者分别是:

    Chris Beams (USA)
    Rosen Jiang (China)
    Buu Nguyen (Vietnam)

    这些dVP们同时还会有机会参加312举行的db4o全球用户会议, db4o的核心开发者以及其他成员会面和交流
    .

    让我们一起祝贺这些dVP们,同时感谢他们为db4o社区作出的贡献吧!


    --
    社区新闻 --
    by German Viscuso

    db4o社区来说,这是一个让人激动的月份。以下是db4o ProjectSpaces 中一些新成立项目的亮点:
    (http://developer.db4o.com/ProjectSpaces/default.aspx?pnr=0034000000KSZVwAAP):

    PHP
    中使用db4o
    db4o
    的开发者们总是对在不同的开发语言中使用db4o感到很有兴趣。最近,一个新的社区项目成立了,目的就是让db4o支持PHP开发。这个idea是在Nicolas Cano的一片blog文后激发出来的. 这表明了让db4o和别的开发语言整合起来并不是一件特别困难的事情。这个项目还处于proof of concept 阶段,但是因为PHP是那么地受欢迎,所以你将会很快看到用户社区带来的改进. 如果你关注这个项目,请查看
    (http://projects.db4o.com/PHP_Db4o?pnr=0034000000KSZVwAAP).

    同时我们也维护了一个db4o和别的语言整合的特性列表,你可以查看这里: (http://projects.db4o.com/Tools_And_Add-Ons/Language_Bindings_or_Implementations?pnr=0034000000KSZVwAAP).

    新的Web应用案例
    Alan Lavintman (http://developer.db4o.com/members/alan_lavintman.aspx?pnr=0034000000KSZVwAAP)
    以及 Dario Quintana (http://developers.db4o.com/members/uooopaa.aspx?pnr=0034000000KSZVwAAP) 贡献了一个新的web-RHEs, 这是一个人力资源管理的web应用(西班牙文界面),这个应用使用了

    db4o, Spring, Javaserver Faces 以及 Facelets. 你可以从下面查看这个应用: (http://projects.db4o.com/RHEs?pnr=0034000000KSZVwAAP).

    LINQ-provider-for-db4o project
    另外一个很棒的项目LINQ-provider-for-db4o project,是由我们的社区会员Luciano Di Cocco (http://developer.db4o.com/members/ldicocco.aspx?pnr=0034000000KSZVwAAP)创立的. LINQ-provider-for-db4o project 的目标是在db4oThe objective is to have rough equivalence with Native Queries using LINQ. Even tough this is still a primitive and limited implementation of a LINQ provider for db4o you might find it interesting since it is based on Matt Warren's sample (http://blogs.msdn.com/mattwar).
    You can see Lucianos's initial version here (
    http://projects.db4o.com/LINQ_To_Db4o?pnr=0034000000KSZVwAAP).


    媒 体 报 道

    "The busy Java developer's guide to db4o: Arrays and collections" (
    www.ibm.com/developerworks/java/library/j-db4o5.html?ca=drs-)
    IBM developerWorks, September 18, 2007, by Ted Neward

    Startup City: db4objects Takes A Run At The Object Database Market (
    www.informationweek.com/news/showArticle.jhtml?articleID=201806547)
    InformationWeek, September 15, 2007, by John Foley

    "Konservierungsmittel" (
    http://www.linux-magazin.de/heft_abo/ausgaben/2007/09/konservierungsmittel?category=0)
    Linux-Magazin September 2007, by Tim Schuermann (In German)

    "Versatile Querying With db4o" (
    www.ftponline.com/channels/java/2007_07/rgrehan)
    FTPOnline, July 25, 2007, by Rick Grehan

    --------

    新闻联系人:
    Harry Li
    db4o大中华区代表处
    地址:深圳市福田区金田北路诺德中心24A
    邮编: 518000
    联系电话: +86-13528805195
    china@db4o.com

  • db4o 7月通讯: db4o: OSGI 应用中的持久层方案

    事 件

    OSGi Alliance Community Meeting
    June 26-27, 2007, Siemens AG Corporate Offices, Munich, Germany

    本 月 K U D O    

    "Hibernate和db4o对比,就好象CP/M和Windows NT对比一样。对于一个略微复杂的项目(消费者,产品,销售),使用Hibernate,我们往往需要好几天的时间来完成,而使用db4o则可以在很短的几分钟内完成代码."
                    --Achilleas Margaritis, May 28, 2007


     

    文 章


    -- db4o 与 ProSyst 合作为OSGI应用提供持久层解决方案--

    db4objects 与客户端和服务器端OSGi 平台提供商ProSyst,结成了战略合作伙伴的关系,双方将会共同提供包含持久层解决方案的OSGI平台。

    OSGi framework 允许开发者将功能作为一个动态的组件安装到现有的Java应用当中。该功能能够被安装,启动,更新,停止等,而不会影响别的独立的组件。SD Times 称之为:"a quiet contender for the title of most important technology of the decade".

    db4o 6.3 Java版本 最新增加了与OSGI兼容的服务接口。ProSyst 已经在他们的开源和商业产品中采用db4o 作为一个标准的对象持久解决方案。更多的信息可以访问 press release 或者访问我们的OSGi page.


    -- 100 % 的性能提升--

    我们在PolePosition 中使用了db4o 6.3来进行测试,包括存储和操作对象,而这些操作获得了接近100%的提升。这是因为我们在最新版本中采用了新的IoAdapter cache,已经是默认使用的属性了.

    PolePosition 是一系列对数据库功能的性能测试.

    为了保证产品的质量,整套PolePosition tests 都整合进了我们的持久集成过程之中,已经运行了很多个星期了。这些测试能够在某些因素导致db4o性能或者速度或者大小发生显著变化的时候,给开发者提出预警。


    -- NO "BROKEN WINDOWS" - 实现零关键错误--

    我们很高兴宣布我们这个月首次实现了零关键bugs,同时,我们也将在今后的开发中保证这个状态。采用社区的反馈以及敏捷开发实践是我们一贯的策略。我们的目标是实现"No Broken Windows",也就是在产品中不出现关键的bugs。我们也为解决关键bugs制定了解决的方案。

    你可以在 Jira 查看我们的进度, 我们的bug,任务以及改进。


    -- 客户焦点: POSTBANK 在咨询工具中采用db4o --

    Postbank,是德国著名的零售银行,面临着改进他们的财务咨询软件的压力,实现在线和离线的销售支持。而db4o帮他们实现了这个功能。

    "我们需要一个简单易用的数据库,不需要长时间的设计,能够帮助我们在短时间内实现应用。我们比较了很多款数据库,但是db4o是这些里面性能最佳和最易用的,所以我们选择了db4o."
                   -- Horst Hartberger, Technical Project Leader, Postbank AG


    -- db4objects 加入了 ACCESS GLOBAL PARTNER PROGRAM --

    因为几个大客户项目的驱动,db4objects 和 ACCESS, 全球领先的移动应用技术公司,建立了合作伙伴关系。同时,db4objects还加入了Access Connect Ecosystem (ACE) partner program. 双方的合作将会为移动终端带来定制的Java持久层方案。

    运营商需要硬件无关的平台来使得他们提供差异化的服务,而Java为这个框架提供了理想的平台。

    ACCESS 与终端提供商有很好的合作关系,双方的合作是移动技术和持久层方案的合作,必将为下一代的运营商的差异化服务作出贡献。

    更多信息:ACCESS release 或者:db4objects release.


    -- 年度用户调查和奖励 --

    在2007年的5月中,我们发出了15000分的在线调查问卷,现在获得了一些统计信息:

    总共的反馈率达到了10%!谢谢你们的支持!我们送出了10本书:"The definite guide to db4o" 以及 25 件 Golf Shirts ,同时,5名获得 US$200 奖金的用户为:

    • Felice D.S. from Italy
    • Axl M. from South Africa
    • Ruediger L. from Germany
    • Tim E. from the US
    • Minghui G. from China

    下面是最多用户投票的希望在 db4o roadmap 2007/08看到的选项:

    1. Improve performance
    2. Client/Server: Scalability (parallel core, more clients)
    3. Improved Object Manager

    我们很高兴用户的需求也正是我们首要考虑的问题。正如你能看到的PolePosition的文章,性能一直都是我们考虑的首要问题。点击 PolePosition results 查看我们的测试结果.
    我们将会仔细研究测试结果,并基于用户的要求来检讨我们的roadmap.
    再次谢谢大家的建议!



     

    L O O K I N G    I N T O    T H E    M I R R O R

    Selected press coverage about db4o since the last newsletter:

    "Digital Imaging, Databases, and Eye Care"
    Dr. Dobb's Portal, June 5, 2007, by Ryan McGrail

    "Evaluating Options for Persisting Java Objects"
    Java Developer's Journal, June 2, 2007, by Richard Conway

    "The Object Relational Mapping Quagmire"
    Linuxjournal, June 2007, by Nicholas Petreley

    "Avoiding the Quagmire - Part II of Ted Neward's Vietnam paper"
    TheServerSide, May 22, 2007, by Joseph Ottinger

    "The busy Java developer's guide to db4o" (3)
    IBM developerWorks, May 22, 2007, by Ted Neward

    "Interview: Ted Neward and Christof Wittig"
    The Jem Report, May 21, 2007, by Jem Matzan

    新闻联系人:
    Harry Li
    db4o大中华区代表处
    地址:深圳市福田区金田北路诺德中心24A
    邮编: 518000
    联系电话: +86-13528805195
    china@db4o.com

  • db4o 6月通讯, 6.3版本增加TRANSPARENT AC