SAE 部署java web 框架 Jfinal 全過程


    剛剛經過SAE高級開發者認證因而準備在sae 部署個人web應用php

    應用使用了jfinal框架html

    瞭解了一下 彷佛部署過程可能有一些問題java

    百度一下也沒有太多的資料只好本身探索了mysql

    


    第一個問題 503 - 鏈接池問題: git

    首先直接把我用jfinal 寫的war 上傳上去發現直接 503了 web

    啓動都失敗了這就沒什麼好說了進入日誌中心看了看jvm日誌sql

    發現數據庫

 register druid-driver mbean errorjava.security.AccessControlException

    又百度了一下是druid 鏈接池的問題 sae不支持 jms 因此報錯了 而後改用了c3p0緩存

    爲了防止其餘問題 我先用jfinal做者的官方例子來測試jfinal-democookie

    上傳之後發現沒有創建數據庫 這個好辦去創建一下數據庫就行了


    第二個問題 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源碼須要註釋掉6七、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這玩意

相關文章
相關標籤/搜索