部落客廣告聯播

2008年5月28日 星期三

Websphere 建立 MySQL DataSource 的步驟

Websphere 建立 MySQL DataSource 的步驟

後記:
若在第第四步測試時通過,但顯示有一個警告,打開SystemOut.log中顯示的是「DataSource 類別 com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource 沒有 'factory' 內容」則可把在第三步驟自訂內容加入的 factory( java.lang.String ) property項目刪除,就不會再出現警告了............

撰寫 web service client stub時的錯誤

若出現
java.lang.ClassCastException: com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl cannot be cast to com.sun.xml.messaging.saaj.soap.MessageImpl
訊息,可能是因為JDK是1.6太新,
則需要下載最新版的SAAJ API,
https://saaj.dev.java.net/

2008年5月25日 星期日

如何在Eclipse3.3中發布專案到local Websphere 6.1 AP Server

如何在Eclipse3.3中發布專案到local Websphere 6.1 AP Server

即使網路上的消息是eclipse預計在2007Q3新增對Websphere AP server 6.1的支援 , 但直到現在在Eclipse中新增server時websphere都還是只有6.0可選擇。

經過Google神廟九十叩一百八十拜的努力後, 發現了下列連結文章:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=160220
https://bugs.eclipse.org/bugs/attachment.cgi?id=95764&action=diff

這裡將使用eclipse 3.3(2007Q4版,eclipse-jee-europa-winter-win32)作修改, 使之能支援publish 至WAS 6.1。

1. 首先打開 [eclipse目錄] \plugins\org.eclipse.jst.server.websphere.core_1.0.201.v20070608 目錄。
2. 將plugin.xml , plugin.properties, webspherecore.jar 三個檔案覆蓋到 該目錄中。(建議覆蓋前原本的三個檔案先作備份)
3. 將websphere.6.1.serverdef 放到該目錄下serverdef目錄, 將websphere.6.1.xml放到該目錄下serverdef \ scripts 目錄。
4. 開啟eclipse。
5.點選功能選單 window – preference , 點選 Server—installed Runtimes項目,如下圖:

6. 按下Add.. 按鈕 , 展開IBM項目, 你就會看到IBM WhebSphere V6.1
(
如果沒看到IBM Websphere V6.1項目,而你確定你相關檔案都已經放了,那麼請關閉eclipse , 使用指令 eclipse –clean 來開啟就可以看到了)
7. 按下Next> , IBM WebSphere Installation Directory填入你安裝websphere 6.1的目錄路徑,注意路徑中不可有空白,如果有包含空白字元路徑,可使用dos 8.3的方式填入,像我這就填入 C:/progra~1/IBM/WebSphere/AppServer
,
先不要按Finish,我們要設一下JRE,按下installed JRE preferences
8. 這邊我們要選擇Websphere內帶的JRE避免編譯出來的class版本與serverjdk版本不符而發生錯誤
9. 按下Add..按鈕, 如下圖,JRE name可自己取,JRE home Directory 則填入websphere內帶JDK的目錄路徑 , 這邊我是填C:\Program Files\IBM\WebSphere\AppServer\java , 按下 OK 再按一次oK
10. 回到了new server runtime視窗,JRE選擇我們剛新增的JRE,如下圖:
11. 切換到Java EE perspective ,點選 server View, 按下右鍵點選New—server

12. Server type一樣選IBM WebSphere V6.1,下面的 server runtime選我們剛新增好的IBM WebSphere V6.1 ,Next..
13. 接下來在 server profile directory填入你的server profile目錄, 我這是填入c:/progra~1/IBM/WebSphere/AppServer/profiles/AppSrv01 , 按下finish
14. 接著就可以在server view中看到我們新增的server, 在其上按下右鍵選Add and Remove projects,
將你的Ear專案加入後 , 就可以做publish的動作了 , publis成功的話你會在console perspective看到如下訊息:

Buildfile: C:\Users\Dolph\Desktop\eclipse\plugins\org.eclipse.jst.server.websphere.core_1.0.201.v20070608\serverdef\scripts\websphere.6.1.xml

deploy.j2ee.ear:

[jar] Building jar: C:\Users\Dolph\Desktop\eclipse\ws\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\xxxxEAR.ear

[wsadmin] WASX7209I: 已利用 SOAP 連接器來連接 PCNode01 節點中的 "server1" 程序;程序類型是:UnManagedProcess

[wsadmin] ADMA5017I: 已開始解除安裝 xxxxEAR

[wsadmin] ADMA5104I: 已順利更新 WebSphere:cell=xx-PCNode01Cell,node=xx-PCNode01 的伺服器索引項目。

[wsadmin] ADMA5102I: 已順利從配置儲存庫中刪除xxxxEAR的配置資料。

[wsadmin] ADMA5011I: xxxxEAR應用程式的 temp 目錄清理完成。

[wsadmin] ADMA5106I: 已順利解除安裝應用程式 xxxxEAR

[wsadmin] WASX7209I: 已利用 SOAP 連接器來連接 xx-PCNode01 節點中的 "server1" 程序;程序類型是:UnManagedProcess

[wsadmin] ADMA5016I: 已開始安裝 xxxxEAR

[wsadmin] ADMA5058I: 用部署目標的版本來驗證應用程式和模組版本。

[wsadmin] ADMA5018I: 正在執行 EJBDeploy 指令來處理企業保存檔 (EAR) C:\Users\Dolph\AppData\Local\Temp\app7121.ear

[wsadmin] Starting workbench.

