将所有的工具、环境安装配置好后,就要开始尝试创建数据库,把小demo跑起来自high一下啦~~
一、创建数据库
1.创建数据库目录:makedb tutdb(tutdb是数据库名称,可自己拟定,不过后面的tutorial中build.xml中写的数据库名称就是tutdb,若修改,后面的tutorial中build.xml文件也必须修改。)
2.创建数据库结构:createdb tutdb
二、tutorial
Versant为了让新手们尽快上手实践,非常人性化地提供了一个小例子,源码文件在\8\sdk\examples\jvi\tutorial目录下,可以将其拷到eclipse的workspace中,或重新在eclipse中创建一个工程,将文件都拷贝进来。
tutorial目录下的model目录中的文件均为持久性类,而外面的如CreatePerson.java等均是应用程序,我们的目的是能够
1.在数据库中创建持久性类;
2.使这些应用程序运行起来。
接下来对调试过程进行记录:
1.在新建工程中,非model包中的类均会报错,因为
import com.versant.trans.*
这个包eclipse找不到。这需要添加V/JVI classes,也就是将jvi80.jar导入工程。
package explorer右键选择BuildPath->AddExternalArchives,然后选择文件\8\lib\jvi80.jar即可。
2.编译java类
可以利用eclipse进行编译,或者是利用ant工具,这个工具Versant和eclipse都有提供,这里仅以Versant目录下ant为例进行记录。
首先,需要将ant.exe所在的目录\8\sdk\ant\bin写入path环境变量,但是此时运行ant仍然会报错:
Unable to locatetools.jar. Expected to find it in C:\Program Files\Java\jre6\lib\tools.jar
从中我们可以看到,ant认为java的路径是在C盘下的,但实际上我电脑上java的安装位置并不是这里。这里需要添加几个环境变量:
ANT_HOME: D:\Versant\8\sdk\ant;
CLASSPATH: D:\Versant\8\sdk\ant\lib\ant.jar;
JAVA_HOME: D:\Program Files\Java\jdk1.6.0_13;
之后再运行ant就不会出现问题了。
cmd中进入tutorial所在目录,执行命令:
ant clean
ant compile
由于代码是Versant自己给的,一般不会有报错。
3.加强java类
《Versant笔记-JVI》一文中对tutorial.pdf中对加强器的解释翻译如下:
加强器是一个后处理器,它修改Java类以实现实例在数据库中的存储。它同时声明代码能够实现持久对象,这样这些持久对象就可与数据库联系。加强器之所以被成为后处理语句是因为它修改Java .class文件而不是java源文件。也就是说加强器的输入是编译过的Java类,因为加强语是在编译后。加强器的输出是一系列类文件,但是这些类已经被修改以适应于Versant数据库。后处理是可行的基于两个原因。
(1) Java .class文件包含独立于任何处理器的虚拟机语言指令。那么.class文件能够在不同的平台上执行,这就意味着加强器不需要考虑特定平台细节;
(2) class文件是由相对简单的指令组成的,这就使得他们能被加强器容易的读取和修改。
虽然实际上加强器做的工作比较堵,但它主要对输入的.class文件处理三个主要的功能:
(1) 捕获持久化类的架构和生成代码来告知此架构的数据库;
(2) 生成从数据库中移动对象到Java的内存的代码,反之亦然;
(3)增强的应用程序代码访问并修改持久对象标记为脏对象,并从数据库中提取的对象,当事务被提交时使这些对象的变化写入到数据库中。
——以上摘抄自《Versant笔记-JVI》P6-7
这一步需要写config.jvi文件,幸运的是tutorial已经为我们写好了一份,不过我们仍然需要对其含义和功能进行一定的了解。config.jvi控制加强器的行为,其中有三个符号:
(1) c:后面接的类为persistent capable(具有持久性)
(2) a:后面接的类为persisten aware(持久调用类)
(3) n:不用加强,**指没被提到的都不用被加强,因此n**常被放在config.jvi文件的末尾。
如:
c tutorial.model.Person
a tutorial.CreatePerson
n**
注意,新建config.jvi时必须安装JVI Enhancer插件,这一插件是sdk\IDEIntegrations\eclipse\plugins,zip,上一篇文章已经介绍了如何将本地插件安装进eclipse,这里就不加赘述了。在安装成功后,点击project->properties->Versant JVI Interface Propeties,勾选enable enhancer for this project,configuration file写config.jvi文件的全路径,Output Directory一般是...tutorial\build,也可自定。
按照《Versant笔记-JVI》中的说法,在编译后直接enhance会出错,需要先将session.makePersistent(person);屏蔽后再compile,然后enhance,再去掉屏蔽,再compile。我是直接在compile后就直接enhance的,并没有出错,不知是不是版本区别。
加强enhance命令:
ant enhance
若enhance成功,则会发现build目录下产生以_Pickler_Vj.class结尾的文件。
4.运行程序
运行程序前,需要将被enhance的.class文件所在路径写入CLASSPATH中,同时[VERSANT_ROOT]/lib/子目录也是要写进PATH环境变量中的。
接下来运行CreatePerson(功能是将一个人的实例写入数据库):
ant runCreatePerson
然而却出错了,报错:Exception in thread "main" {VException(3009:NET_ECONNECT: Low level connect error("vsl/vslsock.c", line 237)[oserr='10061'])}
这个问题弄得我一头雾水,多方寻觅没有结果,后来终于在Versant论坛上发现了解决方案:
原来是versantD.exe服务没有开启,我在Versant目录下发现了它,但是无论如何也无法启动,正如文中所说,当初安装时,我是直接安装的,并非利用了管理员程序,而最好的办法只能是:重装……重装……重新用管理员身份安装Versant(苍天啊!!!)
重新安装后,运行成功!(注意,安装过程中360或是防火墙之类的会阻止versantD.exe的开机自启,一定要允许!)
5.查看数据库信息
Versant数据库的相关语句我还不熟悉,利用tutorial中的命令:
db2tty -d tutdb -itutorial.model.Person
从下图中,可以看到数据库tutdb中Tom已经被创建。