内嵌 QVS 使用说明

本文档适用于已经掌握了云服务部署的知识,希望进一步学习 QVS 其他用法的用户。
使用 QVS 服务时,除了可以部署 QVS 服务器,还可使用内嵌 QVS 方式。相对于部署 QVS 服务器,内嵌 QVS 使用更加便捷,只需要配置 ecloud-********.jar 与 qvsConfig.xml 文件即可。

使用内嵌 QVS 时,是通过 Qconnect(url:v,wt,it) 函数来连接 QVS 的,此时 url 参数必须省略。
例如我们需要通过内置 QVS 来连接 GCE 上的 QVA,然后申请 QVM 执行 GCS 远程存储桶 unbucket100 下的脚本文件 employee-cursor.splx,下面通过示例来演示内嵌 QVS 的使用,这里我们默认 QVA 与 QVM 是启动状态:

应用中使用内嵌 QVS

将 ecloud-********.jar 部署到用户应用里,用户应用启动时调用 com.scudata.ecloud.server.QVS.init(configFilePath) 即可,其中参数 configFilePath 是 QVS 配置文件 qvsConfig.xml 的路径,该路径可以是绝对路径,也可以是相对路径,相对路径时相对于应用项目的类路径。下面以 QJDBC 为例,用法如下:

1, 部署 QJDBC

首先在用户的项目应用中集成 QJDBC,具体操作可参考【企业版 JDBC】。

2, 加载 ecloud-********.jar

在启动项目应用时,需要加载 QVS 所需的 ecloud-********.jar 包,该 jar 文件在【集算器根目录】/esProc/lib 目录下可找到。在 web 应用下,可以把 jar 包放在 WEB-INF/lib 目录下。

3,配置集算器系列号

在 raqsoftConfig.xml 中配置集算器系列号。
[安装目录] /esProc/q-server/webapps/qvs/WEB-INF/home/raqsoftConfig.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Config Version="3">
    <Runtime>
        … …
        <Esproc>
            … …
	     <serialNo>O1XEHMFHBZG4S</serialNo>
        </Esproc>
        … …
    </Runtime>
</Config>

4,配置 qvsConfig.xml 文件

qvsConfig.xml 可以在 [安装目录] /esProc/q-server/webapps/qvs/WEB-INF/home 下找到,根据实际环境配置完成后,可放在任意路径下,这里我们放置于【应用根目录】/config 目录下,

<?xml version="1.0" encoding="UTF-8"?>
<qvs>
	<runMode>0</runMode>
	<locale language="zh" country=""/>
	<cacheSystem cachePath="cache" blockSize="1024" minFreeSpace="2" />  
	<verifies>
		<verify code="GCP-35.236.6.87">
			<QVA user="admin" xpwd="88888888" url="http://35.236.6.87:8090/QVA"/>			
			<store type="GCS">
				{"credentials":"scudata-891de5fb1bc9.json"}
			</store>  
		</verify>   
	</verifies>
</qvs>

其中用到的 GCS 远程存储连接文件 scudata-891de5fb1bc9.json 放在应用项目的类路径下。
了解更多 qvsConfig.xml 的配置可参考【QVS 配置】。

5,设计并部署脚本文件

创建 splx 文件如下,保存为 Qcon.splx:


A B
1 =Qconnect(:"GCP-35.236.6.87",30,300) 通过内嵌 QVS 向 GCE 上的 QVA 申请分配 QVM。使用内嵌 QVS 时,参数 url 省略
2 =A1.exec@x("unbucket100/employee-cursor.splx";100) 通过 QVS 执行 GCS 上的脚本文件, 使用 @x 选项,返回执行结果后自动关闭 QVM

可将上面的 Qcon.splx 放到应用项目的类路径下,也可以放到 raqsoftConfig.xml 中配置的寻址路径或主目录中,这里我们放置于主目录下。

6, 在 java 中调用脚本文件

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import com.scudata.ecloud.server.QVS;

public class qconnect {
		  Connection con = null;
		  java.sql.PreparedStatement st;
	public void testDataServer(){			
			  try{
			  //建立QJDBC连接
			  Class.forName("com.esproc.jdbc.QDriver");
			  Driver d = DriverManager.getDriver("jdbc:esproc:q:local://");
			  con = d.connect("jdbc:esproc:q:local://", null);		  
			  //调用Qcon.splx脚本文件
			  st=con.prepareCall("call Qcon()");
			  st.execute();
			  //获取结果集
			  ResultSet set = st.getResultSet();			
			  ResultSetMetaData meta = set.getMetaData();
			  while (set.next()) {
				  for(int i=0; i<meta.getColumnCount(); i++){						
						System.out.print(set.getObject(i+1) + "\t");
					}
					System.out.println();
				}
			  }			  
			  catch(Exception e){
			  System.out.println(e);
			  }
			  finally{
			  //关闭连接
			  if (con!=null) {
			  try {
			  con.close();
			  }
			  catch(Exception e) {
			  System.out.println(e);
			  }
			  }
			  }			 
		}		
	public static void main(String[] args) throws Exception {
		//调用com.scudata.ecloud.server.QVS.init(configFilePath),将qvsConfig.xml的相对路径作为参数传递		
		QVS.init("config/qvsConfig.xml");		
		qconnect tds = new  qconnect();
		tds.testDataServer(); 		
	}	
}

执行结果如下:

集算器 IDE 中也可使用内嵌 QVS,集算器安装包中已内置 ecloud-xxxxxxxx.jar, GCS 远程存储连接文件 scudata-891de5fb1bc9.json 放到类路径下(如:[集算器安装根目录]/esProc/lib)。启动 IDE,在【工具 - 选项 - 内嵌 QVS】菜单中指定 qvsConfig.xml, 重启 IDE 即可启动内嵌 QVS,然后就可以执行 Qcon.splx 脚本:

虽然内嵌 QVS 相对于部署 QVS 比较便捷,但是也存在一些局限性,内嵌 QVS 不支持调试模式、不支持省略 QVA、不能使用全局锁和全局变量。用户可根据实际需求选择使用方式。部署 QVS 可参考《云服务部署说明》 。