目前分類:未分類 (48)

瀏覽方式: 標題列表 簡短摘要
參考資料來源 http://blog.abeliu.tw/?p=210

參考來源2 : http://huangsb.blogspot.tw/2010/03/windows-grep-findstr.html

例如要unlock整個Repositories 下特定的建構項目

可以使用lslocks + findstr 過濾找出被lock的檔案

C:\Program Files (x86)\VisualSVN Server\bin>svnadmin lslocks F:\SVNRepositories\
21201000 | findstr "學生線上請假系統"

用notepad ++ 使用一次選多行的方式將 alt + shift

Path: /trunk/學生線上請假系統/系統開發/xxx

轉換成以下指令

 

然後用rmlock解lock

svnadmin rmlocks F:\SVNRepositories\21201000 /trunk/學生線上請假系統/系統開發/xxx

migasun 發表在 痞客邦 留言(0) 人氣()

http://enrui-zhang.blogspot.tw/2011/01/vmware-converter-lampp.html

 

這次轉換的目標是一台CentOS,利用VM Converter進行轉換後,啟動LAMPP出現
/opt/lampp/bin/php: error while loading shared libraries: /opt/lampp/lib/libsybdb.so.5: cannot restore segment prot after reloc: Permission denied


照理來說用converter轉移,應該是所有環境都轉移過來,但是此問題卻是SELINUX引起的,先不討討產生的原因,以解決眼前問題為主,稍微google了一下,將所有*.so的檔案都變更過,指令如下...

find . -name '*.so' | xargs chcon -t texrel_shlib_t

再重新 lampp start

DONE!

xargs 指令參考  http://blog.yam.com/ddy1280/article/13941218

migasun 發表在 痞客邦 留言(0) 人氣()

  • Dec 14 Fri 2012 16:59
原文:http://blog.xuite.net/tolarku/blog/58439089-Postfix+Mail+Queue+-+%E4%B8%80%E4%BA%9B%E7%B0%A1%E5%96%AE%E7%9A%84%E7%AE%A1%E7%90%86%E6%8C%87%E4%BB%A4

 

在 UNIX 的寄信程式不論是  Sendmail 或是 Postfix 都有處理「當信件無法即時寄出」的方法,簡單的來說就是 Mail Queue (郵件佇列),底下就簡單的來說說一些指令,怎麼來觀看並處理 Mail Queue.

※ 查看卡在 mail queue 的信件 
mailq
postqueue -p

※ Mail Queue 所在的目錄 
/var/spool/mqueue
/var/spool/postfix -- 底下列出 postfix 的子目錄

》active
目前正在準備發送的信件。(在 message id 後會多加一個 * 號)
Messages  that  the  queue  manager  has opened for delivery. Only a  limited  number  of  messages  is allowed  to  enter  the  active queue (leaky bucket strategy, for a fixed delivery rate).

》bounce
每一位收件者的傳送狀態,並記載為何會被退信
Per-recipient status information about why mail  is bounced.    These   files  are  maintained  by  the bounce(8) daemon.

》corrupt
信件損毀導致無法傳送的信件
Unreadable  or  damaged  queue files are moved here for inspection.

》defer
暫時無法被傳送的信件,並記載為何會被延遲傳送。這種情形最常發生在你的 Mail Server 被列入灰名單(GrayList)的時候,你會看到訊息為「 Your access to this mail system has been rejected due to the sending MTA's poor reputation. If you believe that this failure is in error, please contact the intended recipient via alternate means.」
Per-recipient status information about why mail  is delayed. These files are maintained by the defer(8) daemon.

》deferred
無法被傳送的信件會放置在此目錄,但 Mail Server 還是會嘗試幫你繼續送,只是必須等 Backoff time。
Mail that could not be  delivered  upon  the  first attempt.  The  queue manager implements exponential backoff  by  doubling  the  time  between  delivery attempts.

》hold
被暫時停止發送的信件,如要發送出去,需要由手動(在 message id 後會多加一個 ! 號)
Messages that are kept  "on  hold"  are  kept  here until someone sets them free.

》incoming
從外部或本地寄送到本機的信件。
Inbound mail from the network, or mail picked up by the local pickup(8) daemon from the maildrop directory.

