我正在设计一个使用JSF + EJBS + JPA等的网站JAVA EE 6来总结。
您可以创建一篇文章,如果它符合某些条件(例如1000次观看),它会获得“1000次观看徽章”。
当我想动态创建新徽章时出现问题。我有一个徽章实体类,所有徽章都是从数据库中提取的。如何动态建立徽章授予文章的条件,因为行为取决于每个实例而不是其类型?
例如,用于评估“1000视图徽章”的会议要求的业务逻辑与“本周最佳评价文章”中使用的业务逻辑非常不同。此外,如果徽章数量增加怎么办? / p>
我不能只扩展一个类,因为它没有意义,所以我认为我没有以正确的方式看待它。
有关如何实施它的任何想法?
答案 0 :(得分:2)
实现一个@Singleton,它有一个方法在一段时间内运行一次(每小时一次或每24小时一次)。它将有一组类来检查某些条件的帖子。如果您想要一个新徽章,只需添加一个类。
@Singleton
public class Watchdog implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The em. */
@PersistenceContext
private EntityManager em;
private List<PostChecker> checkers = new ArrayList<PostChecker>();
@PostConstruct
public void init() {
checkers.add(new ThousandViewChecker());
checkers.add(new PopularPostChecker());
....
}
@Schedule(...)
public void monitor() {
for (PostChecker checker : checkers) {
checker.check(em);
}
}
}
如果您不想每次都添加一个类,请创建一些带有徽章授予规则的xml文件,并创建一个checkers工厂,这将使用这些xml文件构建其徽章规则。然后要添加徽章,您只需添加一个xml。