1. 程式人生 > 其它 >【ArcGIS SOE】01開發伺服器物件擴充套件概述

【ArcGIS SOE】01開發伺服器物件擴充套件概述

技術標籤:學習筆記arcgis server

  • ArcObjects API for developing SOEs

可以通過實現com.esri.arcgis.server.IServerObjectExtension介面來定義伺服器物件擴充套件。

對於SOE,此介面是必需的,並且包括兩個方法:init()和shutdown()。伺服器物件使用此介面來管理SOE的生存期。伺服器物件建立SOE並呼叫init()方法,並通過ServerObjectHelper引數將對它的引用交還給伺服器物件。ServerObjectHelper在伺服器物件上實現了一個弱引用,該引用不受垃圾收集器的保護。該擴充套件可以在伺服器物件幫助器上保留強引用(例如,在成員變數中),但是不建議這樣做,因為強引用會導致不必要的物件保留在記憶體中並影響效能。擴充套件應該從伺服器物件幫助器獲取伺服器物件,以便在伺服器物件上進行任何方法呼叫,然後在進行方法呼叫後釋放引用。
建立SOE例項後,將一次呼叫init()方法。像init()方法一樣,shutdown()方法僅被呼叫一次,並通知SOE伺服器物件的上下文正在關閉並且即將消失。作為響應,SOE應該在伺服器物件幫助器上釋放其引用。任何日誌條目僅是資訊性的,是可選的。有關SOE日誌記錄的資訊,請參見“日誌記錄訊息”主題。
  • SOE annotations

在Java SOE內部使用註釋來指示Java類是ArcGIS擴充套件,並儲存ArcGIS for Server在執行時部署和管理SOE所需的元資料。在ArcGIS 10.1及更高版本中,Java SOE支援兩種型別的註釋:

@ArcGIS Extension

@ArcGISExtension批註指示帶批註的介面或類作為ArcGIS擴充套件自動顯示給ArcGIS平臺。該@ArcGISExtension註解用於由ArcGIS作為一種您的介面和類作為擴充套件,而不需要嵌入一些外部源的任何配置或API呼叫相關聯。以下是帶註釋的SOE的介面和類的示例:
// Custom Interface
@ArcGISExtension
interface ISoeInterface{
    public String mySoeFoo();
}
// SOE class
@ArcGISExtension
public class test01 implements IServerObjectExtension,ISoeInterface {
    // IServerObjectExtension methods
    public void init(IServerObjectHelper arg0)throws IOException,
            AutomationException{
        // Called once when the instance of the SOE is created
    }
    public void shutdown()throws IOException, AutomationException {
        // Called once when the SOE’s context is shut down
    }

    //IMySoeInterface method
    public String mySoeFoo(){
        return "some string";
    }

}
此批註是必需的,並且缺少它會導致SOE的Java類在部署時對於ArcGIS for Server不可見。因此,該SOE在執行時將不存在。

@ServerObjectExtProperties

SOE需要@ServerObjectExtProperties批註來儲存將SOE部署為地圖服務的擴充套件時提供給ArcGIS for Server的名稱/值對。 支援以下元素對:
  • displayName-這是當用戶在ArcGIS for Server管理客戶端(例如ArcGIS Server管理器)和ArcMap中的“目錄”視窗中將其啟用為功能時,SOE將具有的顯示名稱。這個名字可以有空格。
  • 說明-用於更詳細,更友好地描述您的SOE,並將顯示在ArcGIS for Server管理客戶端中,以幫助管理員瞭解SOE的用法。
  • 屬性-在這裡可以定義SOE的屬性。例如,如果SOE允許編輯層,則屬性值可以指示哪個層可用於編輯,從而使管理員可以控制SOE的執行時間使用/行為。
  • allSOAPCapabilities-將SOE作為Web服務公開時,可以建立可由ArcGIS for Server管理員啟用或禁用的功能。這種功能稱為“網路功能”。此引數的值是一個逗號分隔的列表,其中包含SOE公開的所有功能。
  • defaultSOAPCapabilites-此引數的值列出了預設情況下在SOE上啟用的所有Web功能。