※ 刪除所有在 Mail Queue 中所有的信件 ※※※

rm /var/spool/mqueue
postsuper -d ALL
不建議這麼做,除非你真的清楚知道你不要所有的信件!

※ 刪除所有在 deferred 狀態的信件 ※※※

因為 /var/spool/postfix/deferred 目錄下尚有 0~F 的子目錄,所以不好用 rm 一次將他清空,故系統有提供指令方式幫助你清理 deferred 下的信件

1. postsuper -d ALL deferred
後面帶的 deferred 是 queue_id ,所以你也可以用這個方法來清除其他的 queue
2. find /var/spool/postfix/deferred -type f -exec rm -vf \{\} \;
這個方法是用 find 找出該目錄下所有的檔案,找到後丟給後面的 rm 去做刪除的動作。

3. find /var/spool/postfix/deferred/  -type f -exec mv -vf \{\} /backup/mqueue/deferred/ \;
小弟建議用這個方法!這方法同第二種,只不過他不直接殺,而是將 deferred 的信件搬移到你指定的目錄去,例如例子中的 /backup/mqueue/deferred/,萬一有啥問題還可以救回來。(註:最後的 \; 不能省略唷!)

※ 刪除過了 5天仍被放在 deferred 還是寄不出去的信件 ※※
1.  find /var/spool/postfix/deferred -type f -mtime +5 -exec rm -f \{\} \;
2.  find /var/spool/postfix/deferred -type f -mtime +5 -exec mv -vf \{\} /backup/mqueue/deferred/ \;

※ 刪除來自於 xxx@123.com 的信件 ※※
通常我們都會開放「認證」的使用者在單位以外的地方,透過 mail server 發送信件,但萬一某個使用者帳號被盜用後,這個方便將是非常大的傷害,你會發現你的 mail queue 裡怎麼會有那麼多,不是自己 domain e-mail 所發出的信件。

刪除特定 e-mail 寄送的信件
mailq | grep "xxx@123.com" | cut -d " " -f1 | cut -d’*’ -f1 | postsuper -d -
--------------------------------------------------------------------------------------
mailq 列出 queue
grep 找特定人事
cut -d" " -f1 取出第一個欄位 message_id
cut -d"*" -f1 去掉星號 * (因為若該訊息是在 active queue 會多個 *)
postsuper -d - 刪除前面所取出來的  message_id

刪除特定文字的訊息

/usr/sbin/postqueue -p | grep "MAILER-DAEMON" | cut -d " " -f1 | cut -d"*" -f1 | /usr/sbin/postsuper -d -
-------------------------------------------------------------------------------------

※ qmgr 是postfix 處理 mail queue 的 daemon ※※
說明請看 http://www.postfix.org/qmgr.8.html

migasun 發表在 痞客邦 留言(0) 人氣()

http://www.linuxforum.net/books/UTF-8-Unicode.html

UTF-8 有一下特性:

  • UCS 字元 U+0000 到 U+007F (ASCII) 被編碼為位元組 0x00 到 0x7F (ASCII 相容). 這意味著只包含 7 位元 ASCII 字元的檔在 ASCII 和 UTF-8 兩種編碼方式下是一樣的.

  • 所有 >U+007F 的 UCS 字元被編碼為一個多個位元組的串, 每個位元組都有標記位元集. 因此, ASCII 位元組 (0x00-0x7F) 不可能作為任何其他字元的一部分.

  • 表示非 ASCII 字元的多位元組串的第一個位元組總是在 0xC0 到 0xFD 的範圍裡, 並指出這個字元包含多少個位元組. 多位元組串的其餘位元組都在 0x80 到 0xBF 範圍裡. 這使得重新同步非常容易, 並使編碼無國界, 且很少受丟失位元組的影響.

  • 可以編入所有可能的 231個 UCS 代碼

  • UTF-8 編碼字元理論上可以最多到 6 個位元組長, 然而 16 位元 BMP 字元最多只用到 3 位元組長.

  • Bigendian UCS-4 位元組串的排列順序是預定的.

  • 位元組 0xFE 和 0xFF 在 UTF-8 編碼中從未用到.


下列位元組串用來表示一個字元. 用到哪個串取決於該字元在 Unicode 中的序號.

U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
10xxxxxx

xxx 的位置由字元編碼數的二進位表示的位元填入. 越靠右的 x 具有越少的特殊意義.
只用最短的那個足夠表達一個字元編碼數的多位元組串. 注意在多位元組串中, 第一個位
元組的開頭"1"的數目就是整個串中位元組的數目.
例如: Unicode 字元 U+00A9 = 1010 1001 (版權符號) 在 UTF-8 裡的編碼為:
11000010 10101001 = 0xC2 0xA9
而字元 U+2260 = 0010 0010 0110 0000 (不等於) 編碼為:
11100010 10001001 10100000 = 0xE2 0x89 0xA0
這種編碼的官方名字拼寫為 UTF-8, 其中 UTF 代表 UCS Transformation Format. 請勿
在任何文檔中用其他名字 (比如 utf8 或 UTF_8) 來表示 UTF-8, 當然除非你指的是一個
變數名而不是這種編碼本身.

migasun 發表在 痞客邦 留言(0) 人氣()

http://pro-programmers.blogspot.tw/2008/07/spring-datasource-jndi-lookup-from.html

 


Monday, July 28, 2008





Spring Datasource JNDI Lookup from Tomcat




Figure: Tomcat 5.5 directory structure

DB_Driver.jar


Download an appropriate JDBC driver and place it under LIB folder. In my case, I'm using JTDS.

server.xml


This is manually setting up the JDBC resource in Tomcat. This can be configured with GUI from Tomcat Admin module.
<Server>
....
<GlobalNamingResources>
<Resource
name="jdbc/myjdb"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="sa"
maxWait="5000"
validationQuery="select 1"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
password="password"
url="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=MyDB"/>
</GlobalNamingResources>
...
</Server>

applicationContext.xml


In the applicationContext.xml or in an appropriate Spring config xml file create dataSource bean.
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
value="java:comp/env/jdbc/myjdb"/>
<property name="resourceRef"
value="true" />
</bean>

context.xml


In the context.xml link the JNDI from Spring bean to JNDI from container.
<Context path="/MyApp">
<ResourceLink name="jdbc/myjdb"
type="javax.sql.DataSource"
global="jdbc/myjdb"/>
</Context>



Posted byAndy Myintat7:26 PM










Reactions:





6 comments:




Ganesh Prasadsaid...
Hi,

In the context.xml file, did you mean "/MyApp" when you wrote "/HelloJNDI"?

Regards,
Ganesh Prasad

September 30, 2009 8:12 PM


Andy Myintsaid...
Yes, that should be "/MyApp". Thanks :)

September 30, 2009 8:54 PM


Anonymous said...
Neither "/HelloJNDI" nor "/MyApp" are correct. The <Context> element in META-INF/context.xml should not have the path attribute at all.

February 17, 2011 2:48 PM


Anonymous said...
Thanks! Saved me a bunch of time.

June 15, 2011 9:27 AM


Rajkumar Singhsaid...
please vist http://www.rajkrrsingh.blogspot.in/2012/06/spring-working-with-datasource-and.html

June 8, 2012 12:50 PM


Rajkumar Singhsaid...
Please visit fallowing link
http://www.rajkrrsingh.blogspot.in/2012/06/spring-working-with-datasource-and.html

June 8, 2012 12:51 PM

Post a Comment










 

migasun 發表在 痞客邦 留言(0) 人氣()

http://www.microsoft.com/zh-tw/download/details.aspx?id=7887

migasun 發表在 痞客邦 留言(0) 人氣()

http://www.netadmin.com.tw/article_content.aspx?sn=1109130004

解析資訊安全控制措施(十)




資安事故管理與營運持續



花俊傑


組織想要做好資訊安全的目的,就是不希望資安事故的發生,影響到日常的業務營運,所以A.14營運持續管理的目標就是希望組織能夠未雨綢繆,事先擬定各項的應對策略,以避免營運中斷的情況發生。

營運持續策略的擬定,主要是透過營運衝擊分析來找出組織重要的業務關鍵活動,再透過針對關鍵活動的風險評鑑,評估可能的潛藏風險,並擬定出對應的營運持續計畫,藉由計畫的實現來達成營運持續的目標。

