我正在开发一个 JavaEE Web 应用程序,该应用程序应该能够从不同来源获取数据。数据将被获取并保存在数据库中,以供以后处理和报告。我从覆盖特定源的一个默认数据提供程序开始,但希望以一种我或什至其他人都可以为不同数据源编写数据提供程序/数据提供程序插件的方式设计应用程序架构。
服务提供者可以独立于核心应用程序来实现,并且可以打包在单独的 jar 中。一旦放入 Web 应用程序类路径,提供程序实现将被触发数据获取作业的应用程序核心识别为服务提供程序。
我正在寻找实现此 SPI 或扩展点的标准方法,但它不会使我的应用程序代码变得臃肿。
我想到了“OSGI扩展点”,但这更多地适用于rcp平台应用程序,而我的是一个Web应用程序。所以我暂时排除了这种可能性。
我的第二个想法是预定义的提供者接口(interface)的组合,然后使用自定义“提供者”注释来标记实现类(服务提供者)。
您可以推荐哪些机制/方法/框架来解决这个架构问题?
提前非常感谢并干杯, 迈克尔
最佳答案
我会使用事件观察器。在应用程序启动期间,您将引发一个 DiscoverDataProviders
事件,该事件具有 registerDataProvider(...)
方法。扩展 jar 可以观察事件并自行注册。
参见http://docs.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html
关于java - 可以使用哪些扩展/插件/提供程序机制来使我的 Web 应用程序可扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24354150/