jqueryMobile 下載檔案注意事項

Posted on June 26th, 2017

jQuery Mobile 下載一般檔案 data-ajax="false"

```
```

M版 Spring MVC 排程設定

Posted on June 26th, 2017


M版 Spring MVC 排程設定



public class UpdatexxxxxTask {

@Scheduled(fixedDelay = 30000)
public void execute() {
try {
dosomething
} catch (Exception e) {
ApLog.error(e.getMessage(), e);
}
}
}

1.新增一個 CLASS 和 METHOD 並利用 ANNOTATION 增加要執行的排程

a. @Scheduled(fixedDelay = 30000)
執行完才會執行下一次(ms)

b. @Scheduled(fixedRate=5000)
不管這次執行是否完成,時間到了即執行下一次

c. @Scheduled(cron="*/5 * * * * MON-FRI")
同b, cron 的排程時間到了立即執行

2.在 SPRING-QUARTZ.XML 增加 BEAN

參考: src/main/resources/spring/spring-quartz.xml

3.可能存在的問題:

目前沒有特別設定哪一台機器要跑, 應該 critical, master, slaves 都會執行.
未來 task 更多、或是有需要指定機器執行時,可能需要類似 web 版獨立設定。

apache mod_jk @ MacOS Worker 設定問題

Posted on March 14th, 2017

在 mod_jk 的 log 發現 localhost 無法解析等相關錯誤訊息

嘗試把 workers.properties 中連到 tomcat 的 IP(port 8009那個) 從 localhost 改為 127.0.0.1 後

就可以讓 Apache 的 mod_jk 和 tomcat 順利整合了


P.S. 猜測可能原因: tomcat listen 的 ip 只有 127.0.0.1 並不包含 localhost

macOS Sierra 10.12 安裝 apache mod_jk

Posted on February 16th, 2017

###如何在 macOS Sierra 10.12 正確安裝 apache mod_jk

##編譯 mod_jk.so


cd ~/Desktop/tomcat-connector-source/native

./configure CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/usr/sbin/apxs

make

sudo make install

* 第一步的 configure 可能會遇到 apxs path not found 的問題, 解決方式:

用 homebrew 安裝 apache24: brew install apache

--with-apxs 指定到 homebrew 安裝的 apache 位址(太長忘了), 大概就能正確 configure 了

--with-apxs=/usr/local/Cellar/apache/apache24...

* 如果還有 apxs 的問題, 可以執行 apxs -q 看看有少什麼套件

將make 好的 mod_jk.so 搬到原本的(homebrew的) apache libexec 下

5) Copy created mod_jk.so:

cp /usr/libexec/apache2/mod_jk.so /Applications/Coldfusion10/config/wsconfig/1/mod_jk.so

btw. 如果要使用 brew 的 apache 記得更換symbolic link ln -s

參考:


struts1 中 DispatchAction 繼承 execute 執行順序

Posted on February 16th, 2017

