tag:blogger.com,1999:blog-4932973437825780372024-02-20T10:36:26.226-08:00重见天日Keelhttp://www.blogger.com/profile/15066405512349032187noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-493297343782578037.post-62860787015459352582009-04-11T02:29:00.000-07:002009-04-11T04:09:39.102-07:00Google AppEngine for java 的JDO测试研究了一下dataStore文档,并作了一个简单的留言板,没有用DEMO里的那个,自己做的更方便修改,省时间。<br /><br />有几个心得:<br /><br /><ul><li>使用eclipse的google插件可以节省很多必要的麻烦,我在<a href="http://cc9c.blogspot.com/2009/04/google-app-engine-for-javaeclipse.html">前文</a>中已有说明。</li><li>google的dataStore分为标准api和low api(底层api),标准api分为jdo和jpa两种。底层API看上去比较复杂,文档也少(实际上只有javadoc),而比较jdo和jpa,虽然后者比较新,但显示google对jdo的支持更全面,从文档和DEMO可以看出。</li><li>按google的建议,先创建一个PMF工厂,然后使用Query对象构造查询,删除和新增经测试问题都不大,关键是查询和index。</li></ul>感觉最麻烦的就是索引(index)处理了,与SQL相比,这一部分比较不太一样。eclipse在build项目时会自动处理Query产生的index,并在WEB-INF/appengine-generated/下生成datastore-indexes-auto.xml配置文件,如果有数据更新,还会生成local_db.bin,这实际上就是数据保存的文件了,删除这个文件数据就消失了,这个文件不会上传到googleApp,所以本地调试时生成的数据是不会在上传时与googleApp上的数据同步的。<br /><br />如果在Query中加入了条件where或order by 语句,都有可能会自动生成index,这时datastore-indexes-auto.xml配置文件生成类似下面的代码:<br /><pre><br /><datastore-indexes><br /><br /> <!-- Used 7 times in query history --><br /> <datastore-index kind="Msg" ancestor="false" source="auto"><br /> <property name="author" direction="asc"><br /> <property name="__key__" direction="desc"><br /> </property><br /><br /></property><br /></pre><br />这个__key__可能就是主键。<br />后来发现在改了几下条件后就出现500错误了,再次看了文档,原来eclipse的自动生成index的配置文件是有局限性的,另一些需要手动在datastore-indexes.xml中进行配置,条件如下:<br /><br />可自动生成的:<br /><ul><li>queries using only equality and ancestor filters 使用的where条件必须是等于条件(=)或是原始的(?这个我理解不到位)。<br /></li><li>queries using only inequality filters (which can only be of a single property) 如果使用不等的条件(<code><</code>, <code><=</code>, <code>>=</code>, <code>></code>),则只能针对一个字段,也就是非等于条件的where语句,涉及的条件对象只能是一个,比如 age> 10 and age <20>10 and level >0 ;<br /></li><li>queries with only one sort order on a property, either ascending or descending 在order by 排序语句中只能有一个字段,不是asc的就是desc的。比如 order by age asc是可以的,order by age asc ,id desc 是不行的。<br /></li></ul>不可自动生成,需要datastore-indexes.xml中进行配置的:<br /><ul><li>queries with multiple sort orders 多重的order by 条件<br /></li><li>queries with a sort order on keys in descending order 在主键上按倒序排,即order by id desc<br /></li><li>queries with one or more inequality filters on a property and one or more equality filters over other properties 在一个字段上存在一个或多个不等的where条件(<code><</code>, <code><=</code>, <code>>=</code>, <code>></code>),而且有一个或多个相等条件在其他的字段上<br /></li><li>queries with inequality filters and ancestor filters 同时存在一个不等条件和ancestor filter条件(这个ancestor filter到底是什么?)</li></ul>而在Query的写法中,也有很多地方与sql不同,前者有更多的限制:<br />详情请见:<a href="http://code.google.com/intl/en/appengine/docs/java/datastore/queriesandindexes.html#Restrictions_on_Queries">http://code.google.com/intl/en/appengine/docs/java/datastore/queriesandindexes.html#Restrictions_on_Queries</a><br /><br />我就不再详细翻译了,有空再进一步说明。<br /><br /><span style="font-weight: bold;font-size:100%;" >相关主题:</span><br /><ul><li><a href="http://cc9c.blogspot.com/2009/04/google-app-engine-for-javajsp.html">Google App Engine for Java的JSP中文问题</a><br /><a href="http://cc9c.blogspot.com/2009/04/google-app-engine-for-javaeclipse.html"><span style="font-size:100%;"></span></a></li><li><a href="http://cc9c.blogspot.com/2009/04/google-app-engine-for-javaeclipse.html"><span style="font-size:100%;">Google App Engine for Java的eclipse插件</span></a></li><li><a href="http://cc9c.blogspot.com/2009/04/google-app-for-java.html">Google App for java 开始</a></li></ul></datastore-index></datastore-indexes>Keelhttp://www.blogger.com/profile/15066405512349032187noreply@blogger.com0tag:blogger.com,1999:blog-493297343782578037.post-43423849675592608522009-04-09T22:26:00.000-07:002009-04-09T23:09:18.601-07:00两个不错的多文件上传组件(jquery,flash)这是一个使用jQuery和flash的多文件上传组件:<br /><a href="http://www.uploadify.com/demo/">http://www.uploadify.com/demo/</a><br /><br />这是一个FLASH的多文件上传组件:<br /><a href="http://www.apueee.com/2008/07/05/flash-multiple-file-uploader/">http://www.apueee.com/2008/07/05/flash-multiple-file-uploader/</a><br /><br />这里所说的多文件上传,是指点击浏览打开的本机文件浏览窗口可以选择多个文件!<br />而并非一次选一个,然后一次上传的概念,那还应该算是单文件上传,只不过批量而已。Keelhttp://www.blogger.com/profile/15066405512349032187noreply@blogger.com0tag:blogger.com,1999:blog-493297343782578037.post-66375333850074384172009-04-09T20:18:00.000-07:002009-04-12T18:00:15.395-07:00Google App Engine for Java的eclipse插件下载及体验Google App Engine for Java的eclipse插件非常好!<br />很多烦琐的操作和步骤都代劳了。<br />比如:<br /><ul><li>创建project项目的结构</li><li>加入jdo,jpa的相关lib</li><li>build时使用的jdo优化</li><li>直接集成jetty服务器测试</li><li>最重要的,直接deploy,也就是上传你的APP</li></ul><br /><h3>AppEngine for Java的eclipse插件下载</h3><br />一切都很好,但是第一次下载时简单慢得夸张(eclipse3.4- ganymede),其根本原来原来是ganymede的update目录下载不了(这个是从eclipse的官网下的,google不会这么慢)。<br /><br />这里提供一个Google App Engine for Java的 eclipse3.4-(ganymede) 插件下载:<a href="http://www.k99k.com/googlePluginForEclipse.html">点击下载</a><br />此外还需要从google sdk下载其java sdk 下载地址:<a href="http://code.google.com/intl/en/appengine/downloads.html#Google_App_Engine_SDK_for_Java">http://code.google.com/intl/en/appengine/downloads.html#Google_App_Engine_SDK_for_Java</a><br /><br />下载后直接把plugins和feathers目录中的文件复制到eclipse相同目录中,启动后可以看到google的三个图标。点击第一个蓝色图标创建一个google web application,在对话框中可以看到Google SDKS里面有两个部分:<br />Google Web Toolkit --这个把它的勾去掉,如果需要可以去google下载后配置<br />Google App Engine --这个就是关键了,把它勾上(默认已勾),点击后面的蓝色链接configure SDKs... 然后在弹出的App Engine中add 一个从前面下载好后解压后的java sdk位置,如:D:\java\appengine-java-sdk\<br />填入相关的project名和包名,就可以开始体验Google App Engine for Java了!Keelhttp://www.blogger.com/profile/15066405512349032187noreply@blogger.com0tag:blogger.com,1999:blog-493297343782578037.post-36972396297742240992009-04-09T17:39:00.000-07:002009-04-11T09:27:57.317-07:00Google App Engine for Java的JSP中文问题现象:直接使用java-sdk上传或使用eclipse上传后发现JSP中的中文是乱码的,Servlet在设置好request和respone的encoding后处理中文没有问题。<br /><br />在使用命令行方式上传中文的JSP时,我发现有一个JSP报错如下:<br />--------------------------------------<br />8% Compiling jsp files.<br />2009-4-10 8:43:16 org.apache.jasper.JspC processFile<br />信息: Built File: \a.jsp<br />11% Compiling java files.<br />C:\DOCUME~1\keel\LOCALS~1\Temp\appcfg53496.tmp\WEB-INF\classes\org\apache\jsp\a_<br />jsp.java:43: 警告:编码 GB18030 的不可映射字符<br /> out.write("...head>\r\n meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\r\ntitle>鎴戞潵浜??/title>\r\nhead>\r\nbody>\r\n");<br />1 警告<br />--------------------------------------<br />(因为blog发表的要求,部分html代码作了改动)<br /><br />这说明在使用org.apache.jasper.JspC processFile进行Compiling jsp files使用了GB18030而不是UTF-8,而且在生成的临时文件夹中可以看到jsp编译后的.java文件直接就是乱码的,所以,并不是googleApp的server不支持,而是appengine-java-sdk的JSP编译器的编码有问题。对于这个问题,我在googleApp for java的groups上提问了,参考:<a href="https://groups.google.com/group/google-appengine-java/browse_thread/thread/d2e5698f76477d50/c28eabf57c155e33?hl=zh-CN&lnk=gst&q=How+to+change+the+JspCompiler#c28eabf57c155e33">How to change the JspCompiler's encoding</a><br /><br />sdk的上传参数很简单,再看了文档,好像在builder.xml中可以通过ant进行一些设定,但涉及到update操作时还是没有办法。<br /><br />再经过对appengine-java-sdk一番研究,发现居然没有地方可以设置JSP编码选项(在appengine-local-runtime.jar(lib/impl)中com\google\appengine\tools\development\webdeafault.xml 中可以加上javaEncoding,但没有用),而且这个java的sdk似乎没有源文件下载,也就无法从根本上解决这个问题(反编译?没必要吧),不过相信过不了多久,SDK的源码发布后就可以解决这个问题,或者GOOGLE自己会加上这个参数设置就更好了。<br /><br />后来发现jxva回了我的帖子,并给出了JSP中文的解决办法,对JSP中的中文进行转码,就像我们以前在处理WAP的中文问题一样,他给出了一个方法:<br />-----------------------------------<br />public static String encode(String str) {<br /> StringBuilder sb = new StringBuilder();<br /> for (int i = 0; i < c =" str.charAt(i);" a =" (char)"> 255) {<br /> sb.append("&#").append(a).append(';');<br /> } else {<br /> sb.append(c);<br /> }<br /> }<br /> return sb.toString();<br /> }<br />-----------------------------------<br />效果可以看他的app:<a target="_blank" rel="nofollow" href="http://jxva-framework.appspot.com/">http://jxva-framework.appspot.com/</a><br /><br />这种方法可以暂时解决JSP的中文问题,甚至可以写一个ant脚本对JSP进行预处理,目前也只有如此了。此外,把windows的默认编码设置为utf-8应该也能起作用,如果有办法改的话。<br /><br /><span style="font-weight: bold;font-size:100%;" >相关主题:</span><br /><ul><li><a href="http://cc9c.blogspot.com/2009/04/google-appengine-for-java-jdo.html">Google AppEngine for java 的JDO测试</a><br /></li><li><a href="http://cc9c.blogspot.com/2009/04/google-app-engine-for-javaeclipse.html"><span style="font-size:100%;">Google App Engine for Java的eclipse插件</span></a></li><li><a href="http://cc9c.blogspot.com/2009/04/google-app-for-java.html">Google App for java 开始</a><br /></li></ul>Keelhttp://www.blogger.com/profile/15066405512349032187noreply@blogger.com1tag:blogger.com,1999:blog-493297343782578037.post-54547553511510582592009-04-09T17:22:00.000-07:002009-04-09T18:22:29.289-07:00Google App for java 中文Google App 终于而且提前发布了JAVA版,这是一个令全世界JAVA开发者兴奋的事情,我想以后的GoogleApp肯定会大放光彩,JAVA开发者加入后的世界更精彩!<br /><br />如今,APP开发似乎成了新潮流,最有影响的就是Apple的APP Store,然后还有SONY的游戏Store,很多高端的终端都有计划开出自己的store来吸引开发者丰富自己的终端应用,甚至包括国内的魅族M8都开发了store!<br /><br />因为GoogleApp的java版才出来,目前还存在这样那样一些问题,特别是中文问题等,特将相关的一些解决办法记录下来。Keelhttp://www.blogger.com/profile/15066405512349032187noreply@blogger.com0