eclipse+java类不报错,eclipse+versant笔记(2)

将所有的工具、环境安装配置好后,就要开始尝试创建数据库,把小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已经被创建。

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值