在Java代理IBM Domino/Lotus中保持数据库开放

在Java代理IBM Domino/Lotus中保持数据库开放,java,lotus-domino,Java,Lotus Domino,我有一个Java代理。 当我运行代理时,我还创建了一个打开数据库的对象。 这是databases类的代码: public class Databases { Database OrdersDB; Database CustomersDB; Database ItemsDB; Database TablesDB; Database ItemsDB; public Databases() throws NotesException{ }

我有一个Java代理。 当我运行代理时,我还创建了一个打开数据库的对象。 这是databases类的代码:

public class Databases {
    Database OrdersDB;
    Database CustomersDB;
    Database ItemsDB; 
    Database TablesDB; 
    Database ItemsDB;

    public Databases() throws NotesException{
    }

    public boolean openAllDatabases(Session session){

        try {

            OrdersDB = session.getDatabase(getServerName(session,"ORDER"),globalSettings.OrderDB, false);
            CustomersDB= session.getDatabase(getServerName(session,"CUSTOMER"),globalSettings.CustomerDB, false);
            TablesDB= session.getDatabase(getServerName(session,"TABLES"),globalSettings.TablesDB, false);
            ItemsDB = session.getDatabase(getServerName(session,"ITEMS"),globalSettings.ItemsDB, false);
            return true;
        } catch (NotesException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("Database not opened!");
            return false;
        }

    }
在整个代理中,我使用这个数据库obj。在我的代理中,我还创建了另一个类,在该类中,我将这个数据库obj作为参数传递,并使用那里的数据库。 最后,当我的代理完成时,我回收所有数据库并将数据库Obj设置为null

我想知道这是不是一个好的做法? 我已经尝试在需要时打开和关闭数据库,但由于代码太大,如果我错误地(例如)在另一个类中回收数据库,我将得到空指针异常。 这就是为什么我在代理开始时一直打开数据库,并在结束时回收它们。
但我不知道这是否会导致内存泄漏。

不要担心不回收数据库。代理完成后,所有数据库将自动回收


只有当您以成百上千的方式实例化Domino对象时,循环使用Domino对象才很重要,就像运行视图中的所有条目一样。

谢谢。我回收了大部分domino对象,比如代理末尾的文档。或者每当出现错误时。也可以吗?是的,很好。唯一的陷阱可能是你在一个内部循环中回收一个文档,尽管它被分配到外部某个地方的另一个变量(很少-我们曾经有过它)。文档和项目通常是需要回收的重要内容,因为这些是你倾向于循环的内容,有时它是数十万个文档,每个文档包含很多很多项。但是正如Knut所说,如果您在代码的多个部分中访问同一个实际文档,那么在处理完文档的所有实例之前,您不希望回收文档对象。对于容器对象(如您为数据库设计的容器对象)或使用OpenNTF版本的DominoOJBECTS(它为您处理所有回收工作)来说,这是一个完美的用例!有一天我真的需要知道如何使用openNTF数据库,我可以将它与我现有的代理@RichardSchwartz一起使用吗?您可以在这里查看文档。