显示标签为“Google App Engine”的博文。显示所有博文
显示标签为“Google App Engine”的博文。显示所有博文

2009年5月12日星期二

ORM Relationships

DataNucleus的文档不错,写得很精要,可以读一下:Relationships

在ORM的表述中经常用到 Entity这个词,entity对应于OO的class,对应于DB的Table。

relationship: 1-1, 1-N, N-1, N-M,N-M是bidirectional的,其它的都分为unidirectinal 或者bidirectional。

各种关系中的life dependence是不同的,用GAE的JPA文档中的话来说就是owned和unowned关系。用UML的术语就是: aggregation和composition关系。聚集和合成是很强的耦合关系,在GAE中就是owned关系。在hibernate 中,这种关系就可以用来表达。如果用来表达,那么CascadeType就要进行合适的设置来表达owned或是unowned。CascadeType参数是跟对象生命期有关的。

one-to-one:
1)两个Entity共享主键。
2) Foreign Key。

Assigning Relationships:
With a bidirectional relation you must set both sides of the relation 。

Persisting Relationships - Reachability:
persistence-by-reachability。

Managed Relationships:

Casecading:
casecading要解决的问题是,你对一个object进行持久化操作时,它的域对象是否也执行相应的持久化操作。DataNucleus的casecading例子中描述的情景不错。一个“驾驶员”有一个“驾驶执照”,同时还拥有多辆“汽车”。当驾驶员不存在了,执照也跟随被删除,但是汽车不该被删除。如果汽车被删除,那么驾驶员应该还存在。这是符合现实常理的。用casecading的annotation解决此问题:
@OneToOne(cascade=CascadeType.ALL)
@OneToMany(mappedBy="owner", cascade={CascadeType.PERSIST, CascadeType.MERGE})
@ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE})

想建立coder到project的many-to-many映射,但是GAE server却总是报错,才想起GAE对JPA中的
“多对多”是不支持的。需要在各个类中添加Key的集合,来模拟多对多。

2009年3月16日星期一

GAE and Pydev

参考此文http://daily.profeth.de/2008/04/google-app-engine-eclipse-pydev.html,就可以通过eclipse+python开发GAE应用了。我用eclipse3.4, python2.5, GAE 1.1.7,按照文章中的步骤去做遇到一些问题,又下载了jypthon2.5并配置pydev中与jpython相关的条目。python项目有两种类型python和jypthon。这两种类型的项目都可以跑起来。

但有时候启动时提示“Variable references empty selection: ${project_loc}”。改用绝对路径就没有问题,使用${workspace_loc:YourPrjName/appengine/dev_appserver.py}也没有问题。这也许是pydev 的bug.

eclipse中通过"${project_loc}\src" 表示项目的src目录。${workshop_loc}是workshop目录。

今天按照"Getting Started: Python"简单的学了一下GAE。感觉很多思想跟用java开发web app雷同。Django的template跟velocity、freemaker的使用模式差不多。GHL跟HQL差不多,我都怀疑google的datastore是不是已经直接就是OODB了。
不知道google的datastore API是不是像Hiberante一样强大,希望是!

2009年2月15日星期日

Google App Engine很吸引人。

免费享受Google的云计算,只要你掌握GoogleAppEngine API。太诱人了。真不知道将如何影响搞虚拟主机业务的小公司了,也许取决于 python的流行。

开始做GAE的用户了。呵呵。

A webapp application has three parts:
  • one or more RequestHandler classes that process requests and build responses.
    相当于Servlet;
  • a WSGIApplication instance that routes incoming requests to handlers based on the URL.
    差不多是ServletFilter的功能。
  • a main routine that runs the WSGIApplication using a CGI adaptor.
    就是完成servlet engine里分发功能吧。
... ...