发表用户:LongRiver
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?BoardID=11&id=3696
信息原始来源:不祥

文章标题:MapXtreme for Java开发专题九:怎样快速响应多并发用户远程数据库数据请求


1 连接缓冲池

MapXtreme使用连接缓冲池,可以创建一组数据库的连接, 这些连接可以被有效的重用,这要就不必费时费力为每个客户端的请求创建一个连接。

那么,MapXtreme中的连接缓冲池是如何工作的呢?不论是MapXtremeServlet还是MapJ使用连接缓冲池的方式都是一样的,JDBC从RDBMS取数据时都首先从连接缓冲池中查找连接,如果找到了一个可用的连接就直接用,否则创建一个新的连接。连接使用后再放回连接缓冲池。如果此时连接缓冲池已满,则关掉连接并释放资源。

对于MapXtremeServlet使用连接缓冲池的情况,如果在classpath中找到了miconnections.properties文件,就会使用连接缓冲池。该文件描述的连接在MapXtreme初始化时会被预启动,MapXtremeServlet实例销毁时连接自动关闭。

对于MapJ的应用,如果在Classpath中能找到miconnections.properties文件也会自动自动预先产生一个连接缓冲池。这种情况只能创建一个连接缓冲池,该连接缓冲池被应用中的各个MapJ使用。MapXtreme需要从远程数据库取数据,如执行查询,获取图层上的数据,数据地图等等,如果连接缓冲池存在,这个过程就会使用连接缓冲池。另外,MapJ也可以使用MIConnectionPoolManager在运行时创建另外一个连接缓冲池。程序退出,调用MIConnectionPoolManager的dispose方法可以关闭连接。

2  配置 JDBC 连接 

通过miconnections.properties可以管理连接缓冲池,可以在文件中设置多个连接缓冲池。每个连接缓冲池需要设置以下几项,如:预启动连接的个数,连接缓冲池的最大连接数,连接超时时间等。下面是一个例子:

Connection1_name=ProjectMaps

Connection1_driver=oracle.jdbc.driver.OracleDriver

Connection1_url=jdbc:oracle:thin:@hostmachine:port:sid

Connection1_user=mapxtreme

Connection1_password=secret

Connection1_is_xy=false

Connection1_prestart=4

Connection1_max=15

Connection1_timeout=300

Connection1_prefetch=75

其中,第六句描述连接是否有空间数据(注,必须用两个连接缓冲池连接x/y坐标和空间数据),最后一句描述了数据库prefetch的值。

3  使用Pool连接

可以使用如下信息构造DataProviderHelpers:

• URL

• 用户名,密码等

• 驱动类

其中URL必须按如下命名方式给出:jdbc:mipool:resourece_name

如果使用了这种方式,有些参数可以省略,如下示例了连接Oracle8i的情况:

OraSoDataProviderHelper oraDpHelper = new OraSoDataProviderHelper("jdbc:mipool:ProjectMaps",null, null);

使用这种方式(命名空间),可以仅仅给出一个URL,连接在服务器端管理,敏感信息不在网上传输,这样也保证了安全性。

 4 连接管理器 

首先保证JDBC驱动在classpath中,使用命令行方式打开连接管理器:

java com.mapinfo.dp.util.ConnectionsManager

如果使用菜单执行exe,需要设置Connections Manager.lax文件中lax.class.path部分使之能够找到JDBC驱动。

如图:

 


可以添加、修改、删除miconnections.properties文件中定义的连接,下面是添加或修改连接的的界面,


       在Custom页可以设置自定义的属性,如pre-fetch。