远程数据连接
原理
客户端连接服务器端数据源的方式有很多种,可以通过jdbc直接连接,也可以通过http的方式,经由数据服务器再连接到数据库,这几种方式各有优缺点。
Jdbc直连的示意图:
http方式经由数据服务器连接的示意图:
Jdbc直连的方式,数据访问效率高,速度快,性能比较优,缺点在于安全性差,因为要把数据库的连接权限开放给客户端。目前润乾的远程设计器提供了隐藏连接参数的机制,虽然客户端可以直连数据库,但是看不到连接参数,而对数据的访问权限受设计器的控制,因此总体上没有太大的问题。
Httpjdbc的连接方式,缺点在于数据访问效率低,速度慢,性能比较差。优点在于安全性比较好,客户端通过中间的数据服务器访问数据库,不会暴露数据库的连接权限。当然,数据服务器也可以由集成商自己开发,经过代码优化,也许性能会提高。
部署与配置
jdbc直连方式的配置与部署
配置方式参照第三章3.3远程数据源信息文件的介绍,如果远程服务器自己写,也可以作修改,采用自定义的配置方式,只要接口符合要求即可,接口参见“com.runqian.report4.remote.DataSourceDefine”API说明。
比如,可以使用xml文件存储数据,采取如下jdbc直连配置参数:
<ds name="remote-runqian" //数据源名称 dbType="sqlsvr" //数据库类型 user="sa" //用户名 password="" //密码 driverClass="org.hsqldb.jdbcDriver" //驱动程序 url="jdbc:hsqldb:hsql://localhost:9004/runqian" //访问url transCharset="1" //查询结果是否转换编码 dbCharset="gbk" //数据库的编码 ideCharset="GBK" //设计器的编码 transSQLCharset="1" //是否转换sql编码 CaseSensitive="0" //大小写是否敏感 useSchema="0" //是否使用数据库模式 />
jdbc直连方式的部署很简单,把jdbc 相关的jar按照第二章的流程进行下载部署即可,即部署在[report]/remoteDesigner目录下,进行证书签名,并将jdbc Jar的下载配置添加进jnlp文件。
http jdbc方式的配置与部署
-
配置
配置方式参照第三章3.3远程数据源信息文件的介绍,如果远程服务器自己写,也可以作修改,采用自定义的配置方式。
润乾提供的http jdbc配置的内容格式为:(红色部分在后面有注释)
<ds name="remote-runqian" //数据源名称dbType="sqlsvr" //数据库类型user="sa" //用户名password="" //密码driverClass="com.runqian.report4.jdbcclient.ClientDriver" //驱动程序url="jdbc:runqian://192.168.0.98:8080/db&dsn=demo&webapps=/report/JdbcServlet"//访问urltransCharset="1" //查询结果是否转换编码dbCharset="gbk" //数据库的编码ideCharset="GBK" //设计器的编码transSQLCharset="1" //是否转换sql编码CaseSensitive="0" //大小写是否敏感useSchema="0" //是否使用数据库模式/>
其中url的详细说明如下:
dsn=2.2.2中步骤三的数据源名称,例如dsn=demo
webapps=[report]加上2.2.2中步骤3的<url-pattern>/JdbcServlet</url-pattern>的值,例如webapps=[report]/JdbcServlet
192.168.0.98:8080为报表应用服务器的ip地址和端口号
-
部署
如果是http jdbc连接方式,其部署包括如下四个步骤:
1、 增加远程下载jar包
commons-codec-1.3.jar
commons-httpclient-3.0.jar
commons-logging.jar
r4jdbcClient.jar
r4jdbcServer.jar
上述jar要按照第二章的流程进行部署,即部署在[report]/remoteDesigner目录下,进行证书签名,并将上述Jar的下载配置添加进jnlp文件,内容如下:
<jar href="commons-codec-1.3.jar" download="lazy"/><jar href="commons-httpclient-3.0.jar" download="lazy"/><jar href="commons-logging.jar" download="lazy"/><jar href="r4jdbcClient.jar" download="lazy"/><jar href="r4jdbcServer.jar" download="lazy"/>
2、 服务器类路径下增加jar包
将r4jdbcServer.jar部署到服务器的类路径下,一般为[report]/WEB-INF/lib目录下
3、 服务器web.xml里增加jdbcServer的servlet配置
<servlet> <servlet-name>com.runqian.report4.jdbcserver.JdbcServlet</servlet-name> <servlet-class>com.runqian.report4.jdbcserver.JdbcServlet</servlet-class> <init-param> <param-name>JNDIPrefix</param-name> <param-value>java:comp/env</param-value> </init-param> <init-param> <param-name>dataSource</param-name> <param-value>demo,SQLSVR,GBK,0;</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>com.runqian.report4.jdbcserver.JdbcServlet</servlet-name> <url-pattern>/JdbcServlet</url-pattern> </servlet-mapping>
(1) JNDIPrefix表示查找数据源时的环境串前缀,在不同的WEB服务器中不同,如Tomcat中是java:/comp/env,而Weblogic和Websphere中均不需要,可以不填。
(2) dataSource表示用户在WEB应用中要用到的数据源配置,其格式如下:
数据源的JNDI名称,数据库类型,数据库字符集编码[,SQL是否需要转码];[重复]……
数据库类型按下表填写:
数据库中使用的字符集编码,一般为GBK或iso-8859-1。
SQL是否需要转码:有些数据库的字符集不是中文的,如果在执行SQL语句且语句中带有中文时,就会执行不正确。配置之前可以做一个简单的数据集为中文SQL的报表测试一下,如果执行结果不对,那么就需要设置此参数。参数值为1,表示要转码,为0或不设此参数值表示不需要转码。如:
jdbc/oracle,oracle,GBK;jdbc/db,oracle,iso8859-1,1;……
在http-jdbc中使用此数据源。
(3) /JdbcServlet此处可以定制,在HTTP-JDBC会调用此servelt
4、 应用服务器中配置http jdbc用到的数据库连接池
即上述第三点中提及的datasource,请在应用服务器中配置,比如tomcat4,就应该在server.xml中增加类似下面的配置
<Resource name="demo" auth="Container" type="javax.sql.DataSource" /> <ResourceParams name="demo"> <parameter> <name>username</name> <value>sa</value> </parameter> <parameter> <name>password</name> <value>guohua</value> </parameter> <parameter> <name>driverClassName</name> <value>com.newatlanta.jturbo.driver.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:JTurbo://192.168.0.173/pubs/charset=GBK</value> </parameter> </ResourceParams>