SuperMap iServer 擴充服務及擴充服務提供者範例,supermapiserver
一、擴充服務執行個體
1.將iserver-extend1下的listener.java打成jar包
2.複製到D:\SuperMap-iServer\webapps\iserver\WEB-INF\lib
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;
}
}