因此,A.14.1「營運持續管理的資訊安全層面」的控制目標,就是希望透過營運持續管理的流程,配合實施各項預防和復原措施,來對抗可能的營運中斷,確保重要的核心營運系統和業務流程,不會受到災害事故的影響而能夠持續進行,在這個項目中一共有五項控制措施,分別說明如下:

A.14.1.1 將資訊安全納入營運持續管理流程

這項控制措施要求組織需要依照業務所需的資安要求,發展和維持整體的營運持續管理流程,也就是需要識別和業務有關的關鍵活動,以及支持這些關鍵活動所需的資產,包括了人員、場地、資訊、技術、供應商、利害關係人等,組織必須充分地了解這些資產所需的安全要求,以及這些資產可能引起營運中斷的風險,評估其可能造成的衝擊,然後再選擇適當的控制措施。

舉例來說,像是火災可能對於營運場地包括機房和辦公室,造成營運中斷的衝擊,所以組織就需要配置消防系統,作為對抗火災的控制措施,如果認為此災害對於營運的衝擊過大,甚至可預備另外的營運據點,或進一步購買適當的保險,來降低整體的營運風險。

A.14.1.2 營運持續與風險評鑑

組織若已將資安納入營運持續過程的考量,接下來就要展開實際行動來找出可能造成營運中斷的風險,這項控制措施就是要求組織必須識別可能導致營運中斷的事件,研判其可能發生的機率,評估可能造成損害的等級,以及對組織的衝擊和影響。

一般而言,由資安事件引發的系統錯誤、設備失效、天然災害等問題,多數能夠藉由風險評鑑加以識別,並且依其損壞程度和復原時程,判斷如何恢復至正常運作的水準。因此在進行規劃時,建議最好由業務活動和資源的擁有者來參與,才能完整的識別出正常營運所需的資源、可允許的中斷時間及復原的順序,如此也才能識別出各項風險,進而決定組織營運持續管理的整體作法,避免落入過度偏重在添購資訊設備的備援情境中。

A.14.1.3 發展與實作包括資訊安全的持續計畫

組織應依據營運衝擊分析和風險評鑑的結果,來建立所需的營運持續計畫,這項控制措施就是要求針對各項可能造成營運中斷的風險,應該建立對應之維持或恢復運作的計畫,以確保在一定時間內達到資訊可用的要求等級。對此,建議組織在規劃時,需要考量可以接受的服務中斷時間,以及可使用的人力、物力等各項資源。

A.14.1.4 營運持續計畫框架

這項控制措施是要求營運持續計畫需要確保一致性,也就是在實施上務必要依照組織的整體作法,例如在每一份計畫中都會涵蓋特定的計畫擁有人、聯絡清單、啟動條件、緊急程序等,這些就是所謂的框架,需要依照這些項目來建立各項營運持續計畫的內容,同時明訂測試與維護的優先順序。

A.14.1.5 營運持續計畫的測試、維護及重新評鑑

關於營運持續管理,實務方面需要注意的是,計畫本身的建立並不困難,重點在於如何維持計畫的有效性,因此這項控制措施要求所有的營運持續計畫,都需要定期的測試與更新,以確保計畫的內容與作法,符合當下真實的環境。

對組織而言,或許無法同時完整測試所有計畫,但應該要規劃其測試時程和方法,視情況選擇採取紙本演練、狀況模擬、技術測試及完整演練等,請務必明白計畫的目的只有一個,就是要確保在災難發生時,能夠依照預先設想的步驟來執行,以達到營運持續的目標。

 

migasun 發表在 痞客邦 留言(0) 人氣()

文章

http://talk818.blogspot.com/2009/07/java-vector-vs-arraylist.html

Vector ArrayList的不同

有的時候 Vector更好一些;有的時候ArrayList 更好一些;有的時候你一個也不想用。但願,你不是在期望一個簡單明瞭的答案,因為答案因你在用他們做什麼而定。下面是要考慮的四個方面:

API

同步-Synchronization

資料增長-Data growth

使用方法-Usage patterns

讓我一個一個來解釋吧。

API

