部落客廣告聯播
2008年5月28日 星期三
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
即使網路上的消息是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版本與server的jdk版本不符而發生錯誤
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.
最後, 經過測試可正常發佈EAR project ,沒辦法直接發佈dynamic web project, 所以記得新增enterprise application project把相關的dynamic web project加入成web module後再發佈…………………….
15. 對了, 還有件重要的事, 記得把專案內容Java Compiler中的compiler compliance level設為5.0(因為websphere內帶使用的JDK是1.5版的), 否則就算成功拋上server, 程式run 時還是會出錯喔。
16. 另外, 除了上列設定外, 在專案內容的Java Build Path中也要記得將IBM Websphere v6.1 server runtime加入libraries頁中喔, 不然也會導致編譯錯誤的問題喔。
2008年5月23日 星期五
讓JSP container把.js當成JSP處理
<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月22日 星期四
2008年5月13日 星期二
Websphere Application Server Toolkit 6.1.1
(疑其內帶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與中文亂碼
- CharEncodingFilter - 針對所有request作request.setCharacterEncodin("utf-8");動作,避免亂碼
- SessionCheckFilter - 檢查session是否timeout,並做些附加動作
然而亂碼所有設置照理講我都做了,卻還是看到亂碼??
這到底怎麼回事呢??
答案是針對同個request只要做過getParameter( )後,即使再作setCharacterEncoding( )動作, 後續再getParameter( ) 還是會使用舊的encoding取出parameter而得到亂碼 , 所以說若要避免亂碼則setCharacterEncoding要在所有getParameter動作前呼叫!
然而在我的情況下作debug發現我的sessionCheckFilter在charEncodingFilter之前執行,而我的sessionCheckFilter剛好有做getParameter動作 , 所以當然即使我的charEncodingFilter有執行,但怎樣取都是亂碼的啦!!
而Filter執行的順序是基於何呢??
經過嘗試答案是 在web.xml中
照理說setCharacterEncoding( )在getParameter( )後無效的話,應該丟個Exception出來, 這樣設計也才讓人知道說 問題出在哪, 然而實際上就是沒有, 這....
2008年5月10日 星期六
2008年5月7日 星期三
Tomcat 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月6日 星期二
2008年5月4日 星期日
2008年5月1日 星期四
關於CustomTag的TEI
在開發JSP custom tag 時,要將tag中的data放到pageContext中以利JSP頁面撈用,
通常都是在Tag中用pageContext.setAttribute("varName",var),
此外還要讓JSP知道有哪些變數可用,有兩種方法:
- 在.tld裡面該Tag區段中宣告
元素及其內容 - 另外寫個TEI class (Tag Extra Info) ,然後在.tld檔中使用
元素指明class位置
其中使用2的方法有時算是比較複雜的狀況下非得用到。
然而在TEI clas的getVariableInfo方法中, 我們使用TagDatao(這是這個method傳入的參數)的getAttribute或getAttributeString兩個方法時, 記得我們的tag的attribute內容必須是靜態的,也就是說不能是runtime決定的變數內容。
原因在於TEI class是在translation time(也就是JSP轉servlet)時就叫用的。