zoukankan      html  css  js  c++  java
  • SuperMap iServer 扩展服务及扩展服务提供者范例

    一、扩展服务实例

    1.将iserver-extend1下的listener.java打成jar包
    2.复制到D:SuperMap-iServerwebappsiserverWEB-INFlib
    3.在web.xml文件中添加listener配置如下:
    <listener>
    <listener-class>extend.listener</listener-class>
    </listener>

    示例代码:

    package extend;

    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import com.supermap.data.Workspace;
    import com.supermap.data.WorkspaceConnectionInfo;
    import com.supermap.data.WorkspaceType;

    public class listener implements ServletContextListener {
    private Workspace m_workspace;

    // 定义的销毁函数
    public void contextDestroyed(ServletContextEvent sce) {
    // TODO Auto-generated method stub
    System.out.println("this is last destroyeed");
    }

    // 定义的初始化函数,当tomcat启动时触发定义的保存oracle工作空间的方法
    public void contextInitialized(ServletContextEvent sce) {
    // TODO Auto-generated method stub
    /*
    * 当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件, 获取tomcat的
    * ServletContext 对象的生命周期,
    */
    ServletContext sct = sce.getServletContext();
    try {
    m_workspace = new Workspace();
    // 初始化工作空间连接信息类
    WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo();
    // 定义打开的工作空间类型为oracle
    connectionInfo.setType(WorkspaceType.ORACLE);
    // 定义的连接oracle数据库信息
    connectionInfo.setServer("ORCL");
    connectionInfo.setName("x'x");
    connectionInfo.setUser("x'x");
    connectionInfo.setPassword("x'x");
    boolean openResult = m_workspace.open(connectionInfo);
    if (openResult) {
    System.out.print("打开工作空间成功!");
    // 保存工作空间
    boolean saveResult =m_workspace.save();
    if(saveResult){
    System.out.print("保存工作空间成功!");
    }
    } else {
    System.out.print("打开工作空间失败!");
    }
    // 释放资源
    connectionInfo.dispose();
    m_workspace.dispose();

    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    }

    二、扩展服务提供者实例

    package com.supermap.serviceprovider;

    import com.supermap.data.Workspace;
    import com.supermap.data.WorkspaceConnectionInfo;
    import com.supermap.data.WorkspaceType;
    import com.supermap.services.components.spi.ProviderContext;
    import com.supermap.services.components.spi.ProviderContextAware;

    //ProviderContextAware 用于获取服务提供者上下文,通过服务提供者上下文,可以获取该服务提供者对应的配置信息
    public class SaveWorkspaceProvider implements ProviderContextAware, SaveWorkspace {

    private Workspace m_workspace;
    // setProviderContext设置在iserver启动过程中执行,
    public void setProviderContext(ProviderContext context) {
    ClearSetting clearSetting = (ClearSetting) context.getConfig(ClearSetting.class);
    if (clearSetting == null) {
    System.out.print("无法清除数据集配置类!");
    return;
    }
    // 定义的获取到的工作空间路径
    String workspacePath = (clearSetting).getWorkSpacePath();
    try {
    m_workspace = new Workspace();
    // 初始化工作空间连接信息类
    WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo();
    connectionInfo.setType(WorkspaceType.SXWU);
    connectionInfo.setServer(workspacePath);
    boolean openResult = m_workspace.open(connectionInfo);
    if (openResult) {
    System.out.print("打开工作空间成功!");
    // 保存工作空间
    boolean saveResult = m_workspace.save();
    if (saveResult) {
    System.out.print("保存工作空间成功!");
    }
    } else {
    System.out.print("打开工作空间失败!");
    }
    // 释放资源
    connectionInfo.dispose();
    m_workspace.dispose();
    } catch (Exception e) {
    e.printStackTrace();
    }

    }
    }

    package com.supermap.serviceprovider;

    public class ClearSetting {

    //workspacePath 字段拼错了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    private String workspacePath; //文件工作空间路径

    public void setWorkspacePath(String workspacePath) {
    this.workspacePath = workspacePath;
    }

    public String getWorkSpacePath() {
    // TODO Auto-generated method stub
    return workspacePath;
    }
    }

  • 相关阅读:
    react 使用 redux 的时候 用 ref获取子组件的state
    node-rsa 非对称加密和解密
    electron 前端开发桌面应用
    react-router v4 使用 history 控制路由跳转
    react 写一个贪吃蛇
    【Java并发编程】:并发新特性—塞队列和阻塞栈
    【Java并发编程】:并发新特性—Executor框架与线程池
    【Java并发编程】:深入Java内存模型—内存操作规则总结
    【Java并发编程】:深入Java内存模型——happen-before规则及其对DCL的分析
    【Java并发编程】:加锁和volatile变量
  • 原文地址:https://www.cnblogs.com/yaohuimo/p/5942380.html
Copyright © 2011-2022 走看看