刚刚通过SAE高级开发者认证于是准备在sae 部署我的web应用
应用使用了jfinal框架
了解了一下 似乎部署过程可能有一些问题
百度一下也没有太多的资料只好自己探索了
第一个问题 503 - 连接池问题:
首先直接把我用jfinal 写的war 上传上去发现直接 503了
启动都失败了这就没什么好说了进入日志中心看了看jvm日志
发现
register druid-driver mbean errorjava.security.AccessControlException
又百度了一下是druid 连接池的问题 sae不支持 jms 所以报错了 然后改用了c3p0
为了防止其他问题 我先用jfinal作者的官方例子来测试jfinal-demo
上传以后发现没有建立数据库 这个好办去建立一下数据库就好了
第二个问题 500:
java.lang.StringIndexOutOfBoundsException: String index out of range:
然后我以为应该就好了,想不到又出现了一个问题 启动是成功了
但是直接就500了出现了一个我们熟悉的异
StringIndexOutOfBoundsException 定位代码到 at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:68)
这个问题百度了一下别人也遇到过 参考了这里 http://www.kankanews.com/ICkengine/archives/46488.shtml
这里修改 JFinalFilter源码需要注释掉67、68行代码,就没有问题了
其他问题 jms
还是第一个问题 用了c3p0 好像也会调用一下 jms 然后失败了
不过服务是启动了没有像druid 立即停止 于是我又试了一下 dbcp
加入 common-dbcp.jar,common-pool.jar,common-collections.jar 3个包
记得 dataSource传入 RecordPlugin
正常启动 但是经常500 可能看来dbcp 也不太行 有换回了C3P0
其他问题 jar冲突
如果有servlet。jar 会冲突去掉就好
jetty-service.jar也一样
正式开始
测试 demo 部署好了 然后开始部署我的应用
话不多说直接打包上传等待中40M有点大传了半天
上传完毕 访问——》跳转登录页面 -》500
观察一下 日志
java.lang.IllegalStateException: can not invoke native method public native long com.sun.management.UnixOperatingSyst em.getTotalPhysicalMemorySize() com.sina.sae.security.SaeSecurityManager.checkPermission(SaeSecurityManager.java:363)
发现系统监控 javamelody 的权限被拦截了 没办法先去掉
然后再上传又出现了一个问题
path must start with /jfinalauthority com.sina.sae.facade.SaeHttpServletResponse.addCookie
研究后发现 cookie必需 添加应用名为 path 我的应用加上 /jfinalauthority
但是发现加入之后 可以添加cookie了 但是获取不到。。
这个问题暂时没有头绪 先不用cookie 谁知道解决方案可告诉我
然后上传 终于可以用了
session
然后登录以后发现我再访问主页 又需要登录 我用的是shiro
shiro 会把session 保存在内存中 而每次访问的机器可能不同了
所以我们要改写一下 shiro的sessionDao
可以参考这篇文章 http://cloudbbs.org/forum.php?mod=viewthread&tid=12905
我们用jfinal 要改写shrio.ini 里面的sessionDao 类就行
同时内存缓存用起来也没有什么用处了
直接使用 memcache
连接超时
测试的时候发现
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
仔细一看 连接超时了 这是怎么回事呐应该不是设置问题 后来换了一下mysq 驱动jar就好了
版本为 mysql-connector-java-5.0.8-bin.jar
后续:
应用放上去一晚上 起来一看又挂了 这里跟sae的机制有关应用 一段时间没人访问jvm自动关闭了
可以在设置中 关闭 jvm的自动关闭
后续2:
又发现一个问题 memcache 需要基于请求的时候init
而不能在应用init的时候init 这就比较。
终于完事了
好了大功告成Jfinal框架 sae 正式部署完毕
欢迎大家访问 http://jfinalauthority.sinaapp.com/
同时这也是本人最新的开源项目源码地址 :http://git.oschina.net/jayqqaa12/JFinal_Authority
有bug请联系我
登录帐号: user 密码 231566qq
最后 :
要不是免费 鬼才用sae这玩意