........more

最後, 經過測試可正常發佈EAR project ,沒辦法直接發佈dynamic web project, 所以記得新增enterprise application project把相關的dynamic web project加入成web module後再發佈…………………….

15.
對了, 還有件重要的事, 記得把專案內容Java Compiler中的compiler compliance level設為5.0(因為websphere內帶使用的JDK1.5版的), 否則就算成功拋上server, 程式run 時還是會出錯喔。

16. 另外, 除了上列設定外, 在專案內容的Java Build Path中也要記得將IBM Websphere v6.1 server runtime加入libraries頁中喔, 不然也會導致編譯錯誤的問題喔。

2008年5月23日 星期五

讓JSP container把.js當成JSP處理

在web.xml中加入:

<jsp-config>

<jsp-property-group>
<description>Treat .js(Dynamic JS) as JSP file</description>
<display-name>JS</display-name>
<url-pattern>*.js</url-pattern>
<el-ignored>false</el-ignored>
<page-encoding>utf-8</page-encoding>
<scripting-invalid>false</scripting-invalid>
<is-xml>false</is-xml>
</jsp-property-group>

</jsp-config>

2008年5月13日 星期二

JDBC SQL Type與Java Type Mapping

請參閱

Websphere Application Server Toolkit 6.1.1

Websphere Application Server Toolkit 6.1.1 在vista上跑, 頻頻當掉, 且build後沒有class檔。
(疑其內帶JVM與Vista相容性不高)....

救命囉.........


後記:
原來要6.1.1.2才支援Vista(參照IBM),偏偏我用的是6.1.1

後後記:
更新了fix 6後 , 還是沒有編出class檔(吶悶0,0), 後來發現原來我的workspace若在 c:\users下面的話才會有這問題 , 一定又是Vista的UAC或檔案保護甚麼鳥的的傑作, 氣死我了 ,浪費這麼多時間.........

再後記:
疑...........又不行了.......真怪............
發現原來在AST中使用dynamic web project如果source的package level超過三層,就會照成邊不出class的問題 , 這應該是APT的Bug吧............
算了........... 放棄......... Uninstalling Websphere AST.................

2008年5月12日 星期一

Request encoding與 Filter與中文亂碼

故事是這樣的,我的web-app中有兩個filter
  1. CharEncodingFilter - 針對所有request作request.setCharacterEncodin("utf-8");動作,避免亂碼
  2. SessionCheckFilter - 檢查session是否timeout,並做些附加動作

然而亂碼所有設置照理講我都做了,卻還是看到亂碼??

這到底怎麼回事呢??

答案是針對同個request只要做過getParameter( )後,即使再作setCharacterEncoding( )動作, 後續再getParameter( ) 還是會使用舊的encoding取出parameter而得到亂碼 , 所以說若要避免亂碼則setCharacterEncoding要在所有getParameter動作前呼叫!

然而在我的情況下作debug發現我的sessionCheckFilter在charEncodingFilter之前執行,而我的sessionCheckFilter剛好有做getParameter動作 , 所以當然即使我的charEncodingFilter有執行,但怎樣取都是亂碼的啦!!

而Filter執行的順序是基於何呢??

經過嘗試答案是 在web.xml中的先後擺放順序,也就是說對應CharEncodingFilter的要放在前面才對!! ( 這是在tomcat上測試結果,在其他實做如何,如果有人知道請告訴我)

照理說setCharacterEncoding( )在getParameter( )後無效的話,應該丟個Exception出來, 這樣設計也才讓人知道說 問題出在哪, 然而實際上就是沒有, 這....

2008年5月7日 星期三

Tomcat Get亂碼

使用Get出去的資料在下一頁接收會變亂碼:
1. 在程式中先將中文parameter value使用(url+utf8) encoder編碼
2. 在tomcat 的server.xml,
<connector debug="”0″" port="”8080″" maxthreads="”150″" minsparethreads="”25″" maxsparethreads="”75″" enablelookups="”false”" redirectport="”8443″" acceptcount="”100″" connectiontimeout="”20000″" disableuploadtimeout="”true”" uriencoding="utf-8" />

2008年5月4日 星期日

Spam Blog

真是好笑!沒想到Blogger的機器人也真笨(笨到家了) , 我禮拜六開了個新的blog - DB著魔錄 ,想說以後和資料庫相關的文章都放到那, 申請了還沒時間貼文, 沒想到禮拜日Blogger就給了我封信, 說 喔喔....你這blog高度可能是垃圾blog ,(臉青了,我嘴巴都還沒張開你就說我啞吧)......

機器人就是.....

2008年5月1日 星期四

關於CustomTag的TEI

在開發JSP custom tag 時,要將tag中的data放到pageContext中以利JSP頁面撈用,
通常都是在Tag中用pageContext.setAttribute("varName",var),
此外還要讓JSP知道有哪些變數可用,有兩種方法:

  1. 在.tld裡面該Tag區段中宣告元素及其內容
  2. 另外寫個TEI class (Tag Extra Info) ,然後在.tld檔中使用元素指明class位置

其中使用2的方法有時算是比較複雜的狀況下非得用到。

然而在TEI clas的getVariableInfo方法中, 我們使用TagDatao(這是這個method傳入的參數)的getAttribute或getAttributeString兩個方法時, 記得我們的tag的attribute內容必須是靜態的,也就是說不能是runtime決定的變數內容。

原因在於TEI class是在translation time(也就是JSP轉servlet)時就叫用的。