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重覆的問題了。

您或許對這些有興趣

最後

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