Google App Engine Java SDK 1.2.1 发布

分类:Tech | 作者:Shoopman | 发表于2009/05/15 没有评论  

    Google App Engine Java SDK 1.2.1在5月13号发布了。这是Google App Engine 宣布支持Java语言以来,首次SDK更新。

    SDK更新内容如下:(来自SDK项目WIKI)

  • Added validation of appengine-web.xml, cron.xml, and datastore-indexes.xml.
  • New <user-permissions> element added to appengine-web.xml to grant custom third-party permissions (e.g. OgnlInvokePermission).
  • Support for unindexed datastore properties of arbitrary types.
  • Added HTTP Proxy support to appcfg.sh.
  • Response limit raised from 1MB to 10MB
  • Some methods from Servlet 2.5 were missing
  • Individual bytes read from ServletInputStream were incorrectly signed
  • Expect header is now ignored, rather than causing 500 errors
  • Bundled commons-logging-1.2.1.jar can conflict with user-provided jars
  • Groovy permissions are granted in the local runtime:
  • Reflection on some JRE classes did not work properly
  • <url-pattern> elements are now allowed in <jsp-property-group>
  • JSPs with embedded UTF-8 content are not compiled properly
  • Static welcome files now take precedence over dynamic welcome files in SDK
  • Thread.setContextClassLoader() is now supported
  • Content-Type not set in local implementation of URLFetch API
  • AppCfg request_logs command is limited to 100 lines
  • Timestamp added to datastore indexes file uses current locale
    JDO/JPA Changes
  • Support field restrictions in queries
  • Fix NPE when querying for null parent
  • Support contains operator in JDOQL
  • Support doubles as query literals
  • Support BigDecimal fields
  • Support persisting classes with superclasses
  • Support Collection fields with serialized="true"
  • Support @Lob JPA annotation
  • Support @Serialized on byte member
  • Bidirectional one-to-many when parent has long or unencoded String pk fails
  • Cannot fetch many side of one-to-many when pk is Key, Long, or unencoded String
  • JDOQL: Support implicit params
  • Cannot add child to existing one-to-many if parent has Long or unencoded S
    tring pk
  • Expose batch gets
  • Can’t reattach detached objects with Date props
  • Fetching 1 to 1 needs to differentiate between direct and indirect children
  • Support embedded classes with Key primary key
  • Tag:

    Google App Engine的Datastore的使用

    分类:Tech | 作者:Shoopman | 发表于2009/04/26 没有评论  

        GAE的Datastore是基于Big Table的,号称是面向对象的数据库(object-oriented database),而不是关系数据库。因此,Datastore是有非常大的局限性的,至少对于熟悉使用关系数据库或SQL的人来说。

    1.查询操作符

    查询操作符只支持<, <=, ==, >=, >
    支持 !=, IN, LIKE
    操作符后面只能跟常量值,不能引用实体的属性
    在一个查询里,只允许一个属性使用非等于的操作符(<, <=, >=, >)

    2.逻辑操作符

    支持 AND(&&)
    不支持 OR, NOT

    3.排序

    在一个查询里,使用了非等于操作符的属性必须在ORDER BY从句必须是在第一位

    4.不支持关联查询

    不支持JOIN

    5.不支持集合函数

    不支持group by, having, sum, avg, max, min 

    其他的以后发现了再补充。

    参考:GAE Datastore Queries and Indexes

    Tag:

    Google App Engine SDK 有更新了–DataNucleus App Engine plugin RC1

    分类:Tech | 作者:Shoopman | 发表于2009/04/23 没有评论  

        Google App Engine SDK 有更新了!不过这次释出的只是DataNucleus App Engine plugin,是GAE for Java中的持久层框架,支持JPA和JDO。版本号是1.0.1 Release Candidate 1,下载地址在是:http://datanucleus-appengine.googlecode.com/files/appengine-orm-1.0.1.RC1.zip。这个发布只要是bug fixed,详细的bug fixed 请查看这里。还需要注意的是,这不是官方正式发布的,详细内容请看Google Group。如果以后想查看更多版本的DataNucleus plugin for Google App Engine,可以到这里:http://code.google.com/p/datanucleus-appengine/downloads/list

    1.备份Google App Engine SDK
    把\plugins\com.google.appengine.eclipse.sdkbundle_1.2.0.v200904062334\appengine-java-sdk-1.2.0这个目录备份

    2.下载DataNucleus App Engine plugin 1.0.1RC1
    地址是http://datanucleus-appengine.googlecode.com/files/appengine-orm-1.0.1.RC1.zip

    3.把下载的ZIP压缩包解压并覆盖到\plugins\com.google.appengine.eclipse.sdkbundle_1.2.0.v200904062334\appengine-java-sdk-1.2.0

    4.移除旧版本的DataNucleus App Engine plugin的jar包
    删除\plugins\com.google.appengine.eclipse.sdkbundle_1.2.0.v200904062334\appengine-java-sdk-1.2.0\lib\user\orm\datanucleus-appengine-1.0.0.final.jar

    5.重启Eclipse

    Tag:

    解决Google App Engine中的DatastoreNeedIndexException异常

    分类:Tech | 作者:Shoopman | 发表于2009/04/18 没有评论  

        做了一个简单的一对一(OneToOne)关系的JPA测试,在本地Eclipse中没有问题,但部署到GAE后,添加数据成功而在显示数据的时候却报500错误。幸好GAE控制台有详细错误日志:

    /oneone.jsp
    java.lang.ClassCastException: com.google.appengine.api.datastore.DatastoreNeedIndexException cannot be cast to javax.servlet.ServletException
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:754)
    at org.apache.jsp.oneone_jsp._jspService(oneone_jsp.java:100)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

    看来是忘记给datastore指定,参看GAE的文档Queries And Indexes,赶紧在WEB-INF添加datastore-indexes.xml,再把本地自动生成的index(在WEB-INF/appengine-generated/datastore-indexes-auto.xml中)的内容复制进去,如下:


     xmlns=”http://appengine.google.com/ns/datastore-indexes/1.0
     autoGenerate=”true”>
           source=”auto” />

    重新部署到GAE中,运行正常。

    测试地址:http://shoopmanga.appspot.com/oneone.jsp

    Tag:

    给Google App Enging绑定域名

    分类:Internet | 作者:Shoopman | 发表于2009/04/18 没有评论  

    前段时间申请了一个免费的二级域名shoopman.co.cc(关于co.cc的中文介绍可以点这里,申请地址在http://www.co.cc),在Google App Engine部署了用python写的Blog后,当然也想绑定这个短小的域名到这个Blog上,于是开始了折腾:

    1.进入Google App Engine管理中心,选择安装了博客的的应用ID,我这个是“shoopmanlog”,在应用控制台里,点左边的导航菜单的“Version”。
    2.在Version页输入了我申请的免费域名”shoopman.co.cc”,点击“Add Domain”按钮,页面居然却跳到了Google App(Google企业应用套件)的注册页。
    3.按照Google App的提示,成功申请了一个Google App的帐号。需要注意的是,Google App暂时不支持中国地区,换一个地区比如美国,就能成功申请了。
    4.根据Google App的提示,需要验证域名是属于我的。登录http://www.co.cc的域名管理,在Zone Record里添加一个CNAME记录googleffffffffe3f97a51.shoopman.co.cc,指向google.com。
    5.切换回到Google App中,点击“验证”按钮,Google提示在48个小时内完成验证。
    6.我没有那么大的耐心等48小时再做下一步操作,直接到Google App添加Google App Engine服务,如图
    7.在服务设置菜单中给Google App Engine服务添加域名www.shoopman.co.cc,Google App提示要把相应域名的CNAME指向
    ghs.google.com,但网上的一些文章说由于ghs.google.com被墙(GFW)了,需要设置域名的A记录到相应的IP。这个IP我是从xuming.net找来的,PING一下www.shoopman.co.cc就可以看到了,呵呵。
    8.等待吧,耐心等待域名解析生效吧。。。我的大概是4、5个小时后就生效了,哦也!
    Tag:

    Google App Engine 支持 Spring-ORM(2.5.6) 的办法

    分类:Tech | 作者:Shoopman | 发表于2009/04/15 没有评论  

    GAE不支持spring-orm是因为引用了javax.naming包里的类,而这些类是不被GAE支持的。在spring-orm-2.5.6.jar移去一下类则可:

    PersistenceAnnotationBeanPostProcessor.class
    PersistenceAnnotationBeanPostProcessor$PersistenceElement.class
    PersistenceAnnotationBeanPostProcessor$2.class
    PersistenceAnnotationBeanPostProcessor$1.class

    这个我还没有验证过。出自Google Group

    Tag:

    Google App Engine 支持 Struts2 的 办法

    分类:Tech | 作者:Shoopman | 发表于2009/04/15 没有评论  

    如果直接在webapp的classpath加入Struts2的相关jar,Struts2是不能正常工作的。现在安一下办法就可以了:

    1.首先写这样一个类:

    package com.ociweb.gaestruts2;

    // imports

    public class InitListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

    public InitListener()  {
    }

    public void contextInitialized(ServletContextEvent sce)  {
    OgnlRuntime.setSecurityManager(null);
    }
    // … all other methods stubbed out to do nothing
    }

    2.在web.xml中加入如下代码:

    com.ociweb.gaestruts2.InitListener

    我已经验证过了。原文出自Google Group

    Tag:

    Google App Engine for Java 开张了

    分类:Tech | 作者:Shoopman | 发表于2009/04/15 1条评论 

    2009-4-8,Google App Engine for Java开张了。可惜的是,我在网上看到这些消息时,已经是4-9,而且网上还说的是测试期间仅限前10000申请者。当时那个遗憾啊。。。不过不死心,还是马上申请了。幸好第二天收到了帐号激活的邮件。这里是申请的网址http://appengine.google.com/promo/java_runtime,当然必须要Google帐号。

    接着,看来Google Plugin for Eclipse的说明,马上在线安装了插件,开始GAE的测试。已经顺利的把一个Demo改成了通过JPA存储数据,并部署到GAE上来,地址是http://shoopmanga.appspot.com。当然,现在还有不少问题,如中文乱码问题,以后继续研究,慢慢解决。

    下面是Google App Engine for Java的一些有用连接:

    Tag: