Google Prettify

2007-11-27

如何在weblogic 8.1中得知是否有發生connection leak?

        案子中使用的container是weblogic 8.1。最近工作上寫的系統,偶爾會發connetion leak。長官執疑什麼是connection leak? 在請教過google大神後,才在BEA的官網中找到一些資訊。
在weblogic 8.1中發生connection leak時會產生<BEA-001074>錯誤。那什麼叫connection leak? "BEA官方解釋是
A JDBC pool connection leak was detected. A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the garbage collector and returned to the connection pool. A stack trace is printed indicating where the leaked connection was created...
如何知道那裡有發生connection leak呢?

首先要在 startup scripts (startWeblogic.cmd)中加入 -Dweblogic.Debug=weblogic.JDBCConn="true", weblogic.JTAJDBC="true"

另外要設定weblogic中domain的config.xml中的指定連線 ConnLeakProfilingEnabled屬性為true。

 <JDBCConnectionPool ConnLeakProfilingEnabled="true"
    ConnProfilingEnabled="true"
     DriverName="oracle.jdbc.OracleDriver"
     InactiveConnectionTimeoutSeconds="0" MaxCapacity="20"....

其實設定ConnLeakProfilingEnabled也可以透過weblogic console中設定。




其中Inactive Connection Timeout要設定為0

2007-11-21

清除IE中記住的帳號密碼


來說一個經驗吧。(咦? 這個開場白好像之前用過了...)

公司的網路使用single sing on,有設定Proxy,要求凡是要上網的員工都必須輸入帳號密碼。剛來公司時,因為公司網管還沒有設定好帳密(帳號密碼,簡稱帳密(誰說中文不可以有縮寫的...:D)),就拿了一個剛離職同事的帳密來用。也貪求方便勾選了「記憶密碼」這個選項,於是當使用IE上網時再也不會有輸入帳密這個煩人的對話框出現了。之後我的帳號雖然建立好了,可是還是持續使用離職同事的帳密,也都沒事。

故事並沒有完。當這個同事的帳號被移除後,因為它再也不會有輸入帳密這個對話框,就一直導到帳號鎖定的錯誤頁面。中間完全沒有機會輸入自己合法的帳密。最後只好使用終極(最爛)招式-重灌。

現在各位走運了。經過一番搜尋,終於有其他的方法了。

點選「控制台」->「使用者帳戶」,選擇使用者,「管理我的密碼」就可以去控制系統已經記住的帳密了。

2007-11-19

解決MyEclipse中無法連上Oracle的問題


在MyEclipse中依版本的不同,在使用DB Browser連向Oracle時,有些版本會出現ora-12705的問題。各位可以朝幾個方面來解決這個問題。
1.原來MyEclipse在Windows中預設的執行捷徑是:
C:\eclipse\eclipse.exe -vmargs -Duser.language=en
-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -Dosgi.splashLocation="C:\Program
Files\MyEclipse\eclipse\MyEclipseSplash.bmp"
必須要將它改成
C:\eclipse\eclipse.exe -vmargs -Duser.language=en_US
-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -Dosgi.splashLocation="C:\Program
Files\MyEclipse\eclipse\MyEclipseSplash.bmp"
這個問題的原因其實蠻明顯的:就是Oracle不認得en這個語言,Oracle DB只認識en_US這個語言。

2.而隨著版本的異動,有些版本已經解決掉這個問題了。各位可以直接下載all in one的package來試試看。不過在我的經驗裡,MyEclipse5雖然有解決掉這個問題,可是MyEclipse6這個問題又跑出來了~"~.
3.不然更換較新的oracle driver試試。在DB Browser中可以設定connection資訊。我的經驗中使用ojdbc10.2.0.3.0的jar檔可以解決這個問題。最近的Oracle Driver可以從這裡下載

2007-11-14

換了一個範本


