2009年10月28日 星期三

Inner class

為什麼需要inner classes?

一般來說, inner class 會繼承某個class或實作某interface, 而且inner class內的程式碼會操作
其outer class物件. 所以也可以講, inner class所提供的其實是針對outer class的某個窗口.

但如果我只需要"指向某個interface"的reference, 為什麼不直接讓outer class實作interface就好?
若這麼做符合需求, 就這麼做. 那麼由inner class實作interface與outer class實作的區別在那呢?
後者比較沒享受到interface的便利性.所以

    每個inner class 都能夠各自extends某一個實作類別(implementation).因此, inner class不受限
    於outer class是否已extends自某一類別.
   
inner class所提供的"繼承自多個具象(concrete)或抽象(abstract)類別"的能力, 可說是多重繼承問題的解決方案.

2009年10月27日 星期二

JQuery - Radio


不知道哪個版本了, 動態的把選取的值取出
$('input:checked[name="xxx"]').val();
$("input[name='privacy.info_freq']").click(function(){ } 綁定後, 用 $(this).val() 
$("input[name=xxx][@type=radio]").attr("checked",'2'); //把位置2 的值 checked
$("input:[name='xxx']:nth(1)").attr("checked","true");
$('input[name=xxx]').get(0).checked //檢查是否選取, 回傳boolean, 也可直接 = 給值
$("#xxx").attr("disabled", "true"); //針對某id來disabled
$("input[name=xxx][@type=radio]").attr("disabled","true"); //這name的radio全部disabled
$("input[name=xxx][@type=radio]").attr("disabled",""); //這name的radio全部 enabled
1.7 的版本如下:

當radio同一個名稱, 且有好幾個的時候要如何指定當中的某一個為 checked,

注意 : 0 為第一個
    $j('input[name="role"][@type=radio]').get(0).checked = true;
    $j('input[name="role"][@type=radio]:nth(0)').attr("checked", true)
    $j('input[name="role"][@type=radio]').first().attr("checked", true);
    $j('input[id="changeRole"][@type=radio]:first').attr("checked", true);    

2009年10月23日 星期五

com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException

頁面上使用jquery的ajax去call struts2的action


    $.ajax({
        url: 'xxxAtion.html',
        type: 'post',
        data: {
            'id' : "todd",
        },
        dataType: 'json',
        success: function(response, status) {
            var resultMessage = response.resultMessage;
            var resultStatus = response.status;
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("系統繁忙, 請稍後再試!");
        }
    });


在action要return回去時, 不管怎樣都是跑到error

jquery的errro回傳textStatus寫 parsererror,
但發現吐回來的content有 com.googlecode.jsonplugin.JSONException


後來原因是 action中, 由spring去注入的xxxDAO, 寫了getxxxDAO, 拿掉就可以了

參考:
出現這種情況是在使用json-plugin時,一些不需要串行化的屬性被序列化了 比如spring 注入的 services生成了getter、序列化ID生成了getter等等 ,json plugin會把有getter方法的屬性序列化,格式化為json串 。解決辦法:可以去掉getter或者在getter上加上@JSON(serialize=false)

2009年10月15日 星期四

Hibernate - Native SQL

小胖老師真厲害, 受教了~

1.left outer join



final String sql = "SELECT A.* FROM xxx A LEFT JOIN xxx B
ON A.xxx = B.xxx WHERE B.xxx = ?";

List result = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
List list = (List)session.createSQLQuery(sql)
.addEntity("A", MyFriendDynamic.class)
.setString(0, userId)
.list();
return list;
}
});
return result;



2. select count(*) from xxx



final String sql = "SELECT count(*) as count FROM xxx A LEFT JOIN xxx B
ON A.xxx = B.xxx WHERE B.xxx = ?";

Integer count = (Integer) getHibernateTemplate().execute(
new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Integer query = (Integer)session.createSQLQuery(sql)
.addScalar("count", Hibernate.INTEGER)
.setString(0, userId)
.uniqueResult();
return query;
}
});
return count;

2009年10月1日 星期四

Jmeter 基礎設定

如何測試:
  • ~/jakarta-jmeter-2.3.3/TestPlan.jmx
  • ~/jakarta-jmeter-2.3.3/Data.txt
  • sh jmeter -n -t ~/jakarta-jmeter-2.3.3/TestPlan.jmx -l log.jtl

參考:
  • -n 這是在無界面模式運行JMeter
  • -t [包含測試計劃的JMX文件的名字]
  • -l [記錄取樣結果的JTL文件的名字]
  • -r 運行在JMeter property文件裡所有的」遠程服務器」的測試
  • -R [遠程服務器的名單]運行制定的遠程服務器的測試
  • 這個腳本也允許你指定可選的防火牆/代理服務器信息:
  • -H [代理服務器主機名或者ip地址]
  • -P [代理服務器端口]
  • 例子 : jmeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000

如何分佈式測試:

服務端:
要作為Agent的電腦,必須執行JMeter的bin目錄下, jmeter-server.bat(Windows)或jmeter-server (Liunx下,Bash),這會啟動Agent的RMI服務,預設使用1099作為連接埠,您可以在Agent的電腦中JMeter的bin目錄中,找到jmeter.properties檔案中的server_port進行設置。

為開啟服務器,在每一台主機運行jmeter-server/jmeter-server.bat
jmeter -server

log:
jmeter-server.log

客戶端:
jmeter -n -t testplan.jmx -r [-Gprop=val] [-Z]
  • -G is used to define JMeter properties to be set in the servers
  • -X means exit the servers at the end of the test //測試結束就關掉server
  • -R server1,server2 - can be used instead of -r to provide a list of servers (overrides remote_hosts)

而要作為Controller的電腦,可以打開jmeter.properties檔案,找到remote_hosts選項,預設是設定為127.0.0.1,您可以設置為Agent的電腦並指定連接埠
例如:remote_hosts:192.168.0.3:1099,192.168.0.9:2010

jmeter還有好多測試種類可以選@@

好文章:
http://jakarta.apache.org/jmeter/usermanual/get-started.html
http://www.ibm.com/developerworks/cn/opensource/os-pressiontest/
http://www.cnblogs.com/jackei/archive/2006/11/13/558720.html