The Java Programming Language (Addison-Wesley, June 2000) Ken Arnold, James Gosling, David Holmes 是這樣描述Vector的,它是更ArrayList類似的一個東西,所以從API的觀點來看,它們倆是很相似的。但是,它們之間還是有些微的差別的。

Synchronization

Vectors是可同步化的,意思就是說,任何操作Vector的內容的方法都是線程安全的,相反的,另一方面,ArrayList是不可同步化的,所以也不是線程安全的。如果你知道了這些的話,你就會發現,Vector的同步會讓它在性能發方面有一些小問題。所以,如果你不需要線程安全的話,那麼就使用ArrayList吧。為什麼要為沒有必要的同步付出代價呢?

Data growth

實際上,不管是ArrayList還是Vector,在它們內部都是使用一個Array來保存資料的。編程過程中,在使用它們任何一個的時候,你都需要 記住這一點。你在往一個ArrayList或者Vector�插入一個元素的時候,如果內部陣列空間不夠了,這個物件(譯者按:指的是你使用的 ArrayList或者Vector)就要擴展它的大小。Vector在默認情況下是產生一個雙倍大小,而ArrayList增加50%的大小。只要你合 理的使用這些類,你就可以結束你在增加新的元素的時候所付出的性能代價。把對象(譯者按:指的是你使用的ArrayList或者Vector)的初始化容 量指定為你編程過程中所能用到的最大的容量總是最好的辦法。仔細的指定容量,你可以避免以後改變內部Array容量,所要付出的代價。如果你並不知道到底 有多少個資料,當是你知道資料的增長率,Vector確實有一點點優勢,因為你可以指定增加值(譯者按,如果沒有猜錯的話,作者說的方法應該是 setSize(int newSize) Sets the size of this vector.)

Usage patterns

ArrayListVector在從指定位置取得元素,從容器的末尾增加和刪除元素都非常的有效,所有的這些操作都能在一個常數級的時間(O(1)) 內完成。但是從一個其他的位置增加和刪除一個元素就顯得頗為費時,差不多需要的時間為O(n-i),這�的n代表元素個數,i代表要增加和刪除的元素所在 的位置。這些操作需花費更多的時間,因為你需要挨個移動i和更高位置的元素。那麼,以上這些到底說明了什麼呢?

這意味著,如果你 取得一個元素,或者從陣列末尾增加或刪除一個元素的話,隨便你使用VectorArrayList。如果你想要對陣列內容做其他操作的話,那麼就為自己 好另一個容器吧。比喻說,LinkedList可以在常數級時間(O(1))內為任意一個位置的元素增加和刪除。但是,取得一個元素,會稍微慢一點,時間 要用O(i) ,這個i是元素的位置。通過ArrayList也是很簡單的,因為你可以簡單使用一個索引,而不是構造一個iterator LinkedList也為每個插入的元素建立一個內部物件。所以,你也必須知道,同時產生了垃圾物件。

最後,Practical Java (Addison-Wesley, Feb. 2000) Peter Haggar �的"實踐41"建議你使用一個普通的原始的陣列來代替VectorArrayListe,特別是對效率優先的代碼來說。通過使用陣列(array) 你可以避免同步,額外的方法調用,非理想化的大小改變。你付出的只是額外的開發時間。

migasun 發表在 痞客邦 留言(0) 人氣()

http://blog.cycu.edu.tw/migasun/wp-admin/post-new.php

