在上一篇文章中,笔者向大家介绍了JnpServer是如何与Domino服务器集成工作的,但那是服务器端。也就是说,服务器端架设好了,还需要客户端访问才能算是一个完整的系统。那么本章就把这个问题解释清楚。
为了能调用JnpServer,代理需用java语言编写。笔者没有在Xpage中测试,这个工作可以留在今后进行验证。java代理要想访问JnpServer,最重要的是要让程序知道JnpServer在哪里,所以几个基本参数是必不可少的。
Properties props=new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url","jnp://192.168.1.127:1099");
props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
上述代码是通过JNDI接口连接JnpServer.
sjndiname = "0001";
InitialContext ctx = new InitialContext(props);
dominodata = (DominoData)ctx.lookup(sjndiname);
如果编写过j2ee程序的读者应该能看懂上面这段代码的作用,根据给出的JNDI Name,取得注册到此name的对象。笔者在这里自己定义了一个DominoData的类,并将文档数据以这个对象的形式存入JnpServer中。
此DominoData类必须引用java.io.Serializable这个接口,并实现readObject()和writeObject()两个方法,才能存取数据。先从JnpServer存入数据,再通过代理这样的客户端程序读出数据,这样就形成了一个完整的过程。那么肯定会有人问,你弄这些有什么用?其实它就是个工具,怎么去用,就靠发挥个人想象力。
到此为止,还都只是试验性质的代码,要想实际应用还要过了性能这一关,才能算是有点实际意义。下一章,性能篇,敬请期待。
import java.util.Hashtable;
import java.util.Properties;
import javax.naming.*;
import javax.sql.*;
import com.dominojnp.base.*;
import lotus.domino.*;
public class calldominodata extends AgentBase {
public void NotesMain() {
Session session = null;
AgentContext agentContext = null;
try {
session = getSession();
agentContext = session.getAgentContext();
String sjndiname = null;
DominoData dominodata = null;
System.out.println("Starting...");
Properties props=new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url","jnp://192.168.1.185:1099");
props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
// (Your code goes here)
sjndiname = "0001";
System.out.println("jndiname=" + sjndiname);
System.out.println("Start:" + System.currentTimeMillis());
InitialContext ctx = new InitialContext(props);
dominodata = (DominoData)ctx.lookup(sjndiname);
System.out.println("End:" + System.currentTimeMillis());
System.out.println("dataid:" + dominodata.getDataid());
System.out.println("field1:" + dominodata.getField1());
System.out.println("field2:" + dominodata.getField2());
System.out.println("field3:" + dominodata.getField3());
System.out.println("field4:" + dominodata.getField4());
System.out.println("field5:" + dominodata.getField5());
System.out.println("field6:" + dominodata.getField6());
} catch (Exception e) {
e.printStackTrace();
} finally {
try{
if (agentContext != null) {
agentContext.recycle();
}
if(session != null){
session.recycle();
}
}catch(Exception e){
}
}
}
}
package com.dominojnp.base;
import java.io.IOException;
import java.util.HashMap;
//Domino 文档映射为POJO对象
public class DominoData implements java.io.Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
String dataid = "";
String field1 = "";
String field2 = "";
String field3 = "";
String field4 = "";
String field5 = "";
String field6 = "";
public String getDataid() {
return dataid;
}
public void setDataid(String dataid) {
this.dataid = dataid;
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setField2(String field2) {
this.field2 = field2;
}
public String getField3() {
return field3;
}
public void setField3(String field3) {
this.field3 = field3;
}
public String getField4() {
return field4;
}
public void setField4(String field4) {
this.field4 = field4;
}
public String getField5() {
return field5;
}
public void setField5(String field5) {
this.field5 = field5;
}
public String getField6() {
return field6;
}
public void setField6(String field6) {
this.field6 = field6;
}
private void writeObject(java.io.ObjectOutputStream out) throws IOException{
out.writeObject(dataid);
out.writeObject(field1);
out.writeObject(field2);
out.writeObject(field3);
out.writeObject(field4);
out.writeObject(field5);
out.writeObject(field6);
}
private void readObject(java.io.ObjectInputStream in) throws IOException,ClassNotFoundException {
dataid = (String)in.readObject();
field1 = (String)in.readObject();
field2 = (String)in.readObject();
field3 = (String)in.readObject();
field4 = (String)in.readObject();
field5 = (String)in.readObject();
field6 = (String)in.readObject();
}
public String getValue(){
return dataid;
}
}