这两天在搞[url=http://www.iteye.com/news/6819-litexml-1-0-alpha9-issued-in-support-of-google-appengine]Lite XML支持Google AppEngine环境[/url]的一些尝试。这里将我碰到的一些问题罗列一下。一是征求一下高手门的解决办法,二是备他人参考讨论:
关于Eclipse下环境搭建,貌似je上已有一片不错的文章介绍:[url]http://www.iteye.com/topic/363786[/url]
这里就不多说了,我只说一下我们需要忍受的问题,而且有一些我暂时还没有解决办法
[b]开发环境(Eclipse 插件)和线上环境严重不一致[/b]
这是我最头疼的问题。
[i]1.本地调试环境下,一些静态资源经常被定位错误。[/i]
比如我的/styles/default.css,经常被定位为:/styles/default.css/index.html
猜测原因,对于静态资源来说,GAE服务器上是有专门的程序处理的(static/resource概念就为这个吧)
或者说,线上环境下可能根本就不是通过java环境处理静态资源,是他也就不可能有这类问题,但是本地调试环境全部资源都是jetty处理的,可能是某些处理目录默认索引页定向的bug导致了这种资源重定向的问题。
解决办法:我没找到,上传到服务器就好了。
[i]2.服务端环境下,一些通配符(*.xxx这类)的 servlet-url mapping经常失效[/i]
具体重现方法还没找到,这点是非常让人郁闷的,经常本地调试正常,上传到服务器就不对了,反复排查,最后发现莫名其妙的好了。
解决办法,没有
[b]GAE沙箱的限制:[/b]
处于安全考虑,GAE有很多限制:
我碰到的问题有:
[i]1.不支持文件写入,哪怕是你自己站点下的文件[/i]
解决办法:别写文件
[i]2.不支持JDK自带的Rhino JS引擎[/i]
解决办法:如果您需要JS运行环境,您可以吧mozilla 的Rhino包扔进去,但是不能使用javax.script接口了,直接用rhino编程吧。
[i]3.不支持XPath[/i]
虽然号称支持XSLT(我没有验证)但是却不支持XPath,这点极其诡异。
报错大概是这样的:
解决办法:Apache 的 xalan.jar包仍进去吧,能后在用到的地方调用做一些必要的修改
[b]其他注意事项[/b]
目录结构
war这个目录事固定的,我尝试修改,以失败告终
appengine-web.xml文件
这里有两个比较重要的概念
静态文件(static-files)可以看做你的Java程序无法访问的(估计GAE的静态资源和动态资源分开管理的)
资源文件(resource-files)运用程序可以访问的资源。
Google AppEngine文档上说,他们默认是把全部的资源都同时当作static files 和resource files的但是我有一个通配符失败之后的bug 就是配上这两个节点才莫名奇妙的正常的:
关于Eclipse下环境搭建,貌似je上已有一片不错的文章介绍:[url]http://www.iteye.com/topic/363786[/url]
这里就不多说了,我只说一下我们需要忍受的问题,而且有一些我暂时还没有解决办法
[b]开发环境(Eclipse 插件)和线上环境严重不一致[/b]
这是我最头疼的问题。
[i]1.本地调试环境下,一些静态资源经常被定位错误。[/i]
比如我的/styles/default.css,经常被定位为:/styles/default.css/index.html
猜测原因,对于静态资源来说,GAE服务器上是有专门的程序处理的(static/resource概念就为这个吧)
或者说,线上环境下可能根本就不是通过java环境处理静态资源,是他也就不可能有这类问题,但是本地调试环境全部资源都是jetty处理的,可能是某些处理目录默认索引页定向的bug导致了这种资源重定向的问题。
解决办法:我没找到,上传到服务器就好了。
[i]2.服务端环境下,一些通配符(*.xxx这类)的 servlet-url mapping经常失效[/i]
具体重现方法还没找到,这点是非常让人郁闷的,经常本地调试正常,上传到服务器就不对了,反复排查,最后发现莫名其妙的好了。
解决办法,没有
[b]GAE沙箱的限制:[/b]
处于安全考虑,GAE有很多限制:
我碰到的问题有:
[i]1.不支持文件写入,哪怕是你自己站点下的文件[/i]
解决办法:别写文件
[i]2.不支持JDK自带的Rhino JS引擎[/i]
解决办法:如果您需要JS运行环境,您可以吧mozilla 的Rhino包扔进去,但是不能使用javax.script接口了,直接用rhino编程吧。
[i]3.不支持XPath[/i]
虽然号称支持XSLT(我没有验证)但是却不支持XPath,这点极其诡异。
报错大概是这样的:
XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: No XPathFactory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom
解决办法:Apache 的 xalan.jar包仍进去吧,能后在用到的地方调用做一些必要的修改
if (xpathFactory == null) {
if (xpathFactoryClass != null) {
try {
//先创建指定的第三方xpath实现
xpathFactory = XPathFactory
.newInstance(XPathFactory.DEFAULT_OBJECT_MODEL_URI,
xpathFactoryClass, this.getClass()
.getClassLoader());
} catch (Exception e) {
log.error("自定义xpathFactory初始化失败", e);
}
}
if (xpathFactory == null) {
xpathFactory = XPathFactory.newInstance();
}
}
XPath xpathEvaluator = xpathFactory.newXPath();
[b]其他注意事项[/b]
目录结构
war这个目录事固定的,我尝试修改,以失败告终
appengine-web.xml文件
这里有两个比较重要的概念
静态文件(static-files)可以看做你的Java程序无法访问的(估计GAE的静态资源和动态资源分开管理的)
资源文件(resource-files)运用程序可以访问的资源。
Google AppEngine文档上说,他们默认是把全部的资源都同时当作static files 和resource files的但是我有一个通配符失败之后的bug 就是配上这两个节点才莫名奇妙的正常的:
<static-files>
<include path="/**.js" />
<include path="/**.css" />
<include path="/**.json" />
<exclude path="/**.xhtml" />
</static-files>
<resource-files>
<include path="/**.*"/>
</resource-files>