前言
datepicker輸出民國年,網路上google一下,果真大家都有自己一套方法,我參考幾種選出這樣一個方法, 大家參考看看,如有什麼意見歡迎討論^^
view sourceprint?
$(function () {
    var old_generateMonthYearHeader = $.datepicker._generateMonthYearHeader;
    var old_get = $.datepicker._get;
    var old_CloseFn = $.datepicker._updateDatepicker;
    $.extend($.datepicker, {
        _generateMonthYearHeader:function (a,b,c,d,e,f,g,h) {
            var htmlYearMonth = old_generateMonthYearHeader.apply(this, [a, b, c, d, e, f, g, h]);
            if ($(htmlYearMonth).find(".ui-datepicker-year").length > 0) {
                htmlYearMonth = $(htmlYearMonth).find(".ui-datepicker-year").find("option").each(function (i, e) {
                    if (Number(e.value) - 1911 > 0) $(e).text(Number(e.innerText) - 1911);
                }).end().end().get(0).outerHTML;
            }
            return htmlYearMonth;
        },

        _get:function (a, b) {
            a.selectedYear = a.selectedYear - 1911 < 0 ? a.selectedYear + 1911 : a.selectedYear;
            a.drawYear = a.drawYear - 1911 < 0 ? a.drawYear + 1911 : a.drawYear;
            a.curreatYear = a.curreatYear - 1911 < 0 ? a.curreatYear + 1911 : a.curreatYear;
            return old_get.apply(this, [a, b]);
        },

        _updateDatepicker:function (inst) {
            old_CloseFn.call(this, inst);
            $(this).datepicker("widget").find(".ui-datepicker-buttonpane").children(":last")
                   .click(function (e) {
                        inst.input.val("");
                    });
        },

        _setDateDatepicker: function (a, b) {
            if (a = this._getInst(a)) { this._setDate(a, b); this._updateDatepicker(a); this._updateAlternate(a) }
        },

        _widgetDatepicker: function () {
            return this.dpDiv
        }
 });

    $("#demo1").datepicker({
        yearSuffix: "", //將年改為空白
        changeYear: true, //手動修改年
        changeMonth: true, //手動修改月
        showWeek: true, //顯示第幾周
        firstDay: 1, //0為星期天
        showOtherMonths: true, //在本月中顯示其他月份
        selectOtherMonths: true, //可以在本月中選擇其他月份
        showButtonPanel: true, //顯示bottom bar
        closeText: '清除', //將離開改為清除
        appendText: "yyy-mm-dd",
        dateFormat: "yy-mm-dd",
        onSelect: function (dateText, inst) {
            var dateFormate = inst.settings.dateFormat == null ? "yy/mm/dd" : inst.settings.dateFormat; //取出格式文字
            var reM = /m+/g;
            var reD = /d+/g;
            var objDate = { y: inst.selectedYear - 1911 < 0 ? inst.selectedYear : inst.selectedYear - 1911,
                m: String(inst.selectedMonth).length != 1 ? inst.selectedMonth + 1 : "0" + String(inst.selectedMonth + 1),
                d: String(inst.selectedDay).length != 1 ? inst.selectedDay : "0" + String(inst.selectedDay)
            };
            $.each(objDate, function (k, v) {
                var re = new RegExp(k + "+");
                dateFormate = dateFormate.replace(re, v);
            });
            inst.input.val(dateFormate);
        }
    });
});

migasun 發表在 痞客邦 留言(0) 人氣()

資料來源 : http://www.blogjava.net/zyb9114/archive/2006/12/12/87275.html


tomcat5.5.20连接池DBCP、C3P0配置(含官方配置)


 

DBCP:
第一種方法:修改$CATALINA_HOME\conf\server.xml,在<GlobalNamingResources>中添加:
<Resource name="jdbc/dsname" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="200"
driverClassName="@DB-DRIVERNAME@"
username="@DB-USERNAME@" password="@DB-PASSWORD@"
url="@DB-URL@"
defaultAutoCommit="true" removeAbandoned="true"
removeAbandonedTimeout="60" logAbandoned="true"/>

然後在$CATALINA_HOME\conf\Catalina\localhost,創建應用相關的*.xml文件,在此文件的<context>中添加:
<ResourceLink
global="jdbc/dsname"
name="jdbc/dsname"
type="javax.sql.DataSourcer"/>

第二種方法:直接在$CATALINA_HOME\conf\Catalina\localhost,創建應用相關的*.xml文件,在此文件的<context>中添加:
<Resource name="jdbc/dsname" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="200"
driverClassName="@DB-DRIVERNAME@"
username="@DB-USERNAME@" password="@DB-PASSWORD@"
url="@DB-URL@"
defaultAutoCommit="true" removeAbandoned="true"
removeAbandonedTimeout="60" logAbandoned="true"/>

