我们必须开发和维护许多不同大小、范围和寿命的基于 Java Web 的应用程序(针对同一家公司)。其中一些是巨大的,而另一些只是可能只存在几个月(或几天)的简单页面,有些已经实现并且需要重构。
但是有一个共同点,他们需要访问(几乎)相同的信息。
问题
由于公司处理数据的复杂性,我们必须处理许多不同的来源,其中一些是从古代继承下来的。我们的领域对象可以映射到许多这些来源。例如,合同域对象映射到我们的主数据库,但其相关(物理)文件存储在文档服务器中,与之相关的活动存储在 NoSQL 数据库中。因此,添加、删除、搜索这些对象中的任何一个都涉及许多内部操作。
我们的数据源是(尽管可以是任何数据源):
- AS400(使用 DB2 作为数据库)
- Documentum 文档管理器
- 蒙哥数据库
- 外部网络服务
- 其他遗留来源
我们通常使用 Glassfish 作为应用服务器,使用 maven 作为我们的构建工具。
目标
我们的目标是创建一个我们所有应用程序都可以访问的业务层或库,它是:
- 袖珍的
- 一致的
- 便于使用
- 易于维护
- 可从许多不同的客户端访问
到目前为止我们发现了什么
我们已经苦苦挣扎了几个星期,但我们仍然找不到任何完全令人满意的东西。一些解决方案:
将所有业务逻辑打包在一个或多个 jar 中:非常容易共享,但所有应用程序都必须包含所有 jar 依赖项和配置文件,并负责安全、缓存和其他内容。难以维护(当有变化时,我们必须为每个项目更新 jars)。
创建一个包含所有逻辑的 Ejb 项目并远程访问它:易于维护、安全性、缓存和配置只需实现一次。我们害怕远程调用的惩罚。正如我们在研究中注意到的那样,这似乎是一种不好的做法(我们对 ejbs 没有太多经验)。
创建一个包含所有内容并使用本地访问的 Ear 项目:嗯,这比远程版本快,但维护起来很麻烦。
选择 OSGI:我们有点害怕这个,因为它不如 Ejb 流行,而且我们从未认真使用它。
这类问题有常见的做法吗?
非常感谢!