【问题标题】:How to create a client notification service for a webapp or should I use an Observer Pattern?如何为 web 应用程序创建客户端通知服务,或者我应该使用观察者模式?
【发布时间】:2010-01-14 23:54:03
【问题描述】:

我有一个完全实现的 DAO,我所有的 bean 都继承了一个 Entity 对象。 现在,我想创建一个客户端通知系统,当用户在持久存储中创建/更新/删除实体时,通知会自动通过电子邮件发送给客户端。

我有一个 DAO 管理器,它使用工厂模式根据实体类型向我返回一个 DAO 管理器。

e.g EntityManager manager = EntityManagerFactory.createEntityManager(Product.class);

每个管理器都有一个 create()、remove()、update() 方法......

我的第一个想法是让我的所有实体管理器都继承一个 Observer 接口,并在函数调用(创建、删除、更新等)之后发送通知。

这是一个明智的想法吗?如果没有,我该怎么做才能向客户发送通知?

我正在运行 JBoss 5 或 Tomcat 6(或同时运行以方便部署)和 Apache Struts(虽然我不明白我提到它的原因)。

提前致谢。

【问题讨论】:

  • 附言。我已经检查了这条评论 (stackoverflow.com/questions/2001073/…)。我应该让我的 DAO 线程安全吗?它基本上是我为客户创建的在线商店。
  • 你使用什么持久化框架?
  • 没有,我冒昧地编写了自己的 DAO,而不是使用像 Hibernate 这样的框架。
  • 请注意,JPA(和 Hibernate)已内置 EntityListeners 并带有回调方法。
  • 我读过它。我可以将 Hibernate 的 EntityListener 集成到我的 DAO 中吗?

标签: java design-patterns dao observer-pattern


【解决方案1】:

考虑使用decorator pattern,让您的实体经理完全不知道需要通知谁以及如何向他们发送电子邮件。这种方法将改善对现有管理器代码和您打算编写的消息传递代码的维护,并且如果您需要编写新的实体管理器来将您的实体存储在 JCR 中或通过 Web 服务等传输它们,这将获得巨大的回报。

【讨论】:

  • 好的,有趣的建议。在这种情况下我将如何使用装饰器?我知道你在说什么,但是否可以在我不必更改结构的情况下添加它?
  • 如果您 (1) 使用 IoC 容器或 (2) 某种工厂模式来定义系统中使用的 EntityManager impl,则可以在不更改现有代码的情况下添加它。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2017-09-17
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多