自从接触J2EE以来,就不停的接受到持久化(Persistence)的概念。虽然不明白这是什么意思,但是为了快速阅读到后面一些实际编程的技术,都是跳过这个概念,假定这是一个数据封装,从业务逻辑那里将数据库源底层操作分离开的技术。
到了现在读JPA的时候,跳不过去了。例如下面的代码:
public void persistAnimal(Animal animal) {
// 获取EntityManagerFactory
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("mysql");
// 获取EntityManager
EntityManager em = factory.createEntityManager();
// 开始事务处理
em.getTransaction().begin();
// 持久化对象
em.persist(animal)
// 提交事务
em.getTransaction().commit();
// 关闭EntityManager
em.close();
// 关闭EntityManagerFactory
factory.close();
}
专门有一个函数persist来持久化对象。最开始我认为持久化是业务层能够持久使用数据库的数据,为了不频繁读数据库,将数据库的内容以对象的形式放到内存来,并且对象发生变化的时候会同步到数据库去。即我的理解是把数据库持久化为对象,是数据库->对象。
但是这个理解很牵强,很难理解上面的代码,为什么是对一个对象进行持久化的操作。决定还是把持久化的概念搞明白。Google之。
看了Javen-Studio 咖啡小屋的学习笔记之什么是持久化和对象关系映射ORM技术之后,才发现原来持久化是把业务数据对象持久化到存储设备上去。我之前的理解完全是南辕北辙,怪不得到了真正代码的时候就理解不过去了。
何谓”持久化”
持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
也只有主体是数据对象,才好真正去理解持久化。从序列化(我一直以为是让数据库序列化输出,然而实际上是将对象转化为字节流,通过网络传输或者保存在文件中)到数据库都好理解了。都是将内存里的数据(对象)转储成各种形式的存储结构。在JPA里也就是为什么新建对象后都要执行持久化的函数,其实就相当于一个数据库Insert操作,因为新建的对象如果没有持久化的话,是不会和数据库建立关联联系起来的;而其他从数据库读取出来产生的对象,是有联系的。
这个学期为了一些应用,用Postgrsql建了数据库,本想正式点,数据库的表名都用大写,比如Users、Profiles、Money等。
可是后来发现,在做select * from Users这样的查询的时候会提示ERROR: relation "users" does not exist。分析了一下,认为,应该是处理SQL语句的时候把大写的内容都变成小写了,实际的SQL语句变成select * from users——这也说明平时我们可以不用写SELECT * FROM users了,反正都要转换的,哈哈。而Postgresql数据库里表名应该是分大小写的,导致找不到users这个表。
要解决这个问题,就要改SQL语句,所有表名都要加双引号(这个好像也是SQL标准规定的,所有表名、字段名都应该加双引号),select * from "Users"这样就避开了大小写转化的问题。只是这样的话,在一些EJB以及JPA应用里,会带来麻烦。它们在指定Entity使用的是哪个表的时候,往往都要设定表名,通常就是”TABLE NAME”的形式。如果就按默认写法的话,最后在SQL语句里肯定是没有双引号的;如果设定时多加一个双引号上去,就变成双重引号了,当然也许可以’”TABLE NAME”‘即用单引号来包含双引号,但是没有测试不知道是否可行。
最简单的办法,就是数据库里所有的表名都是小写的,最好字段名也都是小写的(因为映射到对象属性以后基本上会变换大小写,JPA是都变成小写)。这样就没与那么多烦恼以及兼容性问题了。人其实都是这样,往往都是自己把事情搞得复杂化的。
注:刚刚发现如果用psql客户端程序创建表的时候,即便表名为大写,实际还是小写的。例如create table Test(),实际得到的表名其实是test。可能使用一些标准化的图形工具的时候,输入的表名,它会用双引号括起来,变成实际的表名是有大小写之分的。
发现自己学东西实在太慢了,常常一个月都在读文档,却始终写不出一个有用的东西来。
之前开始学JPA——本来是按照一些PPT和书上的内容学EJB的,当然有也讲Hibernate的书,可是EJB还没有看完呢,也没有空看。后来才发现EJB(2.0)过时了,找了最新的技术,觉得JPA应该是以后的趋势了,就学它了,可是断断续续的这么久,不断的测试平台,也才只是学会怎么将数据库映射成对象(其实很简单,就只是一个JPA Tool->Generate Entities就搞定的事情),下午终于下定决心搞出一个可以连上数据库查询出东西来的sample程序。
经过给persistence.xml添加Properties(openjpa.ConnectURL等),添加Postgresql驱动(这里要说的是驱动URI是org.postgresql.Driver,开始设成了org.postgresql.jdbc.Driver,结果一直出错(org.apache.openjpa.util.StoreException ),还有一个数据库设置的问题,另外其一个题来说吧。附加上主程序吧,实在是简单呢。
EntityManagerFactory factory = Persistence.createEntityManagerFactory("Dali-ME");
// 从 EntityManagerFactory 实例 factory 中获取 EntityManager
EntityManager em = factory.createEntityManager();Basic basic = em.find(Basic.class, 4);System.out.println("ID: " + basic.getUid());
System.out.println("姓名: " + basic.getXingming());
System.out.println("学号: " + basic.getXuehao());
System.out.println("性别: " + basic.getGender());em.close ();
factory.close ();
本来是想用DVD光盘来安装的,可是发现刻的DVD光盘有问题,只好用Live CD来安装。不过发现安装过程比家里的机器安装Ubuntu的时候快很多(把镜像复制过去就OK),我还没有熟悉新环境就好了。
Fedora8对中文的支持还是不错的,不需要再次Update就可以使用中文桌面了(Ubuntu是需要做一次apt-get更新才可能安装中文的相关包)。不知道为什么现在Fedora 8这个版本用起来好像比Ubuntu7.10还舒服些。中文字体也比较好看些,菜单也整理得比较合理,东西不容易难找。不过好像没有Open Office呀,怪不得安装这么快。一些内容的熟悉还是后面慢慢说吧。
安装完了以后就是更新了,虽然说学校里可以上国外网络,但是还是找一个高校的源吧。在网络上找了一下,发现还是在上海交大里,这个服务器里可真是什么都有呀。
根据lihaoy的文章操作,在/etc/yum.repos.d添加一个sjtu.repo文件,内容如下:
[updates]
name=Fedora updates
baseurl=ftp://ftp.sjtu.edu.cn/fedora/linux/updates/$releasever/$basearch/
enabled=1
gpgcheck=0
[fedora]
name=Fedora $releasever - $basearch
baseurl=ftp://ftp.sjtu.edu.cn/fedora/linux/releases/$releasever/Everything/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
如果需要使用freshrpms,还可以加上:
[freshrpms]
name=Fedora Core $releasever - $basearch - Freshrpms
baseurl=ftp://ftp.sjtu.edu.cn/freshrpms/ayo/fedora/linux/$releasever/$basearch/freshrpms/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-freshrpms
gpgcheck=0
然后保存文件,用yum makecache命令更新yum的缓存就Ok了。
后来发现,使用freshrpms源后,会发生libx264.56.so找不到的问题,所以可以先不用试试看,或者在更新的时候加上–disablerepo=freshrpms参数。此外,livna的源也很有用,尤其是一些多媒体的东西,获取方法为<cite>rpm -ivh http://rpm.livna.org/livna-release-7.rpm</cite>。
最近出了一批Web的新书,有很多是开始遵循Web Standard。现在想想一些新技术新思想要进入国内还真的是慢呀,从形成文档,到写成各种书(权威指南,手册),到翻译成中文,基本上要一年的时间。而国内要开始普及这些标准教材也要现在才能开始,这还能指望学校里的老师及时更新自己的知识,给学生讲这些新的东西。
嗯,废话少说,先把最近要看到书列出来吧: (全文…)
吴德文 @ 13:29
一直以为BSD,Linux是来源于UNIX的,原来,还有比UNIX更早的操作系统,那就是MULTICS。Solidot上说,MIT要公开MULTICS的源代码了。不知道可不可以理解为UNIX的父亲和儿子都开源了,哈哈。
一条很特别的新闻,对所有Geek,计算机科学家和开源社区而言:MULTICS操作系统(MULTiplexed Information and Computing System),UNIX和所有现代操作系统之父,正式公开全部源代码。Multics是1964年由贝尔实验室、MIT、GE共同开发的,安装在大型主机上的多人多工的操作系统。它引入了一系列新概念,包括动态连接和分级文件系统。它非常强大,UNIX只能被认为是一个“简单化”的继任者( UNIX的名字就来自于Multics)。最后一台运行Multics的机器于2000年10月31日关闭。源代码公布在MIT网站上。
本来想下载源码的,发现是一个个目录文件结构,没有打包好的,就算了。反正下了,也只能收藏而已。

“The Web is Agreement”其实是一张来自Flickr的手绘地图,被Solidot戏称为魔戒风格的“Web技术冒险地图”。它的确很有意思,一张图上摆满了好多Web技术,有趣的是还被设计成善良阵营、邪恶阵营。
地图从左到右是作者心目中的善良阵营和邪恶阵营……开源社区、创作共用协议、web2.0里的blog圈,tag,mashup技术,RDF, RSS之类的开放架构都在左边……而微软的FUD,DRM技术,病毒,垃圾邮件,SOA之类的企业架构被放在右边……出人意料的是“google的全知全能之眼”也在邪恶一边,是因为google的平台不够开放还是因为用户隐私问题?中间的圣山顶端是W3C组织和IETF,很多人在下面争吵和游说…… 地图从下到上的象征意义比较复杂,有点像web技术从简单到复杂,也像是从前端到后端的关系……最下面是最简单的URL地址和REST/HTTP架构的设计者Fielding博士……往上是各种前端技术,javascript/ajax是一座跨越“富用户体验”的桥梁……最上面的终点是一片混沌,叫做“不兼容的大漩涡”,右边的魔多软件(微软)往里面排入ie,activex之类的私有技术,左边的开源社区往里面排入更多的技术,产品和代码……从perl, php,java到linux……
当然对于我来说,对这些技术是不会分那么清楚的,只是这张图可以让学习者了解Web世界的技术,不过Flickr上注释基本上都看不懂。
- Install by Live CD
- Edit sources.list
- apt-get update or wait the notification ofupdate packages
- Restart
The problem is the sources.list,that’s how to choose a faster source.
Maybe you can use this:
deb http://debian.ustc.edu.cn/ubuntu/ gutsy main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-backports restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-proposed main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-security main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-proposed main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-updates main restricted universe multiverse
For more sources list, click here, or copy from below:
ubuntu7.10大学源一览表
#传说中的中国科技大学 5M/s
deb http://debian.ustc.edu.cn/ubuntu/ gutsy main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-backports restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-proposed main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-security main restricted universe multiverse
deb http://debian.ustc.edu.cn/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-proposed main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://debian.ustc.edu.cn/ubuntu/ gutsy-updates main restricted universe multiverse
#传说中的北京交大 速度 2M/s
deb http://mirror.bjtu.edu.cn/ubuntu/ gutsy main restricted universe multiverse
deb http://mirror.bjtu.edu.cn/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://mirror.bjtu.edu.cn/ubuntu/ gutsy-security main restricted universe multiverse
deb http://mirror.bjtu.edu.cn/ubuntu/ gutsy-backports main restricted universe multiverse
#传说中的上海交通大学,最热门的源之一
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy-backports main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy-proposed main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy-security main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ gutsy-updates main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu-cn/ gutsy main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy-backports main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy-proposed main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy-security main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ gutsy-updates main multiverse restricted universe
#传说中的清华大学ubuntu源 300k/s
deb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu/ gutsy main restricted universe multiverse
deb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu/ gutsy-security main restricted universe multiverse
deb ftp://ftp3.tsinghua.edu.cn/mirror/ubuntu/ubuntu/ gutsy-updates main restricted universe multiverse
#传说中的兰州大学 260k/s
deb ftp://mirror.lzu.edu.cn/ubuntu/ gutsy main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu/ gutsy-backports main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu/ gutsy-proposed main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu/ gutsy-security main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu/ gutsy-updates main multiverse restricted universe
deb ftp://mirror.lzu.edu.cn/ubuntu-cn/ gutsy main multiverse restricted universe
#传说中的台湾大学 中国电信adsl 150k/s
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-backports main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ gutsy-security main restricted universe multiverse
#传说中的电子科大
deb http://ubuntu.uestc.edu.cn/ubuntu gutsy main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu gutsy-backports main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu gutsy-proposed main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu gutsy-security main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu gutsy main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu gutsy-backports main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu gutsy-proposed main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu gutsy-security main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu gutsy-updates main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu-cn gutsy main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntustudio gutsy main
#传说中的清华,,但不是清华大学的官方域名
deb http://mirror9.net9.org/ubuntu/ gutsy main multiverse restricted universe
deb http://mirror9.net9.org/ubuntu/ gutsy-backports main multiverse restricted universe
deb http://mirror9.net9.org/ubuntu/ gutsy-proposed main multiverse restricted universe
deb http://mirror9.net9.org/ubuntu/ gutsy-security main multiverse restricted universe
deb http://mirror9.net9.org/ubuntu/ gutsy-updates main multiverse restricted universe
deb-src http://mirror9.net9.org/ubuntu/ gutsy main multiverse restricted universe
deb-src http://mirror9.net9.org/ubuntu/ gutsy-backports main multiverse restricted universe
deb-src http://mirror9.net9.org/ubuntu/ gutsy-proposed main multiverse restricted universe
deb-src http://mirror9.net9.org/ubuntu/ gutsy-security main multiverse restricted universe
deb-src http://mirror9.net9.org/ubuntu/ gutsy-updates main multiverse restricted universe
deb http://mirror9.net9.org/ubuntu-cn/ gutsy main multiverse restricted universe
#传说中的电子科大,但不是uestc的官方域名
deb http://www.joelgm.com/ubuntu gutsy main restricted universe multiverse
deb http://www.joelgm.com/ubuntu gutsy-backports main restricted universe multiverse
deb http://www.joelgm.com/ubuntu gutsy-proposed main restricted universe multiverse
deb http://www.joelgm.com/ubuntu gutsy-security main restricted universe multiverse
deb http://www.joelgm.com/ubuntu gutsy-updates main restricted universe multiverse
deb-src http://www.joelgm.com/ubuntu gutsy main restricted universe multiverse
deb-src http://www.joelgm.com/ubuntu gutsy-backports main restricted universe multiverse
deb-src http://www.joelgm.com/ubuntu gutsy-proposed main restricted universe multiverse
deb-src http://www.joelgm.com/ubuntu gutsy-security main restricted universe multiverse
deb-src http://www.joelgm.com/ubuntu gutsy-updates main restricted universe multiverse
#传说中的东北大学更新服务器:
deb ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy main multiverse restricted universe
deb ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy-backports main multiverse restricted universe
deb ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy-proposed main multiverse restricted universe
deb ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy-security main multiverse restricted universe
deb ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy-updates main multiverse restricted universe
deb-src ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy main multiverse restricted universe
deb-src ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy-backports main multiverse restricted universe
deb-src ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy-proposed main multiverse restricted universe
deb-src ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy-security main multiverse restricted universe
deb-src ftp://ftp.neu.edu.cn/mirror/archive.ubuntu.com/ubuntu/ gutsy-updates main multiverse restricted universe
#传说中的厦门大学
deb ftp://ubuntu.realss.cn/ubuntu gutsy main multiverse restricted universe
deb ftp://ubuntu.realss.cn/ubuntu gutsy-backports main multiverse restricted universe
deb ftp://ubuntu.realss.cn/ubuntu gutsy-proposed main multiverse restricted universe
deb ftp://ubuntu.realss.cn/ubuntu gutsy-security main multiverse restricted universe
deb ftp://ubuntu.realss.cn/ubuntu gutsy-updates main multiverse restricted univers
其实好像这两个东西并没法直接比较,毕竟现在Google参与的也还只是手机操作系统的开发。但是很有可能这就是未来两种最时尚的手机软件,一个是其别具一格的外观设计以及软件操作方式,一个是其丰富的软件内涵,即背后所依托的Google从出不穷的网络服务。
iPhone可能会是时尚界的代表,而Google Phone应该是象征着手机应用的新方向:未来的手机可能不再拼功能,而是拼支持商提供的网络服务。
嗯,还是来说说这个Google Phone的操作系统-Android吧。Solidot中介绍说:11月5日,Google正式宣布开发一款新的手机操作系统Android—— 2005年它收购了同名的手机软件公司。Android基于Linux,源代码开源,预计上市日期是2008年中期,以Apache许可协议免费提供给手机运营商和制造商。Google的手机制造合作伙伴包括了Motorola,HTC,Samsung和LG等,运营商合作伙伴包括T-Mobile和美国 Sprint,欧洲T-Mobile/Deutsche Telekom以及中国移动。
显然,由于操作系统基于Linux,由于源代码开源,相信人们(至少我是如此)对其未来充满了许多的憧憬。通过开放合作式的开发,可以运行在手机上的程序应该会越来越多。目前Google已经推出了SDK还有for Eclipse的Plugin。嗯,还有那总奖金高达1000万美元的应用程序开发大赛,这可是在业界绝无仅有的,相信很多人已经开始在开发Android的软件了。
嗯,其实好像我要说的是Palm或者说是PalmSource的。本来在PDA里Palm还是数一数二的,可是近两年来其操作系统实在是没有太多的长进,但由于它也是开源的,拥有许多开源/免费应用软件的优势,终究还是和Microsoft不分上下。至于Linux平台的PDA也许是开发者和支持者的人实在太少,所以还很难和它们三分天下。随着PDA进化成智能手机,在这个领域,Palm就处于弱势了,以至于Treo都出Windows Mobile的版本了,实在是恨铁不成钢呀。
随着Google Phone-Android的推出,不知道未来Palm会不会退出历史舞台。
Google or Palm, it’s a problem.
嗯,也许这个才是我最后要说的问题。
BTW: 好像越来越多的开源软件加入了Apache许可协议的阵营。很多人都想象Google将来会成为一个新的“垄断者”,通过商业联盟,不知道Apache的许可协议是不是也将登峰造极。
据Engadget瘾科技说,中国移动准备在中国推iPhone了,当然目前还在商讨阶段,还没有达成协议。但是既然有了这个意向了,没有什么原则上的阻力的话,早晚会达成协议的。
且不论这个移动“新”机是否会被阉割,难看的“China Mobile”图标是否会破坏iPhone的外观。会不会真的人有去期待这款手机呢?以前和朋友玩得时候,似乎有人是在等待iPhone的。
就耐心等待看看吧。