使用 Java API 來管理分組型樣

分組型樣方法可讓您一起建立、修改、刪除及擷取分組型樣與其選取器。

分組型樣定義用於建置商業應用程式的規則。 型樣會定期套用於 TADDM 資料庫,以建立商業應用程式、集合或存取集合。

分組型樣會指定用來定義起始點的選取器以及拓蹼遍訪規則,執行拓蹼遍訪可建立產生的商業應用程式、集合或存取集合。 選取器會定義用來從 TADDM 資料庫選取配置項目的方法。

選取的配置項目變成「核心 CI」物件。 例如,MQL 或 SQL 類型的選取器包含可傳回此類核心 CI 清單的查詢。 透過使用這些物件並對其套用關係遍訪範本,即可開始建置集合的程序。

重要事項: 應該同步化所有 TADDM 伺服器上的日期和時間。
分組型樣屬性
每個分組型樣都必須包含下列屬性:
分組型樣的名稱。
hierarchyType
此型樣定義的結果類型。 階層類型接受值 "BusinessApplication"、"Collection" 和 "AccessCollection"。 視階層類型的值而定,會在拓蹼遍訪之後建立適當類型的集合。
選取器屬性
每個分組型樣都會指定具有下列屬性的一個以上選取器:
選取器的名稱。
parent
包含此選取器的母項分組型樣。 選取器永不單獨存在。 它們一律是分組型樣的一部分。
isDisabled
用來建立選取器草稿版本的選項。 在建置自訂集合中,已停用的選取器不會由 BizAppsAgent 使用。
類型
選取器的類型。 下列清單包含容許的值:
  • MQL (0) - MQL 查詢用來為此選取器定義起始點配置項目,
  • SQL (1) - SQL 查詢用來為此選取器定義起始點配置項目,
  • 應用程式描述子 (2) - 應用程式描述子會為此選取器定義起始點配置項目,
  • 手動 (3) - 只會使用手動選取的配置項目作為此選取器的起始點。
query
此欄位是 MQL 或 SQL 類型的選取器的必要欄位。 它會存放適當的查詢字串,用來選取起始點配置項目。 如果是 SQL 查詢,則使用者可使用 TADDM 伺服器安裝所在的資料庫支援的任何語法。 在建立分組型樣期間,只接受有效的 SELECT 陳述式。 任何其他 SQL 陳述式(例如 INSERT、UPDATE、DELETE、DROP)都會失敗,除了表示無效查詢語法的陳述式以外。 如果是 MQL 查詢,則沒有查詢驗證。
GroupingNameExpression
規則定義,用來產生透過使用此選取器所建立集合的分組名稱表示式。
useTraversalTemplate
布林旗標,用來定義此選取器是否指定了遍訪範本。 遍訪範本會定義建置集合時的拓蹼遍訪規則。 如果未設定 useTraversalTemplate 旗標,則從此選取器建置的集合元素中只會包含起始點元素(核心配置項目;例如使用 MQL 或 SQL 查詢找到的配置項目)。 未遍訪任何其他元素且未新增至集合。 如果將 useTraversalTemplate 旗標設為 true,則 goHigherUpgoHigherDowngoLowerDowngoLowerUp 欄位中定義的規則用來定義遍訪型樣。
goHigherUp
布林旗標,用來指定遍訪是否會通過指向現行配置項目直至更高配置項目(即關係或相依關係的來源)的關係及相依關係。 然後,遍訪會繼續向上通過所有關係和相依關係(從這些相依關係或關係的來源配置項目指向現行配置項目)。
goHigherDown
布林旗標,用來指定遍訪是否會通過從現行配置項目向下指向目標配置項目的關係和相依關係。 僅當遍訪至少使用一個 goHigherUp 規則的步驟到達現行配置項目時,才會使用此規則。
goLowerDown
布林旗標,用來指定遍訪是否會通過從現行配置項目指向更低配置項目(即關係或相依關係的目標)的關係及相依關係。 然後,遍訪會繼續向下通過所有關係和相依關係(從現行配置項目指向這些相依關係或關係之目標配置項目)。
goLowerUp
布林旗標,用來指定遍訪是否會通過從更高來源配置項目指向現行配置項目的關係及相依關係。 僅當遍訪至少使用一個 goLowerDown 規則的步驟到達現行配置項目時,才會使用此規則。

分組型樣 API 方法

下表列出分組型樣方法並提供這些方法的說明。

表 1. 分組型樣 API 方法
方法 說明
createGroupingPattern(GroupingPattern pattern) 建立具有所指定選取器與參數的分組型樣。 唯一的 pattern 參數包含要與其所有選取器一起建立的分組型樣定義。
getAllGroupingPatterns() 擷取 TADDM 資料庫中存在的所有分組型樣。
getGroupingPattern(Guid guid) 擷取具有指定 guid 的分組型樣。
removeGroupingPattern(Guid guid) 刪除具有指定 guid 的分組型樣。
updateGroupingPattern(GroupingPattern pattern) 更新指定的分組型樣。

分組型樣方法提供用來控制排程建立、修改、刪除及擷取的方法。

分組型樣排程