還有一種是官方配置:
1.修改$CATALINA_HOME\conf\server.xml,Context對應你的web應用的目錄名,放到<host>中間:
<Context docBase="test" path="/test" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/dsname" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="200"
driverClassName="@DB-DRIVERNAME@"
username="@DB-USERNAME@" password="@DB-PASSWORD@"
url="@DB-URL@"
defaultAutoCommit="true" removeAbandoned="true"
removeAbandonedTimeout="60" logAbandoned="true"/>
</Context>
2.在你的WEB應用的web.xml中添加:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/dsname</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

第一種和第三種差不多,第一種第一段其實就是用http://localhost:8080/admin添 加DataSource後生成的,要多寫一個WEB應用相關的XML來綁定連接池,第三種把這個檔集成到了server.xml中,和連接池的綁定交給 了web.xml,但共同不方便的是如果TOMCAT下有多個應用,在開發中可能有的應用是不需要啟動的,那你就要去修改server.xml.
第二種方法的優點也正是另外兩種方法的缺點,個人比較喜歡第二種方法,一個是TOMCAT版本更換比較方便,是的之前備份應用相關XML就可以了;二是如果不需要啟動不相關的應用直接把檔案名改一下,比如說加個.bak尾碼就可以了.

 

 

C3P0:

因為TOMCAT自帶的DBCP有很多BUG,所有有時會使用C3P0來替代,配置方法和上邊的結構基本一樣,注意幾個參數名稱不一樣就可以了,另外還要把C3P0的JAR包放到classpath

<Resource name="jdbc/name" auth="Container" type="com.mchange.v2.c3p0.ComboPooledDataSource"
maxPoolSize="30" minPoolSize="1" initialPoolSize="5" acquireIncrement="2"
idleConnectionTestPeriod="60" maxIdleTime="60"
driverClass="@DB-DRIVERNAME@"
user="@DB-USERNAME@" password="@DB-PASSWORD@"
jdbcUrl="@DB-URL@"
factory="org.apache.naming.factory.BeanFactory"/>

 

其實還有其它的方法,另外需要注意的一點是資料庫相關的JDBC驅動要放到$CATALINA_HOME\common\lib下邊,不然會class not found!

 

migasun 發表在 痞客邦 留言(0) 人氣()

http://www.webguide.nat.gov.tw/wSite/ct?xItem=36673&ctNode=14475&mp=1


為了讓各政府機關對網頁版型設計與內容維護管理有明確的遵循準則,特以十一條規範來引導政府網站的承辦人員與網頁開發者,設計出親和的網站介面,維護高品質的網站內容。

  • 網站版型:建立政府網站的一致性,操作介面達到可用性、可及性的標準,安排於第1到8條規範。

  • 內容管理:提高政府網站內容的品質、親和與維護管理的效益,安排於第9至11條規範。


11條規範如下列:
1. 使用者的呈現裝置(Compatibility)

2. 網頁組成要素(Site Required Elements)

3. 導覽 (Navigation)

4. 首頁設計(Homepage)

5. 文字樣式與連結(Text Styles and Links)

6. 圖片與多媒體(Images and Multimedia)

7. 表單(Forms)

8. 搜尋(Search)

9. 內容提供(Content Requirements)

10. 內容撰寫(Writing for the Web)

11. 內容管理(Content Management)

 



 

migasun 發表在 痞客邦 留言(0) 人氣()

如何快速刪除 Subversion 專用的隱藏目錄


Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]@="Delete SVN Folders"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]@="cmd.exe /k \"TITLE Removing SVN Folders in %1 && FOR /r \"%1\" %%f IN (.svn _svn) DO RD /s /q \"%%f\" \""

你只要將以上的註冊檔內容複製下來,並儲存成 DeleteSVN.reg 檔,在雙擊這個檔就可以安裝完成了。

migasun 發表在 痞客邦 留言(0) 人氣()

http://snowing0816.pixnet.net/blog/category/1505191
寶瓶星號第二天之岸上觀光:琉球ダイニング 松尾的晚餐

migasun 發表在 痞客邦 留言(0) 人氣()