地雷時間: 8小時(一個工作天) :(((

假設

StoreManageBaseAction extends DispatchAction


StoreManageIndexAction extends StoreManageBaseAction

當 execute 被執行時,
會優先執行父類別的 execute(), 才執行子類別指定的 method


例如:
要執行 StoreManageIndexAction.index(),
會先執行完 StoreManageBaseAction.execute() 才執行 StoreManageIndexAction.index()



PostgreSQL pgSQL 終止沒有回應的 Query

Posted on November 24th, 2016


由於對較大的 Table 執行 update SQL 可能因為網路環境等因素, 造成沒有回應,
所以不用 GUI 操作, 用 CLI 操作, 當然有時候還是會卡住, 結果即使用 psql.exe 還是每次都卡住...

問題可能是因為 網路?

C:\pgAdminIII\1.22\psql.exe -U username -h 60.xxx.xxx.xxx -d dbname -a -f a.sql -L a.log

另外, 可以透過 SQL 來查詢目前正在執行的 Query

SELECT * FROM pg_stat_activity ;

可以看 datname, application_name, state=Idle 欄位值



查詢後, 如果遇到想要中止的 Query 可以:


SELECT pg_cancel_backend(pid); 或 SELECT pg_terminate_backend(pid); // like force

MSSQL varchar, nvarchar 預設長度 30

Posted on April 15th, 2016

MSSQL varchar, nvarchar 預設長度 30

nvarchar, varchar 不給長度時, 有預設 30 的限制

以後記得, 所有對資料庫欄位的 update, 都應該要備份, 以確保不會有慘劇發生…

  • 方法1: 新增一個備份用的欄位, 將值 copy 過去
  • 方法2: 直接對資料庫備份
2016/04/15 某案子得到的教訓…

兩顆沒碰過的地雷 Oracle Sequence, Lucene lock file

Posted on March 9th, 2015

  1. lucene 在操作時會在 temp 目錄產生一個 lucene*.lock
    若程式被異常終止後, 導致該檔案沒有沒刪除, 會讓 lucene 幾乎整個壞掉, 因為每次要 query 或建 index 時, 遇到 .lock 檔時, 操作皆會被 lucene 擋下來

暫時的解決方案

 - 透過每次啟動時, 去清除 temp 目錄底下所有的 `lucene*.lock` 檔,

  1. Oracle DB 某張 Table 不明原因導致當前 Sequence 小於已經存在資料的 Sequence, 讓新資料想要 insert 不能, 因為 Sequence 不能重複

暫時的解決方案

 - 透過 Oracle 查看該 Table 的 Sequence 到多少了,
documentviewlog_seq
.
currval
 from 
dual

並比對存在資料的 Sequence, 最後透過 nextval 來增加到比已經存在的資料多 1 個序號, 應該就會正常了

nextval 每次 insert 之後, sequence 就會直接 +1
若要用 currval 之前, 必須先用 nextval select 一次
documentviewlog_seq
.
nextval
 from 
dual

Oracle 資料庫密碼過期相關指令

Posted on February 26th, 2015

  1. 密碼過期時就得修改密碼 , 否則該帳號將無法使用:

    ALTER USER "使用者名稱" IDENTIFIED BY "新密碼" REPLACE "舊密碼"

  2. 查詢 Default user profile 的密碼期限: (預設是 180 天)
    SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

  3. 查詢 user 是哪一種 profile: (預設應該都是 default)
    SELECT username,PROFILE FROM dba_users;

  4. 修改 default user profile 密碼過期的時間 (這邊改為無限制: UNLIMITED)
    ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

注意:

  • 按照 第4點 的修改 user profile 會降低帳號的安全性, 因為原本預設是 180 天密碼到期, 期至便須修改密碼, 改無限制意思是永遠不會過期. (所以我只用在開發用的機器上, 產品或客戶的資料庫不要用)

參考資料:

  1. Oracle 11g密碼過期問題 ORA-28002

  2. Oracle 11g存在密碼過期問題


OutOfMemoryError Occurs when allocate a big Byte Array

Posted on February 6th, 2015

今天遇到另一個 Java 的地雷,

而且一個非常簡單的一個程式碼就會吐出 OOM 錯誤:

java.lang.OutOfMemoryError: Java heap space

int fileLength = 170 * 1024 * 1024;
byte[] b2 = new byte[fileLength];

Array 不能且不應該產生這麼長的 instance, 因為會超過 java 的 default heap size.

當然可以去改 jvm 參數將 heap size 加大,
但這並不是一個長遠之計,
改天再遇到更大的檔案一樣會 OOM

這次因為想要打亂檔案的 header ,
所以求快直接使用這種方法比較簡單... 囧

參考資料:

修改方法

  • 修改前
    byte[] b2 = new byte[b.length]; for (int i = 0; i < b.length; i++) { b2[i] = (byte) (b[i] + k); } return b2;
  • 修改後(利用 buffer 來改)
abc

Liullen

Notes from my experience.