今天花了一點時間,換了一個範本。為什麼會沒事想換個範本呢?? 因為手貝戔不小心移除了原本的範本。在換範本的時候,也順便玩了一下Google所提供範本及相關的設定。套用了新範本、做了一些字型與底色的設定,我終於有一個結論:工程師的美感就是這樣的了。
以前由我們工程師所製作的prototype,被公司其他同仁戲稱為紅綠燈系統;因為這個系統上面就總會有紅、黃、綠三種顏色。然後版面就差不多是這樣,最多就是耍一些CSS的花招。
不過由工程師所製作的prototype就有一個好處:簡單、乾淨、沒有多餘的累贅。用另外一種角度來看形容就是單調....。果然隔行如隔山啊!!

2007-11-13

如何查詢Oracle版本?

想知道你現在所使用的Oracle版本是多少嗎?? 執行以下的SQL語法就行啦!!(擇一)
select * from v$version
select * from product_component_version

Weblogic8中如何讓Weblogic優先使用WAR檔的class?

在Weblogic8中如何讓Weblogic優先使用WAR檔的class? 你可以在你的WAR檔中放置一個weblogic.xml的檔案就可以了。這是針對weblogic的config檔。下面是weblogic.xml的一個簡單的示範。當然還有更多的設定方式(我也不會:p),可以至weblogic官網查詢。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE weblogic-web-app PUBLIC
"-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>

2007-11-12

惡搞Hibernate

來講個經驗吧!!

因為案子要處理一些老舊的資料, 我必須要使用Hibernate從資料庫中取得資料。我有2張table:DEMO_LOG與DEMO_JOB。 DEMO_LOG的JOBID與JOB_TYPE會參數到DEMO_JOB的JOB_ID與JOB_TYPE欄位。

資料的Schema如下:

  create table DEMO_LOG(
LOGID INTEGER,
JOBID VARCHAR2(10),
JOB_TYPE VARCHAR2(4),
....
)
create table DEMO_JOB(
JOB_ID VARCHAR2(10),
JOB_TYPE VARCHAR2(4),
...
)
請注意:DEMO_LOG.JOBID欄位沒有底線,DEMO_JOB.JOB_ID是有底線的。為什麼會這樣呢?? 因為我在建schema時打錯了...:p。不過這無傷大雅。重點來了,2張table的primary-key如下:
  primary key ()
沒錯,它沒有promary-key。

不過依照table的用途,我認為在DEMO_LOG這張table中,JOBID+JOB_TYPE是unique的;而DEMO_JOB中JOB_ID與JOB_TYPE也是unique的。於是我的hbm是這樣寫:

  <hibernate-mapping>
<class name="dao.DemoLog" table="DEMO_LOG">
<composite-id name="id" class="dao.DemoLogId">
<key-property name="jobid" type="java.lang.String">
<column name="JOBID" length="10" />
</key-property>
<key-property name="jobType" type="java.lang.String">
<column name="JOB_TYPE" length="4" />
</key-property>
<key-property name="logid" type="java.lang.Long">
<column name="LOGID" precision="22" scale="0" />
</key-property>
</composite-id>
<many-to-one name="jobinfo" class="dao.DemoJob"
outer-join="true" insert="false" update="false"
unique="false" property-ref="jobpk" not-null="false">
<column name="JOBID" />
<column name="JOB_TYPE" />
</many-to-one>
.....
</hibernate-mapping>
<hibernate-mapping>
<class name="dao.DemoJob" table="DEMO_JOB">
<composite-id name="id" class="dao.DemoJobId">
<key-property name="jobId" type="java.lang.String">
<column name="JOB_ID" length="10" />
</key-property>
<key-property name="jobType" type="java.lang.String">
<column name="JOB_TYPE" length="4" />
</key-property>
</composite-id>
<properties name="jobpk">
<property name="jobId" type="java.lang.String"
insert="false" update="false">
<column name="JOB_ID" length="10" />
</property>
<property name="jobType" type="java.lang.String"
insert="false" update="false">
<column name="JOB_TYPE" length="4" />
</property>
</properties>
</hibernate-mapping>

它所產生出來的SQL語法如下:

select this_.JOBID as JOBID2_1_, this_.JOB_TYPE as JOB2_2_1_,
this_.LOGID as LOGID2_1_,
.....
demojob2_.JOB_ID as JOB1_1_0_,
demojob2_.JOB_TYPE as JOB2_1_0_
from DEMO_LOG this_
left outer join DEMO_JOB demojob2_ on this_.JOBID =
demojob2_.JOB_ID
and this_.JOB_TYPE =
demojob2_.JOB_TYPE;

select demojob0_.JOB_ID as JOB1_1_0_,
demojob0_.JOB_TYPE as JOB2_1_0_,
.....
from DEMO_JOB demojob0_
where demojob0_.JOB_ID = ?
and demojob0_.JOB_TYPE = ?

當然,依照Hibernate說明文件, DemoLogId中的equals與hashCode method也都實作了。 有一些要注意的。
  1. 無論是DEMO_LOG或DEMO_JOB,在hbm中被定義為primary key的欄位其值不可以為null。 不然取得的list中雖然會有這個element,可是Object卻會是null。想要解決這個問題嗎??可以參考這篇文章

  2. 因為在實際table中是無primary ky的,所以資料是可以重覆。但是在hibernate中的entity,則會與select出來的第一筆記錄有相同的instance。

  3. 重點在於如果DEMO_JOB中有對應不到的記錄,DEMO_LOG所代表的entity還是會呈現,只是差別在於jobinfo property為null。這正是我要處理的...。X的,什麼鳥系統設計的鳥schema....。

下一步:要怎麼處理primary-key property重覆的問題了。

2007-09-23

如何轉Serializable物件轉成byte[]

你是否有嘗試過在java環境中,明明已經有一個Serializable物件,卻不知道要如何將它放到串流裡(供JSP串流使用)?JAVA本身就提供ByteArrayOutputStream可以將Stream物件轉成byte[]。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos= new ObjectOutputStream(baos);
oos.writeObject(obj);
byte[] bytes =baos.toByteArray();
事實上這些方法jakarta-common-lang已經有提供現成的method可以使用了。有興趣的朋友可以參考jakarta-common-lang的SerializationUtils Class。

2007-09-04

軟體導入的過程


Perforce是一個適合大型專案開發用的版本控管軟體。我們這個團隊一直以來使用perforce來做我們的版本控管。不過最近聽說subversion還不錯用,而且還不用錢,因此我們也嘗試著想要引進subversion來做我們的版本控管。

Subversion導入負責人:現在我們要引進subversion。環境跟帳號都已經開好了。請大家每次改檔或是每天早上來公司時就先update一下code。改完後再commit code…

團員A:負責人,我要怎麼知道這個檔案現在有人在改? 不然我要上code時都會被reject。還是有沒有什麼其他的功能,可以讓別人知道我現在在改這個檔案?

團員B:負責人,subversion有沒有像perforceforce sync的功能?

Subversion導入負責人:ㄟ你們講的這些功能,subversion都沒有耶~。可是它的介面比較簡單好用

團員A:什麼好用,難用死了,沒有force sync、又沒有辦法可以知道現在這個檔有人在更改,每次都會conflict,每次都要手動merge。以前都不用merge,就算要merge,用auto-merge就可以了,perforce就會自動幫我們merge好,都不用再去手動merge。還有啊,以前看到有人在改相同的一個檔案時,就先放著等一下就好了,先改其他的code。現在用subversion都要問一下:「現在沒有人在改這個檔案啊? 沒人改的話我要改囉」。難用死了,以前用perforce都不需要這麼問,現在換一個軟體反倒要這麼問,這說不過去啊

於是在團員們的抗議下只好終止引入subversion這套系統。

這讓我想起在讀BPR時,一個最主要失敗的因素就是使用者習慣的抗議。連我們身為最前線的開發人員都會有這樣的心態,再加上領導者又不夠力,也難怪BPR起不來。拿舊有的習慣去使用新的軟體,要求新軟體要可以有舊系統所有的功能跟操作習慣;除非新軟體的設計目標是要完全取代舊有軟體,否則當然會覺得新系統處處彆手彆腳。於是這就牽扯到了新軟體如何去打入舊有軟體的市場。

2007-06-03

