首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

SuperMap iServer 擴展服務與服務提供者開發實戰

     編輯:Java 綜合教學

擴展服務實例:ServletContextListener 啟動初始化

場景:iServer 啟動時自動打開並保存 Oracle 工作空間。

  1. 編寫 extend.listener 實作 ServletContextListener
  2. 打包為 JAR 放入 WEB-INF/lib
  3. web.xml 註冊 <listener><listener-class>extend.listener</listener-class></listener>
public class listener implements ServletContextListener {
    private Workspace m_workspace;

    @Override public void contextInitialized(ServletContextEvent sce) {
        ServletContext sct = sce.getServletContext();
        try {
            m_workspace = new Workspace();
            WorkspaceConnectionInfo conn = new WorkspaceConnectionInfo();
            conn.setType(WorkspaceType.ORACLE);
            conn.setServer("ORCL");
            conn.setName("xxx");
            conn.setUser("xxx");
            conn.setPassword("xxx");

            if (m_workspace.open(conn)) {
                System.out.println("打開工作空間成功!");
                if (m_workspace.save()) System.out.println("保存工作空間成功!");
            } else {
                System.out.println("打開工作空間失敗!");
            }
            conn.dispose();
            m_workspace.dispose();
        } catch (Exception e) { e.printStackTrace(); }
    }

    @Override public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("this is last destroyed");
    }
}

擴展服務提供者實例:ProviderContextAware 生命週期管理

更靈活的 SPI 機制,支援配置注入。

public class SaveWorkspaceProvider implements ProviderContextAware, SaveWorkspace {
    private Workspace m_workspace;

    @Override public void setProviderContext(ProviderContext context) {
        ClearSetting setting = (ClearSetting) context.getConfig(ClearSetting.class);
        if (setting == null) { System.out.println("無法獲取配置!"); return; }

        String workspacePath = setting.getWorkSpacePath(); // 注意:字段名 workspacePath,getter 為 getWorkSpacePath()
        try {
            m_workspace = new Workspace();
            WorkspaceConnectionInfo conn = new WorkspaceConnectionInfo();
            conn.setType(WorkspaceType.SXWU); // 文件型工作空間
            conn.setServer(workspacePath);
            if (m_workspace.open(conn)) {
                System.out.println("打開工作空間成功!");
                if (m_workspace.save()) System.out.println("保存工作空間成功!");
            } else {
                System.out.println("打開工作空間失敗!");
            }
            conn.dispose();
            m_workspace.dispose();
        } catch (Exception e) { e.printStackTrace(); }
    }
}

// 配置類
public class ClearSetting {
    private String workspacePath; // 注意:字段名小寫 p
    public void setWorkspacePath(String p) { this.workspacePath = p; }
    public String getWorkSpacePath() { return workspacePath; } // getter 大寫 P
}

關鍵注意點

  • ProviderContextAware 讓提供者獲取配置上下文,實現解耦
  • 配置類字段命名需與 setter/getter 一致,否則注入失效(示例中 workspacePath vs getWorkSpacePath 易出錯)
  • 工作空間類型:ORACLE、SXWU(文件型)等
  • 資源務必 dispose() 釋放,避免洩漏

掌握 Listener 與 Provider 兩種擴展機制,可滿足 iServer 啟動初始化、定時任務、自定義 REST 服務等多樣化業務需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved