【问题标题】:Using XPages Toolkit Domino Storage Service to load a tree of objects into Java Objects使用 XPages Toolkit Domino 存储服务将对象树加载到 Java 对象中
【发布时间】:2015-05-05 09:56:48
【问题描述】:

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

数据的结构像一棵树,即一门课程可以有很多课程,也可以有很多注册。

我已经为每个对象建立了具有唯一 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 session(from parent of registration) course (from parent of session)

行将被填充的位置

registration.description   registration.session.title registration.session.course.title

我研究了 Christian Güdemann 的 XPages 工具包中的 Domino 存储服务 (DSS),它看起来很有希望;逻辑的所有数据库访问对象位都是自动创建的。我想使用它,但示例数据库只显示了一个简单的平面数据 - 联系人。

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

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

【问题讨论】:

  • 你为什么要把它们放在内存中,真的吗?您可以(并且应该)使用应用程序 bean 来制作更具可读性的代码,但这并不意味着您需要在内存中使用它们。像 WeakHashMap 这样的东西更好,IMO

标签: xpages


【解决方案1】:

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

  • 将您的 Java 类设计为 bean
  • 具有可以在 EL 中绑定的属性

只要您的交互是单页应用程序,我就不会使用托管 bean。我会使用可以使用具有不同加载/保存事件的 bean 数据源。 当您使用多页面时,您希望在页面之间持久化内容,托管 bean 会话范围是有意义的。

您可以将托管 bean 用作缓存,并且仍然使用 bean(我认为它正式称为对象数据源)数据源。

告诉我们进展如何

【讨论】:

  • 感谢 Stefan 的回答。我不明白的一件事 - 当您提到“我将使用具有不同加载/保存事件的 bean 数据源时,您可以使用”,但是说没有托管 bean,那么您如何将 bean 绑定到页面呢?
  • 对象数据源不是托管 bean。 stackoverflow.com/questions/15274765/…。我称它为 bean 源代码,因为您遵循 get/set 的 bean 约定。
  • 我的立场是正确的。我认为实例化可以用作数据源的 bean 的唯一方法是通过托管 bean。我不确定如何确保 bean 加载了信息。
  • 你做类似 var myBean = new com.acme.MyBean(session, database);返回我的豆子;所以你的构造函数有参数。从会话中获取用户,因此您知道要查询什么
  • 如果你想要 sessionCaching 并且你的会话 bean 是 sessionCache 你会返回 sessionCache.getDataBean(session, database);只要确保不要缓存 Domino 对象
猜你喜欢
  • 1970-01-01
  • 2015-06-24
  • 2011-02-14
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多