建立信任,不容易,卻很重要!

很奇怪的,台灣的教育講究要信任、但是沒有教導要如何信任,反而教的大多是如何防人。中國講防人之心不可無、卻很少在講要心存信任他人。這也許與文化有關。天主耶穌基督講究的是只要你肯悔改,它就會原諒你。中國五千年文化就沒有這麼寬宏大量了,不過幸好佛教文化至少還是有講究"不可害人"。

這篇是引用文,卻也突顯出台灣的教育。以前就有聽過一種說法:只有台灣人寫的程式在防東防西、怕使用者亂搞手腳;老外寫的程式都著重在功能上、相信使用者會依正常流程來操作。也因此在撰寫程式時就會花費很多心力在防東防西、防使用者透過不正常的連結連入網站。

像這樣唯利是圖的社會文化會被保留下來,我相信一定有它的適應之處。(文化沒有對不對,只有適不適應)。在這種唯利是圖的社會文化生存,沒什麼不好、沒什麼不正確、也沒什麼不可以。不過考慮防小人所花的成本,這種信任的社會的好處就應該蠻吸引人了。

當然,想要讓信任在社會文化下運作、配套措施是不可少的。最直接的就是教育素養。然而教育又是百年大計,也就是說要想要有一個像義大利或日本這樣一個信任的環境至少要百年的時間...。如果將這個時程表拿給政府官員或教育部長,我相信馬上會被打回票,因為費時太久。然而我希望今年就會是第一年。

2007-05-23

Subversion on windows安裝

Subversion on windows

下載
  1. 請從http://subversion.tigris.org/下載subversion的安裝檔。他有zip檔,也有exe 檔。我使用的是exe檔,但看起來好像也只是將zip檔解開放在特定目錄,以及增加了一些文件的捷徑在 功能表裡,並沒有增加什麼dll、exe或有的沒的檔在document and setting或windows裡。
安裝
  1. 沒什麼好講的。.exe檔的話,就點2下執行,.zip檔就解開放在你喜歡的目錄。以下的操作是以.exe為主。
建立repository。

可以執行下命令列新增,也可以使用client工具新增。使用client工具比較簡單,執行create-repository here就好了。

  1. 設定path (選擇性)。讓不管在那一個目錄下,都可以直接執行subversion\bin\下的各個指令。
  2. 建立一個目錄。這裡用"D:\svn\proj1"。請留意,目錄架構會顯響存取的設定。有一個地方(好像)是可以故alias 的 設定,但因為沒有try過,所以就先跳過。
  3. 執 行 svnadmin create D:\svn\proj1。或是用client直接建立也可以。建立完後,proj1目錄裡裡面會產生很多檔案。
    1. 修改D:\svn\proj1\conf\svnserve.conf。下面設定前面的#拿掉。
      [general]
      anon-access = read
      auth-access = write
      password-db = passwd
    2. 修 改D:\svn\proj1\conf\passwd
      [users]
      user1 = pass1
      user2 = pass2
起動svn
  1. 在命令列視窗裡執行svnserve -d就可以了。這個執行檔是位於subversion安裝目錄下\bin裡。請注意這個視窗不能關閉,否則subversion就會停掉。

安裝service。

執行以下指令。

sc create svn binpath= "\"C:\program files\svn\bin\svnserve.exe\" --service " displayname= "Subversion Server" depend= Tcpip start= auto
net stop svn
net start svn

