我想创建一个解耦前端(vaadin
)和后端(spring
)。两者都应该在相同的tomcat
应用服务器上运行,但每个都是一个war
,因此我可以重新部署前端而无需重新启动后端。
我希望最小化两个应用程序之间的远程处理代码以交换数据。因此,我认为我可以将服务bean从后端注入前端war
。但那有可能吗?我如何在两个war文件/ java项目之间共享服务声明?
什么类型的远程处理适合这里?理想情况下,我可以想象有一种机制,我可以只使用"后端服务类也在前端,spring将代理连接在一起。但是如何?
答案 0 :(得分:1)
你想要解耦后端和前端,直到那里很好。你想把它们放在同一个tomcat上的单独战争中,仍然可能,但它有影响。
但是现在你想从后端向前端注入bean。如果他们处于不同的战争中,则不再可能。即使在相同的tomcat上,每个战争如果完全独立于另一个,它们应该只通过网络进行通信(通常通过Web服务)。
您有两个可用的去耦级别:
对于低到中等负载,第一个解决方案将使用少一点的资源,但是在非常大的负载下,第二个解决方案可以扩展到前端和后端的服务器场(在前端和数据库服务器之前不说反向代理)在后端后面)
答案 1 :(得分:0)
如果我理解您的问题是正确的,那么您希望将前端代码与后端分开。
您可以做的是创建后端实现的.jar
文件,并在前端从XML或Java应用程序上下文中实例化bean。
如果您不想为配置中的每次更改重新部署应用,我更愿意使用XML配置。
在前端代码中,您必须包含后端jar,并且可以以常规Spring方式调用这些服务。
答案 2 :(得分:0)
是的,您可以从jar / war加载外部spring-context.xml以获取bean,请检查此答案here
答案 3 :(得分:0)
您可以将弹簧豆绑定到JNDI并在前端接收此对象 http://docs.spring.io/autorepo/docs/spring/3.2.3.RELEASE/javadoc-api/org/springframework/jndi/JndiTemplate.html#bind%28java.lang.String,%20java.lang.Object%29
但是在这个解决方案中,两次战争的脱钩并没有真正成功。当必须在同一个容器中部署时,我没有看到在两个war文件中分隔前端和后端有什么好处。
我更愿意部署一个war文件或在前端和后端之间与REST通信。