Category Archives: Java

Glassfish 4 安裝 SSL certificate

Glassfish4 的憑證存放在 <glassfish 安裝目錄>/glassfish/domains/domain1/config 目錄內,先用以下指令匯入 CA 憑證

keytool -import -trustcacerts -alias myca -file ca.cer -keystore cacerts.jks

再利用以下指令匯入 server 憑證

keytool -importkeystore -srckeystore myserver.p12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS

匯入之後用 keytool -list -keystore keystore.jks 指令確認匯入憑證在 keystore 內的 alias

登入 admin console 後在選單 Configurations > server-config > HTTP Service > Http Listeners > admin-listener 設定的 SSL 頁籤把 Certificate NickName 改為剛才查到的 alias (預設為 ‘s1as’) 儲存後重新啟動 glassfish server 即可

備註:

  1. keystore 預設密碼為 changeit
  2. 匯出的 .p12 檔密碼似乎必須與 keystore 密碼相符
  3. glassfish 的 http-listener-2 是有 SSL 的 8181 port,設定憑證方式跟 admin console 相同
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Eclipse 4.5、Maven、SVN、Web project 問題

起因

從 SVN checkout 一個 Maven project,project 包含 EAR、JPA、Web 3 個子專案,eclipse 顯示以下錯誤

JavaServer Faces 2.0 requires Dynamic Web Module 2.5 or newer

這時候去 eclipse 的 project facets 把 Dynamic Web Module 選項改成 2.5 以上又不給改

解法

不能把 Dynamic Web Module 改成 2.3 以上是因為 Maven 建出來的 web.xml 長這樣

<!DOCTYPE web-app PUBLIC
“-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”
“http://java.sun.com/dtd/web-app_2_3.dtd” >

<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>

把 web.xml 改成這樣

<web-app xmlns=”http://java.sun.com/xml/ns/javaee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd”
version=”3.0″>
<display-name>Archetype Created Web Application</display-name>
</web-app>

跑一次 Maven update 後去 eclipse 的 project facets 把 Dynamic Web Module 選項改成 3.0 還是不給改,這時候先把 Dynamic Web Module 的 checkbox 清掉按 Apply,然後勾選 Dynamic Web Module 後再按一次 Apply,再跑一次 Maven update 錯誤就消失了

註: JSF project 在 Eclipse 4.6.3 有一樣問題,解決方法是在 Eclipse 選單 Window > Preferences > Maven > Java EE Integration 把 JSF Configurator 選項清掉,然後再重新 checkout project

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

JavaFX 8 TableView tips

TableView 的最後一列沒有出現

用 SceneBuilder 修改 TableView -> Layout -> Pref Height,目前遇過這個數字設大於 container 元件的 height,結果最後一列無法 render 出來

資料加進 TableView 的 ObservableList 但是畫面沒有顯示

之前的版本好像要用 workaround 來解決,現在用 TableView 的 refresh() method 即可

變更資料列的顏色

mytable.setRowFactory(myRowFactory());

private Callback myRowFactory() {
return new Callback<TableView<MyModel>,TableRow<MyModel>>() {
public TableRow<MyModel> call(TableView<MyModel> tv) {
final TableRow<MyModel> row=new TableRow<MyModel>() {
@Override
protected void updateItem(MyModel model, boolean empty) {
super.updateItem(model, empty);
if ( ! isWantedModel(model) ) {
getStyleClass().removeAll(Collections.singleton(“myModelCSS”));
} else {
getStyleClass().add(“myModelCSS”);
}
}
};
return row;
}
};
}

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Java applet 小技巧

使用外部 library

applet tag 的 archive 可以接受多個 jar 檔,用 comma 分隔即可

java.lang.UnsatisfiedLinkError: Native Library xxx already loaded in another classloader

當 applet 使用 JNI DLL 時, 執行 applet 的 VM 可以載入 DLL 但是沒有可靠的方法卸載 DLL,這會造成 A 頁面載入 applet 後,B 頁面要再載入執行同一支 applet 時出現以上錯誤。

網路上有利用 CustomClassLoader 跟 System.gc() 來達成,但是比較複雜,比較簡單的作法是讓 applet 在不同 VM 執行以避開這個問題,作法是在 applet tag 加上以下參數

<param name=”separate_jvm” value=”true”>

 

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...