型樣排程屬性
每個型樣排程都必須包含下列屬性:
用來識別排程的排程名稱。 如果名稱不必為唯一名稱,則建議不建立同名的多個排程。
ExecutionGroupId
此排程所隸屬之執行群組的名稱。
使用執行群組建立排程並不自動表示會在任何儲存伺服器上建立任何新的執行緒儲存區。 它由每個儲存伺服器上的內容個別進行控制。
說明
排程的說明。
型樣排程的其他屬性
此外,每個型樣排程還必須包含下列其中一個屬性:
intervalInMinutes
觸發排程的頻率(分鐘)。
cronExpression
使用 Cron 格式的表示式,提供對型樣執行週期的進階控制。
附註: 如果要透過 JavaAPI 來使用型樣排程方法, API 用戶端類別路徑中必須提供一些額外的 jar 檔。 您可以在 TADDM_HOME/lib 目錄(也稱為 LIB)中尋找這些 jar 檔:
  • LIB/schedules.jar
  • LIB/quartz/c3p0-0.9.1.1.jar
  • LIB/quartz/quartz-2.2.1.jar
  • LIB/quartz/quartz-jobs-2.2.1.jar
下表列出型樣排程管理方法並提供這些方法的說明:
表 2. 型樣排程管理
方法 說明
getPatternSchedules() 擷取 TADDM 資料庫中的所有排程
addSchedule(PatternSchedule schedule) 建立新的型樣排程
updateSchedule(PatternSchedule schedule) 容許變更排程設定
removeSchedule(Guid guid, boolean forceToDefault) 刪除具有指定 GUID 的排程。 如果排程已與任何型樣相關聯,則 forceToDefault 參數可讓您控制是否將這些型樣切換為預設的排程或方法是否失敗。
removeSchedule(Guid guid) 用來移除型樣排程的速記方法等於 removeSchedule(guid, false)
getDefaultSchedule() 擷取預設排程的詳細資料
changeDefaultSchedule(String expression, boolean isCronExpression) 容許變更預設排程表示式。 isCronExpression 旗標會定義表示式參數是否為間隔表示式的 Cron 表示式(例如 1w 2d 3h 4m)
changeDefaultSchedule(int interval 容許透過傳遞間隔(分鐘)來變更預設排程。
getExecutionGroupsInfo() 擷取排程中定義的所有執行群組的相關資訊,以及每個群組的每個儲存伺服器上可用的執行緒詳細資料

手動控制型樣執行

分組型樣方法提供多種方式來列出目前正在執行的型樣以及其接下來的執行項目詳細資料。 這些方法還提供多種方式來處理型樣的「特定」啟動,或岔斷正在執行的型樣。

雖然 API 方法是針對特定儲存伺服器進行呼叫,但是會跨越儲存伺服器的執行緒儲存區,要求針對個別執行群組進行實際處理。 因此:
  • 可從任何伺服器中取得與處理狀態相關的資訊,且一律包含完整資訊(即使特殊儲存伺服器未提供執行群組的資源亦如此)。
  • 可能會在儲存伺服器上而非用來要求實際處理型樣的伺服器上,對型樣進行實際處理。
  • 可從任何儲存伺服器岔斷型樣執行,即使型樣正由用來導致該岔斷之伺服器以外的伺服器處理亦如此。
下表列出型樣執行管理方法並提供這些方法的說明:
表 3. 型樣執行管理方法
方法 說明
getPatternRunInfo(Guid guid) 針對特定型樣,guid 提供與型樣執行相關的資訊(例如下次執行時間)。
getPatternsRunInfo() 針對 TADDM 資料庫中定義的所有型樣,提供與型樣執行相關的資訊。
getPatternsInRun() 提供目前正在執行之所有型樣的相關資訊,以及正在處理型樣之實際儲存伺服器之類的執行資訊。
runPatternNow(GroupingPattern pattern, boolean waitForCompletion); runPatternNow(String patternName, boolean waitForCompletion); runPatternNow(Guid patternGuid, boolean waitForCompletion) 一組方法,讓您立即啟動型樣執行。 型樣可稱為(分別):
  • 型樣物件(之前透過 DataApi 之類來取得)
  • 型樣名稱
  • 型樣 GUID
waitForCompletion 旗標會確定方法是等待直到型樣處理完成,還是在要求執行之後立即完成。
runPatternsNow(GroupingPattern[] patterns, boolean waitForCompletion); runPatternsNow Guid patternsGuids[], boolean waitForCompletion) 這些方法類似於 runPatternNow,但允許執行多個型樣。 waitForCompletion 旗標會確定函數是等待直到前一個型樣處理完成,還是在要求所有型樣執行之後立即完成。
runAllPatternsForGroup(String executionGroupId, boolean waitForCompletion) 可讓您執行與特定執行群組中的排程相關聯的所有型樣(通常,這是處理所有型樣的一種快速方式)
interruptPatternNow(String patternName); interruptPatternNow(Guid patternGuid); interruptPatternNow(GroupingPattern pattern) 方法集可讓您停止處理特定型樣(如果目前正在處理該型樣的話)
refreshJobs() 重新整理並重新啟動在 TADDM 資料庫中定義的所有型樣的所有排程。

