請參照
http://news.newhua.com/news1/programming/2008/416/0841694745JE2G518HGK5II2I9AEGGAH3AKH8AKJ07E6FIA5KICF88H.html
2008年11月7日 星期五
為何不要用複合主鍵來設計資料庫?
現在終於知道為何不要使用複合主鍵了 。
這是為了將資料結構層與業務邏輯層切割 ,
令業務邏輯的異動影響底層資料結構的程度降到最低 。
除非是legacy(遺留系統)的情況 。
由於沒有多餘心力再去變更它,所以只能順著原設計來應用。
這是為了將資料結構層與業務邏輯層切割 ,
令業務邏輯的異動影響底層資料結構的程度降到最低 。
除非是legacy(遺留系統)的情況 。
由於沒有多餘心力再去變更它,所以只能順著原設計來應用。
2008年10月22日 星期三
[備忘記]How to change web port number in Jboss AP Server?
如果我需要同時間在主機上執行兩個以上的 JBoss AP Server,那應該要改動哪些檔案內的 port number 設定?
環境:JBoss AP Server 4.2.3
$JBOSS_HOME 安裝資料夾 (例如: C:\jboss-4.2.3.GA)
參考網站:
http://davide-ficano.sourceforge.net/java/jboss.html
http://www.thedance.net/~roth/TECHBLOG/jbossports.html
http://lijinjoseji.wordpress.com/2008/02/15/how-to-change-post-number-in-jboss-app-server/
環境:JBoss AP Server 4.2.3
$JBOSS_HOME 安裝資料夾 (例如: C:\jboss-4.2.3.GA)
$JBOSS_HOME/server/default/deploy/jbossweb-tomcat50.sar/server.xml | |
| Portnumber | Service |
| 8080 | webserver |
| 8009 | ajp13 |
| 8443 | ssl |
$JBOSS_HOME/server/default/conf/jboss-service.xml | |
| Portnumber | Service |
| 8083 | WebService |
| 1099 | NamingService |
| 1098 | NamingService |
| 4444 | RMIObjectPort |
| 4445 | ServerBindPort |
| $JBOSS_HOME/server/default/deploy/jms/uil2-service.xml | |
| Portnumber | Service |
| 8093 | UILServerILService |
參考網站:
http://davide-ficano.sourceforge.net/java/jboss.html
http://www.thedance.net/~roth/TECHBLOG/jbossports.html
http://lijinjoseji.wordpress.com/2008/02/15/how-to-change-post-number-in-jboss-app-server/
2008年10月20日 星期一
2008年10月9日 星期四
[備忘記]Java 如何製作亂數產生的密碼
public String makePassword(int passwordLength){
//密碼的字符表(可以亂排,至於要不要有特殊字元就看後續的處理可否允許特殊字元的輸入)
char[] word =
{'a','b','c','d','e','f',
'g','h','i','j','k','L',
'm','0','n','o','1','2',
'3','p','4','q','5','r',
's','6','t','7','u','v',
'8','w','x','9','y','z'};
byte[] randomNumber = new byte[passwordLength];
new Random().nextBytes(randomNumber);
StringBuilder password = new StringBuilder();
for(int i = 0; i < randomNumber.length; i++){
password.append(word[Math.abs(randomNumber[i]) % word.length]);
}
return password.toString();
}
//密碼的字符表(可以亂排,至於要不要有特殊字元就看後續的處理可否允許特殊字元的輸入)
char[] word =
{'a','b','c','d','e','f',
'g','h','i','j','k','L',
'm','0','n','o','1','2',
'3','p','4','q','5','r',
's','6','t','7','u','v',
'8','w','x','9','y','z'};
byte[] randomNumber = new byte[passwordLength];
new Random().nextBytes(randomNumber);
StringBuilder password = new StringBuilder();
for(int i = 0; i < randomNumber.length; i++){
password.append(word[Math.abs(randomNumber[i]) % word.length]);
}
return password.toString();
}
2008年10月8日 星期三
[備忘記]iReport Plugin Eclipse
iReport 版本:3.0.0
Eclipse 版本:3.3
local 端安裝:
1.下載 ireport(iReport-3.0.0-windows-installer.exe) 檔案:http://jasperforge.org/plugins/project/project_home.php?group_id=83
2.安裝該 exe 檔至指定目錄下。
3.開啟 Eclipse 執行 help → Software Updates → Find and Install
4.選擇 Search for new features to install
5.選擇 new Local Site
6.指定剛剛安裝 iReport 的目錄內的 eclipse\com.jaspersoft.ireport.eclipse.update 為來源目錄
7.執行接下來的安裝步驟即可
p.s.不使用 rem update 方式安裝是因為無法正確連結到 http://www.jasperforge.org/update
Eclipse 版本:3.3
local 端安裝:
1.下載 ireport(iReport-3.0.0-windows-installer.exe) 檔案:http://jasperforge.org/plugins/project/project_home.php?group_id=83
2.安裝該 exe 檔至指定目錄下。
3.開啟 Eclipse 執行 help → Software Updates → Find and Install
4.選擇 Search for new features to install
5.選擇 new Local Site
6.指定剛剛安裝 iReport 的目錄內的 eclipse\com.jaspersoft.ireport.eclipse.update 為來源目錄
7.執行接下來的安裝步驟即可
p.s.不使用 rem update 方式安裝是因為無法正確連結到 http://www.jasperforge.org/update
標籤:
eclipse plugin,
ireport
2008年9月24日 星期三
[備忘記]如何做密碼編碼?
方法1(使用 seam api):
import org.jboss.seam.security.digest.DigestUtils;
public String hash(String password){
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法2(使用 Apache Jakarta 專案的 Commons codec):
import org.apache.commons.codec.digest.DigestUtils;
public String hash(String password){
//1.3版的只有提供 MD5、SHA 的編碼,如果想要完整的 SHA 編碼,請下載 1.4-snapshot
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法3(使用 java api + seam api):
import java.security.MessageDigest;
import org.jboss.seam.util.Hex;
public String hash(String password){
try{
//MessageDigest 可傳入的演算法參數有 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512
MessageDigest md = MessageDigest.getInstance("MD5");
//字串轉 byte 可指定不同的 charsetName,但其中的差異要傳入的 password 非單純的英數字組合才看的出來
md.update(password.getBytes("Big5"));
return new String(Hex.encodeHex(md.digest()));
}catch(Exception e){
throw new RuntimeException(e.getMessage());
}
}
import org.jboss.seam.security.digest.DigestUtils;
public String hash(String password){
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法2(使用 Apache Jakarta 專案的 Commons codec):
import org.apache.commons.codec.digest.DigestUtils;
public String hash(String password){
//1.3版的只有提供 MD5、SHA 的編碼,如果想要完整的 SHA 編碼,請下載 1.4-snapshot
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法3(使用 java api + seam api):
import java.security.MessageDigest;
import org.jboss.seam.util.Hex;
public String hash(String password){
try{
//MessageDigest 可傳入的演算法參數有 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512
MessageDigest md = MessageDigest.getInstance("MD5");
//字串轉 byte 可指定不同的 charsetName,但其中的差異要傳入的 password 非單純的英數字組合才看的出來
md.update(password.getBytes("Big5"));
return new String(Hex.encodeHex(md.digest()));
}catch(Exception e){
throw new RuntimeException(e.getMessage());
}
}
訂閱:
文章 (Atom)