安装润乾报表后,产品自带一套基于HSQL数据库的元数据文件和与之关联的报表DQL Server服务。用户可参考本章节介绍在产品里部署自己的报表DQL Server服务,或独立部署自己的报表DQL Server。
报表DQL Server服务通常连接单个物理数据库进行数据查询与报表生成。当业务需要把将分散在不同物理库中的表进行汇总查询时,单物理数据库配置无法满足,此时可启用多物理数据库支持功能,通过同时查询多个物理库,在服务器端完成计算后汇总结果返回。
接下来我们详细介绍下关于报表DQL Server的部署以及相关配置说明。
部署报表DQL Server,按照如下步骤:
(一) 加载所需jar包
将以下jar包放入启动报表DQL Server时可加载到的目录下,获取路径为报表[安装根目录]\report\web\webapps\demo\WEB-INF\lib。
datalogic.jar 报表DQL Server计算引擎及JDBC驱动包
esproc-bin-***.jar 报表DQL Server基础包
json-20240303.jar 解析json格式串
raqsoftReport.jar 润乾报表核心包
如果报表DQL Server连接了其他物理数据源,需要添加对应数据库的驱动jar包。以自带逻辑数据库为例,它底层连接的物理数据源是HSQL数据库,所以启动时需引入HSQL驱动包hsqldb-2.7.3-jdk8.jar,获取路径为报表[安装根目录]\common\jdbc。
(二) 部署services目录
该目录为报表DQL Server的主文件目录,目录下可包含多个逻辑数据库,每个逻辑数据库是一个独立的目录,如上图中的datalogic目录。server.xml用于添加应用所使用的报表DQL Server逻辑数据库,并配置该报表DQL Server服务是否使用多物理数据库。逻辑数据库目录介绍如下:
1) service.xml用于配置逻辑数据库的元数据文件(*.lmd)、物理数据库连接信息以及报表DQL Server的用户权限。service.xml位于[安装根目录]\report\services\服务目录下。
2) 元数据文件由DQL元数据层设计器生成,存放于服务目录的conf目录下。
server.xml和service.xml文件的具体配置可参考单物理库配置小节。
注意:
1、单进程支持多个报表DQL Server服务实例;支持Blob、Clob等流式数据类型;server.xml和service.xml配置文件名不可更改;查询语句带$表示物理SQL,不带$表示DQL。
(三) 启动报表DQL Server
启动报表DQL Server时,运行命令必须包含以下参数:
java -Djava.ext.dirs=<JAR加载路径> -Dstart.home=<主路径> com.datalogic.server.ServerConsole
l -Djava.ext.dirs:指定Java扩展JAR包的加载路径(替换<JAR加载路径>为实际目录)
l -Dstart.home:指定报表DQL Server的主目录(替换<主路径>为实际路径)
l 启动类:com.datalogic.server.ServerConsole
注意:在start.home指定的主目录下,必须存在services子目录。
示例命令如下:
为方便使用可将运行命令做成启动文件,如在报表[安装根目录]\report\bin目录下,运行startDQLSERVER.bat,可启动报表DQL Server。
在Linux系统下,进入[安装根目录]\report\bin目录:
./startDQLSERVER.sh -d 启动报表DQL Server;
./startDQLSERVER.sh -x 关闭报表DQL Server。
(四) 连接报表DQL Server
报表DQL Server启动成功后可通过JDBC和ODBC两种连接方式进行连接。
具体连接方式使用如下:
JDBC:
使用JDBC连接时需在程序中引用报表DQL Server JDBC的驱动包datalogic.jar和报表DQL Server的基础包esproc-bin-***.jar
驱动 — com.datalogic.jdbc.LogicDriver
URL — jdbc:datalogic://[host]:[port],[host]:[port],…/[serviceName]?[&connect={连接名}]&[dqllog={true|false}]
//参数说明:
[host]:[port] -> 报表DQL Server的IP和端口号,可指定多个,多个时除ip和端口号外,其他内容须保持一致。连接时若第一个连接不通,会依次连接下一个,直到连接成功
[serviceName] -> 需要连接的报表DQL Server名称
[connect] -> 设置connect参数时,只连接connect指定的数据源,connect缺省时则连接报表DQL Server配置的用户数据源
[dqllog] -> 执行DQL时,是否打印DQL语句日志信息
例如:raqsoftConfig.xml配置文件里datalogic服务的连接如下
<DB name="DataLogic">
<property name="url" value="jdbc:datalogic://127.0.0.1:3366/datalogic"/>
<property name="driver" value="com.datalogic.jdbc.LogicDriver"/>
<property name="type" value="16"/>
<!-- user的属性值对应service.xml里<USER>标签的name值 -->
<property name="user" value="root"/>
<!-- password的属性值对应service.xml里<USER>标签的password值 -->
<property name="password" value="root"/>
<property name="batchSize" value="1000"/>
<property name="autoConnect" value="false"/>
<property name="useSchema" value="false"/>
<property name="addTilde" value="false"/>
<property name="caseSentence" value="false"/>
</DB>
ODBC:
驱动 — sun.jdbc.odbc.JdbcOdbcDriver
URL — jdbc:odbc:[ODBC数据源名称]
具体连接方法可参见使用ODBC连接报表DQL Server小节。
单物理库的配置包含server.xml和service.xml,文件说明如下:
Ø server.xml
将server.xml文件部署在报表[安装根目录]\report\services的根目录下,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<SERVER host="127.0.0.1" license="" port="3366" timeout="3000" log="true" autoStart="false">
<SERVICE name="datalogic"/>
</SERVER>
<SERVER/>标签属性如下:
host: 报表DQL Server的主机IP地址。
license: 润乾报表授权。按绝对路径和类路径次序查找授权文件。
port: 报表DQL Server的侦听端口号,缺省为3366。
timeout: 报表DQL Server的最长等待客户端时间,超时后重新等待,缺省为3000,单位为毫秒。该参数影响关闭报表DQL Server的响应时间,时间越长,CPU性能浪费越少,关闭服务器等待时间越长。
log: 是否记录运行日志,缺省为true。日志文件存于[应用根目录]\services\服务目录\log下。
autoStart: 是否自动启动服务,缺省为false。
<SERVICE/>: 需要启动的报表DQL Server服务列表,可配置多个,多个时则需添加多个<SERVICE/>节点,每个<SERVICE/>的name属性所指定的服务都必须位于[应用根目录]\services下,services目录下可以有多个报表DQL Server服务目录,但只有这里列出的服务才会被启动。
name: 报表DQL Server的名称,名称必须与服务目录的文件夹名称一致。
注:蓝色文字部分为必须配置的节点或属性。
Ø service.xml
将service.xml文件部署在报表[安装根目录]\report\services\服务目录\的根目录下,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<SERVICE logicmetadata="demo.lmd">
<DB type="HSQL">
<CONNECTION name="db1" type="jndi" jndi="java:comp/env/report" user="" password=""/>
<CONNECTION name="db2" type="jdbc" url="jdbc:hsqldb:hsql://127.0.0.1/dqldemo" driver="org.hsqldb.jdbcDriver" user="sa" password=""/>
</DB>
<USERS>
<USER name="root" password="root" admin="true">
<CONNECTION name="db2" />
<CONNECTION name="db1" user="wn" password="wn"/>
</USER>
<USER name="ww" password="ww"/>
</USERS>
</SERVICE>
<SERVICE/>标签属性如下:
logicmetadata: 报表DQL Server的元数据文件,存于[应用根目录]\services\服务目录\conf 下。
<DB/>配置报表DQL Server使用的物理数据源,标签属性如下:
type: 数据库类型,取值范围ORACLE、SQLSVR、SYBASE、SQLANY、INFMIX、FOXPRO、ACCESS、FOXBAS、DB2、MYSQL、KINGBASE、DERBY、HSQL、TERADATA、POSTGRES、UNKNOWN等。
<CONNECTION/>配置报表DQL Server的物理数据源的连接信息,标签属性如下:
name:物理数据源的名称。
type:连接类型,取值范围jndi、jdbc。jndi:通过web服务环境Context连接;jdbc:通过加载数据库驱动连接。
jdbc连接类型的数据源需同时设置driver(数据库驱动类)、url(数据库连接URL)、user(数据库用户名)、password(数据库密码)属性。
jndi连接类型的数据源需同时设置jndi(JNDI服务提供者的URL)、user(数据库用户名)、password(数据库密码)属性。
<USERS/>配置报表DQL Server的用户权限,可配置多个用户,多用户时则添加多个<USER/>节点。
<USER/>配置报表DQL Server的用户连接信息,标签属性如下:
name:连接报表DQL Server的用户名,可选。(注:使用ODBC连接报表DQL Server时,必填)
password:连接报表DQL Server的密码,可选。(注:使用ODBC连接报表DQL Server时,必填)
admin:当前用户是否为管理员,可选。
<CONNECTION/>配置当前用户可连接的数据源名称。可配置多个连接,多连接时则添加多个<CONNECTION/>节点。标签属性如下:
name:要连接的物理数据源名称,连接name必须在<DB>节点已配置,可选。
user:当前用户可以设置自己的数据库用户名,可选。
password:当前用户可以设置自己的数据库密码,可选。
当<USER/>下配置多个<CONNECTION/>节点时,按照其先后顺序,依次进行尝试连接。
当<USER/>下没有配置自己要连接的数据源时,则按照<DB/>节点下的数据源配置的先后顺序,依次进行尝试连接。
注:(1)蓝色文字部分为必须配置的节点或属性。
(2)若xml文件中包含特殊字符,需先将特殊字符进行转义,再写入文件中,如将"&"写成"&"。
补充说明:
在部署报表DQL Server时,如需修改产品某个逻辑数据库(以datalogic为例)目录下的元数据文件和数据源配置,除手动修改配置文件外,还可通过下面方式进行:
在DQL元数据层设计器中启动报表 DQL Server 时,通过其菜单选项传递相应的属性值,直接实现部署期间的修改。
首先,勾选选项菜单中的启动报表DQL服务时弹出部署窗口
然后,点击服务 - 启动报表DQL服务器,弹出如下窗口:
数据源:下拉列表中的数据源均来自系统 - 数据源中所添加的物理数据源。
报表DQL服务目录:需要修改的逻辑数据库目录所在路径,默认为datalogic逻辑数据库的路径。
元数据文件:新元数据文件所在路径,程序会将该文件上传至报表DQL服务目录所在的逻辑数据库中。
点击【确定】后,程序会根据元数据文件路径获取元数据文件,并将文件上传至[安装根目录]\report\services\datalogic\conf目录下,数据源名称和元数据文件名称也会同步修改到[安装根目录]\report\services\datalogic\service.xml中。
多物理库是一个报表DQL Server服务中配置多个物理数据源,该数据源需先在WEB应用的raqsoftConfig.xml配置文件中定义,每个数据源对应的元数据层文件要保持语义结构一致。程序会自动根据元数据层的语义结构进行合并,实现多物理库间的合并汇总。
多物理库的配置包含server.xml和service.xml,文件说明如下:
Ø server.xml
将server.xml文件部署在报表[安装根目录]\report\services根目录下,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<SERVER host="127.0.0.1" license="" raqsoftConfig="web/webapps/demo/WEB-INF/raqsoftConfig.xml" port="3366" timeout="3000" log="true" autoStart= "false">
<SERVICE name="datalogic_multi" mdb="true"/>
</SERVER>
<SERVER/>标签属性如下:
host: 报表DQL Server的主机IP地址。
license: 润乾报表授权。按绝对路径和类路径次序查找授权文件。
raqsoftConfig:报表配置文件raqsoftConfig.xml路径,此属性仅在使用多个物理库时有效。
port: 报表DQL Server的侦听端口号,缺省为3366。
timeout: 报表DQL Server的最长等待客户端时间,超时后重新等待,缺省为3000,单位为毫秒。该参数影响关闭报表DQL Server的响应时间,时间越长,CPU性能浪费越少,关闭服务器等待时间越长。
log: 是否记录运行日志,缺省为true。日志文件存于[应用根目录]\services\服务目录\log下。
autoStart: 是否自动启动服务,缺省为false。
<SERVICE/>: 需要启动的报表DQL Server服务列表,可配置多个,多个时则需添加多个<SERVICE/>节点,每个<SERVICE/>的name属性所指定的服务都必须位于[应用根目录]\services下,services目录下可以有多个报表DQL Server服务目录,但只有这里列出的服务才会被启动。
name: 报表DQL Server的名称,名称必须与服务目录的文件夹名称一致。
mdb:是否使用多个物理库,缺省为false。值为true时表示使用多个物理库,此时service.xml结构有变,具体可参考service.xml文件中<MAP/>标签使用介绍。
注:蓝色文字部分为必须配置的节点或属性。
当<SERVICE>标签中的mdb属性为true时,表示当前报表DQL Server服务启用多物理库。在此模式下,系统将从<SERVER/>标签指定的raqsoftConfig属性值中获取物理数据源名称;在service.xml文件配置物理库时,可以在< ENTRY />标签中通过名称引用raqsoftConfig.xml文件内定义的物理数据源。
Ø service.xml
将service.xml文件部署在报表[安装根目录]\report\services\服务目录\的根目录下,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<SERVICE logicmetadata="demo.lmd">
<USERS>
<USER name="root" password="root"/>
<USER name="ww" password="ww"/>
</USERS>
<MAP>
<ENTRY dbName="dqldemo1" logicmetadata="" />
<ENTRY dbName="dqldemo2" logicmetadata="" />
<ENTRY .../>
</MAP>
</SERVICE>
<SERVICE/>标签属性如下:
logicmetadata: 报表DQL Server的元数据文件,存于[应用根目录]\services\服务目录\conf 下。
<USERS/>配置报表DQL Server的用户权限,可配置多个用户,多用户时则添加多个<USER/>节点。
<USER/>配置报表DQL Server的用户连接信息,标签属性如下:
name:连接报表DQL Server的用户名,可选。(注:使用ODBC连接报表DQL Server时,必填)
password:连接报表DQL Server的密码,可选。(注:使用ODBC连接报表DQL Server时,必填)
admin:当前用户是否为管理员,可选。
<MAP/>配置报表DQL Server要使用的物理数据源,仅在多物理库时使用。
<ENTRY/>配置物理数据源名称及元数据文件,标签属性如下:
dbName:设置物理数据源名称。物理数据源必须在指定的raqsoftConfig.xml文件中已定义。
logicmetadata:当前物理数据源所使用的元数据文件,可选。若未设置元数据文件则默认采用<SERVICE/>标签中的同名属性值。
注:(1)蓝色文字部分为必须配置的节点或属性。
(2)使用多物理库时,元数据层文件中的逻辑表表结构必须保持一致。包含表名、字段名、字段数、维(表主键)。