Lotus Notes远程数据库的Java复制

时间:2017-08-24 18:30:05

标签: java replication lotus-notes lotus-domino

我有很多Lotus Notes / Domino(版本7)数据库要迁移到新软件。 在我的工作站上(安装了Lotus Notes),我使用独立的Java应用程序将本地副本连接到提取数据。 但是,远程数据库的复制仍然是手动过程。我想自动化它。

我的java代码基本上是这样的:

Session localSession = NotesFactory.createSession(); // With Notes thread initialized
Session remoteSession = NotesFactory.createSession(SERVER, USER, PASSWORD);

Database localDb = localSession.getDbDirectory(null).openDatabase("local_name", true);
Database remoteDb = remoteSession.getDbDirectory(null).openDatabaseByReplicaID(REPLICA);

//    ***EDITED CALLING INSTANCE BELOW***
remoteDb.createReplica(null, "local_name"); // Error thrown here

然而,最后一行抛出一个异常(来自memroy,但类似的东西)

CN=****/***** does not have the right to create database on a server

我怎么可能无法在本地计算机上创建数据库?

还有其他方法可以从远程数据库中以编程方式创建本地副本吗?

编辑:更改了创建副本的调用实例以匹配导致问题的代码

2 个答案:

答案 0 :(得分:0)

我的猜测是它只是给你错误的错误信息。有一件事是绝对错误的,他对createReplica的第一个参数应该是一个空字符串,而不是一个空指针。即,试试这个:

localDb.createReplica("", "local_name"); 

答案 1 :(得分:0)

好吧,看起来我找到了答案。

AFAIU我必须使用本地会话在目标服务器上打开数据库,然后从此处运行createReplica()。这样,createReplica在我的本地Lotus Notes服务器上执行,副本在本地创建。

Session     localSession        = NotesFactory.createSession((String)null, (String)null, PASSWORD);
DbDirectory remoteDbDirectory   = localSession.getDbDirectory(remoteSession.getServerName());           
Database    localSessionRemoteDatabase = remoteDbDirectory.openDatabaseByReplicaID(REMOTE_REPLICA_ID);          
localSessionRemoteDatabase.createReplica("", LOCAL_FILE_NAME);

@Richard Schwartz你能证实这没问题吗?

唯一奇怪的是,它会打开一个提示(就像它预期的密码一样),但副本已经创建。 该过程在Eclipse中执行。