<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9408513</id><updated>2011-04-22T11:41:00.158+08:00</updated><title type='text'>BEA WebLogic &amp; AquaLogic</title><subtitle type='html'>Everything about Java, J2EE, WebLogic, AquaLogic.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9408513.post-112953411600152777</id><published>2005-10-17T15:10:00.000+08:00</published><updated>2005-10-17T15:30:29.026+08:00</updated><title type='text'>同時使用用戶數與TPS的關係</title><content type='html'>一般應用伺服器公佈的容量規劃(Capacity Planning)文件多是以TPS(每秒交易量; 交易的定義依測試標準而不同)計算, 但大部分的使用者需求是從多少個同時使用者(Concurrent Users)來衡量, 這有個簡單的算式來轉換TPS與同時連線使用者的關係:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;同時連線使用者人數 = (ETT x TPS) + TPS&lt;/div&gt;&lt;div align="center"&gt;ETT(Estimated Think Time): 預估的思考時間, 二個連續動作的休息時間&lt;/div&gt;&lt;br /&gt;依據這個算式, 如果二顆Sun Sparc 750Mhz的CPU在95%的利用率下, 可以榨出55.76 TPS, 假設思考的停留時間為4秒, 則同時連線人數可支撐到278.8 (4*55.76+55.76).&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-112953411600152777?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/112953411600152777/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=112953411600152777' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/112953411600152777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/112953411600152777'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2005/10/tps.html' title='同時使用用戶數與TPS的關係'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110594130359384500</id><published>2005-01-17T11:55:00.000+08:00</published><updated>2005-01-17T15:20:36.556+08:00</updated><title type='text'>Workshop中幾個安控屬性的意義</title><content type='html'>在Workshop時, 屬性編輯視窗在特定的檔案開啟後, 會有一個security小節, 這些設定一樣是用Javadoc Annotation寫在原始碼, 例如:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Web Services , Java Control 與 JPD : @common:security &lt;/li&gt;&lt;li&gt;Java Page Flow : @jpf:controller 與 @jpf:action &lt;/li&gt;&lt;li&gt;EJBGen : @ejbgen:role-mapping &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;簡單的說明一下這些屬性的意義, 詳細內容還是要參考手冊!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;roles-allowed&lt;/strong&gt; : 准許設定的角色可以使用物件, 這些角色必須已經定義在web.xml或ejb-jar.xml 。在@jpf:controller設定的是套用到整個class, 可存取所有methods, 若在@jpf:action設定, 算是擴充(再加上原來@jpf:controller的部份)；同樣原理也適用在@common:security。&lt;/p&gt;&lt;strong&gt;roles-referenced&lt;/strong&gt; : 不適用於JCX或JPF檔。代表在程式中會用到的角色, 列在此則會在DD中增加security-role-ref的設定, 例如在JWS中設定, 則在編譯後的EJB Jar檔裡, ejb-jar.xml中會多一筆security-role-ref, 且在weblogic-ejb-jar.xml中該角色被設定為externally-defined。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;run-as&lt;/strong&gt; : 代表設定的這個角色有權利存取其他資源, 當存取該資源時, 會用設定的角色名稱, 因此使用設定的檔案編譯完成DD檔會多一筆相關的角色設定, 且是externally-defined。如果run-as-principal沒有設定, 則此屬性同時代表principal與角色名稱。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;single-principal&lt;/strong&gt; : 如果設定為true, 則使用此服務時, 在對話中的所有動作都必須由同一個principal來做。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;callback-roles-allowed&lt;/strong&gt; : 定義當JWS呼叫控制項後, 誰可回呼JWS的Callback介面, 而此控制項必須實作ExternalCallbackTarget介面。&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110594130359384500?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110594130359384500/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110594130359384500' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110594130359384500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110594130359384500'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2005/01/workshop.html' title='Workshop中幾個安控屬性的意義'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110535017446304270</id><published>2005-01-10T17:18:00.000+08:00</published><updated>2006-05-30T12:47:59.270+08:00</updated><title type='text'>BPM如何處理交易中的錯誤</title><content type='html'>在WebLogic Integration 8.1中, 所有的流程都是至少有一個全域交易(Global Transaction), 萬一有錯誤(Exception)發生, 流程引擎會怎麼運作呢? 下面這張圖是基本的演算法:&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;img src="http://photos1.blogger.com/blogger/7987/683/320/bpm_tx.jpg" /&gt;&lt;/p&gt;很清楚地, 只有在沒被標示成Roll-Back Only, 而且Exception Hanlder沒有產生錯誤的情況下, 流程會繼續跑下去(Resume), 否則都Rollbacked, 流程進入Aborted狀態。&lt;br /&gt;&lt;br /&gt;問題來了, 如果流程被設定成"freeze on failure"時, 會如何? 答案是: 交易會被Roll-backed, 而且不會執行Exception Handler, 流程進入凍結狀態! 如果又希望在Rollbacked前, Exception Handler可以被執行的話 (例如做補償交易), 可以將其"execute on rollback"屬性設成"true" 。&lt;br /&gt;&lt;br /&gt;Exception的處理, 影響到整個流程的設計, 請千萬小心!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;原始文件在 &lt;/span&gt;&lt;a href="http://e-docs.bea.com/workshop/docs81/doc/en/integration/wfguide/wfguideException.html"&gt;&lt;span style="font-size:85%;"&gt;http://e-docs.bea.com/workshop/docs81/doc/en/integration/wfguide/wfguideException.html&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; 可取得。&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110535017446304270?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110535017446304270/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110535017446304270' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110535017446304270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110535017446304270'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2005/01/bpm.html' title='BPM如何處理交易中的錯誤'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110483020612855204</id><published>2005-01-04T16:50:00.000+08:00</published><updated>2005-01-04T17:16:46.130+08:00</updated><title type='text'>使用WebLogic Server叢集時, 程式寫作上要注意什麼?</title><content type='html'>在BEA快三年, 這也是常被問的問題之一! 除了需要根據WebLogic Server的規定, 在部署時做設定, 的確有些常犯的錯誤, 但當了解原理與J2EE規格後, 通常應該不會有此疑問。叢集可以容錯轉移的基本原理是, 透過網路讓不同的JVM互相溝通, 備份資料, 並且看看誰已經死了, 不要再去打擾它。&lt;br /&gt;&lt;br /&gt;所以在Servlet/JSP寫作上, 要注意:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;放到Session的資料都要Serializable, 不然怎麼備份?&lt;/li&gt;&lt;li&gt;只用setAttribute跟removeAttribute修改Session裡的資料, 因為WebLogic只監控這二個方法&lt;/li&gt;&lt;li&gt;小心放到Session的資料, 因為它需要做網路複製的動作, 會影響整體效能, 更重要的, 目前還沒有好的方法知道Session裡有哪些資料, 哪些是不Serializable, 大小, 除非買工具來做&lt;/li&gt;&lt;li&gt;小心使用Frames! 有可能每個開發人員都在自己的Frame裡產生Session, 而系統不會幫這些Frames做同步, 在叢集環境裡就會搞死人! 所以最簡單的方法是有一個Frameset的其中一個Frame產生Session, 之後用其他的Frameset的一個Frame來修改Session資料&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;對Stateless Session Bean來說, 最重要的是idempotent, 也就是同樣資料餵進去, 不管幾次, 再哪一台Server, 都有一樣的結果, 這樣就可以做容錯轉移, 像新增物品到購物籃的程式, 本質上就不行!&lt;/p&gt;&lt;p&gt;對Stateful Session Bean而言, 跟HTTP Session 一樣, 注意要被放的狀態需要可以序列化!&lt;/p&gt;&lt;p&gt;以上說明都是來自&lt;a href="http://e-docs.bea.com/wls/docs81/cluster/failover.html#1032777"&gt;http://e-docs.bea.com/wls/docs81/cluster/failover.html#1032777&lt;/a&gt; .&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110483020612855204?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110483020612855204/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110483020612855204' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110483020612855204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110483020612855204'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2005/01/weblogic-server.html' title='使用WebLogic Server叢集時, 程式寫作上要注意什麼?'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110482806633768753</id><published>2005-01-04T14:32:00.000+08:00</published><updated>2005-01-04T16:41:06.336+08:00</updated><title type='text'>關於叢集所提供的負載平衡與容錯轉移功能</title><content type='html'>很多人會問二個問題 : 1) 為什麼使用叢集後, 負載沒有平衡? 2) Servlet收到Client要求, 呼叫同一部WLS instance裡的EJB, EJB物件死了, 怎麼沒有轉移到其他部執行?&lt;br /&gt;&lt;br /&gt;回答這些問題前, 先解釋二個名詞, 在叢集部署時, 最簡單的有二種情況, 第一種是Web Container跟EJB Container在同一個WLS Instance裡, 這我們叫&lt;a href="http://e-docs.bea.com/wls/docs81/cluster/planning.html#1090621"&gt;Basic Architecture或2-Tier Architecture&lt;/a&gt;; 第二種稱為&lt;a href="http://e-docs.bea.com/wls/docs81/cluster/planning.html#1115757"&gt;Multi-Tier Architecture&lt;/a&gt;, 這種狀況是Web Container與EJB Container跑在不同的機器上。&lt;br /&gt;&lt;br /&gt;首先, 先回答第一個問題, 這通常發生在2-Tier Architecture中, 而且應用程式均部署再每一台伺服器, 負載不平均有可能是因為EJB的呼叫不平均, 為什麼? 根據文件, 我可能已經指定一種&lt;a href="http://e-docs.bea.com/wls/docs81/cluster/load_balancing.html#1008605"&gt;演算法(Round-Robin, Weight-Based, Parameter-Based或Random)&lt;/a&gt;了, 理論上EJB呼叫應該均勻分配, 不是嗎? 答案不是的! WebLogic 會最佳化這個腳本, 因為Servlet跟EJB在同一個WebLogic Server Instance裡都有了, 何必遠求浪費時間呢? 這就跟我們要吃鼎泰豐一樣, 既然台灣都有了, 何必跑到日本吃, 有比較便宜嗎? 所以當這些物件被放在一起時, 就不會根據指定的負載平衡演算法來走, 而是找本地的, 詳細說明在這裡&lt;a href="http://e-docs.bea.com/wls/docs81/cluster/load_balancing.html#1008605"&gt;http://e-docs.bea.com/wls/docs81/cluster/load_balancing.html#1008605&lt;/a&gt;的Optimization &lt;a name="Collocated_objs"&gt;&lt;/a&gt;for Collocated Objects小節。除了這個原因, 也可能是其他因素, 例如我們觀察的時間太短, 負載平衡應該是在較長的時間中的統計結果。&lt;br /&gt;&lt;br /&gt;第一個問題其實已經說明第二個問題, 注意在叢集運作裡, 其實是以WLS Instance為單位, 更簡單的說是JVM, 負載透過平均分散在不同的JVM以達到平衡的效果。跟第一個問題同樣的設定腳本， Servlet呼叫的EJB物件無法使用, 請問有這樣的狀況嗎? 會有這樣的狀況通常Web Container也跟著掛了, 更可能連JVM都有問題了, 怎麼可能有問題的Servlet再去呼叫其他台可用的EJB? 所以區分的界限是在OS的Process是否正常。當然隨著技術演進, 這樣的設計可能過時, 但很清楚的是, 天下沒有白吃的午餐, 當要求越多, 付出也會越多。&lt;br /&gt;&lt;br /&gt;因此, 要充分達到我們的理想, 就要使用Multi-Tier架構, Web App獨立一層, EJB獨立一層, 這樣富在就能夠根據演算法分配, 所有的EJB使用都是遠端的, 當有非應用程式的錯誤時, 就可以轉移到其他伺服器上執行, 雖然達到目標且更有彈性與伸縮性, 但是增加了管理上的難度。&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110482806633768753?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110482806633768753/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110482806633768753' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110482806633768753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110482806633768753'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2005/01/blog-post.html' title='關於叢集所提供的負載平衡與容錯轉移功能'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110361794232510533</id><published>2004-12-21T16:12:00.000+08:00</published><updated>2004-12-21T16:32:22.326+08:00</updated><title type='text'>常見的問題</title><content type='html'>同樣的問題, 一定會從不同人的嘴巴發問, 這是歷史的必然. 所以當你看到這一篇, 有人會很慶幸少了一件事:)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;a href="http://e-docs.bea.com/wls/docs81/faq/index.html"&gt;WebLogic Server FAQ&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="http://e-docs.bea.com/wli/docs81/bpfaq/"&gt;WebLogic Integration Best Practice FAQ&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="http://support.bea.com/support_news/product_troubleshooting/product_troubleshooting.jsp"&gt;Support Patterns&lt;/a&gt; : 介紹各種疑難雜症的診斷與解決, 譬如最常問的 -&lt;a href="http://support.bea.com/askbea_soln/attachments/S-27131/81adminaccountreset_viewlet_swf.html"&gt; 忘記管理者密碼&lt;/a&gt;怎麼辦? 簡體中文版看&lt;a href="http://www.bea.com.cn/support_pattern/index.htm"&gt;這裡&lt;/a&gt;!&lt;/li&gt;   &lt;li&gt;可以試試看機器人的回答 : &lt;a href="http://support.bea.com"&gt;http://support.bea.com&lt;/a&gt;&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; &lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110361794232510533?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110361794232510533/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110361794232510533' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110361794232510533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110361794232510533'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2004/12/blog-post_21.html' title='常見的問題'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110292351437648140</id><published>2004-12-13T14:29:00.000+08:00</published><updated>2004-12-13T16:11:28.963+08:00</updated><title type='text'>誰是小惡魔 (Diablo) ? </title><content type='html'>WebLogic Server 9.0 內部代號小惡魔 (Diablo), 有用不完的精力, 所以也不會休息 (Non-Stop Application Server), 預計在12/16提供&lt;a href="http://www.bea.com/diablo"&gt;測試版下載&lt;/a&gt;, 在這先來介紹一下:)&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;標準&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JDK 5.0 (1.5)&lt;/li&gt;&lt;li&gt;J2EE 1.4 &amp; 1.3 (JSF還不是J2EE標準的一個部份, 要小心觀察它未來的變化!)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Core (Reliability &amp;amp; Availability)&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;自動調整伺服器, 以更有效利用資源&lt;/li&gt;&lt;li&gt;負荷超載預防: 拒絕服務, 暫停或停機&lt;/li&gt;&lt;li&gt;Node Manager支援多個Domain且可重新啟動Admin Server&lt;/li&gt;&lt;li&gt;叢集與叢集間在MAN互相同步複製備援 (In-Memory)&lt;/li&gt;&lt;li&gt;叢叢與叢集間在WAN非同步複製備援 (Persistence)&lt;/li&gt;&lt;li&gt;Singleton服務移轉 (當有錯誤時)&lt;/li&gt;&lt;li&gt;應用伺服器有問題時, 並使用共用磁碟時, 可包含IP位址移轉到其他機器&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;管理&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;"Live" 伺服器版本更新 : 跨叢集更新版本, 不用停機 (Disruption-Free)&lt;/li&gt;&lt;li&gt;新的問題診斷架構 (Diagnostic Framework) : Server Snapshot, 多種通知方式 (Email, SNMP, JMX)&lt;/li&gt;&lt;li&gt;Portal-based的管理介面 : 模組化, 簡化客製, 可將部分功能當成Portal的組件&lt;/li&gt;&lt;li&gt;批次變更 (Batch Change), 與共管處理 (Lock Management)&lt;/li&gt;&lt;li&gt;支援JSR-88部署計畫&lt;/li&gt;&lt;li&gt;WLST : Scripting工具離線或線上修改設定&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;部署&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;"Live" 應用程式更新 : 舊版與新版同時跑 (side-by-side), 新的流量會導到新版, 也同供Rollback功能&lt;/li&gt;&lt;li&gt;JSR-88部署計畫, 支援Application Release Lifecycle&lt;/li&gt;&lt;li&gt;自動退休政策 : 慢慢退下 (Graceful), 還是時辰到了!&lt;/li&gt;&lt;li&gt;版本管理&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;JDBC&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;JDBC 3.0, Rowset (JSR-114), JSR-77&lt;/li&gt;&lt;li&gt;可使用JSR-88部署全域或專用(application-scope)的DataSource&lt;/li&gt;&lt;li&gt;Profiling, Debugging, JDBC子系統 Core Dump, 註冊Callbacks&lt;/li&gt;&lt;li&gt;新的有用統計資料&lt;/li&gt;&lt;li&gt;Multipool支援XA Datasources&lt;/li&gt;&lt;li&gt;Connection Pool錯誤偵測: 超過容忍時間後, 測試失敗就清空&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;JMS&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Store and Forward : 暫存訊息在本地端, 當遠端可接收時, 保證送達&lt;/li&gt;&lt;li&gt;Unit of Order : 訊息可依序被處理&lt;/li&gt;&lt;li&gt;全域, 專有, 或獨立的JMS資源部署&lt;/li&gt;&lt;li&gt;訊息管理 : 檢視瀏覽所有訊息(包含隱藏的), 刪除, 移動, 匯入/匯出&lt;/li&gt;&lt;li&gt;暫停/繼續訊息處理, MDB暫停/繼續&lt;/li&gt;&lt;li&gt;JMS C API (Windows, HP, Solaris)&lt;/li&gt;&lt;li&gt;訊息生命週期紀錄&lt;/li&gt;&lt;li&gt;訊息壓縮&lt;/li&gt;&lt;li&gt;效能提昇&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;JSR-168熱身 : SSO framework, 提供Servlet Authentication Filter&lt;/li&gt;&lt;li&gt;JACC (JSR-115) : 抽插式授權模組&lt;/li&gt;&lt;li&gt;支援應用程式版本管理&lt;/li&gt;&lt;li&gt;可根據時間, 原則, HTTP Request及HTTP Session屬性, 上下文資訊授權&lt;/li&gt;&lt;li&gt;可設定的RDBMS Realm&lt;/li&gt;&lt;li&gt;Windows Provide及SPNEGO SSO支援&lt;/li&gt;&lt;li&gt;支援SAML : OASIS 單一簽入(SSO)標準&lt;/li&gt;&lt;li&gt;Auditing : SOAP訊息內容, HTTP Request/Response, SAML Token, WLI訊息資料&lt;/li&gt;&lt;li&gt;Web Service Security支援 : WS Digest, SAML Profile&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;XML與Web Services&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;SOAP 1.1, WSDL 1.2, UDDI 2.0&lt;/li&gt;&lt;li&gt;WSEE (JSR-109), JAX-RPC 1.1, , JSR-181, , SAAJ 1.2, JAX-R&lt;/li&gt;&lt;li&gt;WS-I Basic Profile 1.0, WS-Policy, WS-Reliable Messaging, WS-Addressing, WS-Buffering, WS-Conversation, WS-Callback&lt;/li&gt;&lt;li&gt;Cluster Routing&lt;/li&gt;&lt;li&gt;XMLBean v2&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110292351437648140?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110292351437648140/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110292351437648140' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110292351437648140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110292351437648140'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2004/12/diablo.html' title='誰是小惡魔 (Diablo) ? '/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110291829257617450</id><published>2004-12-13T13:30:00.000+08:00</published><updated>2004-12-13T14:12:07.526+08:00</updated><title type='text'>WebLogic 8.1 SP4</title><content type='html'>WebLogic 8.1 SP4英文版在12/9提供公開&lt;a href="http://commerce.bea.com/showproduct.jsp?family=WLP&amp;major=8.1&amp;amp;minor=4"&gt;下載&lt;/a&gt;, 除了維修現有臭蟲之外, 還加強了Workshop的處理速度, 與WebLogic Integration及WebLogic Portal的效能及伸縮性, 另外補了一些"How-to"的文件.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WebLogic Portal&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Look and Feel Editor&lt;/li&gt;&lt;li&gt;新文件: 效能調校, Best Practice, WSRP, Inter-portelt等&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;WebLogic Integration&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;提供同步用戶端呼叫非同步資源 (Sync/Async SOAP Servlet)&lt;/li&gt;&lt;li&gt;資料庫事件產生器 (取代Database Adapter)&lt;/li&gt;&lt;li&gt;可根據行事曆制定事件產生器&lt;/li&gt;&lt;li&gt;強化File Control&lt;/li&gt;&lt;li&gt;新的控制項 (Controls) : Dynamic Transformation, XML MetaData Cach&lt;/li&gt;&lt;li&gt;WLI Console 可提止所有流程事例&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;WebLogic Server&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;支援MySQL&lt;/li&gt;&lt;li&gt;新的Message Bridge設定助理&lt;/li&gt;&lt;li&gt;SPNEGO : 登入Windows 2000/2003 AD Domain之後, 當使用WebLogic服務時, 不必再做一次HTTP認證&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;另外, Oracle RAC (9i, 10g) 支援整個WebLogic Platform, 但因為Oracle RAC的限制, 導致目前在WebLogic也有些限制:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;XA只提供Failover (Driver-level), 沒法負載平衡, 因為Oracle RAC要求分散式交易要在同一個資料庫主機&lt;/li&gt;&lt;li&gt;Non-XA : 透過Multipool, 可支援負載平衡與容錯轉移, 但是Multipool不支援XA, WLI與WLP目前也不支援Multipool&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;WebLogic 與 Oracle RAC 完整整合預計在明年1月, 應該會有理想的HA與LB功能.&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110291829257617450?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110291829257617450/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110291829257617450' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110291829257617450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110291829257617450'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2004/12/weblogic-81-sp4.html' title='WebLogic 8.1 SP4'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110267457513436413</id><published>2004-12-10T18:23:00.000+08:00</published><updated>2004-12-10T18:30:23.260+08:00</updated><title type='text'>WLS 8.1 Certified Administrator</title><content type='html'>剛考完&lt;a href="http://certification.bea.com/certification/study_guide/System_Administration_11_12_04.htm"&gt;WLS 8.1 Certified Administrator&lt;/a&gt;認證, 比重比較大的部份是Cluster, Performance Tuning, JMS, LDAP與Security, Application Deployment, JMS, Node Manager及Network Channel. 大概有六成, 其他安裝跟基本管理大概一成.&lt;br /&gt;&lt;br /&gt;填空題有三題, 應該都是必考的:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Sever Life-Cycle&lt;/li&gt;&lt;li&gt;各類Heuristic Transaction Exception&lt;/li&gt;&lt;li&gt;JMS File Store Synchronization Write Policy解釋 : Disabled, Cache-Flush, Direct-Write&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;雖然每一題都認為是答對的, 但是還是沒有滿分:(&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110267457513436413?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110267457513436413/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110267457513436413' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110267457513436413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110267457513436413'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2004/12/wls-81-certified-administrator.html' title='WLS 8.1 Certified Administrator'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110260508928984957</id><published>2004-12-09T23:01:00.000+08:00</published><updated>2006-10-11T14:53:32.196+08:00</updated><title type='text'>如何產生JVM Thread Dump</title><content type='html'>產生JVM Thread Dump是檢查多執行緒應用最好的方法, WebLogic支援幾種方法:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;在Windows, 找到執行WebLogic Server的命令視窗, 按下[Ctrl]&lt;crtl&gt;+[Break]&lt;break&gt;&lt;/li&gt;&lt;li&gt;如果WebLogic Server是用NT Service執行, 可以使用%WL_HOME%\common\bin\beasvc.exe -svcname:"the_service_name" -dump指令, 結果會產生在設定服務時, -log:所設定的目錄&lt;/li&gt;&lt;li&gt;在Unix, 找到WebLogic Server的PID, 執行$kill -3 PID, 記得要重導STDOUT到檔案&lt;/li&gt;&lt;li&gt;WebLogic提供工具產生Thread Dump, 語法如下:&lt;br /&gt;$java weblogic.Admin -url &lt;?xml:namespace prefix = serverip /&gt;&lt;serverip:port&gt;-username &lt;adminuser&gt;-[adminUser] password [adminPass] &lt;adminpass&gt;THREAD_DUMP&lt;/serverip:port&gt;&lt;/li&gt;&lt;li&gt;&lt;serverip:port&gt;如果用JRockit, 則可以在Management Console&lt;a href="http://e-docs.bea.com/wljrockit/docs142/userguide/mancons.html#998934"&gt;取得Thread Stack Dump&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;/serverip:port&gt;&lt;p&gt;簡單吧! 但是有時候JVM有臭蟲時, 可能就生不出Thread Dump了! &lt;/p&gt;&lt;br /&gt;&lt;serverip:port&gt;&lt;/serverip:port&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110260508928984957?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110260508928984957/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110260508928984957' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110260508928984957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110260508928984957'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2004/12/jvm-thread-dump.html' title='如何產生JVM Thread Dump'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110256317320419002</id><published>2004-12-09T11:15:00.000+08:00</published><updated>2004-12-28T18:13:37.990+08:00</updated><title type='text'>如何閱讀Blog</title><content type='html'>簡單的來說, 要閱讀Blog有幾種方式:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;直接連到該網站, 例如&lt;a href="http://mybea.blogspot.com/"&gt;http://mybea.blogspot.com&lt;/a&gt; &lt;/li&gt;&lt;li&gt;使用RSS/Atom Reader, 網路上有些免費的軟體可以用, 例如&lt;a href="http://www.feedreader.com/"&gt;FeedReader&lt;/a&gt;;如果不想安裝軟體, 可以用這個網站&lt;a href="http://www.bloglines.com/"&gt;http://www.bloglines.com&lt;/a&gt; , 它具有類似我的最愛的功能, 可以自動抓多個Blogs (blogrolls)&lt;/li&gt;&lt;li&gt;如果不喜歡開瀏覽器, 喜歡讀email, 那可以寫信給我, 我會邀請你加入Mailing-list (這是使用Google Groups的功能)&lt;/li&gt;&lt;/ol&gt;本站的Site Feed網址是 &lt;a href="http://mybea.blogspot.com/atom.xml" target="_blank"&gt;http://mybea.blogspot.com/atom.xml&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110256317320419002?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110256317320419002/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110256317320419002' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110256317320419002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110256317320419002'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2004/12/blog.html' title='如何閱讀Blog'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110242224150224763</id><published>2004-12-07T20:10:00.000+08:00</published><updated>2004-12-07T20:29:48.700+08:00</updated><title type='text'>如何使用File Control讀取FTP Server</title><content type='html'>&lt;div align="left"&gt;WebLogic Workshop內建的File Control可以存取本地檔案與FTP Server上的檔案, 但是在設定連接FTP Server需要點技巧(文件沒講清楚的!).&lt;br /&gt;&lt;br /&gt;測試環境: WebLogic Integration 8.1 SP3 + &lt;a href="http://prdownloads.sourceforge.net/filezilla/FileZilla_Server_0_9_4d.exe?download"&gt;FileZilla Server 0.9.4d beta &lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;span style="color:#6666cc;"&gt;[注意] 使用其他FTP Server, 要先用ftp命令測通(需要使用帳戶與密碼的), 不然浪費時間, 例如FtpGo就不能用.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;File Control的設定內容應該長類似這樣: &lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;    /**&lt;br /&gt;      * A custom file control.&lt;br /&gt;      * @jc:file directory-name="/ftpdir"&lt;br /&gt;      * ftp-password="weblogic"&lt;br /&gt;      * ftp-user-name="weblogic"&lt;br /&gt;      * create-mode="rename-old" ftp-host-name="localhost"&lt;br /&gt;      * file-mask="mytest.txt"&lt;br /&gt;      */&lt;br /&gt;      public interface FtpCtrl extends FileControl,com.bea.control.ControlExtension&lt;br /&gt;&lt;br /&gt;什麼樣的設定才會讓系統認為不是抓本地檔案, 而是FTP Server上的呢? &lt;span style="color:#cc0000;"&gt;注意了, ftp-host-name + ftp-user-name + ftp-password 通通要設&lt;/span&gt;, 不然是抓本地端的, 而directory-name指的是在FTP Server上哪一個目錄, 要存取的檔案放在file-mask中, 當然這些屬性都可以透過File Control的setProperties()動態改變:)&lt;br /&gt;&lt;br /&gt;一點小秘訣, 受用一整天:P&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110242224150224763?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110242224150224763/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110242224150224763' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110242224150224763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110242224150224763'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2004/12/file-controlftp-server.html' title='如何使用File Control讀取FTP Server'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9408513.post-110206123041032095</id><published>2004-12-03T16:05:00.000+08:00</published><updated>2004-12-09T10:11:12.673+08:00</updated><title type='text'>如何安裝Roller在WebLogic Server 8.1 SP3</title><content type='html'>&lt;p&gt;Blog使用者已超過1億, 但多數還是使用PHP, Perl等語言為平台, 所以這裡介紹以Java為主的組合.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;使用的軟體包含:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://commerce.bea.com/showproduct.jsp?family=WLS&amp;amp;major=8.1&amp;minor=3" target="_blank"&gt;BEA WebLogic Server Express 8.1 SP3&lt;/a&gt; (免費下載, 無使用期限, 限制連線數目為5)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/downloads/mysql/4.1.html" target="_blank"&gt;MySQL 4.1.7&lt;/a&gt; (建議同時安裝管理與查詢工具)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://roller.dev.java.net/servlets/ProjectDocumentList?folderID=2179&amp;amp;amp;expandFolder=2179&amp;folderID=0" target="_blank"&gt;Roller 1.0 RC1&lt;/a&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Windows XP SP2&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Roller 使用了OSS 與 Java 的很多Framework, 涵蓋Struts, Hibernate, Velocity, JSTL 等, 只要有Web Container 理論上都可以跑, 實際測試後是需要微調的, 原來預設是用Tomcat, 但很順利的, 只要調整一部分設定, 修修小臭蟲, 也可以順利運作.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;依照 &lt;a href="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=InstallationGuide" target="_blank"&gt;Roller Installation Guid 1.0&lt;/a&gt; 的步驟, 我做了幾項修正:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;span style="color:#0000ff;"&gt;步驟一&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;   安裝&lt;a href="http://commerce.bea.com/showproduct.jsp?family=WLS&amp;amp;major=8.1&amp;minor=3" target="_blank"&gt;WebLogic Server 8.1 SP3&lt;/a&gt; 後, 使用 &lt;a href="http://e-docs.bea.com/wls/docs81/adminguide/createdomain.html" target="_blank"&gt;Configuration Wizard&lt;/a&gt;新增一個 Basic WebLogic Server Domain, 這時 CATALINA_HOME 指的就是新產生的Domain的目錄&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;span style="color:#0000ff;"&gt;步驟二&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;   乖乖遵照指示, 解壓縮Roller安裝檔, 例如解到C:\roller&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#0000ff;"&gt;&lt;u&gt;步驟三&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;   接著用 MySQL Query Browser 產生一個 UTF-8 編碼的資料庫, 與法如下&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;color:#009f00;"&gt;      CREATE DATABASE roller&lt;br /&gt;          CHARACTER SET utf8&lt;br /&gt;          COLLATE utf8_general_ci;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;   然後執行createdb.sql&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;span style="color:#0000ff;"&gt;步驟四&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;下載 MySQL 的 JDBC Driver : Connect/J. 我使用的版本是&lt;a href="http://dev.mysql.com/downloads/connector/j/3.0.html"&gt;mysql-connector-java-3.0.16-ga-bin.jar&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;然後把 mysql-connector-java-3.0.16-ga-bin.jar 加到startWebLogic.cmd的Classpath中&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;    (我先跳過安裝JavaMail)&lt;br /&gt;    我們先做第七個步驟, 把 JDBC 連線搞定&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;執行startWebLogic.cmd, 等WebLogic Server啟動完成, 連進去管理主控台, 預設是&lt;a href="http://localhost:7001/console"&gt;http://localhost:7001/console&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;在左邊的Applet選擇Services-&amp;gt;JDBC-&amp;gt;Connection Pools, 新增一個MySQL Connection Pool, 操作步驟請看&lt;a href="http://e-docs.bea.com/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1106131" target="_blank"&gt;這裡&lt;/a&gt;, 注意: 在Properties中, 加一行characterEncoding=utf8, 因為中文XP的編碼是MS950, 在新文章打中文存入MySQL會變成亂碼, 因為它是UTF-8的編碼&lt;/li&gt;&lt;br /&gt;&lt;li&gt;下一步, 在它隔壁的DataSources新增一個Data Soruce, 也請看&lt;a href="http://e-docs.bea.com/wls/docs81/ConsoleHelp/jdbc_datasources.html#1105978" target="_blank"&gt;這裡&lt;/a&gt;; 注意: JNDI Name 要是 jdbc/rollerdb, 不要勾選&lt;span class="dialog-label" id="wl_control_weblogic_management_configuration_JDBCDataSourceAssistant_Tx_label"&gt;Honor Global Transactions&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;span style="color:#0000ff;"&gt;步驟五&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    完全不要理Installation Guide說什麼, 跟著我做&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;在WEB-INF產生一個weblogic.xml檔, 內容如下:&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;br /&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;color:#009f00;"&gt;&amp;lt;!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "&lt;/span&gt;&lt;a href="http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"&gt;&lt;span style="font-family:courier new;color:#009f00;"&gt;http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:courier new;color:#009f00;"&gt;"&amp;gt;&lt;br /&gt;&amp;lt;weblogic-web-app&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;color:#009f00;"&gt;  &amp;lt;security-role-assignment&amp;gt;&lt;br /&gt;    &amp;lt;role-name&amp;gt;admin&amp;lt;/role-name&amp;gt;&lt;br /&gt;    &amp;lt;principal-name&amp;gt;admin&amp;lt;/principal-name&amp;gt;&lt;br /&gt;  &amp;lt;/security-role-assignment&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;color:#009f00;"&gt;  &amp;lt;security-role-assignment&amp;gt;&lt;br /&gt;    &amp;lt;role-name&amp;gt;editor&amp;lt;/role-name&amp;gt;&lt;br /&gt;    &amp;lt;principal-name&amp;gt;editor&amp;lt;/principal-name&amp;gt;&lt;br /&gt;  &amp;lt;/security-role-assignment&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;color:#009f00;"&gt;  &amp;lt;reference-descriptor&amp;gt;&lt;br /&gt;    &amp;lt;resource-description&amp;gt;&lt;br /&gt;      &amp;lt;res-ref-name&amp;gt;jdbc/rollerdb&amp;lt;/res-ref-name&amp;gt;&lt;br /&gt;      &amp;lt;jndi-name&amp;gt;jdbc/rollerdb&amp;lt;/jndi-name&amp;gt;&lt;br /&gt;    &amp;lt;/resource-description&amp;gt;&lt;br /&gt;  &amp;lt;/reference-descriptor&amp;gt;&lt;br /&gt;&amp;lt;/weblogic-web-app&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;找到login.jsp, 移除&amp;lt;%@ page language="java" errorPage="/error.jsp" contentType="text/html; charset=UTF-8" %&amp;gt;這一行, 不然登入時在WebLogic Server會出現這個錯誤...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;br /&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;br /&gt;&lt;p&gt;####&amp;lt;2004/12/2 下午07時21分12秒 CST&amp;gt; &amp;lt;Error&amp;gt; &amp;lt;HTTP&amp;gt; &amp;lt;kevin&amp;gt; &amp;lt;myserver&amp;gt; &amp;lt;ExecuteThread: '13' for queue: 'weblogic.kernel.Default'&amp;gt; &amp;lt;&amp;lt;WLS Kernel&amp;gt;&amp;gt; &amp;lt;&amp;gt; &amp;lt;BEA-101020&amp;gt; &amp;lt;[ServletContext(id=42241185,name=roller,context-path=/roller)] Servlet failed with Exception&lt;br /&gt;weblogic.servlet.jsp.JspException: (line 1): page directive language at /taglibs.jsp:1 previously defined at /login.jsp:1&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.jspException(Ljava.lang.String;)V(JspLexer.java:712)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mPAGE_DIRECTIVE_BODY(ZZ)V(JspLexer.java:5193)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mPAGE_DIRECTIVE(Z)V(JspLexer.java:4948)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mDIRECTIVE(Z)V(JspLexer.java:4770)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mSTANDARD_THING(Z)V(JspLexer.java:2143)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mTOKEN(Z)V(JspLexer.java:1929)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.nextToken()Lantlr.Token;(JspLexer.java:1802)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.parse()V(JspLexer.java:963)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.parseJspCode(Ljava.io.Reader;I)V(JspLexer.java:1209)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.parseJspCode(Ljava.io.Reader;Ljava.lang.String;)V(JspLexer.java:1183)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.buildTimeInclude(Ljava.lang.String;)V(JspLexer.java:934)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mINCLUDE_DIRECTIVE(Z)V(JspLexer.java:5017)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mDIRECTIVE(Z)V(JspLexer.java:4775)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mSTANDARD_THING(Z)V(JspLexer.java:2143)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mTOKEN(Z)V(JspLexer.java:1929)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.nextToken()Lantlr.Token;(JspLexer.java:1802)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.parse()V(JspLexer.java:963)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.parseJspCode(Ljava.io.Reader;I)V(JspLexer.java:1209)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.parseJspCode(Ljava.io.Reader;Ljava.lang.String;)V(JspLexer.java:1183)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.buildTimeInclude(Ljava.lang.String;)V(JspLexer.java:934)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mINCLUDE_DIRECTIVE(Z)V(JspLexer.java:5017)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mDIRECTIVE(Z)V(JspLexer.java:4775)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mSTANDARD_THING(Z)V(JspLexer.java:2143)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.mTOKEN(Z)V(JspLexer.java:1929)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.nextToken()Lantlr.Token;(JspLexer.java:1802)&lt;br /&gt; at weblogic.servlet.jsp.JspLexer.parse()V(JspLexer.java:963)&lt;br /&gt; at weblogic.servlet.jsp.JspParser.doit()V(JspParser.java:106)&lt;br /&gt; at weblogic.servlet.jsp.JspParser.parse(Ljava.io.Reader;)V(JspParser.java:232)&lt;br /&gt; at weblogic.servlet.jsp.Jsp2Java.outputs([Ljava.lang.Object;)Ljava.util.Enumeration;(Jsp2Java.java:125)&lt;br /&gt; at weblogic.utils.compiler.CodeGenerator.generate([Ljava.lang.Object;)[Ljava.lang.String;(CodeGenerator.java:258)&lt;br /&gt; at weblogic.servlet.jsp.JspStub.compilePage(Lweblogic.servlet.internal.RequestCallback;)V(JspStub.java:388)&lt;br /&gt; at weblogic.servlet.jsp.JspStub.prepareServlet(Lweblogic.servlet.internal.RequestCallback;Z)V(JspStub.java:238)&lt;br /&gt;&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;原因: WebLogic Server 不容許JSP程式有些小錯誤, 像這個重複出現二次的directive &lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;修改theme/header.jsp, 將&amp;lt;c:import url="${leftPage}" /&amp;gt; 改為 &amp;lt;c:import url="${leftPage}" charEncoding="UTF-8"/&amp;gt;, 沒做的話, 左邊選單中文會變成亂碼, 這是因為使用JSTL core的import, 卻沒有指定charEncoding&lt;/li&gt;&lt;br /&gt;&lt;li&gt;最後一動, 部署Roller, 在管理主控台按左邊Deployments-&amp;gt;Web Application Modules, 設定一個新的Web App, 直接指到Roller的目錄 (例如C:\roller), 不會做的看&lt;a href="http://e-docs.bea.com/wls/docs81/deployment/quickstart.html#1037462" target="_blank"&gt;這裡&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;span style="color:#0000ff;"&gt;步驟六&lt;/span&gt;&lt;/u&gt; : 跳過&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;span style="color:#0000ff;"&gt;步驟七&lt;/span&gt;&lt;/u&gt; : 已經做了!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;span style="color:#0000ff;"&gt;步驟八&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;開啟Roller, 如果是跟著我做, 網址是&lt;a href="http://localhost:7001/roller"&gt;http://localhost:7001/roller&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;登錄一個使用者當做管理員, 然後用rollerpw.bat -grant_admin &amp;lt;username&amp;gt; 指定他/她是管理員; 注意: 要記得修改rollerpw.bat的_cp變數, 把MySQL的Connect/J JDBC Driver加入, 還有修改rollerdb.properties, 像這樣:&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;driverClassName=com.mysql.jdbc.Driver&lt;br /&gt;connectionUrl=jdbc:mysql://localhost:3306/roller&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;    試試看可不可以登入!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;span style="color:#0000ff;"&gt;步驟九&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;    一定無法登入的啦! 這是因為Roller用DB儲存使用者帳號跟密碼, 而且用標準的j_security_check做認證, 卻寫了一個LoginServlet先攔截將密碼用SHA加密, 再傳到Web Container做認證! 不能登入的主要原因是, WebLogic Server 預設用自己的LDAP儲存庫紀錄使用者跟群組, 而用j_security_check登入時, 是到這個LDAP檢查, 所以有二個問題&lt;/p&gt;&lt;br /&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;br /&gt;&lt;p&gt;1. LDAP上面沒有剛剛註冊的使用者&lt;/p&gt;&lt;br /&gt;&lt;p&gt;2. 密碼被加密, WebLogic Server 看沒有&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;    要解決這個問題, 首先要在WebLogic Server 管理主控台新增群組跟使用者&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;先建立二個群組: admin 與 editor (跟weblogic.xml的principal-name一樣)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;用剛剛註冊的使用者名稱, 產生新的使用者, 且密碼一樣&lt;/li&gt;&lt;br /&gt;&lt;li&gt;開一個Command Window, 切換到WEB-INF/dbscripts下, 執行 rollerpw -save passwd.properties&lt;/li&gt;&lt;br /&gt;&lt;li&gt;編輯passwd.propertis, 修改密碼為明碼&lt;/li&gt;&lt;br /&gt;&lt;li&gt;rollerpw -restore passwd.properties&lt;/li&gt;&lt;br /&gt;&lt;li&gt;檢查MySQL中, rolleruser表格裡passphrase欄位的資料是不是都是明碼了&lt;/li&gt;&lt;br /&gt;&lt;li&gt;重新部署Roller&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#0000ff;"&gt;Blog 編輯器&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Roller支援XML-RPC介面, 所以可使用Blog編輯器來上傳文章&lt;/p&gt;&lt;p&gt;&lt;strong&gt;後續問題報導&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;使用者註冊時, 無法直接同時在LDAP上新增, 需要手動自己建立, 有幾種解決方案&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;br /&gt;&lt;p&gt;1. 自己做一個Authetication Provider, 使用Roller的資料做認證&lt;/p&gt;&lt;br /&gt;&lt;p&gt;2. 插一個Servlet Filer, 在註冊使用者時, 同時再LDAP上新增&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;至於密碼是明碼的問題, 如果不自己做Authetication Provider, 需要修改程式, 跳過Roller認證檢查, 只使用WebLogic Server所提供的, 同時在註冊時, 就不存密碼, 且需要更改使用者自行變更密碼的程式&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;By Kevin Haung&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9408513-110206123041032095?l=mybea.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mybea.blogspot.com/feeds/110206123041032095/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9408513&amp;postID=110206123041032095' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110206123041032095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9408513/posts/default/110206123041032095'/><link rel='alternate' type='text/html' href='http://mybea.blogspot.com/2004/12/rollerweblogic-server-81-s_110206123041032095.html' title='如何安裝Roller在WebLogic Server 8.1 SP3'/><author><name>黃小米</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7987/683/320/kevin.0.jpg'/></author><thr:total>0</thr:total></entry></feed>