a:hover { background:#DDDDDD }
asdasdasdasdasd

migasun 發表在 痞客邦 留言(0) 人氣()

Button Click Event 使用Block UI

http://rickyju.pixnet.net/blog/post/21037355

migasun 發表在 痞客邦 留言(0) 人氣()

import java.io.UnsupportedEncodingException;


public class HEX2BIN {
public static void main(String[] args) throws UnsupportedEncodingException {
//李大同 < --> A7F5A46AA650
String n = string2hex("李大同");
System.out.println("string2hex n="+n);

//A7F5A46AA650 --> 李大同
byte[] bytes = hexStringToByteArray("A7F5A46AA650");
System.out.println("hexStringToByteArray bytes="+new String(bytes, "big5"));


// 3CE0B39D --> 002645811260
String sn = hexString2DeimcalString("3CE0B39D");
System.out.println("hexString2DeimcalString SN=" + sn);

// 3CE0B39D --> 002645811260
String snHex = deimcalString2HexString("002645811260");
System.out.println("deimcalString2HexString SN=" + snHex);



}

public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
}
return data;
}

public static String string2hex(String big5) throws UnsupportedEncodingException {
String ans = "";
byte[] bytes1 = big5.getBytes("big5");
for (int i = 0; i < bytes1.length; i++) {
int unsignint = 0x000000FF & bytes1[i];
ans += Integer.toHexString(unsignint).toUpperCase();

}
return ans;
}

public static String reverseHexSting(String s) throws UnsupportedEncodingException {
int len = s.length();
StringBuffer a = new StringBuffer();
for (int i = 0; i < len; i += 2) {
a.insert(0, s.substring(i, i + 1));
}
return a.toString();
}

public static String hexString2DeimcalString(String s) throws UnsupportedEncodingException {
// FROM 3CE0B39D TO 002645811260

int len = s.length();
// s=reverseHexSting(s);
long f = 1;
long ans = 0;
for (int i = 0; i < len; i += 2) {
long a = ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
ans += f * a;
f *= 256;
}
return Long.toString(ans);
}

public static String deimcalString2HexString(String s) {
// FROM 002645811260 TO 3CE0B39D
int len = s.length();
long a = Long.parseLong(s);
String d = "";
while (a > 0) {
long b = a / 256;
long c = a % 256;
d += Long.toHexString(c).toUpperCase();
a = b;
}
return d;
}
}

migasun 發表在 痞客邦 留言(0) 人氣()

http://marcgrabanski.com/articles/jquery-ui-datepicker

http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/datePickerDateFormat.html
設定icon

ThemeRoller
http://jqueryui.com/themeroller/

http://keith-wood.name/datepick.html

http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/

http://wtf.hax.is/2008/05/jquery-datepicker-and-selectbox.html

http://davidwalsh.name/jquery-datepicker-disable-days

migasun 發表在 痞客邦 留言(0) 人氣()

方法一:


import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class AwtImage extends JFrame{
Image img;
public static void main(String[] args){
AwtImage ai = new AwtImage();
}

public AwtImage(){
super("Image Frame");
img = Toolkit.getDefaultToolkit().getImage("abc.jpg");
this.setSize(800,800);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關閉
}
public void update(Graphics g){
paint(g);
}

public void paint(Graphics g){
g.drawImage(img, 100, 100, this);
}
}




方法二:





import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class med2 {

public static void main(String[] args) throws Exception {
final JFrame win ;
Container contentPane;
Graphics g;
Image img;
Image img2;
img = Toolkit.getDefaultToolkit().getImage("abc.jpg");
img2 = Toolkit.getDefaultToolkit().getImage("def.jpg");
win = new JFrame("My First Rectangle");
win.setSize(800,800);
win.setVisible(true);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關閉

g = win.getGraphics();

//必須要預先載入影片一次
//跟windows的事件有關
g.drawImage(img,50,50, win);
g.drawImage(img2,50,50, win);

for(int i=0;i<20;i++){
try {Thread.sleep(500);} catch (Exception e) {} //延遲0.5秒
if(i%2 ==0 ){
g.drawImage(img,50,50, win);
}else{
g.drawImage(img2,50,50, win);
}
System.out.println("i="+i);
}
}

}


migasun 發表在 痞客邦 留言(0) 人氣()

migasun 發表在 痞客邦 留言(0) 人氣()

migasun 發表在 痞客邦 留言(0) 人氣()

1 23