2016-11-17 50 views
1

我使用Eclipse Neon和Maven进行开发。有2个主要项目。项目1包含所有包括SOAP和RESTful的Web服务。它也实现了所有的数据库访问。 Project 2包含一个Angular实现的UI。 Angular UI利用项目1的RESTful服务进行所有数据访问。应用程序打包到包含来自两个项目的WAR文件的EAR文件中。 (这不是我的设计!)带有多个WAR文件的EAR文件。共享类

有在处理授权问题的UI应用程序的几个servlet类。到目前为止,每个WAR文件中的类都是完全独立的。现在我需要从一个servlet类的数据库表中访问数据。由于该功能已经在项目1中,因此我应该能够简单地利用项目2中的类。

在Eclipse中,我的工作区中都有两个项目,并且已将Project 1添加到Project 2的构建路径中,因此可以添加Project 2所需的适当对象。但是,当我尝试构建Project 2时,它无法从Project 1中找到类。我尝试将Project 1添加到Project 2的导出列表中,但这没有什么区别。

我可以提供必要的pom文件。

我只是不知道该怎么尝试。分享在这两个应用程序,这些DB访问功能将仅包括在EAR内包装他们共同的库

+1

如果项目2对1项目依赖你将需要[编辑POM文件(http://stackoverflow.com/questions/22438304/intermodule-dependencies-in-maven)添加这种依赖性。如果你需要这样做的帮助,我建议你给pom文件省略多余的内容。 (也就是说,对于项目2而言,对于承载Web服务的项目具有编译时依赖性是很奇怪的:Web服务项目应该由其服务访问,而不是其内部类。) – DavidS

+0

我受到我的严格限制应用程序的架构。所以我不得不放弃我想要做的事情,并使用Angular的RESTful服务和Servlet调用。我真的很感激兴趣和投入。我想就一些回复提供一些反馈意见。有时候,我们中的很多人会为拥有架构师和分析人员的公司工作,他们会决定如何在该项目上开展工作。开发人员无法前来进行修改,因为他们认为这样做会更好。我们必须在该架构的边界内进行更改。 – OldGuy

+0

在我的情况下,更加困难的是我无法更改Eclipse中的任何项目配置。一切都必须在Maven配置中完成。这使得它多次变得更加困难。如果无法从Maven完成,则不允许。 – OldGuy

回答

0

的一种方式。

this maven documentation

只是一个此言一出,国际海事组织它不是一个很好的模式有多个应用程序访问/修改相同的数据模型。 请参阅this answer问题“使用一个数据库的多个应用程序?”了解详情。

那么也许你应该考虑保持这个数据模型访问逻辑在现有的第一战(包含REST和SOAP服务),让你的第二个应用程序后端消耗例如从第一个应用了新的服务?

另一种选择是将所有这些web应用打包成一个单一的一个(所以单战),同时提供用户界面和后台功能(你的servlet和API一起使用)。

编辑:我无法判断这个应用程序的设计,因为我无法来看看它。正如@David所指出的那样,一般来说,拥有多个具有不同用途的Web应用程序并不是一个坏模式,打包成EAR或者不是,如果这些API是针对不同类型的客户端(UI,后端等)制作的,甚至更多。

+0

我完全同意你的看法。但是,这只是一个应用程序。谁将这个项目放在一起决定用两个项目来构建它,这样就产生了两个放在一个耳朵文件中的战争文件。我完全同意这是一个设计的fubar。而且我和这个项目上的人员都无法改变这一点。所以我们必须解决它。如果我能弄清楚如何告诉Maven在构建UI战争文件时将服务项目中的类包含进来,我的问题就会得到解决。 – OldGuy

+0

您不需要改变第一个解决方案(EAR共享库)部署应用程序的方式。但是,我很好奇,是什么阻止你和你的团队改变这个应用程序的设计? (顺便说一句,我不能判断它的设计,因为我不能看看它)) –

+3

你抱怨设计,@OldGuy,但我想知道它的哪一部分完全是你不喜欢的。 **这听起来像是谁设计的实际上遵循了一个好的设计原则**:您的UI代码通过一个接口与业务逻辑进行交互:Web服务。如果有的话,这听起来像你正在计划通过绕过Web服务来直接访问数据库代码_breaking_这个好的封装。我认为Rémi是正确的,建议您为servlet添加一个新的REST/SOAP服务来使用,但正如他所说的,我们无法真正判断这个距离的设计。 – DavidS

相关问题