使用XPages Toolkit Domino存储服务将对象树加载到Java对象中

使用XPages Toolkit Domino存储服务将对象树加载到Java对象中,xpages,Xpages,我正在构建一个应用程序,允许用户注册特定课程的特定课程 数据结构类似于一棵树,即一个课程可以有多个会话,这些会话可以有多个注册 我已经为每个对象建立了具有唯一id的视图,包括父对象的id 我现在要做的是设置我的XPage,这样所有的数据都可以加载到内存中,这样我就可以通过java对象直接访问所有的数据,而不是直接绑定到视图,这很难看 我正在考虑构建这样的对象: public class ApplicationBean implements Serializable { private Set&

我正在构建一个应用程序,允许用户注册特定课程的特定课程

数据结构类似于一棵树,即一个课程可以有多个会话,这些会话可以有多个注册

我已经为每个对象建立了具有唯一id的视图,包括父对象的id

我现在要做的是设置我的XPage,这样所有的数据都可以加载到内存中,这样我就可以通过java对象直接访问所有的数据,而不是直接绑定到视图,这很难看

我正在考虑构建这样的对象:

public class ApplicationBean implements Serializable {

private Set<Course> courses;

public void addCourse(Course input){};

    public void initialize {
      - load all courses, sessionns, registrations from flat Notes Views
      - updates 
};
}

 public class Course implements Serializable {
 private Set<Session> sessions;

 public void addSession(Session input){}

 }

public class Session implements Serializable {

    private Course parent;
    private Set<Registrations> registrations;
    public Course getParent(){}
    public void addRegistration(Registration input) {}

}


public class Registration implements Serializable {

    private Session parent;
    public Session getParent(){}
}
这些行将在其中填充

registration.description   registration.session.title registration.session.course.title
我从Christian Güdemann的XPages工具包中研究了Domino存储服务DSS,它看起来非常有前途;逻辑的所有数据库访问对象位都是自动创建的。我想使用这个,但示例数据库只显示了一个简单、平面的数据-联系人

我正在考虑使用某种applicationBean,当第一次加载时,它将所有三个对象的平面列表加载到内存中,然后在第二步中创建对象之间的链接


这里的最佳解决方案是什么?有什么建议吗?

您已经概述了解决方案的各个部分:

将Java类设计为bean 具有可以在EL中绑定的属性 只要你的交互是一个单页应用,我就不会使用托管bean。我将使用具有不同加载/保存事件的bean数据源。 当您使用多个页面时,您希望在页面之间持久化内容,有一个托管bean会话范围是有意义的

您可以使用托管bean作为缓存,但仍然使用一个bean,我认为它正式称为对象数据源数据源


让我们知道进展如何

你为什么要把它们记在记忆中,真的吗?您可以也应该使用应用程序bean来生成更可读的代码,但这并不意味着您需要将它们存储在内存中。WeakHashMap之类的更好,谢谢Stefan的回答。有一件事我不明白——当你提到“我会使用具有不同加载/保存事件的bean数据源,但如果说没有托管bean,那么如何将bean绑定到页面?对象数据源不是托管bean。我称之为bean源代码,因为您遵循get/set的bean约定。我认为实例化可以用作数据源的bean的唯一方法是通过托管bean。但我不确定如何确保bean加载了信息;返回myBean;所以你的构造函数有参数。从会话中,您获得了用户,因此您知道要查询什么如果您想要sessionCache,并且您的会话bean是sessionCache,那么您将返回sessionCache.getDataBeansession,database;只需确保不要缓存Domino对象
registration.description   registration.session.title registration.session.course.title