建立分組型樣

若要建立分組型樣,請完成下列步驟:
  1. 建立「分組型樣」物件,並設定 namehierarchyType 欄位的值。
  2. 建立選取器物件的陣列,並設定其參數來定義集合建立規則。
  3. 透過使用分組型樣來設定選取器 parent 欄位並將分組型樣選取器設為選取器的陣列,來將所有選取器附加至分組型樣。
  4. 透過使用分組型樣 API 方法 createGroupingPattern 來建立型樣。

刪除分組型樣

若要刪除分組型樣,請在分組型樣 API 中使用 removeGroupingPattern 指令。 該指令會接受 guid 參數,該參數用來唯一識別分組型樣。 刪除分組型樣也會刪除它連接的所有選取器。

範例:建立、擷取及刪除分組型樣與選取器

下列範例會建立分組型樣及其選取器:
# ----------- Begin sample code -----------
import sys
import java

from java.io import *
from com.collation.platform.util import ModelFactory
from com.collation.proxy.api.client import *
from com.ibm.cdb.api import ApiFactory
from java.lang import System
from java.lang import String
from java.lang import Boolean
from java.lang import Class

from jarray import array

false = Boolean(0)
conn = ApiFactory.getInstance().getApiConnection("localhost", -1, None, false)
sess = ApiFactory.getInstance().getSession(conn, "administrator", "collation", ApiSession.DEFAULT_VERSION);
api = sess.createCMDBApi()


# create Grouping pattern with name "Grouping Pattern 1"
name = "Grouping Pattern 1"
gpattern = ModelFactory.newInstance(Class.forName("com.collation.platform.model.topology.customCollection.GroupingPattern"))
gpattern.setName("Grouping Pattern 1")
gpattern.setHierarchyType("BusinessApplication")

SelectorClass = Class.forName("com.collation.platform.model.topology.customCollection.Selector")
selector1 = ModelFactory.newInstance(SelectorClass)
selector1.setType(0) # type MQL
selector1.setName("Linux Computer systems")
selector1.setQuery("LinuxUnitaryComputerSystem")
selector1.setUseTraversalTemplate(false)
selector1.setGroupingNameExpression("LinuxComputerSystems")
selector1.setParent(gpattern)

selector2 = ModelFactory.newInstance(SelectorClass)
selector2.setType(0) # type MQL
selector2.setName("Windows Computer systems")
selector2.setQuery("WindowsComputerSystem")
selector2.setUseTraversalTemplate(false)
selector2.setGroupingNameExpression("WindowsComputerSystems")
selector2.setParent(gpattern)

gpattern.setSelectors(array([selector1, selector2], SelectorClass))

guid=api.createGroupingPattern(gpattern)

# retrieve stored grouping pattern
gpattern = api.getGroupingPattern(guid)

print 'Grouping pattern: ', gpattern
for sel in gpattern.getSelectors():
    print '    Selector:', sel

# retrieve all grouping patterns
allPatterns = api.getAllGroupingPatterns()

for pat in allPatterns:
    print 'Grouping pattern: ', pat
    for sel in pat.getSelectors():
        print '    Selector:', sel

# remove grouping pattern
api.removeGroupingPattern(guid)


api.close()
sess.close()
System.exit(0)

# ----------- End sample code -----------

範例 API MQL 查詢

下列範例透過使用 API MQL 查詢,向您顯示如何搜尋各種型樣。
尋找特定分組型樣的所有商業應用程式
api.sh -u user -p pass find "select * from CustomCollection where groupingPattern.guid == '9C704FF849993840B89FBECA5E183AFA'"
api.sh -u user -p pass find "select * from CustomCollection where groupingPattern.name == 'GP'"
尋找特定商業應用程式的所有節點與路徑
api.sh -u user -p pass find "select * from Node where parent.guid=='B71A946FEA753FB38B57B65775DA6519'"
api.sh -u user -p pass find "select * from Path where parent.guid=='B71A946FEA753FB38B57B65775DA6519'"
尋找指向特定 CI 的所有節點
api.sh -u user -p pass find "select * from Node where sourceGuid == '785614419CED31ACB24989A24F8ED52A'" 
api.sh -u user -p pass find "select * from Node where displayName contains 'NC9128109078'"
找尋與產生自新商業應用程式之較早版本相容的商業應用程式
首先,使用下列查詢並根據新的商業應用程式來收集部分起始資料:
api.sh -u user -p pass find "select backwardCompatibleBusinessAppGuid, hierarchyType, originalBusinessAppType from CustomCollection where guid == 'B71A946FEA753FB38B57B65775DA6519'"
因此,您將會取得與舊版相容的應用程式 GUID,以及要查詢哪個類別的相關資訊。 針對移轉的商業應用程式,originalBusinessAppType 欄位包含此資訊,否則 hierarchyType 會指向它。
您可以藉由此類資訊並使用下列查詢,來查詢與舊版相容的應用程式:
api.sh -u user -p pass find "select * from Application where guid == '9EA1FAD9B4153000BD21CB2967ADB3DB'"