以下程式碼段演示了上述註釋和可用屬性及其值的使用:
@ServerObjectExtProperties(displayName = "my soe",description = "my frist SOE",
        properties = {"property1Name=property1Value","property2Name=property2Value"},
        defaultSOAPCapabilities = {"myWebCapability1"},
        allSOAPCapabilities = {"myWebCapability1", "myWebCapability2"}
)

// SOE class
@ArcGISExtension
public class test01 implements IServerObjectExtension,ISoeInterface {
    // IServerObjectExtension methods
    public void init(IServerObjectHelper arg0)throws IOException,
            AutomationException{
        // Called once when the instance of the SOE is created
    }
    public void shutdown()throws IOException, AutomationException {
        // Called once when the SOE’s context is shut down
    }

    //IMySoeInterface method
    public String mySoeFoo(){
        return "some string";
    }

}
  • Interfaces and classes

以下是您的SOE內部特定行為的一些介面。

com.esri.arcgis.system.IObjectConstruct

此介面是可選的,僅當SOE需要額外的初始化(例如使用ArcGIS Server管理器中的伺服器管理員定義的值初始化屬性)時才需要實現。該介面包括一個稱為construct()的方法,該方法在呼叫IServerObjectExtension.init()之後僅在建立SOE時被呼叫一次。對於具有屬性的SOE,construct()將SOE的配置屬性作為屬性集移交。

com.esri.arcgis.system.IObjectActivate

IObjectActivate介面是可選的(也就是說,除非您的SOE需要在處理請求之前和之後執行的特殊邏輯,否則不需要其實現)。它包括兩種方法:
  • activate()-每次客戶端通過SOAP或REST向SOE請求時呼叫
  • deactivate()-每次客戶端獲取和釋放伺服器物件的上下文時呼叫。

com.esri.arcgis.server.SOAPRequestHandler

如果計劃將Java SOE公開為基於SOAP的Web服務,則您的SOE類必須擴充套件SOAPRequestHandler基類。如果要建立REST SOE,則不需要擴充套件此基類。該基類定義了IRequestHandler介面公開的handleStringRequest()方法。該方法接收SOAP請求,從SOE類呼叫適當的業務方法,生成SOAP響應,然後將其返回給客戶端應用程式,從而減輕了您處理SOAP請求和響應的負擔,並使您可以專注於SOE的業務邏輯開發。在“開發SOAP SOE”主題中將對此進行詳細討論。

com.esri.arcgis.system.IRESTRequestHandler

如果計劃將Java SOE作為RESTful Web Service,則必須實現IRESTRequestHandler介面。該介面提供兩種方法:
  • handleRESTRequest()-為對SOE的每個HTTP請求呼叫一次。
  • getSchema()-在執行時由ArcGIS REST處理程式呼叫以查詢SOE的資源和操作層次結構。
  • ArcGIS Java ArcObjects軟體開發套件

ArcGIS for Server隨附有ArcGIS Java ArcObjects軟體開發工具包(Java AO SDK),但是單獨安裝的。該SDK包括以下內容:
  • Eclipse IDE外掛
    這些外掛有助於使用Java ArcObjects API來開發自定義應用程式和擴充套件。其中包括:
    • 用於建立自定義SOAP和REST SOE,自定義地理處理工具,自定義渲染器,要素類擴充套件和載入項的嚮導。
    • 可用於生成部署工件的工具,例如各種Java擴充套件的jar檔案。

      有關為Eclipse安裝ArcGIS外掛的說明,請參閱“開發桌面應用程式”->“使用ESRI Eclipse外掛”->“安裝ESRI外掛”。
  • 樣品
  • 檔案