0

我正在开发一个能够从不同来源获取数据的 JavaEE Web 应用程序。数据将被提取并保存在数据库中,以供以后处理和报告。我从一个涵盖特定数据源的默认数据提供程序开始,但希望以一种我甚至其他人都可以为不同数据源编写数据提供程序/数据提供程序插件的方式设计应用程序架构。

服务提供者可以独立于核心应用程序来实现,并且可以打包在单独的 jar 中。一旦放到 Web 应用程序类路径中,提供者实现将被触发数据获取作业的应用程序核心识别为服务提供者。

我正在寻找一种实现此 SPI 或扩展点的标准方法,但它不会使我的应用程序代码膨胀。

我想到了“OSGI 扩展点”,但这更多用于 rcp 平台应用程序,而我的是一个 Web 应用程序。所以我暂时排除了。

我的第二个想法是预定义提供者接口的组合,然后使用自定义“提供者”注释来标记实现类(服务提供者)。

您可以推荐哪些机制/方法/框架来解决这个架构问题?

非常感谢和干杯,迈克尔

4

1 回答 1

1

我会使用事件观察者。在应用程序启动期间,您引发一个DiscoverDataProviders事件,该事件具有一个registerDataProvider(...)方法。扩展 jar 可以观察事件并注册自己。

请参阅http://docs.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html

于 2014-06-22T18:09:59.567 回答