Eclipse local server publish時出現上述錯誤訊息.
SO查到的答案是去看看 servers.xml
不過後來是刪掉 local server重新建一個搞定
code_prettify
2014年12月12日 星期五
2014年11月15日 星期六
64-bit 環境中設定 eclipse使用超過 2G記憶體
設定在 eclipse.ini個人試了沒用
啟動 eclipse, 到 Windows>Preference>Java>Installed JREs, 選擇使用的 JER 後點 Edit.
在 Default VM Arguments輸入 -Xms256M -Xmx8192M.
要確認目前運行環境,寫個 main method,看看下面兩個屬性
System.getProperty("sun.arch.data.model")
Runtime.getRuntime().maxMemory();
6 Common Errors in Setting Java Heap Size
這篇文章討論了常見的輸入錯誤
另外提供了 tomcat設定記憶體使用量的設定及幾個 IDE記憶體使用量的設定方式.
啟動 eclipse, 到 Windows>Preference>Java>Installed JREs, 選擇使用的 JER 後點 Edit.
在 Default VM Arguments輸入 -Xms256M -Xmx8192M.
要確認目前運行環境,寫個 main method,看看下面兩個屬性
System.getProperty("sun.arch.data.model")
Runtime.getRuntime().maxMemory();
6 Common Errors in Setting Java Heap Size
這篇文章討論了常見的輸入錯誤
另外提供了 tomcat設定記憶體使用量的設定及幾個 IDE記憶體使用量的設定方式.
Einstein, where are u?
OK.我笨,被陷害了n個小時
一直以來傾向 Entity以單純 JavaBean呈現
所有 logic放在 service中
遇到 hibernate one-to-many中 element怎麼都放不進去
也不是不知道 java.util.Set不允許重複的物件
只是沒想到 n代前手去 override equals......
OK.我知道有一種看法覺得將 entity作業務邏輯封裝是自然的好事
我也承認
有些東西直接封裝到 entity中相當自然且方便
但是
我還是很難接受把 entity搞成帶業務邏輯的物件
讓它就是個單純的 DTO
把邏輯集中到 service是個人比較喜歡的單純化
也許,現在的 model只是更高維度的架構的 projective/affine space
還真期待 model的 4-dimension space會是什麼
Einstein, where are u?
一直以來傾向 Entity以單純 JavaBean呈現
所有 logic放在 service中
遇到 hibernate one-to-many中 element怎麼都放不進去
也不是不知道 java.util.Set不允許重複的物件
只是沒想到 n代前手去 override equals......
OK.我知道有一種看法覺得將 entity作業務邏輯封裝是自然的好事
我也承認
有些東西直接封裝到 entity中相當自然且方便
但是
我還是很難接受把 entity搞成帶業務邏輯的物件
讓它就是個單純的 DTO
把邏輯集中到 service是個人比較喜歡的單純化
也許,現在的 model只是更高維度的架構的 projective/affine space
還真期待 model的 4-dimension space會是什麼
Einstein, where are u?
maven使用下載檔案建立 local repository
專案將 datasource以 webapp/META-INF/context.xml設定
用 maven embedded tomcat測試時需要給 embedded tomcat設定 jdbc driver建立連線
maven central repository中並沒有 DB2 driver.
把從 IxM下載的 jar 檔註冊到 local repository 中,指令參考:
mvn install:install-file -DgroupId=com.ibm.db2 -DartifactId=db2jcc -Dversion=3.4.6 -Dpackaging=jar -DgeneratePom=true -Dfile=E:\jdbcDrivers\db2jcc.jar
其中 groupId, artifactId, version可自行設定,方便辨識即可.
-Dfile後面為下載的 jar檔存放路徑.
用 maven embedded tomcat測試時需要給 embedded tomcat設定 jdbc driver建立連線
maven central repository中並沒有 DB2 driver.
把從 IxM下載的 jar 檔註冊到 local repository 中,指令參考:
mvn install:install-file -DgroupId=com.ibm.db2 -DartifactId=db2jcc -Dversion=3.4.6 -Dpackaging=jar -DgeneratePom=true -Dfile=E:\jdbcDrivers\db2jcc.jar
其中 groupId, artifactId, version可自行設定,方便辨識即可.
-Dfile後面為下載的 jar檔存放路徑.
Compare java.sql.Date
以下的 Date專指 java.sql.Date.
在思考 Date比較時, 如果要用到 after or before, 最好不要用 a.after(b) or a.before(b)的思考邏輯,而是用 !b.before(a) or !b.after(a)的邏輯思考,在企業環境中比較不容易出錯.
Date的 after or before 怎麼比呢?
基本上等同於 a.getTime() > or a.getTime() <.其中沒有等於的空間,也就是沒有 >= or <=.
所以 a.after(b)等同於 a.getTime() > b.getTime(). a.before(b)等同於 a.getTime() < b.getTime().
這並不惱人, 邏輯其實很清楚.
但重點來了: 商用環境中,當你從 DB 拿到一個 Date時,你並不知道這個 Date到底當初是用
Date.valueOf(String)還是 new Date(System.currentTimeMillis())來的(也許有些規劃得很好的系統沒這問題,但是維護前人留下來的系統時,沒那工夫去檢查到底有沒有不一致的做法(甚至有時是不得已: 尤其有些日期是直接由 UI輸入,有些 Date是 current date, 而這兩種 Date須互相比較時.)
以 2014-05-02為例:
Date.valueOf("2014-05-02").getTime() == 1398960000000.
new Date(1399025789901(L)).toString == 2014-05-02.(事實上是2014-05-02 18:16:29.901)
從 DB看, 兩個都是 2014-05-02.
但是 equals絕對 return false.
因此純粹日期比較時要嘛先過一次水讓兩個日期的邏輯一致, 要嘛, 就是用 not after, not before去思考.
在思考 Date比較時, 如果要用到 after or before, 最好不要用 a.after(b) or a.before(b)的思考邏輯,而是用 !b.before(a) or !b.after(a)的邏輯思考,在企業環境中比較不容易出錯.
Date的 after or before 怎麼比呢?
基本上等同於 a.getTime() > or a.getTime() <.其中沒有等於的空間,也就是沒有 >= or <=.
所以 a.after(b)等同於 a.getTime() > b.getTime(). a.before(b)等同於 a.getTime() < b.getTime().
這並不惱人, 邏輯其實很清楚.
但重點來了: 商用環境中,當你從 DB 拿到一個 Date時,你並不知道這個 Date到底當初是用
Date.valueOf(String)還是 new Date(System.currentTimeMillis())來的(也許有些規劃得很好的系統沒這問題,但是維護前人留下來的系統時,沒那工夫去檢查到底有沒有不一致的做法(甚至有時是不得已: 尤其有些日期是直接由 UI輸入,有些 Date是 current date, 而這兩種 Date須互相比較時.)
以 2014-05-02為例:
Date.valueOf("2014-05-02").getTime() == 1398960000000.
new Date(1399025789901(L)).toString == 2014-05-02.(事實上是2014-05-02 18:16:29.901)
從 DB看, 兩個都是 2014-05-02.
但是 equals絕對 return false.
因此純粹日期比較時要嘛先過一次水讓兩個日期的邏輯一致, 要嘛, 就是用 not after, not before去思考.
ubuntu vim?
6種變形?變形金剛才拍到第 4集耶
jvim-canna
vim-athena
vim-gnome
vim-gtk
vim-nox
vim-tiny(ubuntu 14.04內建)
以上 6種變形金剛vim差異詳見原文 What is the difference between the different vim packages available in Ubuntu
要跑圖形界面 vim直接在 terminal下
gvim
或者到 Search your computer打
text editor
就可以啟動
jvim-canna
vim-athena
vim-gnome
vim-gtk
vim-nox
vim-tiny(ubuntu 14.04內建)
以上 6種
要跑圖形界面 vim直接在 terminal下
gvim
或者到 Search your computer打
text editor
就可以啟動
安裝 docker(on ubuntu)
參考文件:docker官方文件
安裝最新的 ubuntu package(by ubuntu, not by docker.ubuntu提供的最新 package, 不見得是 docker目前最新的 release):
sudo apt-get updatesudo apt-get install docker.io
然後要確認更新到哪個版本,下 docker version
(這應該還需要別的處理,因為到這邊我下 docker version得到的回應是 access denied :P 只能下 sudo docker version)
(欸, sudo apt-get update沒啥必要的感覺,不下這個指令應該也沒差)
然後,如果要啟用 tab快速完成指令(打前幾個字按 tab鍵自動完成)
source /etc/bash_completion.d/docker.io
如果想要用 docker的最新版本
先確認 ubuntu的 APT(Advenced Package Tool)是否支援 https
要確認是否有啟用 https, 找找看有沒有 /usr/lib/apt/methods/https
如果沒有,執行
sudo apt-get update
sudo apt-get install apt-transport-https
啟用 https支援
然後將 docker的 repository key加到系統的 key chain中
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
然後將 docker repository加到 ubuntu的 repository source list中,並且更新 lxc-docker這個 package
sudo sh -c "echo deb https://get.docker.com/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker
最後那個指令如果 ubuntu提示 ...package isn't trusted(未受信任的 package)..
想裝就按 y(yes)
不想裝
return :P
以上哩哩拉拉
可以用一個 script代替
curl -sSL https://get.docker.com/ubuntu/ | sudo sh
ps.歹勢,官網降說,但是本人新安裝的 ubuntu 14.04直接言干言焦(ㄐ一ㄝˊㄑ一ㄠˊ)我說 command not found(加了 sudo也一樣)
沒想試,因為我的 docker正常了 :Q
訐譙我只是在練習罕見字
要確認王子與公主最後是否過著幸福快樂的日子,請下指令
sudo docker run -i -t ubuntu /bin/bash
然後王子跟公主就會被抓到你的電腦裡,試試看是不是過著幸福快樂的日子了
ㄟ,王子跟公主幹嘛一直在我面前晃來晃去不走
OK, 按 ctrl-q叫他倆睡覺去先
然後
sudo docker ps -a
找出他倆的床號 xxxxxx
然後
sudo docker stop xxxxxx
把床拆了 :Q
安裝最新的 ubuntu package(by ubuntu, not by docker.ubuntu提供的最新 package, 不見得是 docker目前最新的 release):
然後要確認更新到哪個版本,下 docker version
(這應該還需要別的處理,因為到這邊我下 docker version得到的回應是 access denied :P 只能下 sudo docker version)
(欸, sudo apt-get update沒啥必要的感覺,不下這個指令應該也沒差)
然後,如果要啟用 tab快速完成指令(打前幾個字按 tab鍵自動完成)
source /etc/bash_completion.d/docker.io
如果想要用 docker的最新版本
先確認 ubuntu的 APT(Advenced Package Tool)是否支援 https
要確認是否有啟用 https, 找找看有沒有 /usr/lib/apt/methods/https
如果沒有,執行
sudo apt-get update
sudo apt-get install apt-transport-https
啟用 https支援
然後將 docker的 repository key加到系統的 key chain中
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
然後將 docker repository加到 ubuntu的 repository source list中,並且更新 lxc-docker這個 package
sudo sh -c "echo deb https://get.docker.com/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker
最後那個指令如果 ubuntu提示 ...package isn't trusted(未受信任的 package)..
想裝就按 y(yes)
不想裝
return :P
以上哩哩拉拉
可以用一個 script代替
curl -sSL https://get.docker.com/ubuntu/ | sudo sh
ps.歹勢,官網降說,但是本人新安裝的 ubuntu 14.04直接言干言焦(ㄐ一ㄝˊㄑ一ㄠˊ)我說 command not found(加了 sudo也一樣)
沒想試,因為我的 docker正常了 :Q
要確認王子與公主最後是否過著幸福快樂的日子,請下指令
sudo docker run -i -t ubuntu /bin/bash
然後王子跟公主就會被抓到你的電腦裡,試試看是不是過著幸福快樂的日子了
ㄟ,王子跟公主幹嘛一直在我面前晃來晃去不走
OK, 按 ctrl-q叫他倆睡覺去先
然後
sudo docker ps -a
找出他倆的床號 xxxxxx
然後
sudo docker stop xxxxxx
把床拆了 :Q
2014年11月12日 星期三
設定 tomcat startup.bat 視窗標題(command prompt title)
測試環境常需要開好幾個 tomcat佈署程式給 user測試
一堆人一起用,全安裝成 service也很煩
直接用 startup.bat啟動是個好方法
不過一堆 command prompt
又分不清楚哪個是誰的
command prompt有個指令可以設定視窗標題
command: title
example: title Elie Program
Elie Program: 自己想要的視窗標題
不用加引號, title後面的所有文字會全部被當成一個字串做為標題 ㄋ
環境: windows 7
至於 tomcat, catalina.bat中有如下說明
"Do not set the variables in this script. Instead put them into a script
setenv.bat in CATALINA_BASE/bin to keep your customizations separate.
.....
TITLE (Optional) Specify the title of Tomcat window.
......"
簡單說就是不要直接去改 catalina.bat
省得手殘改壞開不起來浪費時間而是在 catalina.bat所在目錄中增加一個 setenv.bat
裡面打上
set "TITLE=Elie Server 1"
這樣用 startup啟動 tomcat後的 command prompt視窗的標題就會變成Elie Server 1
不只視窗左上角的標題欄,工作列 ICON上的文字也會變成Elie Server 1
全部最小化,誰是誰的誰依然是一目瞭然:Q
一堆人一起用,全安裝成 service也很煩
直接用 startup.bat啟動是個好方法
不過一堆 command prompt
又分不清楚哪個是誰的
command prompt有個指令可以設定視窗標題
command: title
example: title Elie Program
Elie Program: 自己想要的視窗標題
不用加引號, title後面的所有文字會全部被當成一個字串做為標題 ㄋ
環境: windows 7
至於 tomcat, catalina.bat中有如下說明
"Do not set the variables in this script. Instead put them into a script
setenv.bat in CATALINA_BASE/bin to keep your customizations separate.
.....
TITLE (Optional) Specify the title of Tomcat window.
......"
簡單說就是不要直接去改 catalina.bat
裡面打上
set "TITLE=Elie Server 1"
這樣用 startup啟動 tomcat後的 command prompt視窗的標題就會變成Elie Server 1
不只視窗左上角的標題欄,工作列 ICON上的文字也會變成Elie Server 1
全部最小化,誰是誰的誰依然是一目瞭然:Q
2014年7月17日 星期四
Play 操作使用筆記-安裝
Play framework 個人當它是一種 rails-lik開發工具
rails-like 我個人是指一種基於 CoC( Convension over Configuration) - 慣例先於設置的開發流程觀念.
事實上, Struts, Spring, Tapestry, ZK 寫久了, 很多人都會對一大堆設定檔感到厭倦.
不設不行, 設嗎其實都大同小異, 通常都是 copy 一段來改一下就搞定了.
是沒花多少時間啦, 但是像我這種大而化之(=粗心)的人也不是沒發生過手殘打錯設定檔內容, 然後 debug 好久的情形(不出則已, 一出通常就鬼打牆. 因為根本不會想從這邊找問題-潛意識認為錯誤不可能出現在設定-事後證明我的手真的挺殘低)
那麼有沒有甚麼方法, 可以讓我不要再跟這些枝微末節打交道了. 不過就寫個 MVC, 能不能讓我寫個 M, 寫個 V, 寫個 C 然後其他的就有人/ 工具替我代勞?現在網路對一些熱門事件不是很流行懶人包嗎? 用 framework 能不能也來個懶人包-替我們這些懶人把程式碼包一包.
ruby on rails- 不怎麼考慮, 對我來說像是另一個世界
Spring Roo- 網路上看了一下, 好像 trouble 還滿多低, 既然是懶人就不想多找麻煩了
Spring Groovy on Grails- 也有在玩. 主要是看上 Spring 用太多了. GoG 基本上就是 Spring 的懶人包(雖然也是有加入別家的東西啦)
Play- 正在玩(俗話說蛋不要放在一個籃子裡, 除了 Spring 這個籃子, 另外找個籃子玩)
OK. GO!!
1. 下載 Play.
Play 的原作者好像成立了家公司 Typesafe. 然後雖然看起來是下載 Play 2.3.1 including activator-1.2.3, 但是下載的程式叫作 typesafe-activator-1.2.3-minimal.zip, 解出來的 folder 叫做 activator-1.2.3-minimal. 害我以為我上了釣魚網站.
2.解壓縮到任意位置.
除了 typesafe-activator-1.2.3-minimal.zip, 還有個typesafe-activator-1.2.3.zip(300 多M)可下載.這個待會會提到.
3.設定 Path.
開始>電腦->右鍵選內容>進階電腦設定>環境變數->系統變數
JAVA_HOME
必須指向 JDK. JRE 不夠. ex.C:\Program Files\Java\jdk1.6.0_45
PATH
在 PATH 變數增加一個項目(PATH 中各個項目用分號分隔, 最後一個項目後面不需要分號, 也 就是不需要用分號結尾, 但是加了也沒差就是了).ex.E:\activator-1.2.3-minimal
4.測試安裝
開始>執行>cmd 或開始>所有程式>附屬應用程式>命令提示字元開啟一個 Command Line 視窗
key 入(key 完指令後按 enter 執行)
>javac -version
驗證 JDK
>java -version
驗證 JRE
>activator
會打開一個 html 說明文件(因為沒有指定要執行的命令)
Typesafe Activator Documentation
說明 activator 用法activator [options] [command]
ps. activator 算是一個前導指令, 真正要做甚麼事看後面的功能指令
>activator help
activator 使用略述
2014年4月9日 星期三
半自動解決瀏覽器憑證錯誤
senario: 佈署了 security HTTP後, user很不爽每次 IE都會出現憑證錯誤,是否繼續瀏覽然後得按繼續瀏覽才能進到頁面.
solution:
叫 user手動接受我們產生的自簽核憑證(sellf-signed certification).
不過,還是得處理一下我們的自簽核憑證才能順利讓 user接受憑證
錯誤訊息有三:
1.此網站出示的安全性憑證並非由信任的憑證授權單位所發行。
ans:這部份需要 user手動接受.首先,須將本網站加到信任的網站(網際網路選項>安全性>信任的網站,細節不贅述.然後點選網址列最右邊的憑證錯誤,在打開的視窗中點安裝憑證(先加信任網站才會有安裝憑證可以點),然後把憑證安裝到信任的憑證區.
2.此網站出示的安全性憑證已過期或尚未生效
ans:夠清楚了,憑證過期.那憑證如果是別人發行的,就只好檢查或改改自己的電腦時間.但是我們是發行者,憑證有效期限要多久我們自己可以決定.
keytool -genKey -keyalg RSA -alias <%aliasName%> -keystore <%keystore-path%> -storepass 1234qwer -validity 10000 -keysize 2048 -dname "CN=abc.com, OU=def, O=ghi, L=jkl, S=mno, C=pqr"
-validity 10000就是代表從下這個指令開始,產生的憑證在 10000天內有效:)
3.此網站出示的安全性憑證是為其他網站的位址所發行的
ans:上面那個 keytool指令, -dname中的 CN就是瀏覽器用來判斷"位址不符"的根據.把 CN改成自己的網址(不用加 https://)就符了.
solution:
叫 user手動接受我們產生的自簽核憑證(sellf-signed certification).
不過,還是得處理一下我們的自簽核憑證才能順利讓 user接受憑證
錯誤訊息有三:
1.此網站出示的安全性憑證並非由信任的憑證授權單位所發行。
ans:這部份需要 user手動接受.首先,須將本網站加到信任的網站(網際網路選項>安全性>信任的網站,細節不贅述.然後點選網址列最右邊的憑證錯誤,在打開的視窗中點安裝憑證(先加信任網站才會有安裝憑證可以點),然後把憑證安裝到信任的憑證區.
2.此網站出示的安全性憑證已過期或尚未生效
ans:夠清楚了,憑證過期.那憑證如果是別人發行的,就只好檢查或改改自己的電腦時間.但是我們是發行者,憑證有效期限要多久我們自己可以決定.
keytool -genKey -keyalg RSA -alias <%aliasName%> -keystore <%keystore-path%> -storepass 1234qwer -validity 10000 -keysize 2048 -dname "CN=abc.com, OU=def, O=ghi, L=jkl, S=mno, C=pqr"
-validity 10000就是代表從下這個指令開始,產生的憑證在 10000天內有效:)
3.此網站出示的安全性憑證是為其他網站的位址所發行的
ans:上面那個 keytool指令, -dname中的 CN就是瀏覽器用來判斷"位址不符"的根據.把 CN改成自己的網址(不用加 https://)就符了.
tomcat+struts url querystring中文編碼解碼
senario: xmlhttprequest GET傳送含中文資料到 action, AP Server tomcat 6.x, struts 1.x
solution:
1. url path沒有中文,只有傳遞的參數有中文,所以對參數做 encodeURIComponent
2. tomcat \conf\server.xml中 Connector並未設定 URIEncoding屬性(因此為預設值 ISO-8859-1)
3. request.getParameter 會做 URLDecode, 但是因為 2., 所以得到的中文是 ISO-8859-1編碼
4.對request.getParameter重新編碼就拿到想要的 utf-8 encoded string
new String(req.getParameter("xxx").getBytes("ISO-8859-1"), "utf-8");
solution:
1. url path沒有中文,只有傳遞的參數有中文,所以對參數做 encodeURIComponent
2. tomcat \conf\server.xml中 Connector並未設定 URIEncoding屬性(因此為預設值 ISO-8859-1)
3. request.getParameter 會做 URLDecode, 但是因為 2., 所以得到的中文是 ISO-8859-1編碼
4.對request.getParameter重新編碼就拿到想要的 utf-8 encoded string
new String(req.getParameter("xxx").getBytes("ISO-8859-1"), "utf-8");
2014年3月19日 星期三
jquery 五種取 selected text的方法
console.log($('select[name="leave_type_auto_id"] option:selected').text());
console.log($('select[name="leave_type_auto_id"] option').filter(':selected').text());// optimized(maybe)
console.log($('select[name="leave_type_auto_id"]').children().filter(':selected').text());
console.log($('select[name="leave_type_auto_id"]').children('option').filter(':selected').text());// fastest(maybe)
console.log($('select[name="leave_type_auto_id"]').children('option:selected').text());
console.log($('select[name="leave_type_auto_id"]').children(':selected').text());// fastest(maybe)
有篇比較各種 selector速度的測試
http://jsperf.com/get-selected-option-text
console.log($('select[name="leave_type_auto_id"] option').filter(':selected').text());// optimized(maybe)
console.log($('select[name="leave_type_auto_id"]').children().filter(':selected').text());
console.log($('select[name="leave_type_auto_id"]').children('option').filter(':selected').text());// fastest(maybe)
console.log($('select[name="leave_type_auto_id"]').children('option:selected').text());
console.log($('select[name="leave_type_auto_id"]').children(':selected').text());// fastest(maybe)
有篇比較各種 selector速度的測試
http://jsperf.com/get-selected-option-text
2014年3月12日 星期三
懶得寫 bean. java內建的 key value paire.
java.util.AbstractMap.SimpleEntry<K, V>(K, V).
腦袋一下轉不過來,一直無法建構
new java.util.AbstractMap.SimpleEntry<Integer, String>(new Integer(1), "foo");
腦袋一下轉不過來,一直無法建構
new java.util.AbstractMap.SimpleEntry<Integer, String>(new Integer(1), "foo");
2014年2月14日 星期五
Win7下 eclipse註解字型太小
網路上搜尋了一下,主要是因為字型的關係, 而非 font size.
eclipse - Window> Preferences> General> Appearance> Colors and Fonts> Java,選中Java Editor Text Font,點 Edit,把字型改成 Courier New就 OK了
如果點 Edit後字型沒 Courier New可選,在作業系統 - 控制台>外觀及個人化>字型,找到 Courier New右鍵選單選顯示,回 eclipse就有 Courier New可選了
eclipse - Window> Preferences> General> Appearance> Colors and Fonts> Java,選中Java Editor Text Font,點 Edit,把字型改成 Courier New就 OK了
如果點 Edit後字型沒 Courier New可選,在作業系統 - 控制台>外觀及個人化>字型,找到 Courier New右鍵選單選顯示,回 eclipse就有 Courier New可選了
訂閱:
文章 (Atom)