<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Shoopman &#187; GAE</title>
	<atom:link href="http://blog.shoopman.org/tag/gae/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.shoopman.org</link>
	<description>Shoopman&#039;s Blog</description>
	<lastBuildDate>Thu, 15 Jul 2010 08:32:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google App Engine Java SDK 1.2.1 发布</title>
		<link>http://blog.shoopman.org/2009/05/15/gae-sdk-for-java-1-2-1-released.html</link>
		<comments>http://blog.shoopman.org/2009/05/15/gae-sdk-for-java-1-2-1-released.html#comments</comments>
		<pubDate>Fri, 15 May 2009 11:58:41 +0000</pubDate>
		<dc:creator>Shoopman</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[GAE]]></category>

		<guid isPermaLink="false">/2009/05/15/gae-sdk-for-java-1-2-1-released.html</guid>
		<description><![CDATA[&#160;&#160;&#160; Google App Engine Java SDK 1.2.1在5月13号发布了。这是Google App Engine 宣布支持Java语言以来，首次SDK更新。
&#160;&#160;&#160; SDK更新内容如下：(来自SDK项目WIKI)


Added validation of appengine-web.xml, cron.xml, and datastore-indexes.xml. 
New &#60;user-permissions&#62; 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

http://code.google.com/p/googleappengine/issues/detail?id=1429



Some methods from Servlet 2.5 [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;&#160;&#160; Google App Engine Java SDK 1.2.1在5月13号发布了。这是Google App Engine 宣布支持Java语言以来，首次SDK更新。</p>
<p>&#160;&#160;&#160; SDK更新内容如下：(来自<a href="http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes" target="_blank">SDK项目WIKI</a>)</p>
<p><a name="Version_1.2.1_-_May_13,_2009"></a></p>
<ul>
<li>Added validation of appengine-web.xml, cron.xml, and datastore-indexes.xml. </li>
<li>New <tt>&lt;</tt>user-permissions<tt>&gt;</tt> element added to appengine-web.xml to grant custom third-party permissions (e.g. OgnlInvokePermission). </li>
<li>Support for unindexed datastore properties of arbitrary types. </li>
<li>Added HTTP Proxy support to appcfg.sh. </li>
<li>Response limit raised from 1MB to 10MB
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1429" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1429</a></li>
</ul>
</li>
</ul>
<li>Some methods from Servlet 2.5 were missing
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1331" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1331</a> </li>
</ul>
</li>
<li>Individual bytes read from ServletInputStream were incorrectly signed
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1339" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1339</a> </li>
</ul>
</li>
<li>Expect header is now ignored, rather than causing 500 errors
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1471" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1471</a> </li>
</ul>
</li>
<li>Bundled commons-logging-1.2.1.jar can conflict with user-provided jars
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1238" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1238</a> </li>
</ul>
</li>
<li>Groovy permissions are granted in the local runtime:
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1219" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1219</a> </li>
</ul>
</li>
<li>Reflection on some JRE classes did not work properly
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1375" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1375</a> </li>
</ul>
</li>
<li><tt>&lt;</tt>url-pattern<tt>&gt;</tt> elements are now allowed in <tt>&lt;</tt>jsp-property-group<tt>&gt;</tt>
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1224" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1224</a> </li>
</ul>
</li>
<li>JSPs with embedded UTF-8 content are not compiled properly
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1257" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1257</a> </li>
</ul>
</li>
<li>Static welcome files now take precedence over dynamic welcome files in SDK
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1260" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1260</a> </li>
</ul>
</li>
<li>Thread.setContextClassLoader() is now supported
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1451" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1451</a> </li>
</ul>
</li>
<li>Content-Type not set in local implementation of URLFetch API
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1498" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1498</a> </li>
</ul>
</li>
<li>AppCfg request_logs command is limited to 100 lines
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1432" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1432</a> </li>
</ul>
</li>
<li>Timestamp added to datastore indexes file uses current locale
<ul>
<li><a href="http://code.google.com/p/googleappengine/issues/detail?id=1486" target="_blank">http://code.google.com/p/googleappengine/issues/detail?id=1486</a> </li>
</ul>
<h6><a name="JDO/JPA_Changes">JDO/JPA Changes</a>
<ul>
<li>Fix handling of user-defined @Order
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?id=40" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?id=40</a></li>
</ul>
</li>
</ul>
</h6>
<li>Support field restrictions in queries
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?id=23" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?id=23</a> </li>
</ul>
</li>
<li>Fix NPE when querying for null parent
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?id=47" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?id=47</a> </li>
</ul>
</li>
<li>Support contains operator in JDOQL
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?id=2" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?id=2</a> </li>
</ul>
</li>
<li>Support doubles as query literals
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=3" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=3</a> </li>
</ul>
</li>
<li>Support BigDecimal fields
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=4" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=4</a> </li>
</ul>
</li>
<li>Support persisting classes with superclasses
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=5" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=5</a> </li>
</ul>
</li>
<li>Support Collection fields with serialized=&quot;true&quot;
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=6" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=6</a> </li>
</ul>
</li>
<li>Support @Lob JPA annotation
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=10" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=10</a> </li>
</ul>
</li>
<li>Support @Serialized on byte<a href="http://code.google.com/" target="_blank"></a> member
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=16" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=16</a> </li>
</ul>
</li>
<li>Bidirectional one-to-many when parent has long or unencoded String pk fails
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=19" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=19</a> </li>
</ul>
</li>
<li>Cannot fetch many side of one-to-many when pk is Key, Long, or unencoded String
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=26" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=26</a> </li>
</ul>
</li>
<li>JDOQL: Support implicit params
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=27" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=27</a> </li>
</ul>
</li>
<li>Cannot add child to existing one-to-many if parent has Long or unencoded S<br />
tring pk
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=28" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=28</a> </li>
</ul>
</li>
<li>Expose batch gets
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=29" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=29</a> </li>
</ul>
</li>
<li>Can&#8217;t reattach detached objects with Date props
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=30" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=30</a> </li>
</ul>
</li>
<li>Fetching 1 to 1 needs to differentiate between direct and indirect children
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=31" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=31</a> </li>
</ul>
</li>
<li>Support embedded classes with Key primary key
<ul>
<li><a href="http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=32" target="_blank">http://code.google.com/p/datanucleus-appengine/issues/detail?can=7&amp;id=32</a> </li>
</ul>
</li>
<p> </a></a>
</p>
</li>
]]></content:encoded>
			<wfw:commentRss>http://blog.shoopman.org/2009/05/15/gae-sdk-for-java-1-2-1-released.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine的Datastore的使用</title>
		<link>http://blog.shoopman.org/2009/04/26/a-description-about-google-app-engine-datastore.html</link>
		<comments>http://blog.shoopman.org/2009/04/26/a-description-about-google-app-engine-datastore.html#comments</comments>
		<pubDate>Sun, 26 Apr 2009 16:51:42 +0000</pubDate>
		<dc:creator>Shoopman</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[GAE]]></category>

		<guid isPermaLink="false">/2009/04/26/a-description-about-google-app-engine-datastore.html</guid>
		<description><![CDATA[    GAE的Datastore是基于Big Table的，号称是面向对象的数据库（object-oriented database），而不是关系数据库。因此，Datastore是有非常大的局限性的，至少对于熟悉使用关系数据库或SQL的人来说。
1.查询操作符
查询操作符只支持&#60;, &#60;=, ==, &#62;=, &#62; 不支持 !=, IN, LIKE 操作符后面只能跟常量值，不能引用实体的属性 在一个查询里，只允许一个属性使用非等于的操作符(&#60;, &#60;=, &#62;=, &#62;)
2.逻辑操作符
支持 AND(&#38;&#38;) 不支持 OR, NOT
3.排序
在一个查询里，使用了非等于操作符的属性必须在ORDER BY从句必须是在第一位
4.不支持关联查询
不支持JOIN
5.不支持集合函数
不支持group by, having, sum, avg, max, min 
其他的以后发现了再补充。
参考：GAE Datastore Queries and Indexes
]]></description>
			<content:encoded><![CDATA[<p>    GAE的Datastore是基于Big Table的，号称是面向对象的数据库（object-oriented database），而不是关系数据库。因此，Datastore是有非常大的局限性的，至少对于熟悉使用关系数据库或SQL的人来说。</p>
<h4>1.查询操作符<br /></h4>
<p>查询操作符只支持<strong>&lt;</strong>, <strong>&lt;=</strong>, <strong>==</strong>, <strong>&gt;=</strong>, <strong>&gt; <br />不</strong>支持 !=, IN, LIKE <br />操作符后面只能跟常量值，不能引用实体的属性 <br />在一个查询里，只允许一个属性使用非等于的操作符(&lt;, &lt;=, &gt;=, &gt;)</p>
<h4>2.逻辑操作符</h4>
<p>支持 AND(&amp;&amp;) <br />不支持 OR, NOT</p>
<h4>3.排序</h4>
<p>在一个查询里，使用了非等于操作符的属性必须在ORDER BY从句必须是在第一位</p>
<h4>4.不支持关联查询</h4>
<p>不支持JOIN</p>
<h4>5.不支持集合函数</h4>
<p>不支持group by, having, sum, avg, max, min </p>
<p>其他的以后发现了再补充。</p>
<p>参考：<a href="http://code.google.com/intl/zh-CN/appengine/docs/java/datastore/queriesandindexes.html" target="_blank">GAE Datastore Queries and Indexes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shoopman.org/2009/04/26/a-description-about-google-app-engine-datastore.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine SDK 有更新了&#8211;DataNucleus App Engine plugin RC1</title>
		<link>http://blog.shoopman.org/2009/04/23/gae-sdk-updated-datanucleus-plugin-rc1.html</link>
		<comments>http://blog.shoopman.org/2009/04/23/gae-sdk-updated-datanucleus-plugin-rc1.html#comments</comments>
		<pubDate>Thu, 23 Apr 2009 09:55:06 +0000</pubDate>
		<dc:creator>Shoopman</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[GAE]]></category>

		<guid isPermaLink="false">/2009/04/23/gae-sdk-updated-datanucleus-plugin-rc1.html</guid>
		<description><![CDATA[    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。
    更新说明及步骤(这里以Google Plugin for Eclipse为例，原文请看http://code.google.com/p/datanucleus-appengine/wiki/HowToUpdateTheSDKWithANewPluginVersion)
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
]]></description>
			<content:encoded><![CDATA[<p><!--StartFragment-->    Google App Engine SDK 有更新了！不过这次释出的只是DataNucleus App Engine plugin，是GAE for Java中的持久层框架，支持JPA和JDO。版本号是1.0.1 Release Candidate 1，下载地址<span style="font-family: monospace;">在是：<a href="http://datanucleus-appengine.googlecode.com/files/appengine-orm-1.0.1.RC1.zip" target="_blank">http://datanucleus-appengine.googlecode.com/files/appengine-orm-1.0.1.RC1.zip</a>。这个发布只要是bug fixed，详细的bug fixed 请<a href="http://code.google.com/p/datanucleus-appengine/issues/list?can=1&amp;q=TargetRelease%3D1.0.1+Status%3DFixed&amp;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;cells=tiles">查看这里</a>。还需要注意的是，这不是官方正式发布的，详细内容请看<a href="http://groups.google.com/group/google-appengine-java/browse_thread/thread/b9bedb562be1b877" target="_blank">Google Group</a>。如果以后想查看更多版本的DataNucleus plugin for Google App Engine，可以到这里：</span><a href="http://code.google.com/p/datanucleus-appengine/downloads/list" target="_blank"><span style="font-family: monospace;">http://code.google.com/p/datanucleus-appengine/downloads/list</span></a>。</p>
<div>    <span style="font-family: monospace;">更新说明及步骤(这里以</span><a href="http://code.google.com/intl/zh-CN/appengine/docs/java/tools/eclipse.html" target="_blank">Google Plugin for Eclipse</a><span style="font-family: monospace;">为例，原文请看<a href="http://code.google.com/p/datanucleus-appengine/wiki/HowToUpdateTheSDKWithANewPluginVersion" target="_blank">http://code.google.com/p/datanucleus-appengine/wiki/HowToUpdateTheSDKWithANewPluginVersion</a>)</span></div>
<p><span style="font-family: monospace;">1.备份Google App Engine SDK<br />把\plugins\com.google.appengine.eclipse.sdkbundle_1.2.0.v200904062334\appengine-java-sdk-1.2.0这个目录备份</span></p>
<p><span style="font-family: monospace;">2.下载DataNucleus App Engine plugin 1.0.1RC1<br />地址是<a href="http://datanucleus-appengine.googlecode.com/files/appengine-orm-1.0.1.RC1.zip" target="_blank">http://datanucleus-appengine.googlecode.com/files/appengine-orm-1.0.1.RC1.zip</a></span></p>
<p><span style="font-family: monospace;">3.把下载的ZIP压缩包解压并覆盖到\plugins\com.google.appengine.eclipse.sdkbundle_1.2.0.v200904062334\appengine-java-sdk-1.2.0</span></p>
<p><span style="font-family: monospace;">4.移除旧版本的DataNucleus App Engine plugin的jar包<br />删除\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</span></p>
<p><span style="font-family: monospace;">5.重启Eclipse</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shoopman.org/2009/04/23/gae-sdk-updated-datanucleus-plugin-rc1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决Google App Engine中的DatastoreNeedIndexException异常</title>
		<link>http://blog.shoopman.org/2009/04/18/solve-datastore-need-index-exception-in-gae.html</link>
		<comments>http://blog.shoopman.org/2009/04/18/solve-datastore-need-index-exception-in-gae.html#comments</comments>
		<pubDate>Sat, 18 Apr 2009 20:16:10 +0000</pubDate>
		<dc:creator>Shoopman</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[GAE]]></category>

		<guid isPermaLink="false">/2009/04/18/solve-datastore-need-index-exception-in-gae.html</guid>
		<description><![CDATA[    做了一个简单的一对一(OneToOne)关系的JPA测试，在本地Eclipse中没有问题，但部署到GAE后，添加数据成功而在显示数据的时候却报500错误。幸好GAE控制台有详细错误日志：
/oneone.jspjava.lang.ClassCastException: com.google.appengine.api.datastore.DatastoreNeedIndexException cannot be cast to javax.servlet.ServletExceptionat 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中)的内容复制进去，如下：
]]></description>
			<content:encoded><![CDATA[<p>    做了一个简单的一对一(OneToOne)关系的JPA测试，在本地Eclipse中没有问题，但部署到GAE后，添加数据成功而在显示数据的时候却报500错误。幸好GAE控制台有详细错误日志：</p>
<blockquote><p>/oneone.jsp<br />java.lang.ClassCastException: com.google.appengine.api.datastore.DatastoreNeedIndexException cannot be cast to javax.servlet.ServletException<br />at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:754)<br />at org.apache.jsp.oneone_jsp._jspService(oneone_jsp.java:100)<br />at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)<br />at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)</p>
</blockquote>
<p>看来是忘记给datastore指定，参看GAE的文档<a href="http://code.google.com/intl/zh-CN/appengine/docs/java/datastore/queriesandindexes.html" target="_blank">Queries And Indexes</a>，赶紧在WEB-INF添加datastore-indexes.xml，再把本地自动生成的index(在WEB-INF/appengine-generated/datastore-indexes-auto.xml中)的内容复制进去，如下：</p>
<blockquote><p><!--l version="1.0" encoding="utf-8--><br /> xmlns=&#8221;<a href="http://appengine.google.com/ns/datastore-indexes/1.0">http://appengine.google.com/ns/datastore-indexes/1.0</a>&#8220;<br /> autoGenerate=&#8221;true&#8221;&gt;<br />       source=&#8221;auto&#8221; /&gt;</p>
</blockquote>
<p>重新部署到GAE中，运行正常。</p>
<p>测试地址：<a href="http://shoopmanga.appspot.com/oneone.jsp">http://shoopmanga.appspot.com/oneone.jsp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shoopman.org/2009/04/18/solve-datastore-need-index-exception-in-gae.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>给Google App Enging绑定域名</title>
		<link>http://blog.shoopman.org/2009/04/18/bind-domain-to-gae.html</link>
		<comments>http://blog.shoopman.org/2009/04/18/bind-domain-to-gae.html#comments</comments>
		<pubDate>Sat, 18 Apr 2009 12:53:08 +0000</pubDate>
		<dc:creator>Shoopman</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[域名]]></category>

		<guid isPermaLink="false">/2009/04/18/bind-domain-to-gae.html</guid>
		<description><![CDATA[前段时间申请了一个免费的二级域名shoopman.co.cc(关于co.cc的中文介绍可以点这里，申请地址在http://www.co.cc)，在Google App Engine部署了用python写的Blog后，当然也想绑定这个短小的域名到这个Blog上，于是开始了折腾：
1.进入Google App Engine管理中心，选择安装了博客的的应用ID，我这个是“shoopmanlog”，在应用控制台里，点左边的导航菜单的“Version”。
2.在Version页输入了我申请的免费域名&#8221;shoopman.co.cc&#8221;，点击“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个小时后就生效了，哦也！
]]></description>
			<content:encoded><![CDATA[<p><!--StartFragment-->前段时间申请了一个免费的二级域名<a href="http://shoopman.co.cc/">shoopman.co.cc</a>(关于<a href="http://www.free789.com/domain/d-sub/co-cc.html">co.cc的中文介绍可以点这里</a>，申请地址在<a href="http://www.co.cc/">http://www.co.cc</a>)，在Google App Engine部署了用python写的Blog后，当然也想绑定这个短小的域名到这个Blog上，于是开始了折腾：</p>
<div>1.进入Google App Engine管理中心，选择安装了博客的的应用ID，我这个是“shoopmanlog”，在应用控制台里，点左边的导航菜单的“Version”。</div>
<div>2.在Version页输入了我申请的免费域名&#8221;shoopman.co.cc&#8221;，点击“Add Domain”按钮，页面居然却跳到了<a href="http://www.google.com/a">Google App</a>（Google企业应用套件）的注册页。</div>
<div>3.按照Google App的提示，成功申请了一个Google App的帐号。需要注意的是，Google App暂时不支持中国地区，换一个地区比如美国，就能成功申请了。</div>
<div>4.根据Google App的提示，需要验证域名是属于我的。登录<a href="http://www.co.cc/">http://www.co.cc</a>的域名管理，在Zone Record里添加一个CNAME记录<a href="http://googleffffffffe3f97a51.shoopman.co.cc/">googleffffffffe3f97a51.shoopman.co.cc</a>，指向google.com。</div>
<div>5.切换回到Google App中，点击“验证”按钮，Google提示在48个小时内完成验证。</div>
<div>6.我没有那么大的耐心等48小时再做下一步操作，直接到Google App添加Google App Engine服务，如图</div>
<div>
<table style="width:auto;" border="0">
<tbody>
<tr>
<td><img src="http://hfijeq.blu.livefilestore.com/y1p2h9yu8hDCdKh8y1BWYlE0a0u3rGWU1IGnLaHt-BMyCjdqnBo_0rgaO2WnlW5IsIDYk0X7QfjAxficsFzDcso2g/add-gae-to-google-app.jpg" alt="" /></td>
</tr>
</tbody>
</table>
</div>
<div>7.在服务设置菜单中给Google App Engine服务添加域名<a href="http://www.shoopman.co.cc/">www.shoopman.co.cc</a>，Google App提示要把相应域名的CNAME指向</div>
<div><span style="font-family: monospace;">ghs.google.com</span>，但网上的一些文章说<span style="font-family: monospace;">由于ghs.google.com</span>被墙(GFW)了，需要设置域名的A记录到相应的IP。这个IP我是从<a href="http://xuming.net/2008/10/ip_blocked.html">x</a><a href="http://xuming.net/2008/10/ip_blocked.html">uming.net</a>找来的，PING一下<a href="http://www.shoopman.co.cc/">www.shoopman.co.cc</a>就可以看到了，呵呵。</div>
<div>8.等待吧，耐心等待域名解析生效吧。。。我的大概是4、5个小时后就生效了，哦也！</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.shoopman.org/2009/04/18/bind-domain-to-gae.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine 支持 Spring-ORM(2.5.6) 的办法</title>
		<link>http://blog.shoopman.org/2009/04/15/the-way-how-google-app-engine-support-spring-orm.html</link>
		<comments>http://blog.shoopman.org/2009/04/15/the-way-how-google-app-engine-support-spring-orm.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 22:08:55 +0000</pubDate>
		<dc:creator>Shoopman</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">/2009/04/15/the-way-how-google-app-engine-support-spring-orm.html</guid>
		<description><![CDATA[GAE不支持spring-orm是因为引用了javax.naming包里的类，而这些类是不被GAE支持的。在spring-orm-2.5.6.jar移去一下类则可：
PersistenceAnnotationBeanPostProcessor.classPersistenceAnnotationBeanPostProcessor$PersistenceElement.classPersistenceAnnotationBeanPostProcessor$2.classPersistenceAnnotationBeanPostProcessor$1.class

这个我还没有验证过。出自Google Group。
]]></description>
			<content:encoded><![CDATA[<p>GAE不支持spring-orm是因为引用了javax.naming包里的类，而这些类是不被GAE支持的。在spring-orm-2.5.6.jar移去一下类则可：</p>
<blockquote><p>PersistenceAnnotationBeanPostProcessor.class<br />PersistenceAnnotationBeanPostProcessor$PersistenceElement.class<br />PersistenceAnnotationBeanPostProcessor$2.class<br />PersistenceAnnotationBeanPostProcessor$1.class</p>
</blockquote>
<p>这个我还没有验证过。出自<a href="http://groups.google.com/group/google-appengine-java/browse_thread/thread/187d41712ec1d394" target="_blank"><span style="color: #b85b5a;">Google Group</span></a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shoopman.org/2009/04/15/the-way-how-google-app-engine-support-spring-orm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine 支持 Struts2 的 办法</title>
		<link>http://blog.shoopman.org/2009/04/15/the-way-how-google-app-engine-support-struts.html</link>
		<comments>http://blog.shoopman.org/2009/04/15/the-way-how-google-app-engine-support-struts.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 22:08:08 +0000</pubDate>
		<dc:creator>Shoopman</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Struts2]]></category>

		<guid isPermaLink="false">/2009/04/15/the-way-how-google-app-engine-support-struts.html</guid>
		<description><![CDATA[
如果直接在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。

]]></description>
			<content:encoded><![CDATA[<div class="entry">
<p>如果直接在webapp的classpath加入Struts2的相关jar，Struts2是不能正常工作的。现在安一下办法就可以了：</p>
<p>1.首先写这样一个类：</p>
<blockquote><p>package com.ociweb.gaestruts2;</p>
<p>// imports</p>
<p>public class InitListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {</p>
<p>public InitListener()  {<br />}</p>
<p>public void contextInitialized(ServletContextEvent sce)  {<br />OgnlRuntime.setSecurityManager(null);<br />}<br />// … all other methods stubbed out to do nothing<br />}</p>
</blockquote>
<p>2.在web.xml中加入如下代码：</p>
<blockquote><p>com.ociweb.gaestruts2.InitListener</p>
</blockquote>
<p>我已经验证过了。原文出自<a href="http://groups.google.com/group/google-appengine-java/browse_thread/thread/19018b0317f27817/bbec9e79ab168e45?lnk=gst&amp;q=struts#bbec9e79ab168e45" target="_blank"><span style="color: #b85b5a;">Google Group</span></a>。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.shoopman.org/2009/04/15/the-way-how-google-app-engine-support-struts.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine for Java 开张了</title>
		<link>http://blog.shoopman.org/2009/04/15/google-app-engine-now-support-java.html</link>
		<comments>http://blog.shoopman.org/2009/04/15/google-app-engine-now-support-java.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 22:05:38 +0000</pubDate>
		<dc:creator>Shoopman</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[GAE]]></category>

		<guid isPermaLink="false">/2009/04/15/google-app-engine-now-support-java.html</guid>
		<description><![CDATA[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的一些有用连接：

GAE Java入门
GAE Java文档
GAE Java讨论组
JRE类白名单

]]></description>
			<content:encoded><![CDATA[<p>2009-4-8，Google App Engine for Java开张了。可惜的是，我在网上看到这些消息时，已经是4-9，而且网上还说的是测试期间仅限前10000申请者。当时那个遗憾啊。。。不过不死心，还是马上申请了。幸好第二天收到了帐号激活的邮件。这里是申请的网址<a href="http://appengine.google.com/promo/java_runtime" target="_blank"><span style="color: #b85b5a;">http://appengine.google.com/promo/java_runtime</span></a>，当然必须要Google帐号。</p>
<p>接着，看来<a href="http://code.google.com/intl/zh-CN/appengine/docs/java/tools/eclipse.html" target="_blank"><span style="color: #b85b5a;">Google Plugin for Eclipse</span></a>的说明，马上在线安装了插件，开始GAE的测试。已经顺利的把一个Demo改成了通过JPA存储数据，并部署到GAE上来，地址是<a href="http://shoopmanga.appspot.com/" target="_blank"><span style="color: #b85b5a;">http://shoopmanga.appspot.com</span></a>。当然，现在还有不少问题，如中文乱码问题，以后继续研究，慢慢解决。</p>
<p>下面是Google App Engine for Java的一些有用连接：</p>
<ul>
<li><a href="http://code.google.com/intl/zh-CN/appengine/docs/java/gettingstarted/" target="_blank"><span style="color: #0066cc;">GAE Java入门</span></a></li>
<li><a href="http://code.google.com/intl/zh-CN/appengine/docs/java/overview.html" target="_blank"><span style="color: #0066cc;">GAE Java文档</span></a></li>
<li><a href="http://groups.google.com/group/google-appengine-java" target="_blank"><span style="color: #0066cc;">GAE Java讨论组</span></a></li>
<li><a href="http://code.google.com/intl/zh-CN/appengine/docs/java/jrewhitelist.html" target="_blank">JRE类白名单</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.shoopman.org/2009/04/15/google-app-engine-now-support-java.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
