2005/10/12

webMethods Modeler 中 Join Type 的設定

為什麼我建置的 Model 沒辦法被起動?
記得我剛開始在開發 RosettaNet 的時候,時常發生一個問題,就是當我收到一份 Document 的時候,我的 Model 卻沒有跑,然後,我檢查 Lo g的時候,看到 Log 的訊息是 “*** MODEL IS INACTIVE ***” “cannot create new instance of P54FJNQEBNZJ”,當時我第一個想法就是我的 Model 可能設錯了,於是我將原有的 Model 給刪除,然後再重新 Create 一個新的,但仍無法解決我的問題,還是一樣發生同樣的事情,其實後來才發現這個問題不難解決,只是一個簡單的設定而已。
那麼為什麼會發生上面的訊息呢?你可以進你的 Developer 的環境去執行 “wm.prt.debug:getModelIndex” 你就會發現到,你有部份的 Model 是重覆,但是狀態卻是 “INACTIVE” ,這個原因並不是一個 “Error” ,只代表你這一個 Model 被你從 Monitor Delete 而已。但當你接收到一份 Documents 的時候,原本被你刪除的 Model 剛好附合被趨動的條件,但這一個 Model 卻是被 Inactive ,所以才會出現 “*** MODEL IS INACTIVE ***” 的訊息。至於我真正要被趨動的 Model 為什麼沒有被趨動呢?其設定更改如下就可以了!
當你會發生這個原因,大部份是你的 Model 附合以下的條件:
  1. 你的 RN 是屬於 Receiver 端,所以你等待的是一份外部的 Document 。
  2. 這一個 Model 是拿原始的 Model 來更改的
  3. 你在 TN Console 中的 Transaction 看得到此筆 Transaction ( Document )
若你附合以上的條件,那麼請您就做以下的操作:
  1. 打開你的 Model ,並且打開第一個Step(Wait for……)的 Properties 。
    
  2. 在 Properties 中會看到 “Join Type” 的內容是 “Complex” ,請你把該選項下拉後,再選一次。
  
  3. 你會看到類似下面的畫面,在 “Transition/Subscriptions” 重新選擇你所要 Wait 的 Document。
  

  
  
  4. 存檔後,重新產生即可。
就依據上面的幾個動作就可以囉!

我不希望我Filepolling使用Multiple Threads

在敘述問題前,先感謝Calista, Rich, Sandra, Ls 等人的協助,希望下次有機會能再到你們公司拜訪囉^^

有個 webMethods 的朋友,前幾天問我一個 Filepolling 的問題,說實在的,雖然我 Filepolling 已經用了一段時間,但還沒有遇到跟他類似的需求,所以我想了一下,想出了一個爛的解決方法,不過此方法卻沒有解決他的問題,我先把他的需求簡單的描述一下。

“……在所 Filepolling 的 Folder ,要他以一筆一筆的方式來處理該檔案,此檔案是,當該檔案還沒有處理完畢時,不能處理下一筆檔案,但 webMethods 是 Multiple Thread 的方式,雖然他可以依順序來處理檔案,但若第一筆的資料比較多,第二筆的資料比較少的時候,有可能發生第二筆處理完畢後,第一筆才處理完,但我希望的是第一筆處理完,再處理第二筆……”

雖然我沒遇到這個 Case ,不過我想這應該不難吧,弄一個 Q DB 就可以搞定這一個 Case 才是,所以我就決定下面的做法:

流程序述:
1. 產生的檔案的檔名請依時間命名
2. Fillpolling 取得到檔案時,將檔名存放於DB中,內容暫不處理
3. 每三十秒執行一次Schedule Seriver, 此Service是去Q DB取得第一筆Record,此記錄應該為最舊尚未處理的檔案,當處理完畢後,將此Record刪除,所排定的Schedule請勾選Repeat from end of invocation 選項,可避免後來先處理的情形。

過沒多久對方跟我說,並沒有解決他們目前的問題, “……因為在這一個Case 裡,我們除了要讓 wM 依照順序丟出 Data 給 ERP 後端程式外,還希望控制到等ERP 後端程式處理完後再丟出 Data 給 ERP ……” 。顯然地,我的解決方法並沒有未他們解決這一個問題,不過他們卻跟我說有一個設定可以解決這一個問題, “……後來我們發現 wM 的 FilePooing 的機制設定中,有個 Maximum Number of Invocation Threads 這個設定 (設定為1)可以解除我們目前遇到問題……”。

我後來查了一下文件,這一個設定是可以允許你這一個 Filepolling 一次可以有多少個 Threads ,他的範圍從 1 ~ 10 ,因為我平常都不做這一個設定,所以也沒去注意到,而他的 Default 是 10 ,所以當你不去做設定時,他就是以 Multiple Threads 的方式來處理。

後記~~我想解決問題的方法,應該是先找有沒有相關的文件或案例,若找不到相關的資料再進行天馬行空會比較好,免得臭大了。