select * from v$version select * from product_component_version
Google Prettify
2007-11-13
如何查詢Oracle版本?
Weblogic8中如何讓Weblogic優先使用WAR檔的class?
<?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(請注意:DEMO_LOG.JOBID欄位沒有底線,DEMO_JOB.JOB_ID是有底線的。為什麼會這樣呢?? 因為我在建schema時打錯了...:p。不過這無傷大雅。重點來了,2張table的primary-key如下:
LOGID INTEGER,
JOBID VARCHAR2(10),
JOB_TYPE VARCHAR2(4),
....
)
create table DEMO_JOB(
JOB_ID VARCHAR2(10),
JOB_TYPE VARCHAR2(4),
...
)
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也都實作了。 有一些要注意的。
- 無論是DEMO_LOG或DEMO_JOB,在hbm中被定義為primary key的欄位其值不可以為null。 不然取得的list中雖然會有這個element,可是Object卻會是null。想要解決這個問題嗎??可以參考這篇文章。
- 因為在實際table中是無primary ky的,所以資料是可以重覆。但是在hibernate中的entity,則會與select出來的第一筆記錄有相同的instance。
- 重點在於如果DEMO_JOB中有對應不到的記錄,DEMO_LOG所代表的entity還是會呈現,只是差別在於jobinfo property為null。這正是我要處理的...。X的,什麼鳥系統設計的鳥schema....。
2007-09-23
如何轉Serializable物件轉成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有沒有像perforce有force sync的功能?
Subversion導入負責人:ㄟ…你們講的這些功能,subversion都沒有耶~。可是它的介面比較簡單好用…
團員A:什麼好用,難用死了,沒有force sync、又沒有辦法可以知道現在這個檔有人在更改,每次都會conflict,每次都要手動merge。以前都不用merge,就算要merge,用auto-merge就可以了,perforce就會自動幫我們merge好,都不用再去手動merge。還有啊,以前看到有人在改相同的一個檔案時,就先放著等一下就好了,先改其他的code。現在用subversion都要問一下:「現在沒有人在改這個檔案啊? 沒人改的話我要改囉」。難用死了,以前用perforce都不需要這麼問,現在換一個軟體反倒要這麼問,這說不過去啊…。
於是在團員們的抗議下只好終止引入subversion這套系統。
2007-06-03
建立信任,不容易,卻很重要!
很奇怪的,台灣的教育講究要信任、但是沒有教導要如何信任,反而教的大多是如何防人。中國講防人之心不可無、卻很少在講要心存信任他人。這也許與文化有關。天主耶穌基督講究的是只要你肯悔改,它就會原諒你。中國五千年文化就沒有這麼寬宏大量了,不過幸好佛教文化至少還是有講究"不可害人"。
這篇是引用文,卻也突顯出台灣的教育。以前就有聽過一種說法:只有台灣人寫的程式在防東防西、怕使用者亂搞手腳;老外寫的程式都著重在功能上、相信使用者會依正常流程來操作。也因此在撰寫程式時就會花費很多心力在防東防西、防使用者透過不正常的連結連入網站。
像這樣唯利是圖的社會文化會被保留下來,我相信一定有它的適應之處。(文化沒有對不對,只有適不適應)。在這種唯利是圖的社會文化生存,沒什麼不好、沒什麼不正確、也沒什麼不可以。不過考慮防小人所花的成本,這種信任的社會的好處就應該蠻吸引人了。
當然,想要讓信任在社會文化下運作、配套措施是不可少的。最直接的就是教育素養。然而教育又是百年大計,也就是說要想要有一個像義大利或日本這樣一個信任的環境至少要百年的時間...。如果將這個時程表拿給政府官員或教育部長,我相信馬上會被打回票,因為費時太久。然而我希望今年就會是第一年。