在Domino平台上使用连接池

在Domino平台上使用连接池,第1张

        在很久很久以前,笔者曾经发布过一篇小文《Domino支持连接池技术》。那篇文章借用了JnpServer,实用性并不强。在后来的开发实践中学习了一位开发人员实现的连接池技术,并成功用在了Domino平台上,效果很不错,不敢独享!

        这个版本采用了Java的单例模式,将连接池管理者常驻于内存,这样只要是基于DominoJVM的java 代码都可以调用,方便快捷,性能接近Java平台。

        现在用Designer开发Domino的应用越来越像Java项目。在Designer的导航器视图的左侧,仔细看NSF数据库应用的目录结构,是不是非常像一个Java项目?或者说就是一个Java项目。在这些目录结构中,我们要关注的其实是WebContent目录。这分明就是一个Web项目啊。本篇文章所讲述的技术实现也是得益于Designer的进步。

  1. 寻找classpath

        本篇所讲的链接池或者是Java平台的连接池都要读取一个配置文件,那么本文中需要的配置文件是db.properties。Java平台是放在{classpath:}目录下,一般就是resources目录。但对于Domino项目来说,肯定不是Resources目录。那么到底在哪里那?在左侧的项目导航里,我们会发现一个文件:build.properties。这个文件是不是没见过?从文件名可以猜测,这是编译的配置参数。太可疑了,打开看看。

source.. = Local/,\

           Code/Java/

output.. = WebContent/WEB-INF/classes/

果然是编译的配置参数。看output,这是java代码编译后放的目录,跟java项目一致。笔者将配置文件放在了classes目录下。悲剧了!

        笔者以为就是这个目录,然后执行了项目的清理 *** 作,然后,什么都没了!再回头看build.properties,是output目录,一切都明白了,这是输出目录,清理 *** 作时要清空的。真是实践出真知啊!那么相对的source就是来源目录了。先试试Local目录,将配置文件拷贝至Local目录下,然后执行清理同时编译,果然配置文件已经被编译进了output指向的目录中。似乎可以结案了。但是笔者还要做个实验,Local目录也是很可疑的,为什么叫Local而不叫其他的?

        笔者将数据库新建了一份拷贝至本地,然后在Designer中打开。再打开Local目录,好了,配置文件没有了。果然命名为Local是有原因的。如此,只能用Code/Java这个目录了。实际上也是,笔者将配置文件拷贝至此目录后,output目录中就出现了相同的文件。一切尘埃落定,终于找到了我们需要的目录来存放配置文件。

        花了这么多时间和精力,为的是什么?其实之前可以将配置文件直接放到domino的程序目录中,java程序也可以读取到。但是这样 *** 作,维护比较麻烦,修改一个参数还需要连接 *** 作系统。尤其是大企业中,访问生产系统是件很麻烦的事情。因此如果能将配置于自己可以管理的范围内,能省很多事。至少放到NSF库中,改起来很方便。

        最后我们还要测试一下,链接池能否在output中读取到配置文件,这样才算完成第一步工作。但是怎么做那?我们试着编写一段程序,让它能访问db.proerties文件就可以了。在本文中使用了Xagent,那是什么?简单说来就是把Xpage做成了Servlet。具体实现方法,不在本文讨论的范围内,如果需要,读者可以在回复中提出要求。好了,我们继续。笔者的思路是利用Xagent访问Java程序,由Java程序通过classLoader获取路径并在此路径下访问db.properties

getClass().getClassLoader().getResource("db.properties").getPath();

我们看看输出是什么:

/app/poolsmanager.nsf/WEB-INF/classes/db.properties

取到了,那也就是意味着在Domino平台下也可以像Java项目那样 *** 作配置文件了。

        2.  jar包放哪了?

传统的jar包都是放在JVM 目录的lib\ext目录下,部署应用时还是比较麻烦的。在Domino新版本明显要向Java项目靠拢,那么有没有可能jar的管理模式也要同Java项目一致那?

打开导航器,在WebContent目录下有个WEB-INF目录,挺熟悉的啊。再开发WEB-INF,有两个目录classes,lib。classes目录不用说了,编译后的输出目录。这个lib目录不就是Java项目中的第三方jar包吗?放几个jar包进去看看,能不能访问到,确认一下jvm的ext下没有此项目需要的jar包,免得弄混了。

在资源管理器中选中需要的jar包,再选择lib目录,将jar包拷贝进来。编写一段java程序测试一下。Xagent中输出到终端的都是JSON数据,所以先试试JSON转换的工具包fastjson吧。

拷贝fastjson-1.2.80.jar包到lib目录下,然后在Code/Java目录下新建一个Pojo类,再新建一个应用类,在这个类中创建Pojo实例,并返回实例的JSON数据。

public String getJSON(){

App app = new App();

app.setAppname("App1");

app.setAppserver("AppServer");

return JSON.toJSONString(app);

}

新建一个Xpage,改成Xagent模式,调用这个应用类。

sjson = poolsService.getJSON();

writer.write(sjson);

writer.endDocument();

切换到浏览器中,输入访问Xpage的URL地址,看看输出是什么:

{"appname":"App1","appserver":"AppServer"}

输出的是我们想要的JSON数据,那么看来这个lib目录跟笔者的猜想是一致的,那这样比部署到ext目录下要方便多了,至少不用重启服务器了。

<待续>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/725785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存