這表示登錄的service叫"svn"而顯示的名稱叫""Subversion Server"。
有一些要注意的。
  1. 參數binpath、displayname、depend、start的等號後面要有空白。
  2. 如果你的目錄裡有空白字元 ,前後要用引號(")括起來。binpath則要有跳脫字元。如範例。
  3. 在windows 2000下可能沒有這個執行檔,可以去找windows 2000 resource kit tools安裝。

Client安裝

從http://tortoisesvn.tigris.org/下載tortoise。這是subversion的 client工具。 subversion是跨平台的版本控管工具,大部份是指令操作,因此在win32上就有人提供了不錯的clent工具。在windows下直接把下載下 來的檔案點2下執行就可以了。安裝完後會要求重新開機...就重新開機吧。

2007-05-21

法國工作時數之謎

前陣子看到新聞談到了台灣勞工的工作時數居世界排行。忽然覺得很奇怪:聽說法國人的休閒時間之長跟工作節奏之慢也是世界排行,怎麼生產毛額也是世界排行?想了很久還是想不出來。

2007-05-08

專家只是訓練有素的狗?

在廁所如廁時,看到身上穿的西裝,一副專業的樣子,令我不禁想起什麼是專家。
這個問題要從"專家只不過是訓練有素的狗"開始講起。這句話是陳之藩引自於愛因思坦的話....,如果你也這麼想,那就是陳之藩口中的專家了....。(我沒有說在看這篇文章的讀者是狗...,不要對號入坐)。這句話確實是引用之愛因基坦,但原文並不是這樣。國家圖書館這裡有原文。愛因斯坦原本的意思是:『學生應該可以理解和感受各種價值,不然的話他的專業知識只會讓他像"訓練有素的狗"』。愛因斯坦沒有鄙視專家、認為專家不懂思考。不過從陳之藩的斷章取意…或是國立編譯館的寫法…,會讓人覺得愛因斯坦的觀念中會鄙示專家。愛因斯坦是我蠻崇拜的一個偶像,這樣一個被大家公認為20世紀最聰明天才,會有這樣的觀念、偏見,我實在是很難相信。
在這個例子裡,如果沒有去求證的話,還真會以為愛因斯坦會這麼想。
回到一開始的問題:什麼是專家?專家,當然最起碼要有擁有專業訓技能。然而這是不夠的。
我再引用另一個觀念:大前研一的"專業-你唯一的生存之道"。大前兄(講得我好像跟他很熟...)很明確的指出專家專業的差別。如果是專業,那比專家多了什麼? 至少要有驗證的態度。而且會去思考愛因基坦為什麼會這麼認為?他說的是否正確?如果專家是狗,為什麼大家覺得狗(專家)是值得尊敬(專家是值得尊敬的,而專家是狗,所以狗是值得尊敬的)?專業人士會知道要去思考、不拘泥於故有觀念或現有情境,求新求變時時刻刻自我挑戰。
身為一個工程師,該想想一個專業的工程師應該具備那些條件。程式寫得快、寫得有彈性、程式寫得讓人家容易看得懂?還有呢?這問題的答案留給大家去思考。

2007-04-19

解決WinMerge下中文亂碼的問題



簡單來說,在編碼設定處設定「自訂碼頁」為「65001」就可以了。
65001代表什麼意思? 65001就是內碼表(CodePage,CP)中代表-8編碼方式啦。其他如CodePage=936代表簡體中文GBK、CodePage=950代表繁體中文BIG5...,當然CodePage=65001代表UTF-8啦。

2007-04-06

Spring與JSF的整合

原文網址。不錯的文章。大陸那裡已經有人翻譯出來了。不想看英文的人可以看這裡

在Spring中寄發mail

這個範例展示如何使用Spring既有的Class來寄發mail。當然也可以使用spring設定檔。不過我這裡偷懶,直接寫在程式碼裡。有需求的朋友可以依照自己的需求來更動。很間單的。
  /**測試,如何使用Spring、SMTP來寄發e-mail,通知使用者。
   * @param args
   */
  public static void main(String[] args) {
      try {
    //設定寄信伺服器
          JavaMailSenderImpl jms = new JavaMailSenderImpl();
          Properties p =new Properties();
          //寄發信件用的認證
          p.setProperty("mail.smtp.auth", "true");
          jms.setHost("SMTPhost.com.tw");
          jms.setJavaMailProperties(p);
          jms.setUsername("useraccount");
          jms.setPassword("password");
    //設定信件
          SimpleMailMessage smm = new SimpleMailMessage();
          smm.setText("hello, this is mail");
          smm.setTo("sendToAccount@mailserver.com.tw");
          smm.setFrom("sendFromAccount@mailserver.com.tw");
          smm.setSubject("TEST");
          System.out.println("MailTest,main,jms:" + jms);
    //寄信
          jms.send(smm);
          System.out.println("MailTest,main,smm:" + smm);
      } catch (MailException e) {
          e.printStackTrace();
      }
  }

2007-01-05

好公民不用doc

其實這篇文章我很早以前就有看過了,也曾經設法去實踐:在電腦上灌了OpenOffice,給別人文件時,也產生PDF才傳給別人。當然這其中的痛苦和陣痛期是可想而知的。首先是對OpenOffice使用上的問題、再來是對網頁技術的不熟。

在使用OpenOffice上雖然知道不應該期望可以用OpenOffice營造MSOffice 的效果,但很常就不自覺的會這樣期待,也常會不自覺的感到抱怨。拼除這種情況也確實在很多場合下,會一定需要使用MSOffice來製作文件或是散布doc檔。最常見的情形就是對方只收doc檔。什麼? 你說將洪朝貴的文章寄給他看,他是老闆耶~ 。什麼? 為了理想生命都可以不要,更何況是區區的工作? ...你就罵我沒種好了,這種事我做不來。= ="

在網頁技術上儘管說簡單的網頁標籤沒有問題,但是進階一些可就不行了。雖然我是工程師,但網頁設計排版這塊我承認我學藝不精。像調文字行距、浮動區塊等特效、每段前面空2格等,CSS能力不足還真不知道怎麼搞。簡單來說,就是入門門檻太高。另外一個問題是檔案管理上的問題。舉例來說,如果我在一個資料夾下有2篇文章,每篇文章要插入10張圖,這20張圖不就散亂在這資料夾下?還是說圖檔是針對每一篇文章絆隨著另一個目錄?還是一個目錄裡就放一篇文章?使用網頁技術來取代一般所需要的文書行為,所需要的技術門檻要比使用文書軟體要來的高得很多。我認為洪教授應提出他在提倡與實踐自由軟體的一些經驗。我們這些凡人實在是需要一個領導者來帶領。

回歸到Anti-Doc。洪教授所提出的並不是Anti-Microsoft。雖然Doc近似於/等於Mcirosoft。Anti-Doc主要的理念是規格自由。Specification不應該限制於任何Vendor或任何Application。即使是使用odt(OpenOffice Writer所產生的文件格式),嚴格來說只是從Mrcrosoft Wrod轉到OpenOffice Org Writer。就這個條件來看,應該推行的並不是OpenOffice而是html或XML這種開放的文件格式。可是話說回來,如果我想做Sheet這些工作表的計算怎麼辦?使用OpenOffice Calc? 那不又被OpenOffice org綁住了嗎?  這個衝突指出該關心的應該資訊內容。在散布時使用html,在製作時,想使OpenOffice或是MS Office都不是重點。因此對於OpenOffice或MS Office或也沒有什麼支持或拒絕的問題?這看起來好像已經有點偏離主題(從應該使用什麼資料格式->應不應該使用特定的資料產生工具) ,但卻是從原本的議題所延伸出來的。

另外一個是盜版的議題。因為大家使用MS,因為MS有版權,所以才會有盜版的問題。說到這,我有點執疑洪教授所使用的電腦所使用的應用軟體是否全部都是合法軟體? 像翻譯軟體/字典、電子地圖、燒錄軟體這些東西要找到替代的方案還真不太容易。什麼? 洪老師說慾求終止,技術有解時? 但我就是慾求不滿呀。我是覺得用XXEye比較快,用XXGo比較方便呀。什麼? 你說使用者付費? 我是覺得這個還合理啦,可是這樣加一加,小老百性那付擔得起呀。
我已經很少在開M$ Office來製作文件了,當然原因之一是我本身很少有製造文件的需求。但是仍然裝了MS的XX Viewer來接收及閱讀別人所產生的文件。製作文件上大部份還是使用OpenOffice,因為在製作文件時,有些情況下不是很單純的產生資訊,仍然需要產生這些資訊的工具,例如data sheet。

您或許對這些有興趣

最後

謝謝您的閱讀,希望您可以有豐富的收獲。