达梦数据库(DM8)集成使用 Geoserver(2.22.2) 以及其他对应版本详解
- 系统环境版本
- Geoserver 驱动对应版本
- 达梦 8 集成 Geoserver 过程
- 试错过程问题
- 总结
项目需要国产化,选择使用达梦数据库,在技术测试阶段,尝试基于达梦 8 来集成使用 Geoserver,在最新版(Geoserver2.22.2)的时候很顺利。
但是对于其他版本,遇到了一些问题,网络相关资源也非常少,笔者几乎把所有版本都测试一遍,这里总结记录一下。
这里先放上结论:Geoserver 2.8 以上版本,除了 2.13.*、2.14.* 不支持,其他版本均支持!
本文主要包括:系统环境版本、Geoserver 驱动对应版本、达梦 8 集成 Geoserver 过程、Geoserver 不同版本详解、试错过程问题。
注意:如果想节省时间,可直接查看 Geoserver 驱动对应版本,按照 达梦 8 集成 Geoserver 即可!
系统环境版本
系统版本:win10 专业版
java 版本:1.8.0_181
数据库版本:达梦8
Geoserver版本:
2.8.1、2.9.1、2.10.1、2.11.0、2.12.4、2.13.0、2.14.1、2.15.1、2.17.1、2.22.2
Geoserver 驱动对应版本
为了节省时间,这里先放上各个 Geoserver 版本对应驱动以及兼容情况。
1. Geoserver 2.15.* 至最新版(Geoserver 2.22.2)
驱动:gt-dameng-2.15.jar、DmJdbcDriver18.jar
2. Geoserver 2.8.* 至 Geoserver 2.12.*版
驱动:gt-dameng-2.11.jar、DmJdbcDriver18.jar
3. Geoserver 2.8.*版
驱动:gt-dameng-2.8.jar、DmJdbcDriver18.jar
这里可以发现 Geoserver 2.8,可以使用 gt-dameng-2.8.jar 或者 gt-dameng-2.11.jar 驱动。
但是经过多次替换驱动发现 Geoserver 2.13、2.14 均不支持,报错原因大概是因为 Geotools 版本不兼容,估计只有修改源码才可能支持!
达梦 8 集成 Geoserver 过程
1. 安装达梦8,请参照
https://eco.dameng.com/document/dm/zh-cn/pm/install-uninstall.html
2. Geoserver安装,下载解压即可
官方下载:https://geoserver.org/download/
官网教程:https://docs.geoserver.org/latest/zhCN/user/index.html
3. 找到达梦数据库驱动包:
一般路径为:达梦安装路径\dmdbms\drivers\jdbc\dialect
请选择合适的驱动包,本说明JDK为1.8,因此选择 DmJdbcDriver18.jar;
Geoserver 为2.22.2,选择目前最新驱动: gt-dameng-2.15.jar
注意:Geoserver 2.15 以上选择 gt-dameng-2.15.jar;其他版本请对应选择。
4. 将两个驱动 (缺一不可) 包放入Geoserver 中:
如果缺少 gt-dameng-2.15.jar
,则不显示达梦数据库连接数据源:
如果缺少 DmJdbcDriver18.jar
,则只显示 JNDI
数据源:
驱动放置路径为:Geoserver安装路径\geoserver-2.22.2\webapps\geoserver\WEB-INF\lib
5. 添加达梦数据库连接:
Geoserver 访问地址:http://localhost:8080/geoserver/
可参考: https://webgis.blog.csdn.net/article/details/124005271
(1)建议先添加工作空间(非必须)
(2)添加达梦数据库,填写连接属性
6. 发布图层并预览:
注意:一般只操作前两个选项卡(数据、发布)
(1)添加图层
(2)选择仓库
(3)填写图层信息:
(4)选择图层样式,保存:
(5)最后,预览:
试错过程问题
试错过程,基本就是 geoserver 2.13 和 2.14 的报错。
报错大概意思就是方言不对,或者是某个类不存在。
- 如果使用 gt-dameng-2.15.jar,可以添加数据源以及发布图层,但是预览报错:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE ServiceExceptionReport SYSTEM "http://localhost:8080/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1" > <ServiceException code="internalError">
Rendering process failed
java.lang.AbstractMethodError: org.geotools.jdbc.SQLDialect.decodeGeometryValue(Lorg/opengis/feature/type/GeometryDescriptor;Ljava/sql/ResultSet;Ljava/lang/String;Lcom/vividsolutions/jts/geom/GeometryFactory;Ljava/sql/Connection;Lorg/geotools/factory/Hints;)Lcom/vividsolutions/jts/geom/Geometry;
org.geotools.jdbc.SQLDialect.decodeGeometryValue(Lorg/opengis/feature/type/GeometryDescriptor;Ljava/sql/ResultSet;Ljava/lang/String;Lcom/vividsolutions/jts/geom/GeometryFactory;Ljava/sql/Connection;Lorg/geotools/factory/Hints;)Lcom/vividsolutions/jts/geom/Geometry;
</ServiceException></ServiceExceptionReport>
- 如果使用 gt-dameng-2.11.jar,虽然可以显示数据源,但是添加会则报错:
org.apache.wicket.WicketRuntimeException: Method onRequest of interface org.apache.wicket.behavior.IBehaviorListener targeted at org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink$1@f3e85e2 on component [AjaxSubmitLink [Component id = save]] threw an exception
at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:268)
at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:248)
at
#### 删除部分无用错误信息
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
... 103 more
Caused by: java.lang.NoClassDefFoundError: com/vividsolutions/jts/io/ParseException
at org.geotools.data.dameng.DamengDataStoreFactory.createSQLDialect(DamengDataStoreFactory.java:47)
at org.geotools.jdbc.JDBCDataStoreFactory.createDataStore(JDBCDataStoreFactory.java:301)
at org.geotools.jdbc.JDBCDataStoreFactory.createDataStore(JDBCDataStoreFactory.java:49)
at org.vfny.geoserver.util.DataStoreUtils.getDataAccess(DataStoreUtils.java:81)
at org.geoserver.catalog.ResourcePool.getDataStore(ResourcePool.java:629)
at org.geoserver.web.data.store.DataAccessEditPage.onSaveDataStore(DataAccessEditPage.java:130)
at org.geoserver.web.data.store.AbstractDataAccessPage$1.onSubmit(AbstractDataAccessPage.java:176)
at org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink$1.onSubmit(AjaxSubmitLink.java:111)
at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$AjaxFormSubmitter.onSubmit(AjaxFormSubmitBehavior.java:215)
at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1309)
at org.apache.wicket.markup.html.form.Form.process(Form.java:976)
at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:797)
at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:171)
at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:155)
at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:601)
... 108 more
Caused by: java.lang.ClassNotFoundException: com.vividsolutions.jts.io.ParseException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:450)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:403)
... 123 more
An error occurred while loading the page
总结
再强调一下,经测试,只有 Geoserver 2.13 和 2.14 不支持,其他均可正常添加发布图层!
参考博客:
Geoserver 版本对应 Geotools 版本
使用 DM 数据库发布空间类型数据到 GEOSERVER
GeoServer:Rendering process failed java.lang.AbstractMethodError