我正在开发一个JavaEE Web应用程序,它应该能够从不同的源获取数据。数据将被提取并保存在数据库中,以便以后处理和报告。我从一个覆盖特定源的默认数据提供程序开始,但希望以我或甚至其他人可以为不同数据源编写数据提供程序/数据提供程序插件的方式设计应用程序体系结构。
服务提供商可以从核心应用程序中独立实现,并且可以打包在单独的jar中。一旦被删除到Web应用程序类路径,提供程序实现将被触发数据获取作业的应用程序核心识别为服务提供者。
我正在寻找实现此SPI或扩展点的标准方法,但它不会使我的应用程序的代码膨胀。
我想到了" OSGI扩展点"但这更适用于rcp平台应用程序,而我的是一个Web应用程序。所以我现在就把它排除了。
我的第二个想法是预定义的提供者接口的组合,然后使用custom" provider"用于标记实现类(服务提供者)的注释。
您可以推荐哪些机制/方法/框架来解决这个架构问题?
非常感谢提前和干杯, 迈克尔
答案 0 :(得分:1)
我会使用事件观察者。在应用程序启动期间,您引发DiscoverDataProviders
事件,该事件具有registerDataProvider(...)
方法。扩展罐可以观察事件并自行注册。
请参阅http://docs.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html