SAE 部署java web 框架 Jfinal 全过程


    刚刚通过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这玩意




你可能感兴趣的:(shiro,sae,jFinal)