作者 小玩了一把Google App Engine Java和Groovlet
Chris1919
2009-04-09 21:35
Google真是替很多Developer解决了入门级hosting的问题,特别是对那些冷门编程语言而言。不过目前Groovy貌似没法在GAE Java本地SDK上跑,在GAE服务器上没问题。另外,Groovlet第一次加载的时候好慢,下面这个简单的加载要十几秒。
html.html {
	head {
		title "Hello"
	}
	body {
		p "Hello! hahaha..."
	}
}
这里有一些关于Groovy@GAE的简单介绍: http://yuntien.com/o7WK
Bookmark and Share
Chris1919
2009-04-12 00:01
看了下GAE Java对Datastore的封装,也就是JDO和JPA。怎么看怎么觉得繁琐,还是GAE Python里面的model用起来确实是漂漂亮亮简简单单。

下面这段是GAE Java JDO的代码:

import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Employee {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String firstName;

    @Persistent
    private String lastName;

    @Persistent
    private Date hireDate;

    public Employee(String firstName, String lastName, Date hireDate) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.hireDate = hireDate;
    }

    // Accessors for the fields.  JDO doesn't use these, but your application does.

    public Long getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    } 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    } 

    public String getLastName() {
        return lastName;
    } 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    } 

    public String getHireDate() {
        return hireDate;
    } 
    public void setHireDate(Date hireDate) {
        this.hireDate = hireDate;
    } 
}
如果用GAE Python来写就是:
from google.appengine.ext import db

class Employee (db.Model):
    first_name = db.StringProperty(multiline=False)
    last_name = db.StringProperty(multiline=False)
    hire_date = db.DateTimeProperty(auto_now_add=True)